花了兩個月多的時間,終于把 MIT6.828 的課程跟完了。剛接觸這個課程時,就有一種感覺:哇,好神奇! 這個課程真的是循序漸進,一步一步在你的腦海裏建立起 OS 的大廈框架。從 Lab1 的手把手教學到 Lab6 的放任你自由,很好地對學生的學習進行了引導。學完這個課程後,你也就擁有了一個屬于你自己的完整的內核雛形!
當然這個課程需要一些基礎,如彙編語言、操作系統、計算機組成原理以及體系結構等。畢竟操作系統是一門比較底層且考察綜合性計算機知識的課程。但這都不是重點,我一直認爲,以邊學邊做的方式來學習一門課程是最好的方式之一(爲什麽是之一呢,怕被噴…嘻嘻)。只要能堅持下來,最後你會體會到,你已經能從一個與之前完全不同的角度理解計算機!現在微內核概念這麽火,鴻蒙就是微內核OS,難道不想從原理上真正理解一下微內核OS嗎? 沒錯,6.828 這個課程就是引導我們實現了一個微內核操作系統。
沒想到這個內容能被這麽多人看到,還挺激動的。不過點贊收藏 1:5 是什麽情況,大家不要收藏退出一氣呵成啊~如果真的對計算機底層比較感興趣的話,一定要去 try 一下啊!
1. 簡介
課程評價:神級課程——要是早遇到,我還會是這種 five(廢物) 系列
課程網址:6.828: Operating System Engineering,一直跟著其 schedule 走就可以啦。
xv6 講義:a simple, Unix-like teaching operating system,講義中會將每個部分的實現講得十分詳細,在代碼編寫時遇到不太清晰的概念時,可以多參考講義。
我的實現環境: – VMware Workstation虛擬機 – Ubuntu16.04 – qemu,最好使用 MIT 給的 patch 版本(Lab6 用到 pacth 版本的qemu 較多)。安裝方法也可參考Tools Used in 6.828 鏈接 – 工具鏈 Tools Used in 6.828
環境搭建網絡上教程很多,這裏我就不再贅述,直接給出別的大佬寫的教程:MIT-6.828-JOS-環境搭建
2. Xv6
學習6.828時,你會發現經常遇到 xv6 和 JOS這兩個名詞,不明白它們兩者之間的關系,在完成實驗時思路就會不是很清晰。xv6 是一個類Unix的教學操作系統,而 JOS 是在xv6的基礎上改寫,讓我們能在其上進行實驗的 OS。 所以實際上,當我們遇到不會實現的問題時,可以去參考 xv6 相應部分的源碼。
Homework 實現:完整實現代碼。Github_SmallPond/MIT6.828_OS
- MIT6.828_Homework_Shell_MIT_6.828
- MIT6.828_HW2_Boot_xv6_MIT6.828
- MIT6.828_HW3_XV6 System calls
- MIT6.828_HW4_xv6 lazy page allocation
- MIT6.828_HW5_xv6 CPU alarm
- MIT6.828_HW6_Threads and Locking
- MIT6.828_HW7_xv6 locking
- MIT6.828_HW8_User-level threads
- MIT6.828_HW9_barriers
- MIT6.828_HW10_Bigger file for xv6
- MIT6.828_HW11_xv6 log
3. JOS
以下是我實驗過程中記下的筆記,包含我的實現思路以及代碼。 不過有些重複的細節,我就沒有記錄,可以參考我的完整實現代碼。Github_SmallPond/MIT6.828_OS
- Lab1 Booting a PC
- LAB_1_Part1_PC Bootstrap
- LAB_1_Part2_The Boot Loader
- LAB1_Part3_The Kernel
- Lab2 Memory management
- LAB2_Part1_Physical Page Management
- LAB2_Part2_Virtual Memory
- LAB2_Part3_Kernel Address Space(內核地址空間)
- Lab3 User-Level Environments
- LAB3_User-Level Environments_PartA_User Environments and Exception Handling
- LAB3_User-Level Environments_PartB Page Faults, Breakpoints Exceptions, and System Calls
- Lab4 Preemptive Multitasking_
- LAB4_Preemptive Multitasking_PartA Multiprocessor Support and Cooperative Multitasking
- LAB4_Preemptive Multitasking_PartB Copy-on-Write Fork
- LAB4_Preemptive Multitasking_PartC Preemptive Multitasking and IPC
- Lab5 File system, Spawn and Shell
- Lab5_File system, Spawn and Shell
- Lab6 Network Driver
- Lab6_Network Driver
4. 參考文獻
- MIT 6.828 JOS 操作系統學習筆記/fatsheep9146,剛入門時參考,包括環境搭建。博文寫得十分詳細,可惜貌似只寫到了 Lab2。
- clpsz/mit-jos-2014,此大神放出了自己到 Lab4 的代碼,其文檔提及了一些細節,很有幫助。
- Unknown Unknown,過程較詳細(相當于對官方文檔做了一遍翻譯),英語不好可以參考這邊,但我還是建議以官方文檔爲主,畢竟英語還是要學好呀。這位大神做到了LAB5,但不包括HW。
- bysui的博客, 這位大神完成了全部的實驗,但是我在後面才發現這麽好的資源!
我的課程能順利完成,少不了各位大佬記錄下的實驗過程,由衷感謝以上各位大神。同時希望我也能幫到後來的學習者~