0%

2024秋冬季开源操作系统训练营第一、二阶段总结报告 - MawtoA

第一阶段

在参加训练营之前,我已经简单学习了一些 Rust 的相关知识,因此 Rustlings 我非常块的就完成了。在这个阶段的学习中,我复习了一些 Rust 的卖点,像是所有权和生命周期模型;除此之外也有一些新东西,尤其是宏和单元测试相关的内容,在之前的入门学习中我只是匆匆略过,到了现在才发现还有许多我没有关注到的重要的细节。

除了对 Rust 的学习,这个阶段对于我熟悉开发工具也提供了很大的帮助。由于学习时基本接触不到现代的项目开发,我对 git 这样的开发工具以及远程仓库、第三方库等等概念都没有了解。通过在设置 Rustling 的过程中反复使用各种命令、配置开发环境,我对接触大型项目也稍微自信起来了。

第二阶段

第二阶段对我就是非常大的挑战了。这次训练营可以说是我第一次接触操作系统底层,中间很多课程、作业也学的很辛苦,不过看着 ci 一片绿油油的 [PASS] 还是不由得感觉到一些成就感的。

这一阶段的学习我都是按照“看简略版教程 -> 看源代码 -> 参考完整版教程 -> 尝试实现 -> 看群友讨论难点”这样的节奏完成的。中间被别的事情占了一点时间,所以最后变得很仓促,好在是压线过关了,大概我的答案还有很多问题要我回去修改吧。

lab3 现在看来是其中最基础的一课了,不过刚拿到题目的时候还是让我面对着茫茫代码无从下手。现在想来,这一章最重要的就是推动我大胆行动,不要害怕动已经写好的部分。后面的作业很多需要跨越好几级抽象直接在系统最底层的部分做改动,如果还是按照学校里对着函数填空的思维去做是不可能有办法的。

lab4 主要关注的是“地址空间”抽象,对于写习惯了应用软件的人来说“解引用指针”突然变成了一个要跨越页面页帧、从好几层字典树中查表的行为,算是一个不小的跨度了,从群友的反馈来看这一篇作业也有一定难度。不过系统已经完成的部分中其实有许多可以类比推广的部分,比如 translated_byte_buffer 的实现稍加修改就能够变成“解引用指针”的 translated_refmut,像是作业中的其它部分也有类似的部分可以借鉴。

lab5sys_spawn 可以参考 fork 和 exec 两大函数比较轻松的写完,不过 stride 算法就有一些难度了。说实话由于测例无法涵盖算法的所有问题,我在写这一段的时候也是一头雾水,到现在也不知道自己写的有没有问题。

lab6 是我认为这次作业的另一大难点,文件系统的几个 Inode 一开始让我陷入了混乱,不知不觉就把该磁盘上修改的节点修改到抽象节点上了。最后的实现也有一些偷懒的地方,链接没有和文件分开,擦除链接也有点粗暴,不过我想几个关键的思考方向我是没有搞错的。

lab8 虽然指导我使用银行家算法,但我的实现采用的是维护资源图、尝试解锁时寻找环的思路,好在从最后的结果来看我想应该是没有太大的问题的。

最后还是很幸运能通过这一阶段的训练营,感觉这两个月因为训练营过的非常充实,也对自己以后很可能投入的领域有了真正的了解,希望能带着这些收获继续走下去吧。