咱們簡單地談一談如何學習操做系統原理,這裏咱們假設讀者基本是一個小白,只有一點算法和數據結構的基礎,好比會用C語言寫鏈表,快排之類的。有一點咱們必須強調,一切沒有(僞)代碼的理論書籍都是在耍流氓。因此根據這條準則,咱們得經過編程的方式來學習操做系統原理。引用某老師的一句話,"Learning by coding them"。還有一點,學習操做系統原理不是學習怎麼用各類API以及如何配置操做系統裏頭的各類參數,咱們得站在更高的角度去審視,咱們得思考如何在內核中實現這些API和配置項。linux
本着授人以魚不如授人以漁的準則,咱們給出一個確實可行的學習路線,最好按部就班地進行,固然能夠根據自身水平跳過某些階段:git
第一階段 學習計算機組成原理和體系結構:github
第一步,上coursera網課:from Nand to Tetris I,得到基本的計算機組成原理知識。算法
第二步,細讀深刻理解計算機系統第二版,並作課後對應習題和實驗,得到基本的計算機體系結構方面的知識。資源能夠從csdn搜索各章對應Lab源碼和解題報告。編程
第二階段 學習80386相關的彙編知識:小程序
第一步,細讀彙編語言第二版(王爽),略讀Professional Assembly Language (Richard Blum),細讀X86彙編語言從實模式到保護模式(李忠),得到可以徒手編寫gasm,nasm,wasm格式的16位/32位80386體系下的彙編小程序,並能自如地在彙編中調用C函數,在C函數中內聯彙編或者調用匯編函數,重點了解80386體系方面的知識。網絡
第三階段 閱讀早期操做系統代碼:數據結構
第一步,細讀orange'S 一個操做系統的實現(於淵),得到操做系統微內核體系基本知識。函數
第二步,細讀Linux內核徹底註釋(修正版v3.0 趙炯)+ UNIX操做系統設計(Maurice J.Bach),得到操做系統宏內核體系基本知識。學習
Linux 0.11 源碼+bochs平臺運行環境:
配套視頻連接:網易雲課堂:操做系統課程,哈爾濱工業大學
hit-oslab-linux-20110823.tar.gz + Linux內核徹底註釋(修正版v3.0).pdf
配套資源連接:https://github.com/Yuandong-Chen/Linux-0.11
經過上述步驟的學習,讀者可以得到紮實的操做系統原理方面的基礎。重要的是,上述全部資源均可以在網上找到,徹底免費。你徹底可以發揮本身的想象,寫出一個屬於本身的基於80386體系的可是無法聯網的操做系統了。如何寫出一個能聯網的操做系統呢?這是計算機網絡方面的知識,又是另一條學習路線。