0%

云微的 rCore 阶段性总结报告

前言

大家好,这里是云微(郑昱笙),非常高兴能参与到这次 os tutorial summer of code 的活动中来。我是一名浙江大学的18级本科生,其实很早就听说了rCore这样一个项目,也是机缘巧合在 github 上面随便逛逛的时候发现了它,就报名参加啦。

在参加这次活动之前,我对 rust 可以说是只闻其名,并没有过任何实际的了解;risc-v同样如此;在课程中了解过一些操作系统相关的原理,但也没有很完整的实践过程,虽然之前六月底的时候学了一点 mit 6.828 相关的内容(完成了前两个lab),但由于参加了这次活动就暂时没有继续。

总体上来说,这次的第一阶段学习过程还算顺利,正式学习了 rust 这样一门注重安全性的优秀现代语言,了解了 RISC-V 指令集的实现,也第一次完整地体验了一个简单操作系统的开发流程,对于相关原理的具体实现有了一个直观的理解。另外,这也是我第一次参与这样的社区活动,尝试作出了一点微小的贡献,也认识了好多非常厉害的大佬们,感觉收获还是非常丰盛的喵。

以下是每个阶段的总结,也希望和大家分享一些自己的学习经验。

自学rust编程

我自己的学习过程是阅读了《rust程序设计语言》以及一部分的《rust编程之道》,以及按照项目要求完成了 rustlings 以及一些笨办法系列和leetcode的练习。

从初学者的角度来说,感觉rust确实是一门入门难度非常高的语言,但在略微熟悉了它之后也必须承认它确实是一门非常适合于大型工程实践的优秀语言,严格的编译期检查保证了很多常见的错误几乎不可能发生,在不用 unsafe 代码的情况下。

rust 的基本语法难度不大,学习过程中大概主要需要注意的难点就是生命周期和所有权问题,以及对于后期操作系统的实践过程中,可能也会涉及到很大一部分关于裸指针和不安全代码、以及各种 trait 和适用的内置 api 接口,这部分可能需要去查阅相关的文档。

对于更进一步的学习,也许使用 rust 去完成一些数据结构的练习会比较不错 ———— 比如双向链表、二叉树、线段树等等什么的。

另外,对于这个项目而言,也许可以在基本掌握rust的语法之后就直接进入 lab0 lab1 的学习过程之中,通过大量阅读操作系统现有的代码来完成更进一步的学习(我就是这么做的)。

RISC-V 学习

这部分我参考的是《RISC-V 手册 一本开源指令集的指南》,大概花一天就能看完,基本了解 RISC-V 的相关概念。这大概得益于它简洁性、模块化的设计理念,它也确实是一个非常现代化也非常年轻的指令集,虽然现在还没有得到大规模的使用,但感觉以后应该会越来越广泛的。

之前在学校学习的是 MIPS 指令集,二者还是有很大相似之处的。

对于我们操作系统的实践而言,主要需要关注的就是特权架构相关的部分,包括机器模式、监管者模式、用户模式,异常处理,以及虚拟内存和分页方案的部分。不过这些东西后面的文档里面也会有提及。

rCore Tutorial 实验部分

这部分是整个活动的核心,我目前的完成情况是根据实验指导一步步完成了整个操作系统的搭建过程,另外也完成了目前的实验题目;接下来有设想了一些可能的改进方案,但感觉关于具体的实践设计还是缺乏一些相关的知识和参考,所以这两天也在尝试阅读 rCore 和 zCore 的源代码,希望能先多了解一些具体地操作系统的实践知识,免得做一些没有意义的工作。

目前实验指导的文档已经比较详细了,但可能还是有一些细节方面和最终完成的代码会有一点出入,尤其是后半部分感觉省略掉的内容还是比较多的,可能要结合源代码来阅读(对于想要自己实现但又没有太多操作系统和rust编程经验的同学可能不太友好);但总体来说还是可以很清晰的了解到操作系统构建起来的整个过程。

实验题本身难度应该不算太大,也可以尽量避免使用 Unsafe Rust 的地方(比如在实验二中可以尝试使用数组代替需要动态分配空间的部分),但对于深入理解操作系统的的构成还是有非常大帮助和必要的。

一些感想

  • rust 目前还是有一些功能可能还不太成熟,但已经有很棒的相关生态圈了;
  • 在经历过入门阶段和编译器殊死搏斗的过程之后,大概就能慢慢体会到 rust 的优美之处了;
  • 操作系统的开发看起来是一件非常有趣的事情,希望能通过阶段一的考核,继续阶段二;
  • 实验的相关设计和文档还是很完善的,通过开源社区提供的很多工具把一些和操作系统核心关联并不是很紧密的部分封装起来(比如驱动、BootLoader),使初学者不会那么容易被复杂的接口搞迷糊掉(这也得益于rust强大的抽象能力,还是零开销的);
  • 采用 rust 的对象封装来使用 rust 的自动回收机制是个非常好的设计,但有可能也使得封装略微复杂了一些;
  • 开源社区的氛围还是非常不错的,这里的老哥个个都是人才,说话又好听;
  • 如果要在操作系统方向进行更深入的探索,也许还是需要多学习一些其他的操作系统设计架构进行对比,目前在尝试阅读 rCore 的部分源码,也在看学堂在线的《Linux 内核分析与应用》课程;之前 mit 6.828 做了一半的实验也打算继续完成;

链接