首先感谢各位老师提供的学习资源和平台
在看操作系统大赛网站的时候找到了训练营的GitHub链接
第一阶段
之前听说过Rust,对于内存方面十分安全,没想到自己会学习Rust,不过多学一门语言总是好的,Rust算是一个现代的编程语言,语法、语言特性都比C语言更加现代
掌握一门课外的现代编程语言也是我的目标,正好通过这次训练营学习Rust语言
主要是通过下面几个地方学习的rust
训练营老师们的讲课,我也收获了很多
通过第一阶段的学习,知道了Rust语言好处,知道了Rust语言这样设计的好处
第二阶段
算是我接触的第一个操作系统实验,而且
Rust 语言写一个基于 RISC-V 架构的 类 Unix 内核
rCore的编写十分有意思,根据操作系统的历史,从批处理系统开始,到多道程序分时,加入地址空间为多个任务提供可以使用的虚拟地址,一步步来到现代的操作系统
在学习操作系统时,我就有一个疑问,明明只是一个汇编代码syscall
,是如何完成系统调用的,rCore的第二章解答了我这个疑问
通过特权级切换,从用户代码切换到内核代码,在内核中完成相应的系统调用的功能,最后返回到用户代码
让我对于操作系统的理解不止局限于书本上学习的内容,我可以看到具体的代码实现
ch3
实现一个新的系统调用sys_task_info
,这个实验的重点是,掌握任务切换时的流程,明白了任务切换时的流程,在此基础上添加修改代码,就可以完成
ch4
重写sys_get_time
、sys_task_info
两个系统调用,因为引入了地址空间,内核代码不能直接访问任务中的虚拟地址
重点是如何在内核访问任务的虚拟地址,找到虚拟地址的物理地址,因为内核采用的是恒等映射,找到物理地址,内核代码就能访问修改
实现mmap
、munmap
系统调用,需要实现申请虚拟地址、虚拟页的维护,多次申请的虚拟地址不能重复,不能取消映射并未映射的地址
完成上述数据的维护即可
ch5
实现spwan
系统调用
掌握代码中fork
、exec
的实现,spawn
的实现并不复杂
实现stride
调度算法
掌握任务切换时的过程,在选择下一次任务时暴力查找优先级最小的任务
总结
通过这次训练营,更加深入理解操作系统的概念,感觉自己又变得更强了
希望我后面可以将Rust作为主力编程语言使用
虽然目前只完成了前三个,我之后会努力把后两个实验也完成