0%

rCore 第一阶段总结 by MuZhou233

第一阶段的主要学习内容是Rust语言、RISC-V的特权级机制和 rCore-Tutorial-Book,我因为已经接触过Rust语言,所以在开始的几天复习了Rust语言的基础知识,学习了RISC-V的特权级机制,主要的时间和精力花费在了 rCore 的学习上。

Rust

我个人是非常喜欢Rust语言的。Rust比起C语言拥有更强的抽象能力与安全检查能力,但又不会因此产生明显的运行时成本,这是Rust最吸引我的地方。
Rust的缺点也很明显,首当其冲的就是太新了以至于稳定版本不能满足系统内核的编程要求,每夜版的工具链升级没有向后兼容的保证,还是比较影响项目的长期维护的。
由于Rust强大的静态检查能力,在我做编程练习的过程中有很多 Bug 在运行前就解决了,节省了很多时间。

RISC-V

我听说 RISC-V 架构相比 Rust 还要早一些,但由于不知道如何上手,开发板也较 Arm 少见,所以在这次的活动才开始接触。经过了第一阶段的学习我对 RISC-V 的了解还很有限,我印象比较深刻的是特权级转换和虚拟地址部分。这两个对于操作系统来说都是非常基础重要的功能,我在此之前只是粗略地知道这种功能需要依赖硬件来实现,但通过学习我详细地了解到了“依赖硬件”的具体例子,比如操作系统需要按照MMU约定的数据结构维护页表。
因为我没有详细了解过其他的指令集架构,所以还没有像 Rust 那样感受到其特点或者优势。

rCore-Tutorial

其实我在半年之前就尝试学习过 rCore,但是当时发现 rCore-Tutorial 还在迭代新版本,自己的时间也不是很充足,就搁置了。这一次学习时我还留意对比了一下各个版本,发现最新的 rCore-Tutorial-Book-v3 相比之前,讲解部分更加详细了,各章的思路也有了逐步完善功能的探索感。

我的学习过程基本上是两天学习一章:

  1. 第一天主要是阅读 Tutorial-Book,遇到看不懂的部分就查资料。对于内容有整体的了解后将新增的代码合并到前一章的代码中,因为我在第一章的时候代码是自己编写的,而且想把每一章的编程练习中自己编写的代码都延续到后面章节,所以合并代码需要花费一些时间,我合并代码时就会在模块和函数层面上学习这一章的新内容。如果在合并完成后的代码还有不明白的部分我就会找到 Tutorial-Book 中对应的部分再学习。
  2. 第二天主要是继续对新增代码的理解,然后尝试完成编程练习,一般完成编程练习后对于代码就比较清楚了。之后我就整理之前查阅的资料,针对自己花费时间较多的部分写成笔记。

除了第四章花费了比较多的时间,我学习的前七个章节都还是比较顺利的,美中不足的是我感觉需要自己编程的代码量有点小(虽然各章的编程难度不同但是代码量都不是很大)。如果能够提供一些补全函数体、根据Trait补全结构体等编程内容,让我有一种跟着实验指导书的框架自己实现内核的感觉,我会更喜欢。