揭開計算機的神秘面紗


寫在前面的話:從接觸電腦以來,就一直對電腦充滿好奇。當電腦連接上電源,按下開機鍵,我們就可以做所有我們想做的事情,打游戲、寫文章、看電影、搭建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等。 

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

 (完)

  文檔信息 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM