实验总结
到目前,找个实验也算磕磕绊绊做完了,感触也是比较多的,有一部分内容发现还是因为基础不牢比较难完成
整个实验过程中基本上是读伪代码配合文档来理解,中间加入测试,慢慢加深理解,所以有些地方是后知后觉的,特别是在lab-3卡了将近3天,因为内存分配,页表,页表项等等概念比较抽象,还很容易混淆,最后反复阅读文档才能逐渐完成。
到目前为止完成的内容
rust基础语法的学习
rustlings的练习
rust完成一部分数据结构和算法
实验零:基础环境的搭建
实验一:中断
实验二:内存分配
实验三:虚实地址转换
实验四(上):线程
实验四(下):线程调度
实验六:系统调用
主要的编程实验
实现基于线段树的物理页面分配算法(支持懒分配/释放,一段连续页面的分配/释放)
实现时钟页面置换算法(做了测试和性能分析)
实现Stride Scheduling线程调度算法
实现线程的fork
实现sys_open()和sys_get_tid()的系统调用
未能完成的实验
基于小根堆来实现stride scheduling算法
实现进程的fork,这部分是由于物理内存的复制较为难做最后做不完了,暂时先实现了线程的fork
实现sys_pipe(),原因也是因为没有实现进程的fork
伙伴算法实现堆上内存分配
整个实验下来收获还是很大的,在一次次和编译器较劲中比较熟练得掌握了rust,因为之前没有上过os的相关课程,这次实验时间又比较紧,没有很多时间去补基础知识,所以就对着源码一步步调试,逐渐也能理解操作系统的工作,对于以前的一些模糊概念,比如线程进程的区别,时间片的分配,如何实现并发,时钟中断等等,都在这次实验中加深了理解。对以后的学习有很大帮助。
当然也有很多不足,比如到现在还是很难熟悉gdb调试,基本上靠输入输出完成,对于一些难调试的部分理解就比较单薄,没有测试去支持,还有一些高级的rust的语法也是一知半解,基本上是照猫画虎去写。
总之这次实验的体验还是很好,整个假期还是很充实,也完成了比自己预期高很多的任务,希望能够参加第二阶段的夏令营吧