0%

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

首先感谢各位老师提供的学习资源和平台

在看操作系统大赛网站的时候找到了训练营的GitHub链接

第一阶段

之前听说过Rust,对于内存方面十分安全,没想到自己会学习Rust,不过多学一门语言总是好的,Rust算是一个现代的编程语言,语法、语言特性都比C语言更加现代

掌握一门课外的现代编程语言也是我的目标,正好通过这次训练营学习Rust语言

主要是通过下面几个地方学习的rust

训练营老师们的讲课,我也收获了很多

通过第一阶段的学习,知道了Rust语言好处,知道了Rust语言这样设计的好处

第二阶段

算是我接触的第一个操作系统实验,而且

Rust 语言写一个基于 RISC-V 架构的 类 Unix 内核

rCore的编写十分有意思,根据操作系统的历史,从批处理系统开始,到多道程序分时,加入地址空间为多个任务提供可以使用的虚拟地址,一步步来到现代的操作系统

在学习操作系统时,我就有一个疑问,明明只是一个汇编代码syscall,是如何完成系统调用的,rCore的第二章解答了我这个疑问

通过特权级切换,从用户代码切换到内核代码,在内核中完成相应的系统调用的功能,最后返回到用户代码

让我对于操作系统的理解不止局限于书本上学习的内容,我可以看到具体的代码实现

ch3

实现一个新的系统调用sys_task_info,这个实验的重点是,掌握任务切换时的流程,明白了任务切换时的流程,在此基础上添加修改代码,就可以完成

ch4

重写sys_get_timesys_task_info两个系统调用,因为引入了地址空间,内核代码不能直接访问任务中的虚拟地址

重点是如何在内核访问任务的虚拟地址,找到虚拟地址的物理地址,因为内核采用的是恒等映射,找到物理地址,内核代码就能访问修改

实现mmapmunmap系统调用,需要实现申请虚拟地址、虚拟页的维护,多次申请的虚拟地址不能重复,不能取消映射并未映射的地址

完成上述数据的维护即可

ch5

实现spwan系统调用

掌握代码中forkexec的实现,spawn的实现并不复杂

实现stride调度算法

掌握任务切换时的过程,在选择下一次任务时暴力查找优先级最小的任务

总结

通过这次训练营,更加深入理解操作系统的概念,感觉自己又变得更强了

希望我后面可以将Rust作为主力编程语言使用

虽然目前只完成了前三个,我之后会努力把后两个实验也完成