1. 簡(jiǎn)介
rCore教程旨在一步一步展示如何從零開(kāi)始用Rust語(yǔ)言寫(xiě)一個(gè)基于RISC-V架構(gòu)的類 Unix 內(nèi)核。值得注意的是, 本項(xiàng)目不僅支持模擬器環(huán)境(如Qemu/terminus 等),還支持在真實(shí)硬件平臺(tái) Kendryte K210 上運(yùn)行。
1.1 為什么要學(xué)習(xí)操作系統(tǒng)?
一名程序員的絕大部分工作都是在操作系統(tǒng)上面進(jìn)行的。學(xué)習(xí)操作系統(tǒng),深入了解操作系統(tǒng)原理,是每個(gè)合格的程序員必須要經(jīng)歷的。很多人學(xué)習(xí) Rust 語(yǔ)言感到很吃力,基本上就是因?yàn)椴僮飨到y(tǒng)基礎(chǔ)知識(shí)薄弱造成的。通過(guò)自己實(shí)現(xiàn)一個(gè)操作系統(tǒng),可以讓你對(duì)操作系統(tǒng)的理解不僅僅是停留在概念上。而且用 Rust 實(shí)現(xiàn)操作系統(tǒng),對(duì)于 Rust 愛(ài)好者來(lái)說(shuō),更有意思。---上面應(yīng)該是Rust大牛張漢東說(shuō)的。
學(xué)習(xí)OS只是想更加了解Linux對(duì)當(dāng)前工作輔助,可以參考我之前的一個(gè)文章介紹Linux 0.11的:os內(nèi)核入門-linux0.11編譯介紹。相對(duì)來(lái)說(shuō)rCore更加學(xué)術(shù)前沿一些,關(guān)于學(xué)術(shù)和一個(gè)公司商用的技術(shù),可能大家會(huì)有很多誤解,一般在醫(yī)學(xué)領(lǐng)域科研可能領(lǐng)先應(yīng)用50年左右,計(jì)算機(jī)領(lǐng)域也可能領(lǐng)先15年左右。舉個(gè)例子之前介紹的seL4微內(nèi)核是一個(gè)學(xué)術(shù)性很先進(jìn)的OS,十幾年前開(kāi)發(fā)出來(lái)的,現(xiàn)在還沒(méi)大規(guī)模應(yīng)用。
1.2 目前常見(jiàn)的操作系統(tǒng)內(nèi)核都是基于 C 語(yǔ)言的,為何要推薦 Rust 語(yǔ)言?
事實(shí)上,C 語(yǔ)言就是為寫(xiě) UNIX 而誕生的。Dennis Ritchie 和 KenThompson 沒(méi)有期望設(shè)計(jì)一種新語(yǔ)言能幫助高效地開(kāi)發(fā)復(fù)雜與并發(fā)的操作系統(tǒng)邏輯(面向未來(lái)),而是希望用一種簡(jiǎn)潔的方式來(lái)代替難以使用的匯編語(yǔ)言抽象出計(jì)算機(jī)的行為,便于編寫(xiě)控制計(jì)算機(jī)硬件的操作系統(tǒng)(符合當(dāng)時(shí)實(shí)際情況)。
C 語(yǔ)言的指針既是天使又是魔鬼。它靈活且易于使用,但語(yǔ)言本身幾乎不保證安全性,且缺少有效的并發(fā)支持。這導(dǎo)致內(nèi)存和并發(fā)漏洞成為當(dāng)前基于 C 語(yǔ)言的主流操作系統(tǒng)的噩夢(mèng)。
Rust 語(yǔ)言具有與 C 一樣的硬件控制能力,且大大強(qiáng)化了安全編程和抽象編程能力。從某種角度上看,新出現(xiàn)的 Rust 語(yǔ)言的核心目標(biāo)是解決 C 的短板,取代 C 。所以用 Rust 寫(xiě) OS 具有很好的開(kāi)發(fā)和運(yùn)行體驗(yàn)。
用 Rust寫(xiě) OS 的代價(jià)僅僅是學(xué)會(huì)用 Rust 編程。
----上面摘自書(shū)中描述,下面講點(diǎn)我對(duì)Rust的理解。
計(jì)算機(jī)技術(shù)的發(fā)展還算比較快,在這個(gè)過(guò)程中軟件技術(shù)一直在更新,有的是因?yàn)橐m應(yīng)硬件,有的是要適應(yīng)人類的需求,涌現(xiàn)出了大批的技術(shù),最常見(jiàn)的是我們的桌面OS,還有很多桌面應(yīng)用,這些大多是面向?qū)ο蟮?a href="http://www.asorrir.com/tags/C++/" target="_blank">C++、Java、Object-c實(shí)現(xiàn)的,還有一些嵌入式設(shè)備,沒(méi)有界面的,大部分用c語(yǔ)言這種面向過(guò)程的語(yǔ)言實(shí)現(xiàn);網(wǎng)址網(wǎng)頁(yè)的應(yīng)用更多用一些腳本語(yǔ)言,例如php js python去實(shí)現(xiàn);還有一些人工智能的應(yīng)用可能用一些偏向算法的語(yǔ)言,例如matlab去實(shí)現(xiàn);一些服務(wù)器上運(yùn)行的程序可能需要并發(fā)支持強(qiáng)的Go語(yǔ)言去實(shí)現(xiàn),也適應(yīng)多核CPU的硬件設(shè)計(jì)理念。這么多語(yǔ)言,就像一個(gè)江湖,里面有很多門派,如果要新搞一個(gè)門派,那一定需要博采眾長(zhǎng),成為一代宗師,厚積薄發(fā)才可以。
舉個(gè)游戲的例子,什么樣的游戲能受大眾的歡迎,“王者榮耀”可以說(shuō)是老少皆宜,其又可以追溯到Dota,Dota可以說(shuō)創(chuàng)造了此類玩法的流派,當(dāng)年Dota的發(fā)展就是一個(gè)很好的例子,首先用戶主導(dǎo),用戶給iceforge提需求想玩什么樣的角色,想玩什么的場(chǎng)景,然后不斷的更新英雄和地圖,英雄分三類:法師、力量型、敏捷型,基本涵蓋了玩游戲需求的場(chǎng)景,你是什么樣的性格就能找到自己對(duì)應(yīng)的玩法,如上圖中。可以說(shuō)Dota也是游戲領(lǐng)域的集大成者了。換個(gè)說(shuō)法就是“精益求精、持續(xù)改進(jìn)”。
所以現(xiàn)代的編程語(yǔ)言是一個(gè)可以一直演變的,今天新加了這個(gè)特性,明天又新加另外一個(gè)特性,才能保持活力,而古老的語(yǔ)言可能很久都不更新,也可能歷史的包袱太沉重,例如考慮兼容性和語(yǔ)言特長(zhǎng)已無(wú)法再進(jìn)行修改了。采眾之所長(zhǎng),可以說(shuō)是我對(duì)Rust的一大感觸,首先底座基于C/C++,加入面向?qū)ο蟮乃枷耄_本語(yǔ)言的思想,并發(fā)、安全等思想,可以說(shuō)是更高級(jí)的語(yǔ)言,包含了很多計(jì)算機(jī)技術(shù)的落地,所以對(duì)新手不友好,建議是多學(xué)幾門語(yǔ)言再學(xué)習(xí)Rust,就知道其好處了。缺點(diǎn)肯定也有,好的東西不是越多越好,可能會(huì)相互沖突,并且會(huì)造成不穩(wěn)定因素,更重要的是其弱小的時(shí)候得不到充分的驗(yàn)證,有點(diǎn)像學(xué)術(shù)性的東西,大家也多抱觀望態(tài)度。就像上圖中畫(huà)的Rust吉祥物,一個(gè)大螃蟹:想橫著走,但是還需要第一個(gè)愿意吃螃蟹的人。
關(guān)于Rust的名字的來(lái)源:
rust直譯過(guò)來(lái)是一類真菌(中文中叫植物銹病的不少都是這類真菌造成的,如上圖中),關(guān)于Rust的由來(lái)有很多說(shuō)法:
直接因素是Mozilla公司和Chrome是對(duì)頭,chrome是鉻金屬,那么就需要Rust去腐蝕。
我更喜歡的解釋是:
這類真菌生物結(jié)構(gòu)上沒(méi)有一個(gè)中心點(diǎn),而是完全分布式的.是空間上無(wú)單點(diǎn)失敗的(想象下人類腦袋心臟隨便哪塊掉),非常魯棒.
這類真菌的生命周期中有五種形態(tài)(像毛毛蟲(chóng)變蝴蝶這就是算有兩種形態(tài)),非常獨(dú)特,非常魯棒。有多獨(dú)特呢?筆者為了寫(xiě)這個(gè)答案,苦搜wiki,發(fā)現(xiàn)查出來(lái)的這五種形態(tài) Pycniospore, Aecium ,Urediniospore , Telium ,Basidium 中間三種都是這類真菌獨(dú)有的.
有多魯棒呢?作為真菌,五種生物形態(tài)下的rust中的2,3,5形態(tài)甚至還能往前倒退到之前的形態(tài)(真正的回到娘胎重造),做到了避免時(shí)間上的單點(diǎn)失敗
有多種生物形態(tài),也是映射Rust多范式的特點(diǎn)吧
這類真菌在寄生的時(shí)候甚至可以是多宿主的,而且能在宿主間切換,也是映射Rust對(duì)語(yǔ)言間互操作性的重視(想想除了D基本沒(méi)語(yǔ)言能跟C++好好互操作,都只能操作C,大家只能依賴SWIG這種技術(shù)再人為定義接口才行).
這類真菌有一個(gè)特性叫Dikaryon, 用采訪中說(shuō)的比喻就是類似當(dāng)想夫妻兩想生孩子時(shí)候,可以同步并行得看看到底兩人的后代能有多少種組合,這種繁殖時(shí)候的并行性,是又雙叒叕一層的保證rust菌生存的魯棒性
1.3 目前常見(jiàn)的指令集架構(gòu)是 x86 和 ARM ,為何要推薦 RISC-V ?
目前為止最常見(jiàn)的指令集架構(gòu)是 x86 和 ARM ,它們已廣泛應(yīng)用在服務(wù)器、臺(tái)式機(jī)、移動(dòng)終端和很多嵌入式系統(tǒng)中。由于它們的通用性和向后兼容性需求,需要支持非常多(包括幾十年前實(shí)現(xiàn))的軟件系統(tǒng)和應(yīng)用需求,導(dǎo)致這些指令集架構(gòu)越來(lái)越復(fù)雜。
x86 后向兼容的策略確保了它在桌面和服務(wù)器領(lǐng)域的江湖地位,但導(dǎo)致其丟不掉很多已經(jīng)比較過(guò)時(shí)的硬件設(shè)計(jì),讓操作系統(tǒng)通過(guò)冗余的代碼來(lái)適配各種新老硬件特征。
x86 和ARM 在商業(yè)上都很成功,其廣泛使用使得其 CPU 硬件邏輯越來(lái)越復(fù)雜,且不夠開(kāi)放,不能改變,不是開(kāi)源的,難以讓感興趣探索硬件的學(xué)生了解硬件細(xì)節(jié),在某種程度上讓CPU成為了一個(gè)黑盒子,并使得操作系統(tǒng)與硬件的交互變得不那么透明,增加了學(xué)習(xí)操作系統(tǒng)的負(fù)擔(dān)。
從某種角度上看,新出現(xiàn)的 RISC-V 的核心目標(biāo)是靈活適應(yīng)未來(lái)的AIoT(人工智能物聯(lián)網(wǎng), AI + IoT)場(chǎng)景,保證基本功能,提供可配置的擴(kuò)展功能。其開(kāi)源特征使得學(xué)生都可以深入CPU的運(yùn)行細(xì)節(jié),甚至可以方便地設(shè)計(jì)一個(gè) RISC-VCPU。從而可幫助學(xué)生深入了解操作系統(tǒng)與硬件的協(xié)同執(zhí)行過(guò)程。
編寫(xiě)面向 RISC-V 的 OS 的硬件學(xué)習(xí)代價(jià)僅僅是你了解 RISC-V 的 Supervisor特權(quán)模式,知道 OS 在 Supervisor 特權(quán)模式下的控制能力。
---上面還是書(shū)中的解釋,下面介紹點(diǎn)RISC-V的由來(lái)。
“芯片”是我國(guó)一個(gè)更大的痛點(diǎn),拋開(kāi)制造被美國(guó)各種卡脖子,在軟件指令集授權(quán)方面也是被交智商稅。你會(huì)說(shuō)我們很多公司都會(huì)設(shè)計(jì)芯片,例如華為的麒麟芯片,或者國(guó)內(nèi)大部分廠商都自己造了芯片,這只是表象,核心是基本都買的ARM的授權(quán),然后自己再改改。
先介紹下ARM,ARM指令集也是RISC精簡(jiǎn)指令集,目前已經(jīng)占領(lǐng)了大部分芯片市場(chǎng)。但是其商業(yè)模式是賣芯片設(shè)計(jì)的,授權(quán)費(fèi)相當(dāng)?shù)陌嘿F,有時(shí)要上千萬(wàn)美元,大企業(yè)還可以買,小公司就不行了,可以說(shuō)“天下苦ARM久已”。
美國(guó)的高校想用也要付費(fèi),RISC指令集的創(chuàng)始人加州大學(xué)伯克利分校的David Patterson教授自己想用都不行。2010年,加州大學(xué)伯克利分校的一個(gè)研究團(tuán)隊(duì)正在準(zhǔn)備啟動(dòng)一個(gè)新項(xiàng)目。在為新項(xiàng)目選擇指令集的時(shí)候,他們發(fā)現(xiàn),x86指令集被Intel控制得死死的,ARM指令集的授權(quán)費(fèi)又非常貴,MIPS、SPARC、PowerPC也存在知識(shí)產(chǎn)權(quán)問(wèn)題。在牛人眼中,這么小兒科的東西還要收錢,直接新搞一個(gè),并且使用BSDLicense開(kāi)源協(xié)議,硬件也開(kāi)源,沒(méi)錯(cuò)就是這么瘋狂,誰(shuí)想用誰(shuí)用,不用付費(fèi),并且新一代的設(shè)計(jì),吊打舊的技術(shù)。有點(diǎn)像Linus Torvalds當(dāng)年svn收費(fèi)還不好用直接開(kāi)發(fā)了一個(gè)git一樣。
RISC-V是因?yàn)槠淝伴_(kāi)發(fā)過(guò)四個(gè)版本,這是第五個(gè)版本。這么一個(gè)好東西,大家伙可以說(shuō)一擁而上,短短幾年的時(shí)間里,包括谷歌、華為、阿里、IBM、鎂光、英偉達(dá)、高通、三星、西部數(shù)據(jù)等商業(yè)公司,以及加州大學(xué)伯克利分校、麻省理工學(xué)院、普林斯頓大學(xué)、ETH Zurich、印度理工學(xué)院、洛倫茲國(guó)家實(shí)驗(yàn)室、新加坡南洋理工大學(xué)以及中科院計(jì)算所等學(xué)術(shù)機(jī)構(gòu),都紛紛加入RISC-V基金會(huì)。好處首先就是價(jià)格便宜,例如阿里的玄鐵開(kāi)發(fā)板不足百元,可以硬剛樹(shù)莓派幾百元的價(jià)格。真是學(xué)生都可以隨便買,真香系列如下圖:
RISC-V當(dāng)然作為新興的事物,也有缺點(diǎn),跟上面說(shuō)的Rust一樣,在發(fā)展的初期弱小的時(shí)候得不到充分驗(yàn)證,一些缺點(diǎn)也被ARM抨擊,但是還是要多一些包容,其還在改進(jìn)發(fā)展之中。作為“攪局者”,已經(jīng)把大旗插好了,就看大家的熱情了。
有興趣可以參考:https://zhuanlan.zhihu.com/p/73089738
2.課程介紹和代碼下載編譯運(yùn)行
2.1課程介紹
本小節(jié)調(diào)一點(diǎn)課程里面,剛開(kāi)始就介紹很精彩的部分,大家感受下。
操作系統(tǒng)抽象:
在計(jì)算機(jī)和操作系統(tǒng)的技術(shù)研究和發(fā)展的過(guò)程中,形成了一系列的核心(抽象)概念:執(zhí)行環(huán)境、進(jìn)程、地址空間和文件,這些奠定了操作系統(tǒng)內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)的基礎(chǔ)。
CPU在執(zhí)行過(guò)程中,可以在不同層次的執(zhí)行環(huán)境之間切換,這稱為執(zhí)行環(huán)境切換。執(zhí)行環(huán)境切換主要是通過(guò)特定的API或ABI來(lái)完成的,這樣不同執(zhí)行環(huán)境的軟件就能實(shí)現(xiàn)數(shù)據(jù)交換與互操作,而且還保證了彼此之間有清晰的隔離。對(duì)于應(yīng)用程序的執(zhí)行環(huán)境而言,應(yīng)用程序只能看到執(zhí)行環(huán)境直接提供給它的接口(API 或 ABI),這使得應(yīng)用程序所能得到的服務(wù)取決于執(zhí)行環(huán)境提供給它的訪問(wèn)接口。所以,操作系統(tǒng)可以看成是應(yīng)用程序執(zhí)行環(huán)境,其形態(tài)可以是一個(gè)庫(kù),也可以是一個(gè)虛擬機(jī)等,或者它們的某種組合形式。更清晰常見(jiàn)的形式如下圖:
應(yīng)用程序的內(nèi)存布局:
在上圖中可以看到,代碼部分只有代碼段.text一個(gè)段,存放程序的所有匯編代碼。而數(shù)據(jù)部分則還可以繼續(xù)細(xì)化:
已初始化數(shù)據(jù)段保存程序中那些已初始化的全局?jǐn)?shù)據(jù),分為.rodata和.data兩部分。前者存放只讀的全局?jǐn)?shù)據(jù),通常是一些常數(shù)或者是常量字符串等;而后者存放可修改的全局?jǐn)?shù)據(jù)。
未初始化數(shù)據(jù)段.bss保存程序中那些未初始化的全局?jǐn)?shù)據(jù),通常由程序的加載者代為進(jìn)行零初始化,即將這塊區(qū)域逐字節(jié)清零;
堆(heap)區(qū)域用來(lái)存放程序運(yùn)行時(shí)動(dòng)態(tài)分配的數(shù)據(jù),如 C/C++ 中的 malloc/new 分配到的數(shù)據(jù)本體就放在堆區(qū)域,它向高地址增長(zhǎng);
棧(stack)區(qū)域不僅用作函數(shù)調(diào)用上下文的保存與恢復(fù),每個(gè)函數(shù)作用域內(nèi)的局部變量也被編譯器放在它的棧幀內(nèi),它向低地址增長(zhǎng)。
2.2 環(huán)境搭建和代碼下載運(yùn)行
環(huán)境搭建主要是安裝Rust和qemu,參考:
http://rcore-os.cn/rCore-Tutorial-Book-v3/chapter0/5setup-devel-env.html
代碼下載參考第一章的代碼:
git clone https://github.com/rcore-os/rCore-Tutorial-v3.git cd rCore-Tutorial-v3 gitcheckoutch1 cd os makerun
打印的RUSTSBI是這個(gè)系統(tǒng)的BootLoader,也是用Rust語(yǔ)言寫(xiě)的。
關(guān)于rCore系統(tǒng)整體的介紹,可以參考清華王潤(rùn)基同學(xué)的畢業(yè)論文:
https://raw.githubusercontent.com/wiki/rcore-os/zCore/files/wrj-thesis.pdf
后記:
rCore也算是一個(gè)承前啟后的學(xué)習(xí)OS,可以學(xué)習(xí)OS的基本技術(shù),另外Rust和RISC-V屬于未來(lái)的前沿技術(shù),未來(lái)的OS很可能以此為根基。有一點(diǎn)rCore是一個(gè)宏內(nèi)核,這點(diǎn)不是太新穎,但是清華直接給補(bǔ)上了,下一篇會(huì)介紹更新的zCore。
審核編輯 :李倩
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7630瀏覽量
140235 -
UNIX
+關(guān)注
關(guān)注
0文章
296瀏覽量
42086
原文標(biāo)題:rCore入門-來(lái)自清華的OS前沿教程
文章出處:【微信號(hào):OS與AUTOSAR研究,微信公眾號(hào):OS與AUTOSAR研究】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
清華大學(xué)攜手華為打造業(yè)內(nèi)首個(gè)園區(qū)網(wǎng)絡(luò)智能體
2025年開(kāi)放原子校源行清華大學(xué)站成功舉辦
單模光纖os1和os2的區(qū)別分析
清華大學(xué)與華為啟動(dòng)“卓越中心”專項(xiàng)合作
清華大學(xué)發(fā)布:DeepSeek從入門到精通

清華大學(xué)自動(dòng)化系學(xué)子走進(jìn)華礪智行研學(xué)交流
清華大學(xué)DeepSeek指南:從入門到精通

AIGC入門及鴻蒙入門
美光科技一行走進(jìn)清華大學(xué)電子工程系
京微齊力受邀參加2024年清華大學(xué)工程博士論壇
愛(ài)芯元智受邀參加2024清華自動(dòng)化論壇
清華新力量,滬上芯征程!清華大學(xué)上海校友會(huì)半導(dǎo)體專委會(huì)2024思瑞浦迎新日

評(píng)論