第一阶段总结
第一阶段写了rustlings,以前就写过一遍,不过这10个数据结构题还是挺折磨的,跟编译器搏斗。
第二阶段总结
第二阶段写了rCore的lab,以前看过一半xv6的lab,但是已有的代码看不太懂,最后烂尾了。感觉做这种OS lab最大的困难就是充分理解框架代码,好在rCore的指导书足够详细,代码也比xv6简单一些,最后做完了,写的过程比较顺利,除了最后一个检测信号量的时候,对信号量的更新和对检测用的数组的更新顺序顺手写反了,卡了一天半。。。看指导书的时候记了一些笔记在我的blog上,学到了很多写rust的技巧,闭包、链式调用之类的,以前对OS只有理论上的积累,写完之后也有了一些实践经验。
第三阶段总结
第三阶段正式接触到 ArceOS
,写了6个小练习,感觉难度都不大,设置练习的目的应该是熟悉 ArceOS
。
- print_color:在
putchar
,println!
, 或者print-color
的main
函数里改一下,加入颜色代码的部分就好了。 - support_hashmap:考虑到手搓一个
hashmap
比较麻烦,而且这也不是OS训练营的重点,直接把hashbrown
的hashmap
拿来用了。 - alt_alloc:bump非常简单,
byte_pos
从前往后,page_pos
从后往前,把对应的接口实现完就好了。 - ramfs_rename:找到目录下名为
old_name
的node
,然后先从这个dir
的index
中删除(old_name, node)
,再插入(new_name, node)
。 - sys_mmap:找到一块可用的内存,设置好映射,把文件的内容读取进来即可。
- simple_hv:改一点异常处理函数的分支,跳过异常并把
sepc
+ 4,第一次了解到hypervisor
都干了什么,以前只听说过这个名字。
然后又过了一遍 ArceOS
的deepwiki,接触到了“模块化”这个概念,感觉挺有趣的,和rust的 module
很好的结合在了一起,降低了不同部分之间的耦合,用户程序通过用户库的 API 找到对应的 module
。在构建内核时像搭积木一样选需要的部分,在一些嵌入式场景中可以量身定制,想要扩展成宏内核也很容易,可维护性也很高。