先说说为什么会参加这个训练营。
起因是在配置arch linux的过程中用到了很多rust写的工具,而且这些工具用起来非常顺手,引起了我对rust的兴趣。在看完《Rust 程序设计语言 中文版》后,我开始寻找一个rust相关的项目练手。正好在知乎上看到有人推荐rcore,加上之前写过xv6(s081),对操作系统有不小的兴趣,就这样开启了这段rocre之旅。
第一阶段
这一阶段主要是熟悉rust语言。
由于我有java、python的语言基础,这一阶段还是比较轻松的。
难点是在写链表时因为有所有权限制,要对node作多层包装。刚开始写时并不顺利,其他语言的基础成了障碍,总是会按python的写法往下写,导致所有权出问题。直到真正理解所有权的含义才写出正确的代码。
所有权是我第一次真切感受到rust和其他语言的不同,它把一些原来从未考虑的可能出现的数据竞争提前暴露出来,迫使编写者去思考数据关系,这种体验是从未有过的。
第二阶段
受益于xv6,第二阶段的实验基本没有卡点。这些实验让我深入理解了riscv的trap、页表等机制,重新梳理了操作系统的进程切换、文件系统等相关知识。
第三阶段
这一阶段的实验比第二阶段的实验要难一些,花费的时间也更多。
对于hashmap这个实验,我自己实现了一个固定buckets的hashmap,但看到blog中大家基本是引网上的包,感觉自己有些笨笨的,还是要多和群友交流。
后面在mmap这个实验卡了很久,一直在想怎么实现文件的lazy load和对应,最后是面向测例编程,直接文件内容读到内存中通过测例完事。