|
|
@ -1,7 +1,6 @@
|
|
|
|
# Rust OS 教学lab实验的制作 基础功能完善
|
|
|
|
# Rust OS 教学lab实验的制作 基础功能完善
|
|
|
|
## 1 内存管理
|
|
|
|
## 1 内存管理
|
|
|
|
### 1.0 尚未实现
|
|
|
|
### 1.0 尚未实现
|
|
|
|
* 物理页帧的延迟分配:正在尝试尚未完成
|
|
|
|
|
|
|
|
* 页面置换Enhanced Clock算法实现: 主要需要修改和完善以适应新的接口, 可以考虑作为lab中的challenge
|
|
|
|
* 页面置换Enhanced Clock算法实现: 主要需要修改和完善以适应新的接口, 可以考虑作为lab中的challenge
|
|
|
|
* 页面换出到磁盘而非堆内存中: ide无法挂载,目前是换入到堆内存中.
|
|
|
|
* 页面换出到磁盘而非堆内存中: ide无法挂载,目前是换入到堆内存中.
|
|
|
|
* Copy On Write: 之前框架中有Copy on write的部分实现,并未启用,正确性存疑. 可以考虑作为lab中的challenge
|
|
|
|
* Copy On Write: 之前框架中有Copy on write的部分实现,并未启用,正确性存疑. 可以考虑作为lab中的challenge
|
|
|
@ -23,11 +22,12 @@ Rust OS riscv32中之前并未实现page fault的异常处理, 目前已经加
|
|
|
|
|
|
|
|
|
|
|
|
**在RustOS中启用页面置换**: 仅用户进程地址空间的用户页(MemorySet中所包含的地址)允许被换出.目前实现是在用户进程创建时将这些页设为swappable,在进程结束Context资源释放前先将这些页全部换入内存,然后进行unmap操作释放物理内存.
|
|
|
|
**在RustOS中启用页面置换**: 仅用户进程地址空间的用户页(MemorySet中所包含的地址)允许被换出.目前实现是在用户进程创建时将这些页设为swappable,在进程结束Context资源释放前先将这些页全部换入内存,然后进行unmap操作释放物理内存.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 1.3 物理页帧延迟分配
|
|
|
|
|
|
|
|
实现了用户线程memory area部分(非内核部分)的物理内存延迟分配.实现方法是在map的时候对于上述内存区域仅建立页表项,target部分设置为0. 在page fault的时候对于这些页表项分配物理页帧.目前来说没有处理不合法虚地址的问题,但是目前memory set record记录了new user和fork的时候的临时memory的记录,因此*理论上用裸指针是比较好实现虚地址合法性的判断*(process.get_memory_set_mut()可以获取一般的memory set的可变引用).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 2 进程管理
|
|
|
|
## 2 进程管理
|
|
|
|
等待王润基完善后迁移。
|
|
|
|
已经完成从王润基处的移植,目前的问题是依然会有out of memory.
|
|
|
|
## 3 同步互斥
|
|
|
|
## 3 同步互斥
|
|
|
|
修正了原本底层原子函数的bug并补全了底层原子函数的实现,但是目前的底层使用关中断实现,不支持多核,不过不影响lab实验的制作。
|
|
|
|
修正了原本底层原子函数的bug并补全了底层原子函数的实现,但是目前的底层使用关中断实现,不支持多核,不过不影响lab实验的制作。
|
|
|
|
## 4 文件系统
|
|
|
|
## 4 文件系统
|
|
|
|