這是一個很早就想要作的系列,從零開始寫一個小的操做系統,算是致敬之前學校裏作的 OS 項目,也是但願能幫助到對這一塊感興趣的同窗。html
操做系統是計算機專業的核心學科,但我想即便是不少大學的 CS 本科操做系統專業課,也未必會設置這樣規模和難度的項目。我是在 CMU 讀研時修了它們的本科課程 15-410,這是課程的最大一個項目做業。對於不少計算機專業的同窗,以及非科班轉計算機的同窗,嘗試去作,哪怕是讀懂這樣一個項目,我想都是大有益處的。編程
網上也有不少相似的很好的系列教程,我也但願個人這個系列可以稍微帶來些不同的地方,你能夠大概地有個心理預期:多線程
爲了讀懂這個系列,你須要有足夠的專業知識準備,總的來講就是大學操做系統專業課的全部理論知識,不要求精通,但最起碼能瞭解,須要用到的時候知道怎麼去查。這裏推薦《深刻理解計算機系統》這本書,若是你的水平已經覆蓋了這本書,那麼能夠繼續了。工具
再具體一些,但願你的理論和實踐能力能夠覆蓋如下這些:操作系統
是否是看上去有點多......這的確是對你的基本要求,但仍是那句話,不要求熟練精通,只須要能」瞭解「,你能夠只有一個模糊的理論概念,薄弱的實踐基礎,能夠在項目中提升這些能力,這其實也是這個項目的終極目的所在。線程
僅僅看我這個系列可能未必足夠,也不必定對每一個人適合,因此我推薦一些我看過的書和教程:htm
這個系列是很是推薦的,做者的重點把握明確,組織結構和代碼很是清晰。但這個系列項目規模偏小,沒有 boot loader 和內核成形後的線程,進程以及系統調用方面的內容,總體比較偏 Demo 和教學性質,很適合初學。教程
這也是很推薦的一本書,與上面的系列相反,這本書從頭至尾完整地實現了一個功能比較完善的內核,規模比較大,並且做者的講解很細緻,不厭其煩,甚至我都以爲有些囉嗦,比較適合在實際項目開發中做爲參考和理論手冊查詢,而不適合從頭至尾通讀。進程
個人這個系列項目其實參考並綜合了以上二者,取了折中,把規模和難度控制在了我認爲比較合理的程度。圖片
在開始系列以前,咱們首先列一下項目的目錄清單,後面把這些坑一個個填上。