1
0
mirror of https://github.com/rcore-os/rCore.git synced 2024-11-21 23:56:18 +04:00

Merge branch 'OsTrain2018-g4' of github.com:oscourse-tsinghua/RustOS into lcy_issue1

This commit is contained in:
lcy1996 2018-11-15 22:11:43 +08:00
commit 4b36a398cd

View File

@ -44,7 +44,14 @@ Rust OS riscv32中之前并未实现page fault的异常处理, 目前已经加
* 获取页表项方法中存在的bug修复: 该bug目前不会影响OS运行, 但是这显然是十分危险的(比如在多核时,或者被中断时). 可能的修复方式是fork一份riscv库并对其进行修改,提供对页表项的操作接口.
## 2 进程管理与同步互斥
移植了王润基进程线程管理模块的重构结果并维护debug的更新在此基础上重构了eventhub的数据处理方式以补全实现sleepkill的操作解决只能被1人wait和不被wait pid就无法释放的问题并将pid的释放与进程间父子关系的维护挪至processor处理。
### 2.1 移植新的进程管理架构
王润基重构了进程管理库的架构将其移植到我们的工程并且和本地修改过的页表处理相对接并且在王润基更新debug的相关commit后维护更新。
### 2.2 修改完善了进程管理的sleepkill部分
王润基新的process重构后sleepkill处于TODO的状态原因是event_hub采用了堆的rust自带库而这个堆实现简单无法高效的从堆中删除数据所以使用链表重构了event_hub、添加删除功能并补全了process_mamanger中sleepkill的相关部分。
### 2.3 改进了进程管理的相关策略
原本进程管理中pid资源的释放需要由wait它的进程释放但是这样一来如果父进程没有wait孩子则pid资源无法释放也无法处理多个进程wait一个进程的情况。现在将pid的释放交由process_mamanger来管理对于每个子进程都将其父亲放入等待列表如果一个进程退出后会将自己在孩子的等待队列中删除如果一个进程已经结束且等待队列为空则释放此pid。
### 2.4 将进程关系树维护迁移至进程管理模块
上述方法可以方便的实现wait(0)的操作所以将原来的丑陋的wait(0)的实现更新。最后由于结构上的统一性与thread实现相关的需求将父子关系的维护从kernel挪至process模块。
## 3 文件系统
@朱书聪