您當前的位置:首頁 > 舞蹈

rCore作業系統的學習之路(用rust從零開始寫一個作業系統)

作者:由 River 發表于 舞蹈時間:2021-12-04

感謝THU Rust operating system team的超級優秀的資源

斷斷續續的總算學完了rCore的全部內容(第0~7章 因為現在併發這一章還沒出完, 驅動相關可能以後有時間會學), 付出了很多時間, 收穫了很多知識。 最後做個彙總, 總結下學到的東西。

我的知識缺口 & 如何填充

OS理論基礎: 基本為0 (就是TLB都不知道是什麼的水平)

主: 要是透過實驗指導書學習 ;

次: 學堂線上基本看了前70%的影片 ; 略看了一遍 現代作業系統 ;

2。 彙編相關: 看過 x86從真實模式到保護模式

主: 計算機組成與設計 Risc-V版 彙編那一章; CS 61C 彙編相關內容

感覺彙編的知識也不需要太多, 只要瞭解基本的語法, 能看懂幾個 。S 就行

3。 RUST 0基礎(略有一點C++基礎)

主: RUST權威指南(也就是官方手冊中文版)

次: RUST程式設計之道

其實只看完官方手冊, 做rcore完全夠用

學習的方法

基本就是看指導書然後做實驗, 如果能把指導書的內容全部看懂, 後面的練習實現起來都會比較順手。 在看指導書的過程中遇到不懂的細節可以 不懂什麼查什麼 。

因為 rcore 一定程度上參考了 xv6, 所以有些問題在MIT 6。s081裡能找到答案。

課程實驗的內容個人感覺還是很多的, 做好連貫起來做, 因為一旦中斷又要從頭複習一遍比較難頂(曾經實驗間隔了三週, 前面學的忘了。。。 慘痛的教訓)

有實在看不懂的, 可以多看幾遍, 比如虛擬記憶體那一章, 大概看了兩三遍

學習的過程

第零章: OS基礎知識補充

第一章: 設定裸機情況下no_std程式的佈局, 並構建一個最小的可執行程式

第二章: 透過特權級機制, 實現了核心和應用的分離, 兩者透過sys_call進行互動, 引入了trap上下文切換的問題

第三章: 實現分時多工, 支援多個應用同時執行, 分時佔用CPU資源, 引入了任務切換的問題

第四章: 軟硬結合, 實現SV-39虛擬記憶體機制, 應用程序佈局 & 任務切換 & trap上下文切換等都因此改變。 本章的一些部分並不那麼顯然, 需要仔細摸索, 反覆學習

第五章: 引入更加完善的程序管理機制, 將任務的概念完善成了程序的概念, 比較難理解的是process上的idle流(編譯器 和 軟體共同完成切換)

第六章: 實現管道 & 郵箱, 支援父子程序之間 同步通訊, 任意程序間非同步通訊

第七章: 除虛擬記憶體外的第二個難點, 透過引入EFS檔案系統, 實現了與硬碟互動, 不再需要將應用硬編碼到核心資料段, 可以透過檔案系統載入資料。 並且透過實現 “< >”重定向符 、 連結等豐富了檔案系統的使用

學習收穫

不僅僅學習到了以上OS課程中的基礎知識, 更加擁有了透過應用程式看本質的意識和部分能力

至此,我們基本上完成了“霸王龍”作業系統,它具有UNIX的很多核心特徵,比如程序管理、虛存管理、檔案系統、管道、I/O重定向等,是一個典型的宏核心作業系統。雖然它還缺少很多最佳化的演算法、機制和策略,但我們已經一步一步地建立了一個相對完整的作業系統框架和核心模組實現。在這個過程中,我們經歷了從簡單到複雜的LibOS、批處理、多道程式、分時多工、虛存支援、程序支援、檔案系統支援等各種作業系統的設計過程,相信同學對作業系統的總體設計也有了一個連貫的多層次的理解。