-
Notifications
You must be signed in to change notification settings - Fork 452
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
47 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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也能让人产生动力去添加功能,并找到代码的问题,这次编写的过程学习补充到了一些知识及代码实现,就是有一些功能不需要自己添加,比如直接跳过了中断,虽然中断代码一般固定后就不会修改了,但加上一些可能会让人印象更深刻一些。 | ||
|