計算機組成原理的知識點拆分成了四大部分計算機的基本組成計算機的指令和計算處理器設計儲存器和I/O裝置。
計算機的基本組成
計算機的硬體組成
這些硬體,怎麼對應到經典的馮·諾依曼體系結構的
除此之外,還需要了解計算機的兩個核心指標
效能功耗效能和功耗也是我們在應用和設計五大基本元件中需要重點考慮的因素。
計算機的指令和計算
需要搞明白,我們每天撰寫的一行行C、Java、PHP程式,是怎麼在計算機裡面跑起來的。
了解我們的程式是怎麼通過編譯器和彙編器,變成一條條機器指令這樣的編譯過程(編譯過程展開,就是編譯原理)知道我們的作業系統是怎麼連結、裝載、執行這些程式的(深入學習,就是作業系統)。而這一條條指令執行的控制過程,就是由計算機五大元件之一的控制器來控制的。計算部分,要從二進位制和編碼開始,理解我們的資料在計算機裡的表示,以及我們是怎麼從數位電路層面,實現加法、乘法這些基本的運算功能的。
實現這些運算功能的ALU(Arithmetic Logic Unit/ALU),算術邏輯單元,計算機五大元件之一的運算器。
特別重要的就是浮點數(Floating Point)。
浮點數是我們在日常運用中非常容易用錯的一種資料表示形式。掌握浮點數能讓你對資料的編碼、儲存和計算能夠有一個從表到裡的深入理解。尤其在AI火熱的今天,浮點數是機器學習中重度使用的資料表示形式,掌握它更是非常有必要。
CPU的設計
CPU時鐘可以用來構造暫存器和記憶體的鎖存器和觸發器,因此,CPU時鐘應該是我們學習CPU的前導知識。搞明白我們為什麼需要CPU時鐘(CPU Clock),以及暫存器和記憶體是用什麼樣的硬體組成的之後,我們可以再來看看,整個計算機的資料通路是如何構造出來的。
資料通路,其實就是連線了整個運算器和控制器,並最終組成了CPU。而出於對於效能和功耗的考慮,你要進一步理解和掌握面向流水線設計的CPU、資料和控制冒險,以及分支預測的相關技術。
既然CPU作為控制器要和輸入輸出裝置通訊,那麼我們就要知道異常和中斷髮生的機制。在CPU設計部分的最後,我會講一講指令的並行執行,看看如何直接在CPU層面,通過SIMD來支援平行計算。
儲存器的原理
通過儲存器的層次結構作為基礎的框架引導,需要掌握從上到下的CPU快取記憶體、記憶體、SSD硬碟和機械硬碟的工作原理,它們之間的效能差異,以及實際應用中利用這些裝置會遇到的挑戰。儲存器其實很多時候又扮演了輸入輸出裝置的角色,所以你需要進一步了解,CPU和這些儲存器之間是如何進行通訊的,以及我們最重視的效能問題是怎麼一回事;理解什麼是IO_WAIT,如何通過DMA來提升程式效能。
對於儲存器,我們不僅需要它們能夠正常工作,還要確保裡面的資料不能丟失。於是你要掌握我們是如何通過RAID、Erasure Code、ECC以及分散式HDFS,這些不同的技術,來確保資料的完整性和訪問效能。
計算機組成原理的學習辦法相較於整個電腦科學中的其他科目,計算機組成原理更像是整個計算機學科裡的“綱要”。這門課裡任何一個知識點深入挖下去,都可以變成計算機科學裡的一門核心課程。
程式怎樣從高階程式碼變成指令在計算機裡面執行,對應著“編譯原理”和“作業系統”這兩門課程計算實現背後則是“數位電路”如果要深入CPU和儲存器系統的優化,必然要深入了解“計算機體系結構”。為了更快更好地學計算機組成,總結了三個學習方法
學會提問自己來串聯知識點
學完一個知識點之後,你可以從下面兩個方面,問一下自己。
我寫的程式,是怎樣從輸入的程式碼,變成執行的程式,並得到最終結果的?整個過程中,計算器層面到底經歷了哪些步驟,有哪些地方是可以優化的?無論是程式的編譯、連結、裝載和執行,以及計算時需要用到的邏輯電路、ALU,乃至CPU自發為你做的流水線、指令級並行和分支預測,還有對應訪問到的硬碟、記憶體,以及載入到快取記憶體中的資料,這些都對應著我們學習中的一個個知識點。建議你自己腦子裡過一遍,最好時口頭表述一遍或者寫下來,這樣對你徹底掌握這些知識點都會非常有幫助。
寫一些示例程式來驗證知識點
電腦科學是一門實踐的學科。計算機組成中的大量原理和設計,都對應著“效能”這個詞。因此,通過把對應的知識點,變成一個個效能對比的示例程式碼程式記錄下來,是把這些知識點融匯貫通的好方法。因為,相比於強記硬背知識點,一個有著明確性能對比的示例程式,會在你腦海裡留下更深刻的印象。當你想要回顧這些知識點的時候,一個程式也更容易提示你把它從腦海深處裡面找出來。
通過和計算機硬體發展的歷史做對照
計算機的發展並不是一蹴而就的。從第一臺電子計算機ENIAC(Electronic Numerical Integrator And Computer,電子數值積分計算機)的發明到現在,已經有70多年了。現代計算機用的各個技術,都是跟隨實際應用中遇到的挑戰,一個個發明、打磨,最後保留下來的。這當中不僅僅有學術層面的碰撞,更有大量商業層面的交鋒。通過了解充滿戲劇性和故事性的計算機硬體發展史,讓你更容易理解計算機組成中各種原理的由來。
比如說,奔騰4和SPARC的失敗,以及ARM的成功,能讓我們記住CPU指令集的繁與簡、權衡效能和功耗的重要性,而現今高速發展的機器學習和邊緣計算,又給計算機硬體設計帶來了新的挑戰。
學習資料推薦最有效的辦法還是“讀書百遍,其義自見”。對於不夠明白的知識點,多搜尋,多看不同來源的資料,多和朋友、同事、老師一起交流,一定能夠幫你掌握好想要學習的知識點。
入門書籍
轉自:https://segmentfault.com/a/1190000020031613