作者:小牛呼嚕嚕 | https://xiaoniuhululu.github.io
大家好,我是呼嚕嚕,在先前的一篇文章計算機中數值和字串怎麼用二進位制表示?中,我們知道了計算機為什麼會採用 0 和 1 組成的二進位制,來表示所有的資訊,比如機器指令、數字、字串、聲音、圖片、影片等等。
我們本篇文章來看看計算機在硬體層面究竟是怎麼表示二進位制的,CPU究竟是怎麼實現的?透過本文的學習,我們也可以反過來明白為什麼計算機會採用二進位制了。
開關
我們在生活中,處處都是開關,比如控制燈的開關
我們可以發現一個很簡單的現象:
- 串聯的開關,只有2個開關都閉合,燈泡才亮。這也就是布林代數中"邏輯運算與"
- 並聯的開關,只要有1個開關閉合,燈泡就會亮。這也就是布林代數中"邏輯運算或"
我們以最簡單的2個數,0和1來舉個例子,寫出其布林代數的真值表:
電報和繼電器
在人類資訊傳遞發展的歷史上,長途資訊傳遞一直是非常困難的時,當時常見的方式有,比如人騎馬送信,訓練信鴿、點燃烽火,但資訊傳遞的效率都非常低效。直到電報的出現,電報思想的正式成形是在19世紀早期,它的讓人類傳遞資訊的效率得到極大的提升。
電報利用電的特性來傳遞資訊,早期設計複雜且不穩定,傳遞的資訊複雜度又比較低,1837年美國人摩爾斯透過電磁感應改良了發報機,併發明瞭摩爾斯電碼。他將電報劃分為2種訊號,短促的"點訊號"和長一點的"劃訊號", 將把“點”當成“1”,把“劃”當成“0”(這不就是二進位制嘛),並編寫了個“字典”將字母及數字編碼一一對應,這樣就能傳遞複雜的資訊,在未來產生了巨大影響力,意味著現代通訊的開始。
由於早期的電報傳輸,需要鋪設電線,但是隨著電線越長,其電阻就越大,電訊號常常傳輸過程中被消耗點,這樣接受方就無法接收到資訊了。幸運的是,工程師發明了繼電器,其原理就是接收微弱的訊號,然後不斷地透過新的電源重新放大已經開始衰減的原有訊號,最後把它增強後傳送出去。
當開關是開啟的話,燈泡是不亮的;但當開關是閉合的話, 電流流過圍繞在鐵棒上的線圈,會發生電磁效應,鐵棒就具有了磁性,會將彈簧片吸下來,右邊電路就通了,燈泡就會亮了。這樣透過繼電器,一段段放大訊號,電報就能長距離傳輸資訊了。
雖然繼電器有放大訊號的作用,但和開關一樣繼電器也可以串聯或並聯以執行邏輯中的簡單任務,繼電器比起普通的開關的優勢在於繼電器無需直接被輸入者控制,可以被其他繼電器控制,這樣就可以組合完成更復雜的操作。比如我們可以透過繼電器實現: 當我們閉合開關時,燈泡關閉;當我們開啟開關時,燈泡去點亮這種燈泡的狀態和開關的閉合狀態相反的操作,普通開關是無法實現這種操作的。這些電路物理的表象下隱藏的邏輯關係,一直沒有被人發現。
直到1938年,克勞德·夏農在麻省理工學院所寫的碩士論文《A Symbolic Analysis of Relay and Switching Circuits》中闡述了繼電器和開關電路中的符號分析之間的關係,他將開關、繼電器、二進位制、布林代數聯絡起來。也就是發現人類可以透過開關和繼電器這些普通的電路,直接就能實現布林代數各種邏輯運算操作。這些繼電器的組合被稱為邏輯閘,他們構造基本的邏輯電路,也叫閘電路。
閘電路
上面是3種最最基本的門:
- 與門,兩個開關只有同時開啟,電流才會透過,燈泡才會亮
- 非門,當開關閉合時,電流會透過,燈泡會亮;開關開啟,電流不能透過反而,燈泡熄滅
- 或門,兩個開關中只要有一個開啟電流就能透過,燈就會點亮
這些門其實就是一個個"開關"的抽象, 以後我們需要的各種複雜的邏輯都可以透過這3個門來實現,真的是非常奇妙
我們再來看一個常見的門:異或門XOR
我們先寫出其真值表(真值表是在邏輯中使用的一類數學表,用來確定一個表示式是否為真或有效):
A | B | X(輸出) |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 1 | 0 |
1 | 0 | 1 |
其表示式也就是:
透過表示式我們就能知道,把非A與B的值 和非B與A的值 透過或門加起來
就能得到異或門
了
材料學的發展
上世紀材料學的發展也大力推動了計算機的蓬勃發展,計算機的硬體出現了3次大的更新換代
繼電器與哈佛Mark1號
在1944年,為了給美國曼哈頓計劃跑模擬,IBM建造出來首臺自動按序控制計算機哈弗Mark1號,有76萬五千個元件,300萬個連線點和500英里長的導線,重達4500公斤,佔地面積有房間那麼大。其大腦是由繼電器組成的,其一秒能做3次加或減,乘法花費6秒,除法花費15秒
由於繼電器的金屬臂有“質量”,無法快速開關,1940年一個好的繼電器一秒鐘可以翻轉50次,但是任何會動的機械都會隨著時間出現物理磨損,部件會損壞,隨著繼電器數量增加,故障機率也會增加。真的是又慢又容易壞的大傢伙,但瑕不掩瑜,其依舊具有跨時代的意義。
真空管與巨人一號
在1904年,英國物流學家弗萊明就已經開發了一種新的電子元件,叫做真空管,也就是把兩個電極裝在一個氣密的玻璃燈泡裡,但弗萊明的這個電子部件,電流只能單向流動,俗稱稱為 "二極體"。要想製作計算機,需要能夠控制電子的流動的東西。
在 1906 年,美國發明家"李·德富雷斯特"在"弗萊明"設計的兩個電極之間,加入了第三個"控制"電極(一 種柵欄式的金屬網,形成電子管的第三個極),向"控制"電極施加正電荷,它會允許電子流動;但如果施加負電荷,它會阻止電子流動。被命名為真空三極體,這樣就能形成一個"開關",可以“斷開或閉合電路”。
由於真空管內沒有會動的元件,想較於機械裝置,磨損更少,又沒有金屬臂的限制,每秒可以開閉數千次,繼電器一秒鐘只能翻轉50次左右,效率大大的提升。
第一個大規模使用真空管的計算機是"巨人1號",標誌著計算機從機電轉向電子,電子計算機的大門自此開啟。由工程師Tommy Flowers設計,完工於1943年12月,用於二戰時破解德國軍事通訊密碼。
電晶體與IBM608
雖然真空管做計算機的大腦,解決了繼電器許多缺陷,但是其還是容易損壞,就像燈泡一樣燒壞。到1950年代,真空管計算機都達到了極限。
1947年,貝爾實驗室發明了電晶體,其成為了新的"開關",也標誌著一個全新的計算機時代到來。電晶體不僅體積小,響應速度快(每秒切換開關能達到上百萬次),而且使用壽命也非常悠遠,準確 性高,穩定性好,不易損壞。關鍵它可以做得非常小,一塊積體電路即可容納十幾億到幾十億 個電晶體。
電晶體泛指一切以半導體材料為基礎的單一元件,半導體顧名思義,可導電也可不導電,是常溫下導電效能介於導體與絕緣體之間的材料,一般有矽、鍺、砷化鎵等
IBM608第一個完全用電晶體,消費者也可以買的起計算機。該計算機有3000個電晶體,每秒執行4500次加法,80次左右的乘除法。
計算機2大特性:計算能力和記憶能力
透過本文的閱讀,我們知道了開關是一個生活中很普通的東西,但夏農將開關、布林代數聯絡的一起後,產生了化學反應。可以用一個個開關組合起來,成為閘電路,從而能夠造成CPU。
隨著材料學等發展,開關也從繼電器到真空管,再到電晶體,相應速度,提交,使用壽命,成本都得到了明顯的改善。他們製造出來的計算機也慢慢的變成了我們現在熟悉的計算機。
計算機的大腦就是CPU,我們知道CPU內最重要的2個部件是暫存器和計算單元
,那麼如何用開關來讓計算機擁有計算能力和記憶能力?大家可以思考一下,後面的文章讓我們拋開硬體,透過抽象出來的邏輯閘來一步步設計和實現一個CPU。
參考資料:
《深入理解計算機系統》
《編碼:隱匿在計算機軟硬體背後的語言》
《深入淺出計算機組成原理》
《數位電子技術基礎》
《穿越計算機的迷霧》
百度百科
全文完,感謝您的閱讀,如果我的文章對你有所幫助的話,還請點個免費的贊,你的支援會激勵我輸出更高質量的文章,感謝!
原文映象:聊聊開關和CPU之間故事
計算機內功、原始碼解析、科技故事、專案實戰、面試八股等更多硬核文章,首發於公眾號「小牛呼嚕嚕」,我們下期再見!