diff --git "a/source/_posts/2025\347\247\213\345\206\254\345\255\243OS\350\256\255\347\273\203\350\220\245\344\272\214\344\270\211\351\230\266\346\256\265\345\255\246\344\271\240\345\277\203\345\276\227\342\200\224\342\200\224\344\273\243\344\277\212\345\213\203.md" "b/source/_posts/2025\347\247\213\345\206\254\345\255\243OS\350\256\255\347\273\203\350\220\245\344\272\214\344\270\211\351\230\266\346\256\265\345\255\246\344\271\240\345\277\203\345\276\227\342\200\224\342\200\224\344\273\243\344\277\212\345\213\203.md" new file mode 100644 index 00000000000..f0cb9a49e19 --- /dev/null +++ "b/source/_posts/2025\347\247\213\345\206\254\345\255\243OS\350\256\255\347\273\203\350\220\245\344\272\214\344\270\211\351\230\266\346\256\265\345\255\246\344\271\240\345\277\203\345\276\227\342\200\224\342\200\224\344\273\243\344\277\212\345\213\203.md" @@ -0,0 +1,36 @@ +--- +title: 2025秋冬季OS训练营二三阶段学习心得——代俊勃 +date: 2025-11-11 21:49:00 +tags: + - author:BoBoDai +--- + +## 学习心得 + +## 二阶段 rcore +再一次参加了OS训练营,从第一次的跌跌撞撞到第二次的懵懵懂懂再到第三次的游刃有余,操作系统虽然很难,但也正是因为困难才有意思。 + +整个内核的调用关系在心里更清晰了,在实现需求的同时,也力求代码的整洁和可读性。 +1. ch3 user通过syscall调用内核,本质上就是对目标的物理地址进行赋值,把不安全的操作放到内核来做 +2. ch4 加入了MMU,user拿到的地址就不是物理地址了,需要进行一些转换。在分配和释放内存的时候也就是修改页表的一个过程,和修改数据库没什么区别。 +3. ch5 实现了简单的进程调度算法,从FIFO变成了stride 调度算法,也把fork 和 exec拼一起形成了spawn。 +4. ch6 对inode进行操作,实际上各种方法都被包装的很好了,调用关系也很清晰。 +5. ch8 这里弄清楚创建线程的位置和那些变量的增减时机一切都迎刃而解。 + +## 三阶段arceos +代码量总体更少,确定了实现范围后很快就可以完成。 + +在实验上 + +1. [print_with_color] 可以很好的熟悉调用关系 +2. [alt_alloc_bump] 一个bump内存分配算法 如果有时间可以尝试一下挑战题 +3. [ramfs_rename] 相比于二阶段这里的node抽象程度更高,老节点挂在新路径上即可实现 +4. [hashmap] 实现collections中的hashmap的替换,可以自己新建一个collection,在里面实现hashmap +4. [sys_map] 三阶段代码量最大的一道题,不过很多方法和调用都在main中用过了,先拿到用户栈的地址,在里面找一块内存,之后把程序读入缓冲区并写到目标位置 +5. [simple_hv] 处理一下未处理的异常,之后执行下一条命令 + + +### 总结 +操作系统是一个很神奇的东西,每一次学习都有新的收获,在里面能找到很多数据库,web开发共通的思想。操作系统导论也是一本很好的书,虽然我还没看完内存部分,但是通过结合实践,理解的更深刻了。 + +学习操作系统就像爬山,每一步都需要扎实,每一步都很困难,但每一步都离顶峰更近,踏一步就有一步的收获。 \ No newline at end of file