1. 程式人生 > >重學計算機組成原理(十一)- 閘電路的"千里傳音"

重學計算機組成原理(十一)- 閘電路的"千里傳音"

人用紙和筆來做運算,都是用十進位制,直接用十進位制和我們最熟悉的符號不是最簡單麼?

為什麼計算機裡我們最終要選擇二進位制呢?

來看看,計算機在硬體層面究竟是怎麼表示二進位制的,你就會明白,為什麼計算機會選擇二進位制。

1 怎麼做到“千里傳書”

馬拉松的故事相信你聽說過。公元前490年,在雅典附近的馬拉松海邊,發生了波斯和希臘之間的希波戰爭。雅典和斯巴達領導的希臘聯軍勝利之後,雅典飛毛腿菲迪皮德斯跑了歷史上第一個馬拉松,回雅典報喜。這個時候,人們在遠距離報信的時候,採用的是派人跑腿,傳口信或者送信的方式。

但是,這樣靠人傳口信或者送信的方式,實在是太慢了

在軍事用途中,資訊能否更早更準確地傳遞出去經常是事關成敗的大事

所以我們看到中國古代的軍隊有“擊鼓進軍”和“鳴金收兵”,通過打鼓和敲鉦發出不同的聲音,來傳遞軍隊的號令。

如果我們把軍隊當成一臺計算機,那“金”和“鼓”就是這臺計算機的“1”和“0”

我們可以通過不同的編碼方式,來指揮這支軍隊前進、後退、轉向、追擊等等。

“金”和“鼓”比起跑腿傳口信,固然效率更高了,但是能夠傳遞的範圍還是非常有限,超出個幾公里恐怕就聽不見了。於是,人們發明了更多能夠往更遠距離傳信的方式,比如海上的燈塔、長城上的烽火臺。因為光速比聲速更快,傳的距離也可以更遠。

  • 亞歷山大港外的法羅斯燈塔,位列世界七大奇蹟之一,可惜現在只剩下遺蹟了。可見人類社會很早就學會使用類似二進位制訊號的方式來傳輸資訊

    但是,這些傳遞資訊的方式都面臨一個問題,就是受限於只有“1”和“0”這兩種訊號,不能傳遞太複雜的資訊,那電報的發明就解決了這個問題。

從資訊編碼的角度來說,金、鼓、燈塔、烽火臺類似電報的二進位制編碼

電報傳輸的訊號有兩種,一種是短促的點訊號(dot訊號),一種是長一點的劃訊號(dash訊號)

我們把“點”當成“1”,把“劃”當成“0”。這樣一來,我們的電報訊號就是另一種特殊的二進位制編碼了

電影裡最常見的電報訊號是“SOS”,這個訊號表示出來就是 “點點點劃劃劃點點點”。

比起燈塔和烽火臺這樣的裝置,電報訊號有兩個明顯的優勢

  • 訊號的傳輸距離迅速增加
    電報本質上是通過電訊號來進行傳播的,所以從輸入訊號到輸出訊號基本上沒有延時
  • 輸入訊號的速度加快了很多
    電報機只有一個按鈕,按下就是輸入訊號,按的時間短一點,就是發出了一個“點”訊號
    按的時間長一些,就是一個“劃”訊號
    一個手指,就能快速傳送電報。
  • 一個摩爾斯電碼的電報機

製造一臺電報機也非常容易

電報機本質上就是一個“蜂鳴器+長長的電線+按鈕開關”

蜂鳴器裝在接收方手裡,開關留在傳送方手裡。雙方用長長的電線連在一起。當按鈕開關按下的時候,電線的電路接通了,蜂鳴器就會響。短促地按下,就是一個短促的點訊號;按的時間稍微長一些,就是一個稍長的劃訊號。

有了電池開關和鈴鐺,你就有了最簡單的摩爾斯電碼發報機

2 理解繼電器,給跑不動的訊號+1s

有了電報機,只要鋪設好電報線路,就可以傳輸我們需要的訊息了

但是這裡面又出現了一個新的挑戰,就是隨著電線的線路越長,電線的電阻就越大

當電阻很大,而電壓不夠的時候,即使你按下開關,蜂鳴器也不會響。

你可能要說了,我們可以提高電壓或者用更粗的電線,使得電阻更小,這樣就可以讓整個線路鋪得更長一些

但是這個再長,也沒辦法從北京鋪設到上海吧

要想從北京把電報發到上海,我們還得想些別的辦法。

對於電報來說,電線太長了,使得線路接通也沒有辦法讓蜂鳴器響起來

那麼,我們就不要一次鋪太長的線路,而把一小段距離當成一個線路,也和驛站建立一個小電報站。我們在小電報站裡面安排一個電報員,他聽到上一個小電報站發來的資訊,然後原樣輸入,發到下一個電報站去

