揭開計算機的神祕面紗

吳廣磊的部落格發表於2015-02-28

寫在前面的話:從接觸電腦以來,就一直對電腦充滿好奇。當電腦連線上電源,按下開機鍵,我們就可以做所有我們想 做的事情,打遊戲、寫文章、看電影、搭建web伺服器、自己寫程式等等。隨著接觸電腦的時間越長,反而對電腦更加的陌生,不斷的問自己,計算機到底是怎麼 組成的?為什麼就能夠實現這些功能?如果讓我穿越回多少年前,該如何搭建一臺電腦?恰好這幾天讀完這本書《code:the hidden Language of computer hardware and software》,確實一本好書,許多的疑惑得以解開,這篇部落格就寫寫那些深深觸動我的點,我認為,理解了這些點,也就理解了整本書的內容,進而理解了 計算機是怎麼回事。

=====正文開始========

1.繼電器

看下面兩幅圖:

  

(1)左圖中:一個鐵芯,纏上一些線圈,當沒有通電時,開關A是斷開的,Out端沒有電壓,我們認為輸出為0.

(2)右圖中:當線圈通電後,鐵芯被磁化,相當於變成了一塊磁鐵,進而可以吸引上面的開關A,Out端有電壓,我們認為輸出為1.

上面這麼一個小小的簡單的東西,就是繼電器,它的意義非凡,因為我們可以人為的去控制:輸出0和1了。

雖然在計算機中,繼電器逐漸被真空管、電晶體取代,但是他們要實現的作用是一致的:輸出0和1。

2.二進位制

我們生活中採用十進位制,可是計算機內的計算採用二進位制,我認為這是非常重要的改變。請看下面的邏輯:

(1)二進位制只有0和1,進而也導致二進位制的加減乘除的結果只有0和1,二進位制的與或非的結果也只有0和1

(2)進而可以將二進位制的加減乘除與二進位制的與或非進行等價

(3)而繼電器可以輸出0和1,因此可以通過繼電器的各種”變著花樣的組合“實現各種與或非

(4)因此可以通過繼電器的各種”變著花樣的組合“實現二進位制的加減乘除運算。

理解了上面的邏輯,接下來要做的僅僅是實現所需功能而已。如何實現功能,也只是時間而已,下面貼一些圖,展示一下如何通過繼電器實現複雜的邏輯 結構,作為一個實現思路的引子,而實現各種自己想要的邏輯,經過幾個夜晚的苦思冥想,是可以想出來的,如果不想自己去想,那麼可以看看Code一書,算作 一個捷徑。

繼電器實現邏輯與

繼電器實現邏輯或

繼電器實現半加器

繼電器實現全加器

不要被上面的圖嚇到,他們僅僅是繼電器的變著花樣的組合而已,如果我們沉下心來,也可以實現這樣的組合,甚至可以實現更多我們所需要的,比如8位加法器、減法器、乘法器、除法器等等。

於是我們已經能夠實現了計算機中CPU的一個重要功能:邏輯運算。

然而上面的操作,例如輸入,都需要我們人為的去操作,我們可以去想象一下:一個人坐在那裡,撥著開關,進行著操作,是多麼的枯燥。如果實現自動執行,也就是說無需人為的操作,實現0、1的輸出,是多麼好的一件事清,我們確實也可以做到,接著往下看。

3.另外一種連線方式的繼電器:反饋

看下面兩幅圖:

左圖中,繼電器沒有通電的時候,繼電器上面的開關B是閉合的;右圖中,一旦給繼電器通電(也就是開關A閉合),奇妙的事情就發生了:

(1)繼電器通電,會吸引上面的開關B,進而使電路斷開。

(2)電路一旦斷開,開關B又恢復原位,使電路接通。(注意開關A一直是閉合的)

(3)上面兩個過程自動重複進行下去了。

上面實現了這樣的一種可能:繼電器的輸出可以在0和1之間自動完成,而能夠自動完成的根本原因,在於下面兩點:

(1)繼電器在斷電的情況下,開關B是閉合的(常閉型繼電器),而前面的講到的繼電器在斷電的情況下,開關B都是斷開的(常開型繼電器),這是一點不同。

(2)繼電器的輸入和輸出沒有分開,而是組成了一個迴路,確切的說:是有反饋了。

經過上面兩點小小的改變,我們可以利用這種思想,實現一系列其他所需的功能:

(1)我們可以實現RS觸發器              (2)我們可以實現D觸發器:實現對1位資料的儲存。

             

其中D觸發器可以稱為1位鎖存器;通過對D觸發器的各種變著花樣的組合,我們可以實現邊沿電源觸發的觸發器,進而實現多位鎖存器;

通過將邊沿觸發的D觸發器的輸出反饋至輸入,我們又可以實現分頻器,進而實現計數器,同時計數器可以作為各個部分的時鐘觸發訊號。

如果忽略上面的細節,我們知道我們已經可以實現鎖存器、計數器、時鐘訊號。

於是鎖存器構成了CPU中的暫存器和電腦中的記憶體RAM以及顯示卡的視訊記憶體RAM;

計數器和時鐘訊號構成了計算機中的時鐘驅動訊號。

4.匯流排

上面我們可以說已經實現了CPU和RAM(記憶體、顯 存),一旦將CPU與RAM連線,在能夠自動執行的時鐘訊號的驅動下,CPU和RAM就能夠協同工作實現所需的功能。CPU與RAM連線後,既可以實現 RAM的輸出給CPU進行運算,又可以實現CPU的輸出給RAM進行儲存。

這些的輸入輸出都是通過實實在在的導線連線的。為了不至於使導線密密麻麻的難以辨識,我們可以對各個電路部件進行”各種變著花樣的組合“,並把線路梳理清楚,總結為三種線路:資料匯流排、控制匯流排、地址匯流排。

(1)資料匯流排:上面傳輸的是資料,如果能夠傳輸8位,那麼就說資料位寬為8位。當然這裡8位也是與前面提到的鎖存器的位數是對應的;也可以說是與CPU中的暫存器的位數是對應的,其實都一回事。

(2)地址匯流排:地址匯流排也一根根的實際的導線,通過這些導線,就可以能夠方便的選取RAM中的特定的鎖存器;地址匯流排的數目決定了能夠定址的最大RAM。

(3)控制匯流排:傳送控制訊號,實現特定的控制功能,比如確定是讀RAM中的資料,還是往RAM中寫入資料。

還是要說上一句:這些線都是實實在在的導線。

5.機器語言

匯流排上面傳輸著0和1訊號,通過0和1訊號的各種變換,表示著傳送不同的資訊;RAM具有儲存的功能,因此我們可以把一下0和1的資訊儲存進RAM,進而就可以讓CPU去執行該命令了,這些命令就可以稱為機器語言。

機器語言的0和1我們可以通過開關等多種方式寫入RAM中,畢竟RAM是可以儲存資訊的;如果每次都寫01太繁瑣和不方便,於是將這些01的代 碼用特定的符號表示,出現了組合語言,組合語言變成01程式碼的機器語言,需要通過彙編程式來實現,而彙編程式將彙編源程式彙編成機器程式碼,其實就是去查一 下機器程式碼和彙編符號的對照表格而已。

隨著時間的發展,高階語言也相應出現了。

CPU本質上來說是由繼電器構成的,確切一點是電晶體構成,不同的公司的不同工程師造出來的cpu,相應的構成也會有一些差別,導致機器指令程式碼也就不同,於是出現了不同的指令集,如X86指令集,RISC指令集等等。

6.外部儲存介質

前面提到的RAM,本質上是由繼電器構成的,確切的說是由半導體構成,這都無所謂,他們都有一個共同的特 點:當斷電的瞬間,一切都沒有了,為什麼呢?因為電這個東西比較奇怪,說沒就沒了,如果想要長久的儲存資料,得需要其他的方式:例如通過磁性物質來儲存, 於是出現了磁帶、磁碟;通過光資訊來儲存i資訊,如光碟;以及其他的東西:如ROM、Flash等。

計算機的構成越來越複雜,以至於掩蓋我們內心最初的好奇與衝動。

相關文章