|
|
|
@ -52,15 +52,33 @@ Rust OS riscv32中之前并未实现page fault的异常处理, 目前已经加
|
|
|
|
|
原本进程管理中pid资源的释放需要由wait它的进程释放,但是这样一来如果父进程没有wait孩子则pid资源无法释放,也无法处理多个进程wait一个进程的情况。现在将pid的释放交由process_mamanger来管理,对于每个子进程都将其父亲放入等待列表,如果一个进程退出后会将自己在孩子的等待队列中删除,如果一个进程已经结束且等待队列为空则释放此pid。
|
|
|
|
|
### 2.4 将进程关系树维护迁移至进程管理模块
|
|
|
|
|
上述方法可以方便的实现wait(0)的操作,所以将原来的丑陋的wait(0)的实现更新。最后由于结构上的统一性与thread实现相关的需求,将父子关系的维护从kernel挪至process模块。
|
|
|
|
|
|
|
|
|
|
## 3 文件系统
|
|
|
|
|
@朱书聪
|
|
|
|
|
### 3.1 之前已经完成了的内容
|
|
|
|
|
- 修复与 `size` 和 `nlinks` 字段相关的错误
|
|
|
|
|
- 实现了 `unlink` 和 `link`
|
|
|
|
|
- 调整了部分接口用 `get_entry` 和 `find` 取代 `list` 和 `lookup`
|
|
|
|
|
### 3.2 上次报告以来新完成的内容
|
|
|
|
|
- 实现了 `rename` 和 `move_`
|
|
|
|
|
- 王润基抢先帮忙实现了文件系统的线程安全,从而实现了文件描述符和一些文件相关的系统调用
|
|
|
|
|
- 用户程序还是只能打开文件、读写文件以及读文件夹内容(因为现有用户程序只需要这些功能就可以正常运行)
|
|
|
|
|
- 王润基还顺便帮忙修正了新发现的 `inode` 与 `fs` 之间的所有权关系问题
|
|
|
|
|
- 在文件系统接口中(在一般的出错状态下)返回错误类型而非直接 `panic`
|
|
|
|
|
- 尚未正式使用
|
|
|
|
|
### 3.3 TODO
|
|
|
|
|
- 更完整地实现文件系统相关的系统调用
|
|
|
|
|
- 可能需要更多的用户程序用来测试
|
|
|
|
|
- 实装错误类型机制,要能够将其传给用户程序
|
|
|
|
|
- 实现 `mount` 机制?
|
|
|
|
|
- 符号链接相关?
|
|
|
|
|
- 将 `vfs` `device` `file` 等与具体文件系统无关的内容移动到主仓库的新包中(`crate/vfs`)?
|
|
|
|
|
|
|
|
|
|
## 4 测试结果
|
|
|
|
|
### 4.1 用户程序测试结果
|
|
|
|
|
目前用户程序测试结果如下:
|
|
|
|
|
|
|
|
|
|
| 测试程序 | 原始RustOS是否通过 | 是否通过 | 错误原因分析 |
|
|
|
|
|
| :------: | :------: | :------: | : ------: |
|
|
|
|
|
| 测试程序 | 原来的RustOS是否通过 | 现在的RustOS是否通过 | 错误原因分析 |
|
|
|
|
|
|:------:|:------:|:------:|:------:|
|
|
|
|
|
| waitkill | 通过 | 通过 | |
|
|
|
|
|
| sleep | 通过 | 通过 |
|
|
|
|
|
| spin | 通过 | 通过 |
|
|
|
|
|