一、計算機組成原理知識地圖程序員
圖中將計算機分紅四大部分:計算機的基本組成、計算機的指令和運算、處理器設計、已經存儲器和I/O設備緩存
計算機的基本組成框架
將計算機的組成部分對應的馮諾依曼的系統結構中,也就是運算器、控制器、存儲器、輸入設備和輸出設備這五大基本組件。除此以外還須要瞭解計算機的兩個核心指標:性能和功耗分佈式
計算機的指令和運算性能
指令這部分涉及到,所編寫的一行行代碼是怎麼在計算機裏面跑起來的,即程序是怎麼經過編譯器和彙編器,變成一條條機器指令這樣的編譯過程(即編譯原理),還須要知道咱們的操做系統是怎麼連接、裝載、執行這些程序的(即操做系統)。而這一條條的指令執行的控制過程,就是由計算機五大組件之一的控制器來控制的。學習
計算部分是從二進制和編碼開始,理解咱們的數據在計算機中的表示,以及是怎麼從數字短路層面,實現加法、乘法這些基本的運算功能。實現這些運算功能的ALU,也就是算數邏輯單元,就是計算機五大組件之一的運算器。這裏面有一個浮點數是很重要的一個知識點,掌握浮點數會讓咱們對數據的編碼、存儲和計算可以有一個從表到裏的深刻理解。編碼
CPU的設計spa
CPU時鐘能夠用來構造寄存器和內存的鎖存器和觸發器,所以,CPU時鐘應該是學習CPU的前導知識。搞明白爲何須要CPU時鐘,以及寄存器和內存是用什麼樣的硬件組成的以後,能夠再來看看這個計算機的數據通了是如何構造出來的。操作系統
數據通路,其實就是鏈接整個運算器和控制器,並最終組成了CPU。而出於對性能和功耗的考慮,還有進一步理解和掌握面向流水線設計的CPU、數據和控制冒險,以及分支預測的相關技術。設計
CPU做爲控制器要和輸入輸出設備通訊,那麼咱們就須要知道異常和中斷發生的機制。還有指令的並行執行,看看如何直接在CPU層面,經過SIMD來支持並行計算。
存儲器原理
經過存儲器的層次結構做爲基礎的框架引導,須要掌握從上到下的CPU高速緩存、內存、SSD硬盤和機械硬盤的工做原理,他們之間的性能差別,以及實際應用中利用這些設備會遇到的挑戰。存儲器其實不少時候又扮演了輸入輸出設備的角色,因此須要進一步瞭解CPU和這些存儲器之間是如何進行通訊的,以及咱們最重視的性能問題是怎麼一回事,理解什麼是IO_WAIT,如何經過DMA來提高程序性能。
對於存儲器,不只須要它們能正常工做,還須要確保裏面的數據不能丟失。因而須要掌握是如何經過RAID、Erasure Code、ECC以及分佈式HDFS,這些不一樣的技術,來確保數據的完整性和訪問性能。
二、學習資料
入門書籍:《計算機是怎樣跑起來的》,《程序是怎樣跑起來的》;此外,寄存器、ALU這些電路怎麼回事,能夠看Coursera 上的北京大學免費公開課《Computer Organization》
深刻學習:《計算機組成與設計:硬件 / 軟件接口》和經典的《深刻理解計算機系統》,輔助的有《計算機組成:結構化方法》,《計算機體系結構:量化研究方法》。
三、課外資料
《編碼:隱匿在計算機軟硬件背後的語言》和《程序員的自我修養:連接、裝載和庫》是理解計算機硬件和操做系統層面代碼執行的優秀閱讀材料。