第一阶段:rustlings
1.去入门了一下rust,使用的是Rust语言圣经(Rust Course)
2.通过学习Rust语言圣经,了解了rust的基础语法,因为之前有过C++语言基础,所以学习较为容易
3.无GC,有强大的包管理工具,强大的安全性,以及独具特色的所有权机制
4.学习了rustlings的110道题目,虽然之后大多用不到就全忘记了,但是如果将来从事相关工作,很快就能重新捡起来
5.学习完成rustlings的110道题目之后就开始了之后的第二阶段学习
第二阶段:rCore-Tutorial
1.通过阅读rCore-Tutorial-Book学习到了很多关于操作系统的知识,之前也有过操作系统的学习,只不过都是理论上的,并没有相关实践上的学习,这也是我进入此训练营的原因,想通过训练营督促自己去学习到更多的关于操作系统的知识,以及拥有一个比较独特的项目,去助力就业
2.通过rCore的学习,完成了5个lab,可以说是学习比较辛苦的了,是rCore-Tutorial-Book和rCore-Camp-Guide-2024A两个教程同时跟进,学习完成rCore-Tutorial-Book之后就在相应章节的2024A中完成lab,
(1)在lab1中,我们的系统已经能够支持多个任务分时轮流运行,引入一个新的系统调用 sys_task_info 以获取当前任务的信息。
(2)在lab2中,在引入虚存之后重写内核的 sys_get_time 和 sys_task_info 函数,以及完成mmap 和 munmap 匿名映射两个系统调用函数。
(3)在lab3中,进程创建过程中,fork+execl两个函数高频率连续使用,感觉十分繁琐,我们引入一个spawn函数直接完成两个函数调用的结果,新建子进程,使其执行目标程序。还完成了stride 调度算法的实现,通过修改优先级,使步长不同,导致选取的优先级发生变化。
(4)在lab4中,引入硬链接的概念,让我们完成linkat和unlinkat和fstat三个系统调用,写这个的时候给我写破防了,当时看的代码抑郁了,但是其实没有那么难,很多代码其实和解决问题没有任何关联,这一个lab只能是非常难写,需要对源码有很深的理解,以及需要想到在文件存入fd_table的时候,想办法把文件名字也放入PCB中
(5)在lab5中,完成了死锁检测,这个我的完成过程也是比较抽象,写的时候很痛苦,一直往银行家算法上面想,后面发现need根本不知道啊,经过讨论之后才知道,原来只需要检测死锁就行,比较精妙的一点就是在lock阻塞或睡眠的过程中,就需要更新need数组,而且在死锁检测时候,需要让need+1而不是allocation,比较有意思吧。
3.其实完成了这个比较toy的玩具项目,感觉最后很多东西没有联系起来,如果要是最后把所有lab整合在一起,组合成一个可以展现自己从开始到现在的成果的话会更好一些,不过也是很感谢rCore这个教学,学到了很多操作系统的知识。