MIT6.828-2018
過去很長一段時間都想自己寫一個操作系統(tǒng)赘阀,走了不少彎路万细∑嗣迹花了很多時間在學(xué)習(xí)《30天自制操作系統(tǒng)》,學(xué)到后面發(fā)現(xiàn)作者講述的有點繞了,代碼也沒有講明白腰素。到最后還是選擇了MIT6.828聘裁,這門課的難度比較大,要求對x86保護模式下的變成要比較了解弓千。慢慢跟下來衡便,還是受益匪淺的。我沒有做完所有的實現(xiàn)洋访,我就做到了lab5镣陕。不知道何種原因,lab6代碼無法運行捌显,所以我就沒做了,而且lab6是實現(xiàn)內(nèi)核與一個web server通信的茁彭,和內(nèi)核的其他內(nèi)容比起來(比如說進程,管道,shell等等)不怎么相關(guān)扶歪。幾個lab做下來理肺,對于系統(tǒng)如何引導(dǎo)啟動,頁式內(nèi)存的管理善镰,文件系統(tǒng)妹萨,進程相關(guān)內(nèi)容都有了更深刻的了解。
筆記都是做一個lab寫一個炫欺,可能最前面寫的有錯誤乎完,或者代碼和后面沖突。有些地方我代碼到后面lab稍微改了下品洛,所以具體的就看github上的吧:mit6.824-2018
課程介紹
課程地址:MIT6.828
通過這個課可以加深對內(nèi)核的理解锰提,并且還需要實現(xiàn)lab至朗。每一個lab都有給出代碼,其中預(yù)留了代碼來填空。
-
為什么學(xué)的是2018而不是2020旺订?
2020我看了下好像用的是RISC-V蕾哟,我不了解這個靖诗。所以還是選擇老版本的課程龟糕。
-
如何學(xué)習(xí)?
建議事先先稍微學(xué)習(xí)下x86的保護模式以及x86的匯編士飒。準備工作做好了以后查邢,就直接按照課程schedule來做就行。多閱讀xv6 book酵幕,xv6 book主要是對xv6代碼的講解扰藕。和lab不是非常相關(guān),但是原理是通用的芳撒,xv6 book多看看实胸。(不過xv6 book有些地方好難懂他嫡,可能是我水平太低了)。
PS:
學(xué)習(xí)x86保護模式的內(nèi)容可以參考《x86-實模式到保護模式》這本書庐完,網(wǎng)上有它的pdf和源代碼钢属。mit6.828中涉及到的保護模式只是很多都提到了。但是APIC什么的沒有說到门躯,不過我認為這本書仍然值得一看淆党。《30天實現(xiàn)操作系統(tǒng)》這本我覺得不咋地讶凉,首先作者的代碼質(zhì)量一般染乌,越到后面對于代碼的解釋也有點模棱兩可《叮可以直接選擇不看荷憋,不過其中的一些保護模式的知識,ELF文件的解釋可以稍微參考下褐望±兆看前幾章我感覺差不多了。另外一本書比較知名的就是《操作系統(tǒng)真相還原》了瘫里,我沒有看過实蔽,暫且不做評論。
XV6 以及JOS
xv6是一個正兒八經(jīng)的UNIX-like內(nèi)核谨读,學(xué)習(xí)xv6的代碼能夠加深我們對UNIX內(nèi)核的理解局装。比如說文件描述符的實現(xiàn),管道劳殖,文件系統(tǒng)等等內(nèi)容铐尚。而在實驗當中,我們用的是JOS的內(nèi)核哆姻。我在xv6中加入了一些注釋宣增,重點是在文件系統(tǒng)這塊,因為lab中所使用的JOS的文件系統(tǒng)不是很貼近現(xiàn)實文件系統(tǒng)設(shè)計填具,所以我花了不少時間來研究xv6的源代碼。
環(huán)境
電腦系統(tǒng):任意的Linux系統(tǒng)都可以匆骗。我最開始用的是ubuntu,后來換到deepin去了劳景。不過問題不大
虛擬機:課程里面用的是QEMU,另外一個比較有名的就是bochs了碉就。推薦安裝這里提到的patched QEMU盟广,在后面實驗中更好一些。
筆記
下面是一些所有l(wèi)ab的地址瓮钥,我就做到了Lab5筋量,然后有些作業(yè)沒做烹吵。下面是lab的一些記錄:
Lab1:
Lab1 PartA Bootstrap
Lab1 PartB The Boot Loader
Lab1 PartC The kernel
Lab2:
Lab2 PartA Physical Memory Management
Lab2 PartB Virtual Memory
Lab2 PartC Kernel Address Space
Lab3:
Lab3 PartA User Environments and Exception Handling
Lab3 PartB Page Faults, Breakpoints Exceptions, and System Calls
Lab4:
Lab4 PartA Multiprocessor Support and Cooperative Multitasking
Lab4 PartB Copy-on-Write fork
Preeptive Multitasking and Inter-Process communication
Lab5:
Mit6.828 lab5: File system,Spawn and Shell
HomeWork沒有全部做完,memory barriers什么的沒做桨武。
HomeWork:
HomeWork1 Boot Xv6
HomeWork2 Shell
HomeWork3 System call
HomeWork4 Lazy Page Allocation
HomeWork5 System Alarm