這樣,我們的訊號就可以一段段傳輸下去,而不會因為距離太長,導致電阻太大,沒有辦法成功傳輸訊號。為了能夠實現這樣接力傳輸訊號,在電路里面,工程師們造了一個叫作繼電器(Relay) 的裝置。

  • 中繼,其實就是不斷地通過新的電源重新放大已經開始衰減的原有訊號

事實上,這個過程中,我們需要在每一階段原樣傳輸訊號,是不是可以設計一個裝置來代替這個電報員?

相比使用人工聽蜂鳴器的聲音,來重複輸入訊號,利用電磁效應和磁鐵,來實現這個事情會更容易。

我們把原先用來輸出聲音的蜂鳴器,換成一段環形的螺旋線圈,讓電路封閉通上電。因為電磁效應,這段螺旋線圈會產生一個帶有磁性的電磁場。我們原本需要輸入的按鈕開關,就可以用一塊磁力稍弱的磁鐵把它設在“關”的狀態。這樣,按下上一個電報站的開關,螺旋線圈通電產生了磁場之後,磁力就會把開關“吸”下來,接通到下一個電報站的電路。

如果我們在中間所有小電報站都用這個“螺旋線圈+磁性開關”的方式,來替代蜂鳴器和普通開關,而只在電報的始發和終點用普通的開關和蜂鳴器,我們就有了一個拆成一段一段的電報線路,接力傳輸電報訊號。這樣,我們就不需要中間安排人力來聽打電報內容,也不需要解決因為線纜太長導致的電阻太大或者電壓不足的問題了。我們只要在終點站安排電報員,聽寫最終的電報內容就可以了。這樣是不是比之前更省事了?

事實上,繼電器還有一個名字就叫作電驛,這個“驛”就是驛站的驛,可以說非常形象了

這個接力的策略不僅可以用在電報中,在通訊類的科技產品中其實都可以用到。

比如說,你在家裡用WiFi,如果你的屋子比較大,可能某些房間的訊號就不好。你可以選用支援“中繼”的WiFi路由器,在訊號衰減的地方,增加一個WiFi裝置,接收原來的WiFi訊號,再重新從當前節點傳輸出去。這種中繼對應的英文名詞和繼電器是一樣的,也叫Relay。

再比如說,我們現在網際網路使用的光纜,是用光訊號來傳輸資料。隨著距離的增長、反射次數的增加,訊號也會有所衰減,我們同樣要每隔一段距離,來增加一個用來重新放大訊號的中繼。

有了繼電器之後,我們不僅有了一個能夠接力傳輸訊號的方式,更重要的是,和輸入端通過開關的“開”和“關”來表示“1”和“0”一樣,我們在輸出端也能表示“1”和“0”了。

輸出端的作用,不僅僅是通過一個蜂鳴器或者燈泡,提供一個供人觀察的輸出訊號,通過“螺旋線圈 + 磁性開關”,使得我們有“開”和“關”這兩種狀態,這個“開”和“關”表示的“1”和“0”,還可以作為後續線路的輸入訊號,讓我們開始可以通過最簡單的電路,來組合形成我們需要的邏輯。

通過這些線圈和開關,我們也可以很容易地創建出 “與(AND)”“或(OR)”“非(NOT)”這樣的邏輯。我們在輸入端的電路上,提供串聯的兩個開關,只有兩個開關都開啟,電路才接通,輸出的開關也才能接通,這其實就是模擬了計算機裡面的“與”操作。

我們在輸入端的電路,提供兩條獨立的線路到輸出端,兩條線路上各有一個開關,那麼任何一個開關打開了,到輸出端的電路都是接通的,這其實就是模擬了計算機中的“或”操作。

當我們把輸出端的“螺旋線圈+磁性開關”的組合,從預設關掉,只有通電有了磁場之後開啟,換成預設是開啟通電的,只有通電之後才關閉,我們就得到了一個計算機中的“非”操作。輸出端開和關正好和輸入端相反。這個在數位電路中,也叫作反向器(Inverter)

反向器的電路,其實就是開關從預設關閉變成預設開啟而已

與、或、非的電路都非常簡單,要想做稍微複雜一點的工作,我們需要很多電路的組合。不過,這也彰顯了現代計算機體系中一個重要的思想,就是通過分層和組合,逐步搭建起更加強大的功能。

回到我們前面看的電報機原型,雖然一個按鈕開關的電報機很“容易”操作,但是卻不“方便”操作。因為電報員要熟記每一個字母對應的摩爾斯電碼,並且需要快速按鍵來進行輸入。一旦輸錯很難糾正。但是,因為電路之間可以通過與、或、非組合完成更復雜的功能,我們完全可以設計一個和打字機一樣的電報機,每按下一個字母按鈕,就會接通一部分電路,然後把這個字母的摩爾斯電碼輸出出去。

