揭開計算機的神祕面紗
寫在前面的話:從接觸電腦以來,就一直對電腦充滿好奇。當電腦連線上電源,按下開機鍵,我們就可以做所有我們想 做的事情,打遊戲、寫文章、看電影、搭建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等。
計算機的構成越來越複雜,以至於掩蓋我們內心最初的好奇與衝動。
相關文章
- 揭開“QUIC”的神祕面紗UI
- 『MySQL』揭開索引神祕面紗MySql索引
- 揭開redux,react-redux的神祕面紗ReduxReact
- 揭開Future的神祕面紗——任務取消
- 揭開java記憶體模型的神祕面紗Java記憶體模型
- 揭開Future的神祕面紗——任務執行
- 揭開單體應用程式的神祕面紗
- 揭開DRF序列化技術的神祕面紗
- 揭開JS無埋點技術的神祕面紗JS
- 揭開極端程式設計的神祕面紗:結對致勝程式設計
- 揭開NoahV智慧運維前端框架的神祕面紗運維前端框架
- 揭開C++移動與複製的神祕面紗C++
- 揭開SQL隱碼攻擊的神祕面紗PPT分享SQL
- 從一個Demo開始,揭開Netty的神祕面紗Netty
- 揭開React中server-side rending的神祕面紗ReactServerIDE
- 是時候揭開混合雲架構的神祕面紗了!架構
- 揭開雲原生資料管理的神祕面紗:操作層級
- 揭開Redux神祕面紗:手寫一個min-ReduxRedux
- 千呼萬喚始出來——iPhone 5揭開神祕面紗iPhone
- 圖文並茂|為你揭開微服務架構的“神祕面紗”!微服務架構
- 揭開神祕面紗,如何組織一次分散式壓測分散式
- 悄悄掀起 WebAssembly 的神祕面紗Web
- 一文帶你深扒ClassLoader核心,揭開它的神祕面紗!
- 七牛雲儲存創始人:揭開GO語言的神祕面紗Go
- 揭開job,scheduler,program,chain,job_class,window,window_group神祕面紗AI
- 揭開 Growth Hacking 的神祕面紗大結局:那些 Facebook 曾經踩過的坑
- 《吃透MQ系列》之扒開Kafka的神祕面紗MQKafka
- 揭開ThreadLocal的面紗thread
- 【C#——揭開你的面紗】C#
- 萬丈高樓平地起,撥開技術神祕的面紗
- 揭開OKR (Objectives and Key Results) 的面紗OKRObject
- 揭開 Hyperledger Cacti 專案的面紗
- 介面自動化測試是個啥?如何開始?什麼是框架?帶你揭開神祕面紗框架
- 揭開周獲 18k star 開源專案的神祕面紗「GitHub 熱點速覽 v.22.28」Github
- 揭開Java記憶體管理的面紗Java記憶體
- 揭開Kotlin協程的神秘面紗Kotlin
- 揭開MSSQL---extents內部的神秘面紗SQL
- 揭開神秘面紗——深入淺出ThreadLocalthread