標籤:
寫在前面的話:從接觸電腦以來,就一直對電腦充滿好奇。當電腦串連上電源,按下開機鍵,我們就可以做所有我們想做的事情,打遊戲、寫文章、看電影、搭建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等。
電腦的構成越來越複雜,以至於掩蓋我們內心最初的好奇與衝動。
揭開電腦的神秘面紗