操作系統的基本原理與簡單實現
--基於ucore OS + RISC-V
30240243X 操作系統
早期開放開源的UNIX操作系統和MIT教授 Frans Kaashoek 等基於UNIX v6設計的xv6操作系統給了我們啟發,但x86相對封閉&復雜和有一定歷史包袱的CPU硬件接口給OS學習帶來了一定的挑戰。1980年前后,UC Berkeley的Dave Patterson主導了Berkeley RISC項目並設計了其第一代的處理器RISC I,並在2014年發展到了開放&開源的第五代指令集架構RISC-V。以簡潔的RISC-V CPU為底層硬件基礎,設計並實現一個微型但全面的“麻雀”操作系統—ucore。
MIT的Frans Kaashoek等在2006年參考PDP-11上的UNIX Version 6寫了一個可在X86上跑的操作系統xv6(基於MIT License),用於學生學習操作系統。我們可以站在他們的肩膀上,基於xv6的設計,嘗試着一步一步完成一個從“空空如也”到“五臟俱全”的“麻雀”操作系統—ucore,此“麻雀”包含虛存管理、進程管理、處理器調度、同步互斥、進程間通信、文件系統等主要內核功能,總的內核代碼量(C+asm)不會超過5K行。充分體現了“小而全”的指導思想。
ucore的運行環境可以是真實的X86計算機,不過考慮到調試和開發的方便,我們可采用X86硬件模擬器,比如QEMU、BOCHS、VirtualBox、VMware Player等。ucore的開發環境主要是GCC中的gcc、gas、ld和MAKE等工具,也可采用集成了這些工具的IDE開發環境Eclipse-CDT等。在分析源代碼上,可以采用Scitools提供的understand軟件(跨平台),windows環境上的source insight軟件,或者基於emacs+ctags,vim+ctags等,都可以比較方便在在一堆文件中查找變量、函數定義、調用/訪問關系等。軟件開發的版本管理可以采用GIT、SVN等。比較文件和目錄的不同可發現不同實驗中的差異性和進行文件合並操作,可使用meld、kdiff3、UltraCompare等軟件。調試(deubg)實驗有助於發現設計中的錯誤,可采用gdb(配合qemu)等調試工具軟件。並可整個實驗的運行環境和開發環境既可以在Linux或Windows中使用。推薦使用Linux環境。
根據一個操作系統的設計實現過程,可以有如下的實驗步驟:
- 啟動操作系統的bootloader,用於了解操作系統啟動前的狀態和要做的准備工作,了解運行操作系統的硬件支持,操作系統如何加載到內存中,理解兩類中斷--“外設中斷”,“陷阱中斷”等;
- 物理內存管理子系統,用於理解x86分段/分頁模式,了解操作系統如何管理物理內存;
- 虛擬內存管理子系統,通過頁表機制和換入換出(swap)機制,以及中斷-“故障中斷”、缺頁故障處理等,實現基於頁的內存替換算法;
- 內核線程子系統,用於了解如何創建相對與用戶進程更加簡單的內核態線程,如果對內核線程進行動態管理等;
- 用戶進程管理子系統,用於了解用戶態進程創建、執行、切換和結束的動態管理過程,了解在用戶態通過系統調用得到內核態的內核服務的過程;
- 處理器調度子系統,用於理解操作系統的調度過程和調度算法;
- 同步互斥與進程間通信子系統,了解進程間如何進行信息交換和共享,並了解同步互斥的具體實現以及對系統性能的影響,研究死鎖產生的原因,以及如何避免死鎖;
- 文件系統,了解文件系統的具體實現,與進程管理等的關系,了解緩存對操作系統IO訪問的性能改進,了解虛擬文件系統(VFS)、buffer cache和disk driver之間的關系。
其中每個開發步驟都是建立在上一個步驟之上的,就像搭積木,從一個一個小木塊,最終搭出來一個小房子。在搭房子的過程中,完成從理解操作系統原理到實踐操作系統設計與實現的探索過程。這個房子最終的建築架構和建設進度如下圖所示:

圖1 ucore系統結構圖
版權信息
ucore OS是用於清華大學計算機系本科操作系統課程的OS教學試驗內容。 ucore OS起源於MIT CSAIL PDOS課題組開發的xv6&jos、哈佛大學開發的 OS161教學操作系統、以及Linux-2.4內核。
ucore OS中包含的xv6&jos代碼版權屬於Frans Kaashoek, Robert Morris, and Russ Cox,使用MIT License。ucore OS中包含的OS/161代碼版權屬於 David A. Holland。其他代碼版權屬於陳渝、王乃崢、向勇,並采用GPL License. ucore OS相關的文檔版權屬於陳渝、向勇,並采用 Creative Commons Attribution/Share-Alike (CC-BY-SA) License.
