2024春夏rCore训练营第二阶段总结
参加过2023秋冬,所以ch3-ch5参考了之前的报告。
这里讲讲我之前未接触过的lab。
Lab4-ch6
对文件系统的了解比较浅,之前也从未以代码的形式接触过文件系统,因此花了不少功夫理解easy-fs的设计。再和群友简短交流后,最终胜利完成了。
Lab5-ch8
手册给出的算法类似银行家算法,但不太一样。
我感觉没有理解到位,尤其是我自己打了打草稿后,发现不太能理解负值的semaphore要如何如何在这种方法下表示;同时我觉得用这种方法动态检测死锁,好像需要满足一些条件,比如线程p了一定会在后面v之类的。
然后在如何构建算法的矩阵上我也走了弯路,我首先很呆的在线程创建、mutex/sem创建的syscall里添加自定义struct的方法,来动态维护资源矩阵。这使得代码很乱,且static的struct导致运行多个程序时会出问题,需要特殊处理。这导致后面维护和debug很复杂。最后我选择推导重来,在进程这一层添加功能,并在pcb的mutex/sem_list获取各资源的数目,从task获取线程信息。这样功能几乎就集中在了少数地方,比之前轻松很多。
另外,文档中没有提示ch8需要实现时间的syscall,这导致即使死锁检测的逻辑出错,测试也必然出错。初见必然要debug一轮,感觉这个就有点坑了。
总结
想必于上一期此次要求500分全写完,要求提高了。不过这两个lab由于其内容我接触不多所以感觉还挺有意思的。
然后就是之前也提过的跨章代码合并,还有测试问题。我后来想了想,这好像也没什么办法;跨章合并是由rcore的风格导致的,上下两章代码可能是冲突的,不太好随着章节渐进更新,我见过的一些lab可以做到直接fetch + merge进入下一章;然后用测试框架每次都要恢复文件的问题,麻烦当然是有点麻烦的,但也许受制于某些因素只能这么设计的,如果这个能改了的话就很舒服了。
总的来说训练营还是很不错的,也有在更新维护;我想我们很多学生都应该多一些实际的代码经历,训练营就是这样一个机会。