版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系我們

CPU的工作原理1——為什么芯片只能識別二進制

孫老師聊人工智能
原創(chuàng)
中國計算機學(xué)會GESP技術(shù)委員會主席、科普工委委員
收藏

我們可能都聽說過這樣的話:“CPU是計算機的大腦,所有運算都在這里完成”,“CPU是由數(shù)十億個晶體管組成的”,“CPU只能識別二進制,類似于1001101100這樣的數(shù)據(jù)”,“所有的編程語言最終都會被轉(zhuǎn)換為二進制進行處理,因為CPU只識別二進制”……。時間久了,我們會把這些話當(dāng)做約定俗成的公理來看待,很少思考這是為什么。

我有著20年編程經(jīng)驗,雖然日常工作中使用編程解決各類問題在我看來都是信手拈來,但有幾個問題一直困擾我,CPU為什么能識別二進制?它的工作原理是什么?數(shù)十億個晶體管起到什么作用?這些問題不明白雖然不會影響我的生活、工作,但會讓我無法全面認知計算機運行的原理,總感覺缺少點什么,接下來我就帶著大家一起看看CPU是如何工作的。

先來看CPU的構(gòu)成,其實不只是CPU,也包括GPU、NPU……等等所有的芯片都是一樣的,他們都是由很多個“開關(guān)”組成的,對,就是開關(guān),你沒看錯!


來源|1688.com

就好像家里的水龍頭,打開,水流出來,關(guān)上,水沒了。當(dāng)然芯片里不是真的有水龍頭,只是個比喻。早期的計算機使用的是繼電器開關(guān),在一些工業(yè)電氣設(shè)備中還能看到這種器件。
來源|1688.com

典型的外觀就是一大卷銅線,旁邊有幾個彈簧片,彈簧片上有金屬觸點,當(dāng)銅線圈通電時會產(chǎn)生磁場,吸引彈簧片產(chǎn)生位移,從而使金屬觸點連接或斷開,本質(zhì)上說就是一個開關(guān),只不過它控制的是電流,而不是水流。

后來人們發(fā)現(xiàn)這種繼電器開關(guān)故障率太高,哪怕是一只蟲子爬進去,也可能造成開關(guān)短路,軟件編程中的“bug”一詞就來源于此。所以人們又研究出了電子管開關(guān),這種開關(guān)摒棄了機械運動部件,故障率大大降低。


來源|zhe2.com

現(xiàn)在逛一些舊家電市場,可能還會看到使用老式電子管的收音機。但電子管由于體積大,功耗高,后來基本被晶體管替代了,除了一些專業(yè)領(lǐng)域,比如音響功放,因為電子管制成的功率放大器可以保證高品質(zhì)的原聲,所以音響發(fā)燒友,都會以擁有一臺優(yōu)質(zhì)的電子管功率放大器為榮。

最后我們看看晶體管,它也是一個電流開關(guān),相較于電子管,它可以做得非常小,功耗非常低,所以現(xiàn)在的芯片都是基于晶體管開關(guān)的。


來源|電子通

當(dāng)然這張圖片是普通的晶體管,并不是芯片中微型晶體管的樣子,晶體管可以比較大,在一些家用電器的電路板上經(jīng)常能看到這樣的東西,外觀樣式很豐富。同時也可以做的非常小,在一個指甲蓋大小的區(qū)域里能集成上百億個晶體管。

我們說過晶體管就是一個開關(guān),類似于水龍頭,水龍頭控制的是水流,之所以打開開關(guān),有水流出,是因為有水壓的存在。

同樣晶體管開關(guān)控制的是電流,之所以打開開關(guān),有電流通過,是因為有電壓的存在。我們用這個符號來表示一個晶體管開關(guān)。

上面是控制端,相當(dāng)于水龍頭的開關(guān),當(dāng)控制端施加一個高電位(可以簡單理解為有電),輸入端和輸出端之間的通道打開,電流由輸入端流向輸出端。如果控制端是低電位(相當(dāng)于沒電),通道關(guān)閉,輸出端沒有電流流出。為了描述方便,我們使用0代表沒電,1代表有電,一個晶體管開關(guān)會形成下面二種狀態(tài):


也就是控制端有電(1),輸出端就有電(1),控制端沒電(0),輸出端沒電(0)。所以一個晶體管開關(guān)只能有二種狀態(tài),要么是1要么是0,而1和0就是二進制,這也就是CPU只能識別二進制的道理。

本節(jié)我們介紹了芯片為什么只能識別二進制,下節(jié)開始我們會介紹由多個晶體管開關(guān)組合形成的基本門電路,若干門電路組合又能形成更復(fù)雜的存儲電路、運算電路,然后是半加器、全加器……直到形成整個CPU!