From b2811a440a09992b2add6cccb63ef6bb7a08c76d Mon Sep 17 00:00:00 2001 From: Yuke Peng Date: Wed, 1 Nov 2023 23:30:54 -0700 Subject: [PATCH] sdww0 --- ...\273\223\346\212\245\345\221\212-sdww0.md" | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 "source/_posts/2023\345\274\200\346\272\220\346\223\215\344\275\234\347\263\273\347\273\237\350\256\255\347\273\203\350\220\245\347\254\254\344\272\214\351\230\266\346\256\265\346\200\273\347\273\223\346\212\245\345\221\212-sdww0.md" diff --git "a/source/_posts/2023\345\274\200\346\272\220\346\223\215\344\275\234\347\263\273\347\273\237\350\256\255\347\273\203\350\220\245\347\254\254\344\272\214\351\230\266\346\256\265\346\200\273\347\273\223\346\212\245\345\221\212-sdww0.md" "b/source/_posts/2023\345\274\200\346\272\220\346\223\215\344\275\234\347\263\273\347\273\237\350\256\255\347\273\203\350\220\245\347\254\254\344\272\214\351\230\266\346\256\265\346\200\273\347\273\223\346\212\245\345\221\212-sdww0.md" new file mode 100644 index 00000000000..300070408fd --- /dev/null +++ "b/source/_posts/2023\345\274\200\346\272\220\346\223\215\344\275\234\347\263\273\347\273\237\350\256\255\347\273\203\350\220\245\347\254\254\344\272\214\351\230\266\346\256\265\346\200\273\347\273\223\346\212\245\345\221\212-sdww0.md" @@ -0,0 +1,47 @@ +--- +title: 2023开源操作系统训练营第二阶段总结报告-sdww0 +date: 2023-11-02 13:50:53 +tags: + - author:sdww0 + - repo:https://github.com/LearningOS/2023a-rcore-sdww0 +--- + +## 契机 + +在学长介绍下看到了有操作系统训练营,想系统学一下Rust与操作系统,也想实操拓展一下自己在操作系统上的知识因此加入到了训练营中 + +## 第一阶段 + +之前使用Rust编写过一些程序,这个阶段过的稍微轻松一些,但也遇到了一些之前没有仔细阅读思考的地方: + +1. 智能指针之前只了解了一些常用的如Box,Arc。其他的指针暂时不清楚如内部可变的智能指针如RefCell之前都是靠Mutex或者SpinLock来解决的,在学习中也了解了这些指针以及学习了一下Rust智能指针的内存布局,有一个[视频](https://b23.tv/lUKw43j)我觉得讲的还挺好的 +2. 生命周期。Rust对生命周期的隐藏太好了,基本上开发中都不会用到,因此我没怎么学习这方面知识,开发中比较排斥在结构体中使用引用,因为要涉及到生命周期标注。这一次也是好好学习了一下 + +## 第二阶段 + +之前看过rCore的文档和代码,这一次回顾的时候也发现了之前漏看或者以为自己看懂了的地方,最明显的是中断那一部分,之前看的都挺迷糊,也有现成代码就胡乱略过去了,实际上没怎么看懂具体流程以及中断的代码实现,现在再次看能更全面的了解RISCV上的中断机制。还有rCore上的文件系统也是接触较少的一部分 + +### ch3 + +ch3只用在TCB里面加上一些数据即可,难度不高 + +### ch4 + +涉及到内存管理了,这一方面难点主要集中在map和unmap的边界处理上,但多画图注意一下也是可以过 + +### ch5 + +主要实现spawn系统调用,创建一个空白子进程然后加载对应程序即可, + +### ch6 + +需要对文件系统进行修改,原本想在unlink的时候缩减根目录所占大小,但试了一下感觉较难,采取了一个取巧的方式,把目标`DirEntry`直接清空了。实现获取文件信息时刚开始也把一些信息给硬编码了,但后来熟悉了一下文件系统后,又把这些给接上文件系统信息了,也算是一个自己不太好的地方,容易取巧。 + +### ch8 + +涉及到死锁检查,难点主要是在信号量死锁上,需要预防资源循环依赖 + +### 总结 + +第二阶段将系统中的部分小模块拆分开,难度不会太高的前提下也能让人感觉到系统功能在一步步变多,正反馈还是挺多的,一个个test也能让人产生动力去添加功能,并找到代码的问题,这次编写的过程学习补充到了一些知识及代码实现,就是有一些功能不需要自己添加,比如直接跳过了中断,虽然中断代码一般固定后就不会修改了,但加上一些可能会让人印象更深刻一些。 +