nand2tetris
- 難度:★★★★☆
- 推薦:★★★★★
nand2tetris 項目有一本書叫《計算機系統要素》,也有英語的視頻教程。如果英語不好的可以看書,內容是一樣的。
這本書主要講解了計算機原理(1-6章)、編譯原理(7-11章)、操作系統相關知識(12章)。不要看內容這麼多,其實這本書的內容非常通俗易懂,翻譯也很給力。每一章背後都有對應的練習,需要你手寫代碼去完成,堪稱理論與實踐結合的經典。
這裏引用一下書裏的內容簡介,大家可以感受一下。
本書通過展現簡單但功能強大的計算機系統之構建過程,爲讀者呈現了一幅完整、嚴格的計算機應用科學大圖景。本書作者認爲,理解計算機工作原理的最好方法就是親自動手,從零開始構建計算機系統。
通過12個章節和項目來引領讀者從頭開始,本書逐步地構建一個基本的硬件平臺和現代軟件階層體系。在這個過程中,讀者能夠獲得關於硬件體系結構、操作系統、編程語言、編譯器、數據結構、算法以及軟件工程的詳實知識。通過這種逐步構造的方法,本書揭示了計算機科學知識中的重要成分,並展示其它課程中所介紹的理論和應用技術如何融入這幅全局大圖景當中去。
全書基於“先抽象再實現”的闡述模式,每一章都介紹一個關鍵的硬件或軟件抽象,一種實現方式以及一個實際的項目。完成這些項目所必要的計算機科學知識在本書中都有涵蓋,只要求讀者具備程序設計經驗。本書配套的支持網站提供了書中描述的用於構建所有硬件和軟件系統所必需的工具和資料,以及用於12個項目的200個測試程序。
全書內容廣泛、涉獵全面,適合計算機及相關專業本科生、研究生、技術開發人員、教師以及技術愛好者參考和學習。
而且,這本書的門檻非常低,只要你能熟練運用一門編程語言即可。
本書從與非門開始教你一步步構建一個完整的計算機(1-6章);從第 7 章開始一直到第 11 章,需要完成三個編譯器(彙編編譯器、VM 編譯器、Jack 語言編譯器);最後一章則需要完成操作系統部分功能。
如果你完成了本書所有的項目,則會獲得以下成就:
- 構建出一臺計算機(在模擬器上運行)
- 實現一門語言和相應的語言標準庫
- 實現一個簡單的編譯器
我已經把這本書所有項目都完成了,耗時兩個月(每天 3 小時)。答案放在 github 上,還建立了一個 QQ 交流羣,如果有不懂的可以加羣裏探討一下。
MIT6.828
- 難度:★★★★★
- 推薦:★★★★★
這個項目是 MIT 大學開源的一個操作系統課程,官網是 https://pdos.csail.mit.edu/6.828/2018/schedule.html。該項目主要有以下幾個優點:
- 循序漸進,從淺到深,讓人更容易接受
- 理論與實踐結合,每講解一個知識點都有對應的練習需要完成
- 做這個項目的人很多,網上資料和答案非常多
只要你跟着項目走,從 Lab1 開始,一步一步的做到 Lab6,就能實現一個簡單的操作系統內核。以下是 6 個實驗的內容簡介:
- 引導PC,講解 bootloader
- 內存管理
- 用戶進程及中斷
- 搶佔式多任務處理
- 文件系統
- 網絡驅動程序
不過這個項目比起 nand2tetris 要難,門檻較高。如果沒什麼基礎的話,建議做這個項目之前先看看下列資料:
- x86彙編語言:從實模式到保護模式
- xv6-chinese
- 操作系統導論或任意一本操作系統書籍
- git
這個項目也花了兩個月才完成,不過只做了 Lab1-6 實驗,挑戰任務和家庭作業都沒做。答案放在 github 上,有興趣可以看看。