diff --git a/docs/OSTrain2018docs-g4/expr4/report.md b/docs/OSTrain2018docs-g4/expr4/report.md index ad42dfd..131ef32 100644 --- a/docs/OSTrain2018docs-g4/expr4/report.md +++ b/docs/OSTrain2018docs-g4/expr4/report.md @@ -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 文件系统 @朱书聪