0%

2023开源操作系统训练营第二阶段总结报告-14432222

2023开源操作系统训练营第二阶段总结报告-14432222

实验总结

lab1

本次实验要求我们实现一个sys_task_info来获取进程的信息。最开始的时候我的设计是在TASK_MANAGER中存放两个桶分别存放每项任务的调用次数和起始时间,查询运行时间时有当前时间减去起始时间即可得到系统调用时间。但由于调用次数会变化,而TASK_MANAGER是个静态变量。遂放弃调用次数的桶转而在TCB结构体中存放记录。

lab2

本次实验要求重写sys_get_time 和 sys_task_info,同时实现虚拟内存和物理内存的绑定与解绑。
由于虚拟储存机制的引用我选择了重写一个get_kernel_ptr的泛型函数获取物理内核中的指针。但是由于虚拟缓存机制的影响导致我的lab1中的起始时间桶出现了一些奇奇怪怪的问题,我又含泪放弃lab1的起始时间桶,选择把起始时间封装到TCB中。

lab3

万恶之源!!!和前面两个lab兼容性极差,刚切过去的时候让我怀疑人生,我lab2的代码根本找不到原本放置的位置。我需要重新找位置来存放一些函数。又让我重构了大部分lab2的代码。优先级设置较为简单,但还是出了点问题。最开始我是选择在任务队列里按顺序插入,fetch任务时在遍历队列找到stride最短的任务,但是我本地测试电脑风扇轰鸣了二十分钟也没出结果。经过参考其他大佬们的总结我决定在任务进入的时候按照stride长度进行插入,提前将队列有序。重构了代码之后才通过。

个人感想

本次的rcore总结下来并不难,但在写的时候还是挺崩溃的。一是虽然有一阶段的rust语言的学习,但对于多个文件协同运作对我来说还是比较艰难的。二是由于对于测试方式的不太理解,导致我无法通过gdb进行调试,只能通过不断的打印信息来获取bug原因。三是几个lab的兼容较差,需要我们自行向前,没有类似于一些公开课的项目那种前面模块的测试通过之后后续基本可以不用改动前面模块的模式,心智负担极大,希望后续能有所改进。
最后很感谢训练营能为我们提供了这么一个学习平台,让我们有机会接触到操作系统比较底层的内容。让我们对操作系统有了更深刻的体会。