前言
其实在笔者去年大二的时候,就了解了一些系统赛和rCore的相关信息,当时人比现在少很多,笔者也因为课业压力很早就放弃了。今年虽然同样有些别的事要忙,但是也各抽出一周写了前两个阶段。
在此期间,充分感受到了rust的优势,如果换成cpp的话我可能早就放弃或者早就做完了(x,rust有一种被编译器推着前行的感觉,并且rcore的代码组织相当优秀,无论是抽象层还是语法设计,都十分值得学习。
rustlings
第一阶段是来自rust官方社区的rustlings语法练习,并且经过了一定的增加,加了一些用得到的数据结构算法内容。总体没有什么难度,也并不需要完全弄懂,起到了一个入门的作用。所有权,生命周期,泛型之前就在moderncpp中有所涉猎,所以理解起来没有遇到什么困难。
rCore
整个第二阶段的质量相当高,除了视频以外可以说感觉做下来不逊于6.1810,题目相当的有代表性并且需要读懂很多部分的代码才能获取正确的思路,起到了很好的引导作用。
ch3
ch3的潜在难度在于内核栈较小导致无法直接传递较大的数组,导致只能通过引用来传递,即使这里并不涉及地址变换。如果在ch3中遇到了这个坑,就更能理解后续页表的意义。
ch4
ch4中带领入门了段页式的页表和页帧。需要正确掌握好页表和物理页帧的对应关系,确保这两者是同步的而且是有效的。
ch5
ch5的编码量较少,只需要找到正确的地方插入pcb的转移和下个task的获取即可。
ch7
ch7入门了fs的抽象,从OSInode到Inode到diskInode到blockcache的抽象,层层深入,再加上用于查找的dirEnrty和fdtable,使得整个抽象层设计相当清晰。
ch8
ch8的难度在于语义含糊,我们仅有两类资源,其中mutex每种只有一个,semaphore每种可以有多个。在此基础上需要正确的理解need和alloc对应的语义,并且在阻塞线程被唤醒时及时更新。