碎碎念
拖了好久最后还是写完了,中间碰到些奇怪的问题和bug,卡了好一大气,最后发现问题在什么地方的时候真的血压升高,一整个气烂了。但是最后还是解决了,感觉自己的能力有所提升吧。
最后真的永远也习惯不了写各种报告(捂脸
学习总结
前三个lab
前三个lab的内容大致上还是比较简单,感谢各位老师和助教提供的框架,写的时候可以更注重于OS的机制以及riscv平台本身,不用关注太多的细节。报告里的思考题也挺有帮助的。
前四个lab要求需要整合前面lab实现的功能,在写这几个lab的过程当中,一些部分的实现也在一直调整,变得更加合理以及方便使用。也发现自己一些问题,有时候还是要先想清楚把代码读好再动手,不然会浪费很多时间。
第四个lab
在这个lab上花的时间最长。代码写好以后调试始终是不对。最后发现spawn
跑过去之后整个文件系统一整个挂掉了,整个easy-fs乱成了一锅粥。调试了好久好久也搞不清楚什么原因,最后还是换了种实现spawn
的方法,先过了测试。猜测可能是在exec
的时候不小心写了什么地方?玄学问题以后有时间的时候再研究研究吧。如果真的是把fs的内容给覆写掉的了话,我也真厉害能写出这么恶心的代码。毕竟表面上看完全是不可能的
第五个lab
这个lab是要我们实现一个死锁检测的算法。这个算法之前在课上有学过,这下也算是见到本体了。觉得自己有时候对于并发编程的了解还是不够深入,可能如果加上一些实现并发的代码和lab会更好一些?希望能在后面的课程中学到更多的知识。
心得体会
rust
算是开始接触rust有一段时间了,和编译器斗争越来越熟练。感觉rust是一门很有趣的语言,有时候会出现写其他语言的时候没有的一些奇怪的问题,但是解决了之后能对一些东西有更好的了解,平时会更注意一些。
比如说rust的所有权系统,有时候会觉得很麻烦,但是这个系统也能帮助我们避免一些潜在的bug,也能让我们更好的理解内存和生命周期的管理。这些内容其实在写C/C++的时候也会遇到,但是表现的形式可能更加狂野一点。rust这样更加严格的检查让我们在写代码的时候,设计整个结构的时候更小心,考虑到更多的细节。之前在写C++的时候,发现C++11加入的std::move
和std::unique_ptr
等等,也是为了表达一些所有权等相关的语义,但是没有强制化的要求。rust的所有权系统更加严格,也更加直观。
希望以后能够继续学习rust。
riscv
riscv和x86比起来简直就是天堂(
riscv指令集更简单,更容易理解。在设计的时候就避免了很多x86遗留的历史设计问题,实现OS的时候更加方便。在学习riscv的过程中,也对计算机体系结构有了更深的了解。觉得riscv是一个很有潜力的平台,希望以后应用更普遍一些吧。