rCore入门-来自清华的OS前沿教程

张开发
2026/4/17 3:44:15 15 分钟阅读

分享文章

rCore入门-来自清华的OS前沿教程
如果你想找一个介绍**操作系统**很**专业**又**前沿**的课程进行系统的学习那么本篇文章会让你找到答案**清华陈渝**老师的国家级精品**OS课程rCore**。 rCore可以说算是**国内顶尖**操作系统课程按照**清华本科生**的水准打牢OS坚实的基础。另外每年会举行清华的**夏令营**活动https://github.com/rcore-os/rCore/wiki/os-tutorial-summer-of-code-2021先看下这个夏令营的支持与合作单位**鹏城实验室**、清华大学、CSDN、极客帮、infoQ、麒麟软件都是响当当的。技术指导委员会也是学术**领头人物**和一些**技术大牛**。在目前国家层面**工信部**大力发展OS的背景下这个组织应该培训了很多OS的人才。rCore****教程http://rcore-os.cn/rCore-Tutorial-Book-v3/index.html教程****源码https://github.com/rcore-os/rCore-Tutorial-v31. 简介rCore教程旨在一步一步展示如何**从零开始** 用 **Rust** 语言写一个基于**RISC-V** 架构的**类 Unix 内核**。值得注意的是 本项目不仅支持**模拟器**环境如Qemu/terminus 等还支持在**真实硬件**平台 Kendryte K210 上运行。1.1 为什么要学习操作系统一名程序员的绝大部分工作都是在**操作系统**上面进行的。学习操作系统深入了解操作系统**原理**是每个合格的程序员必须要经历的。很多人学习 Rust 语言感到很吃力基本上就是因为操作系统**基础知识薄弱**造成的。通过自己实现一个操作系统可以让你对操作系统的理解不仅仅是停留在**概念**上。而且用 Rust 实现操作系统对于 Rust 爱好者来说更有意思。---上面应该是Rust大牛**张汉东**说的。 学习OS只是想更加了解Linux对当前工作辅助可以参考我之前的一个文章介绍**Linux 0.11**的[os内核入门-linux0.11编译介绍](http://mp.weixin.qq.com/s?__bizMzUzMDMwNTg2Nwmid2247483735idx1snd01ef5edabd95e70b8ec3551c07be260chksmfa528773cd250e65e9a62c9ea31f656804cb0540e349bb342bc13cb01aff98aef54a61e0d593scene21#wechat_redirect)。相对来说**rCore**更加**学术前沿**一些关于**学术**和一个公司**商用**的技术可能大家会有很多误解一般在医学领域科研可能领先应用50年左右计算机领域也可能领先**15年左右**。举个例子之前介绍的seL4微内核是一个学术性很先进的OS十几年前开发出来的现在还没大规模应用。1.2 目前常见的操作系统内核都是基于 C 语言的为何要推荐 Rust 语言事实上C 语言就是为写 UNIX 而诞生的。Dennis Ritchie 和 KenThompson 没有期望设计一种新语言能帮助高效地开发复杂与并发的操作系统逻辑(面向未来)而是希望用一种简洁的方式来代替难以使用的汇编语言抽象出计算机的行为便于编写控制计算机硬件的操作系统符合当时实际情况。C 语言的指针既是天使又是魔鬼。它灵活且易于使用但语言本身几乎不保证安全性且缺少有效的并发支持。这导致内存和并发漏洞成为当前基于 C 语言的主流操作系统的噩梦。Rust 语言具有与 C 一样的硬件控制能力且大大强化了安全编程和抽象编程能力。从某种角度上看新出现的 Rust 语言的核心目标是解决 C 的短板取代 C 。所以用 Rust 写 OS 具有很好的开发和运行体验。用 Rust写 OS 的代价仅仅是学会用 Rust 编程。----上面摘自书中描述下面讲点我对Rust的理解。计算机技术的发展还算比较快在这个过程中软件技术一直在更新有的是因为要适应硬件有的是要适应人类的需求涌现出了大批的技术最常见的是我们的桌面OS还有很多桌面应用这些大多是面向对象的C、****Java、Object-c实现的还有一些嵌入式设备没有界面的大部分用c语言这种面向过程的语言实现网址网页的应用更多用一些脚本语言例如php js python去实现还有一些人工智能的应用可能用一些偏向算法的语言例如matlab去实现一些服务器上运行的程序可能需要并发支持强的Go语言去实现也适应多核CPU的硬件设计理念。这么多语言就像一个江湖里面有很多门派如果要新搞一个门派那一定需要博采众长成为一代宗师厚积薄发才可以。举个**游戏**的例子什么样的游戏能受**大众**的欢迎“**王者荣耀**”可以说是**老少皆宜**其又可以追溯到**Dota**Dota可以说创造了此类玩法的流派当年Dota的发展就是一个很好的例子首先**用户主导**用户给iceforge提需求想玩什么样的角色想玩什么的场景然后不断的**更新英雄和地图**英雄分三类法师、力量型、敏捷型基本涵盖了玩游戏需求的**场景**你是什么样的**性格**就能找到自己对应的**玩法**如上图中。可以说Dota也是游戏领域的**集大成者**了。换个说法就是“**精益求精****、****持续改进**”。所以现代的编程语言是一个可以一直**演变**的今天新加了这个特性明天又新加另外一个特性才能保持**活力**而古老的语言可能很久都不更新也可能**历史的包袱**太沉重例如考虑兼容性和语言特长已无法再进行修改了。**采众之所长**可以说是我对Rust的一大感触首先底座**基于C/C**加入面向对象的思想脚本语言的思想并发、安全等思想可以说是**更高级的语言**包含了很多计算机技术的落地所以对新手不友好建议是多学几门语言再学习Rust就知道其好处了。**缺点**肯定也有好的东西不是越多越好可能会相互冲突并且会造成**不稳定**因素更重要的是其弱小的时候得不到充分的**验证**有点像学术性的东西大家也多抱观望态度。就像上图中画的**Rust吉祥物**一个**大螃蟹**想横着走但是还需要第一个愿意吃螃蟹的人。关于Rust的名字的来源rust直译过来是一类真菌(中文中叫植物锈病的不少都是这类真菌造成的如上图中)关于Rust的由来有很多说法直接因素是Mozilla公司和Chrome是对头chrome是铬金属那么就需要Rust去**腐蚀。**我更喜欢的解释是这类真菌生物结构上没有一个中心点,而是完全分布式的.是空间上无单点失败的(想象下人类脑袋心脏随便哪块掉),非常鲁棒.这类真菌的生命周期中有五种形态(像毛毛虫变蝴蝶这就是算有两种形态),非常独特,非常鲁棒。有多独特呢?笔者为了写这个答案,苦搜wiki,发现查出来的这五种形态 Pycniospore, Aecium ,Urediniospore , Telium ,Basidium 中间三种都是这类真菌独有的.有多鲁棒呢?作为真菌,五种生物形态下的rust中的2,3,5形态甚至还能往前倒退到之前的形态(真正的回到娘胎重造),做到了避免时间上的单点失败有多种生物形态,也是映射Rust多范式的特点吧这类真菌在寄生的时候甚至可以是多宿主的,而且能在宿主间切换,也是映射Rust对语言间互操作性的重视(想想除了D基本没语言能跟C好好互操作,都只能操作C,大家只能依赖SWIG这种技术再人为定义接口才行).这类真菌有一个特性叫Dikaryon, 用采访中说的比喻就是类似当想夫妻两想生孩子时候,可以同步并行得看看到底两人的后代能有多少种组合,这种繁殖时候的并行性,是又双叒叕一层的保证rust菌生存的鲁棒性有兴趣参考https://www.zhihu.com/question/500640191.3 目前常见的指令集架构是 x86 和 ARM 为何要推荐 RISC-V 目前为止最常见的指令集架构是 x86 和 ARM 它们已广泛应用在服务器、台式机、移动终端和很多嵌入式系统中。由于它们的通用性和向后兼容性需求需要支持非常多包括几十年前实现的软件系统和应用需求导致这些指令集架构越来越复杂。x86 后向兼容的策略确保了它在桌面和服务器领域的江湖地位但导致其丢不掉很多已经比较过时的硬件设计让操作系统通过冗余的代码来适配各种新老硬件特征。x86 和ARM 在商业上都很成功其广泛使用使得其 CPU 硬件逻辑越来越复杂且不够开放不能改变不是开源的难以让感兴趣探索硬件的学生了解硬件细节在某种程度上让CPU成为了一个黑盒子并使得操作系统与硬件的交互变得不那么透明增加了学习操作系统的负担。从某种角度上看新出现的 RISC-V 的核心目标是灵活适应未来的AIoT人工智能物联网, AI IoT场景保证基本功能提供可配置的扩展功能。其开源特征使得学生都可以深入CPU的运行细节甚至可以方便地设计一个 RISC-V CPU。从而可帮助学生深入了解操作系统与硬件的协同执行过程。编写面向 RISC-V 的 OS 的硬件学习代价仅仅是你了解 RISC-V 的 Supervisor特权模式知道 OS 在 Supervisor 特权模式下的控制能力。—上面还是书中的解释下面介绍点RISC-V的由来。“芯片”是我国一个更大的痛点抛开制造被美国各种卡脖子在软件指令集授权方面也是被交智商税。你会说我们很多公司都会设计芯片例如华为的麒麟芯片或者国内大部分厂商都自己造了芯片这只是表象核心是基本都买的ARM的授权然后自己再改改。先介绍下ARMARM指令集也是**RISC精简指令集**目前已经占领了大部分芯片市场。但是其商业模式是**卖芯片设计**的授权费相当的昂贵有时要上千万美元大企业还可以买小公司就不行了可以说 “**天下苦ARM久已**”。美国的高校想用也要付费RISC指令集的**创始人****加州大学伯克利分校**的**David Patterson教授**自己想用都不行。2010年加州大学伯克利分校的一个研究团队正在准备启动一个新项目。在为新项目选择指令集的时候他们发现**x86**指令集被Intel控制得死死的**ARM**指令集的授权费又非常贵**MIPS、SPARC、PowerPC**也存在知识产权问题。在牛人眼中这么小儿科的东西还要收钱直接**新搞一个**并且使用**BSD** License开源协议硬件也开源没错就是这么疯狂**谁想用谁用不用付费**并且新一代的设计吊打旧的技术。有点像Linus Torvalds当年svn收费还不好用直接开发了一个git一样。 RISC-V是因为其前开发过四个版本这是**第五个版本**。这么一个好东西大家伙可以说**一拥而上**短短几年的时间里包括谷歌、华为、阿里、IBM、镁光、英伟达、高通、三星、西部数据等商业公司以及加州大学伯克利分校、麻省理工学院、普林斯顿大学、ETH Zurich、印度理工学院、洛伦兹国家实验室、新加坡南洋理工大学以及中科院计算所等学术机构都纷纷加入RISC-V基金会。好处首先就是**价格便宜**例如阿里的玄铁开发板**不足百元**可以**硬刚**树莓派几百元的价格。真是学生都可以随便买**真香系列**如下图RISC-V当然作为新兴的事物也有缺点跟上面说的Rust一样在发展的初期**弱小**的时候得不到充分**验证**一些缺点也被ARM抨击但是还是要多一些包容其还在改进发展之中。作为“**搅局者**”已经把大旗插好了就看大家的热情了。有兴趣可以参考https://zhuanlan.zhihu.com/p/730897382. 课程介绍和代码下载编译运行2.1 课程介绍本小节调一点课程里面刚开始就介绍很精彩的部分大家感受下。操作系统抽象在计算机和操作系统的技术研究和发展的过程中形成了一系列的核心抽象概念**执行环境、进程、地址空间和文件**这些奠定了操作系统内核设计与实现的基础。CPU在执行过程中可以在不同层次的**执行环境**之间切换这称为 执行环境切换 。执行环境切换主要是通过特定的 **API** 或 **ABI** 来完成的这样不同执行环境的软件就能实现数据交换与互操作而且还保证了彼此之间有清晰的**隔离**。对于应用程序的执行环境而言应用程序只能看到执行环境直接提供给它的接口API 或 ABI这使得应用程序所能得到的服务取决于执行环境提供给它的**访问接口**。所以操作系统可以看成是应用程序执行环境其形态可以是一个库也可以是一个虚拟机等或者它们的某种组合形式。更清晰常见的形式如下图应用程序的内存布局在上图中可以看到代码部分只有代码段**.text** 一个段存放程序的所有汇编代码。而数据部分则还可以继续细化已初始化数据段保存程序中那些已初始化的全局数据分为.rodata 和 .data两部分。前者存放只读的全局数据通常是一些常数或者是 常量字符串等而后者存放可修改的全局数据。未初始化数据段.bss保存程序中那些未初始化的全局数据通常由程序的加载者代为进行零初始化即将这块区域逐字节清零堆 heap区域用来存放程序运行时动态分配的数据如 C/C 中的 malloc/new 分配到的数据本体就放在堆区域它向高地址增长栈 stack区域不仅用作函数调用上下文的保存与恢复每个函数作用域内的局部变量也被编译器放在它的栈帧内它向低地址增长。2.2 环境搭建和代码下载运行环境搭建主要是安装Rust和qemu参考http://rcore-os.cn/rCore-Tutorial-Book-v3/chapter0/5setup-devel-env.html代码下载参考第一章的代码gitclone https://github.com/rcore-os/rCore-Tutorial-v3.gitcdrCore-Tutorial-v3gitcheckout ch1cdosmakerun打印的RUSTSBI是这个系统的BootLoader也是用Rust语言写的。关于rCore系统整体的介绍可以参考清华王润基同学的毕业论文https://raw.githubusercontent.com/wiki/rcore-os/zCore/files/wrj-thesis.pdf后记rCore也算是一个**承前启后**的学习OS可以学习OS的**基本技术**另外Rust和RISC-V属于未来的**前沿技术**未来的OS很可能以此为根基。有一点rCore是一个**宏内核**这点不是太新颖但是清华直接给补上了下一篇会介绍更新的**zCore**。“啥都懂一点啥都不精通干啥都能干干啥啥不是专业入门劝退堪称程序员杂家”。后续会继续更新纯干货分析无广告不打赏欢迎转载欢迎评论交流“那路谈OS与SoC嵌入式软件”欢迎关注个人文章汇总https://thatway1989.github.io

更多文章