学习心得
二阶段 rcore
再一次参加了OS训练营,从第一次的跌跌撞撞到第二次的懵懵懂懂再到第三次的游刃有余,操作系统虽然很难,但也正是因为困难才有意思。
整个内核的调用关系在心里更清晰了,在实现需求的同时,也力求代码的整洁和可读性。
- ch3 user通过syscall调用内核,本质上就是对目标的物理地址进行赋值,把不安全的操作放到内核来做
- ch4 加入了MMU,user拿到的地址就不是物理地址了,需要进行一些转换。在分配和释放内存的时候也就是修改页表的一个过程,和修改数据库没什么区别。
- ch5 实现了简单的进程调度算法,从FIFO变成了stride 调度算法,也把fork 和 exec拼一起形成了spawn。
- ch6 对inode进行操作,实际上各种方法都被包装的很好了,调用关系也很清晰。
- ch8 这里弄清楚创建线程的位置和那些变量的增减时机一切都迎刃而解。
三阶段arceos
代码量总体更少,确定了实现范围后很快就可以完成。
在实验上
- [print_with_color] 可以很好的熟悉调用关系
- [alt_alloc_bump] 一个bump内存分配算法 如果有时间可以尝试一下挑战题
- [ramfs_rename] 相比于二阶段这里的node抽象程度更高,老节点挂在新路径上即可实现
- [hashmap] 实现collections中的hashmap的替换,可以自己新建一个collection,在里面实现hashmap
- [sys_map] 三阶段代码量最大的一道题,不过很多方法和调用都在main中用过了,先拿到用户栈的地址,在里面找一块内存,之后把程序读入缓冲区并写到目标位置
- [simple_hv] 处理一下未处理的异常,之后执行下一条命令
总结
操作系统是一个很神奇的东西,每一次学习都有新的收获,在里面能找到很多数据库,web开发共通的思想。操作系统导论也是一本很好的书,虽然我还没看完内存部分,但是通过结合实践,理解的更深刻了。
学习操作系统就像爬山,每一步都需要扎实,每一步都很困难,但每一步都离顶峰更近,踏一步就有一步的收获。