雖然在電報機時代,我們沒有這麼做,但是在計算機時代,我們其實就是這樣做的。我們不再是給計算機“0”和“1”,而是通過千萬個電晶體組合在一起,最終使得我們可以用“高階語言”,指揮計算機去幹什麼。

3 總結延伸

可以說,電報是現代計算機的一個最簡單的原型。它和我們現在使用的現代計算機有很多相似之處。我們通過電路的“開”和“關”,來表示“1”和“0”。就像電晶體在不同的情況下,表現為導電的“1”和絕緣的“0”的狀態。

我們通過電報機這個裝置,看到了如何通過“螺旋線圈+開關”,來構造基本的邏輯電路,我們也叫閘電路

  • 一方面,我們可以通過繼電器或者中繼,進行長距離的訊號傳輸
  • 另一方面,我們也可以通過設定不同的線路和開關狀態,實現更多不同的訊號表示和處理方式,這些線路的連線方式其實就是我們在數位電路中所說的閘電路。而這些閘電路,也是我們建立CPU和記憶體的基本邏輯單元。我們的各種對於計算機二進位制的“0”和“1”的操作,其實就是來自於閘電路,叫作組合邏輯電路。

4 推薦閱讀

《編碼:隱匿在計算機軟硬體背後的語言》第6~11章,是一個很好的入門材料,可以幫助深入理解數位電路,值得你花時間好好讀一讀

相關推薦

計算機組成原理- 電路的""

人用紙和筆來做運算,都是用十進位制,直接用十進位制和我們最熟悉的符號不是最簡單麼? 為什麼計算機裡我們最終要選擇二進位制呢? 來看看,計算機在硬體層面究竟是怎麼表示二進位制的,你就會明白,為什麼計算機會選擇二進位制。 1 怎麼做到“千里傳書” 馬拉松的故事相信你聽說過。公元前490年,在雅典附近的馬拉松

計算機組成原理- "燙燙燙"亂碼的由來

程式 = 演算法 + 資料結構 對應到計算機的組成原理(硬體層面) 演算法 --- 各種計算機指令 資料結構 --- 二進位制資料 計算機用0/1組成的二進位制,來表示所有資訊 程式指令用到的機器碼,是使用二進位制表示的 儲存在記憶體裡面的字串、整數、浮點數也都是用二進位制表示的 萬物在計算機

計算機組成原理- 制定學習路線,攀登“效能”之巔

0 學習路線的知識點概括 學習計算機組成原理,就是學習計算機是如何協調執行的 計算機組成原理的英文叫Computer Organization Organization 意"組織機構"。 該組織機構能夠進行各種計算、控制、讀取輸入,進行輸出,達成各種強大的功能。 把整個計算機組成原理的知識點拆分成了

計算機組成原理- 進擊,更強的效能!

在上一篇中,我們談到過 程式的CPU執行時間 = 指令數×CPI×Clock Cycle Time 要提升計算機的效能,可以從上面這三方面著手。 通過指令數/CPI,好像都太難了。 因此工程師們,就在CPU上多放電晶體,不斷提升CPU的時鐘頻率,讓CPU更快,程式的執行時間就會縮短。 從1978年I

計算機組成原理- "旋轉跳躍"的指令實現

CPU執行的也不只是一條指令,一般一個程式包含很多條指令 因為有if…else、for這樣的條件和迴圈存在,這些指令也不會一路平直執行下去。 一個計算機程式是怎麼被分解成一條條指令來執行的呢 1 CPU如何執行指令 CPU裡差不多幾百億個電晶體 實際上,一條條計算機指令執行起來非常複雜 好在CPU在軟體層

計算機組成原理- 函式呼叫怎麼突然Stack Overflow了!

用Google搜異常資訊,肯定都訪問過Stack Overflow網站 全球最大的程式設計師問答網站,名字來自於一個常見的報錯,就是棧溢位(stack overflow) 從函式呼叫開始,在計算機指令層面函式間的相互呼叫是怎麼實現的,以及什麼情況下會發生棧溢位 1 棧的意義 先看一個簡單的C程式 f

計算機組成原理- 程式無法同時在Linux和Windows下執行?

既然程式最終都被變成了一條條機器碼去執行,那為什麼同一個程式,在同一臺計算機上,在Linux下可以執行,而在Windows下卻不行呢? 反過來,Windows上的程式在Linux上也是一樣不能執行的 可是我們的CPU並沒有換掉,它應該可以識別同樣的指令呀!!! 如果你和我有同樣的疑問,那這一節,我們就一起

計算機組成原理- 程式的裝載

