学习报告
经历了一个月的学习,2023开源操作系统训练营的一二阶段算是接近尾声。对于进度,十分惭愧只完全完成了一阶段100道rustlings习题,以及二阶段的前五章,对应前三个实验。这已经是我第三次接触这一开源项目。第一次接触此项目是在2022年秋,当时我正好学习操作系统及其研讨课的课内内容。当时并没有报名该项目,而是作为课内的补充学习。不过由于该学期的事情太多,所以并没有深入探究。第二次接触该项目就是2023年夏,这个夏天我正好参加另一个开源项目,该项目使用rust编程语言进行编写,并且我报名参加了我们学校操作系统助教,为了加深对于操作系统概念的理解,并且学习rust,当时只是简单看了该项目,并没有深入理解。十分幸运的是,今年秋,此项目再次启动,因此我决定将此项目完成。并且本人对于虚拟化比较感兴趣,十分想参加后续的项目实习。
Rust学习
在学习rust的过程之中,我深刻地感受到了rust确实是编程语言的集大成者。rust处于对于内存安全的考虑的设计十分深刻。既没有GC机制又不能手动分配内存使得内存的每一个变量的生命周期都确定了下来。函数式编程使得代码可以写得十分优雅。我至今依旧感慨于在清除BSS段时那一段代码的优美。虽然后续在很多地方都有十分优秀的设计,但是远不如当时给我那样的震撼。受限于本人的阅历,我还不能完全理解其出色的表达能力。但是我相信在后续的学习过程之中能够继续发掘编程语言之美。
不得不说,rust是一门十分打击人的自信的语言。作为一个还算了解过几门编程语言的人来说,我还是觉得rust的学习曲线过于陡峭。如果你是一个没有学过其他编程语言,尤其是像是C/C++这样的相对底层一点的语言的人来说,可能rust并不是你第一门编程语言的最佳选择。
risc-v学习
我们学校课内已经对于riscv有了较为充分的教学,并且已经在操作系统研讨课上面实现了一个toyos,所以riscv的学习我并不是十分吃力。对于特权态的一些寄存器,只要在需要的时候翻翻手册就可以了。
Lab学习
前面都只是热身,Lab才是这一门课程的精髓所在。不得不承认,该实验尽管并没有让我从零到一设计一个操作系统,但是实验难度依旧不低。
对于实验3来说,我觉得这个实验更像是热身,由于进程的调度以及虚拟内存还没有开启,所以添加两个系统调用相对来说还算是容易。不过由于实验对于PCB进行了好多层的封装,想要完全理解这个框架代码还是有一些难度的。另外UPSafeCell
实验4虚拟内存开始之后,整个实验的难度一下提升了一个档次。虚拟内存本身的概念十分复杂,而且出现问题由于多级页表的存在也变得难以调试了起来。所幸的是,教学团队在底层已经实现了map和unmap函数,如果这两个函数没有提供的话,那么这个实验将会变得更为复杂。该实验放在一个相对来说如此靠前的位置,导致后续的所有的实验都需要考虑虚拟内存机制是否会引发别的问题。不过另一方面,如果该实验放在后面进行完成,必然会导致整个框架会有一个相当大的改动。这着实也体现了系统开发是一个tradeoff。
实验5相对来说还算简单。实现了一个新的进程调度算法stride。该算法在概念上并不难以理解,并且从最终的效果来看,新创建的几个进程最后调度的比率接近一致。这也体现了该调度算法的威力。
总结
该实验我最大的感受就是领略的rust编程语言的精妙。并且对于系统开发有了新的理解。
by the way, 我在clone我们实验的代码的时候,使用gdb完全失效,虽然我整个实验并没有用到gdb,而是使用log日志的方式进行调试,但是这让我感到十分困惑。我克隆rCore教材那个仓库并没有发生这样的事情,具体原因等我有时间探究一下。