比爾·蓋茨在上世紀80年代說的“640K ought to be enough for anyone” 也就是“640K記憶體對哪個人來說都夠用了” 那個年代,微軟開發的還是DOS作業系統,程式設計師們還在絞盡腦汁,想要用好這極為有限的640K記憶體 而現在,我手頭的Mac Book Pro已經是16G記

計算機組成原理- 動態連結

把對應的不同檔案內的程式碼段,合併到一起,成為最後的可執行檔案 連結的方式,讓我們在寫程式碼的時候做到了“複用”。 同樣的功能程式碼只要寫一次,然後提供給很多不同的程式進行連結就行了。 “連結”其實有點兒像我們日常生活中的標準化、模組化生產。 有一個可以生產標準螺帽的生產線,就可生產很多不同的螺帽。 只要

計算機組成原理名詞解釋

計算機組成原理 第1章:計算機系統概論 1、計算機系統由哪兩部分組成?計算機系統性能取決於什麼?     計算機系統是由“硬體”和“軟體”組成。衡量一臺計算機效能的優劣是根據多項技術指標綜合確定的,既包括硬體的各種效能指標,又包括軟體的各種功能。 1

漫談計算機組成原理九·續定點數的運算方法

本文講什麼? 在上一篇文章中,我們主要講述了定點數的加、減、乘運算,唯獨沒有講解除法運算。原因有兩個,一來上一篇文章的內容確實比較多,二來除法運算比乘法相對複雜。所以,本文將從除法的來歷講起,然後講除法運算的幾種方法。 除法運算的形成 我們來看這樣一個例子

計算機組成與設計—— 儲存層次結構

儲存層次結構概況 這是我們非常熟悉的馮·諾依曼計算機結構, 那這其中哪些部件和儲存功能有關呢?    儲存器和外部記錄介質肯定具有儲存功能,另外還有一個自帶儲存功能的運算器,為了描述方便,我們把這些部件統稱為儲存器。那麼我們看一下計算機中對儲存器有哪些要求 ? 1、首先儲存器當

RISE UP —計算機組成原理

 第一個問題:什麼是計算機?                    現在特指電子計算機,即能夠告訴運轉的電子裝置,目的是用於資料的計算,是對使用者的輸入進行加工,根據使用者的需求和要求進行加工,最後輸出一個結果。 第二個問題:從上面所述的這個簡單的定義來說,猜測一下有哪些

計算機組成原理補碼反碼的加減運算和溢位

補碼的加法運算:    補碼加法的特點:    符號位作為數的一部分參加運算,符號位的進位丟掉。    運算結果為補碼形式 整數  [A]補 + [B]補= [A+B]補    (mod 2n+1) 小數  [A]補 + [B]補= [A+B]補    (mod 2) 補碼的

考研複習:計算機組成原理

1.1計算機的分類和其特性計算機通常分為三類:個人計算機 伺服器 嵌入式計算機個人計算機:給單個使用者提供服務伺服器:給多個使用者執行大型程式提供服務嵌入式計算機:嵌入到其它裝置中的計算機 執行已經預定的一個或者一組程式1.2後PC時代個人移動裝置PMD : 智慧手機 平板電

計算機組成原理

CPU效能 響應時間:指的就是,我們執行一個程式,到底需要花多少時間。花的時間越少,自然效能就越好。 吞吐率:在一定的時間範圍內,到底能處理多少事情。這裡的“事情”,在計算機裡就是處理的資料或者執行的程式指令。 我們一般把效能,定義成響應時間的倒數,也就是: 效能 = 1/響應時間 程式執行的時間 程式執行

計算機組成原理4---儲存器

導讀 4.高速緩衝儲存器 cache (1)cache簡介 (2)cache-主存的地址對映 5.輔助儲存器 高速緩衝儲存器 cache簡介 寫操作 寫直達法:既寫cache又寫主存,比較耗時,寫主存比較慢 寫回法:只寫cac

Spring原始碼解析——AOP原理——demo

1.業務類 public class MathCalculator { public int div(int i, int j) { System.out.println("MathCalculator---div"); return i / j;

ElasticSearch最佳入門實踐分散式原理 橫向擴容過程,如何超出擴容極限,以及如何提升容錯性

(1)primary&replica自動負載均衡,6個shard,3 primary,3 replica (2)每個node有更少的shard,IO/CPU/Memory資源給每個shard分配更多,每個shard效能更好 (3)擴容的極限,6個shard(3 prima

計算機組成原理之儲存器

6.1儲存器及半導體儲存器的分類 儲存器是計算機用來儲存資訊的部件。 6.1.1  儲存器的分類 按存取速度和用途可把儲存器分為兩大類:記憶體儲器和外儲存器。 記憶體:把通過系統匯流排直接與CPU相連的儲存器稱為記憶體儲器,簡稱