@ -15,19 +15,19 @@ ucoreOS lab基于x86结构, 主要由C语言完成编写。x86架构由于其
### 3.1 完善现有Rust OS基础功能
### 3.1 完善现有Rust OS基础功能
现有Rust OS在riscv32环境下还存在一些bugs或unimplemented features, 要想完成一个类似于ucore OS lab的教学实验框架, 首先要把这些漏洞完善。现简单将每个lab目前待完善的地方和负责填坑的人列举如下:
现有Rust OS在riscv32环境下还存在一些bugs或unimplemented features, 要想完成一个类似于ucore OS lab的教学实验框架, 首先要把这些漏洞完善。现简单将每个lab目前待完善的地方和负责填坑的人列举如下:
**lab1:**主要涉及实验框架的编译、调试, OS bootloader启动过程。现有实验框架已经完成, 不需要完善。
**lab1:** 主要涉及实验框架的编译、调试, OS bootloader启动过程。现有实验框架已经完成, 不需要完善。
**lab2:**主要涉及物理内存管理, 由于riscv32结构的物理内存管理仅通过一个二级页表来实现, 不像x86架构下还需要兼容段表(虽然最终只是一个自映射), 因此这部分比原本的ucore OS lab会更简洁、易理解一些。另外RustOS 的现有物理内存分配算法是通过线段树实现的,且相较原本的内存分配算法复用性更好。本分内容已经完成。
**lab2:** 主要涉及物理内存管理, 由于riscv32结构的物理内存管理仅通过一个二级页表来实现, 不像x86架构下还需要兼容段表(虽然最终只是一个自映射), 因此这部分比原本的ucore OS lab会更简洁、易理解一些。另外RustOS 的现有物理内存分配算法是通过线段树实现的,且相较原本的内存分配算法复用性更好。本分内容已经完成。
**lab3:**该部分实验主要涉及虚存管理部分,**目前RUST OS仅针对x86_64结构实现了page fault的处理**, 后续需要完成riscv32的page fault处理和虚存管理部分。
**lab3:** 该部分实验主要涉及虚存管理部分,**目前RUST OS仅针对x86_64结构实现了page fault的处理**, 后续需要完成riscv32的page fault处理和虚存管理部分。
**lab4:**主要涉及内核线程创建和调度,现有框架中本部分内容已经完成,是否存在问题有待后续测试。
**lab4:** 主要涉及内核线程创建和调度,现有框架中本部分内容已经完成,是否存在问题有待后续测试。
**lab5:**主要涉及用户线程管理,此部分内容似乎同样已经完成,是否存在问题有待后续测试。**事实上之前测试中似乎又提到没有wait过的进程退出内存不会被回收, 有待完善。**
**lab5:** 主要涉及用户线程管理,此部分内容似乎同样已经完成,是否存在问题有待后续测试。**事实上之前测试中似乎又提到没有wait过的进程退出内存不会被回收, 有待完善。**
**lab6:**此部分主要涉及进程调度器的相关内容,现有框架中本部分内容已经完成,是否存在问题有待后续测试。
**lab6:** 此部分主要涉及进程调度器的相关内容,现有框架中本部分内容已经完成,是否存在问题有待后续测试。
**lab7:**主要涉及的是进程间的同步、共享资源的竞争,要求熟悉掌握信号量的原理,管程与条件变量的原理与实现,并用其来解决哲学家问题。**但是目前的rustOS-riscv中由于编译器对于原子指令的支持问题, 导致相关功能未能实现**, 需要寻求解决的办法来完善该实验。而且x86_64下该模块与kernel尚未分离, 导致结构不够清晰需要进行调整。
**lab7:** 主要涉及的是进程间的同步、共享资源的竞争,要求熟悉掌握信号量的原理,管程与条件变量的原理与实现,并用其来解决哲学家问题。**但是目前的rustOS-riscv中由于编译器对于原子指令的支持问题, 导致相关功能未能实现**, 需要寻求解决的办法来完善该实验。而且x86_64下该模块与kernel尚未分离, 导致结构不够清晰需要进行调整。
**lab8:**此部分主要涉及文件系统。文件系统本身的实现并没有包含在仓库当中,而是在另一个仓库[wangrunji0408/SimpleFileSystem-Rust](https://github.com/wangrunji0408/SimpleFileSystem-Rust)当中。注意除了 SimpleFileSystem 本身的实现, 文件系统的接口( VFS等) 也在该仓库当中, 而这一部分需要挪到主仓库当中。除此之外, 文件系统的挂载功能也没有被实现, 需要完善。另外在riscv32下IDE硬盘驱动似乎暂时不能工作, 目前是使用一段内存作为存储空间设备, 而该设备的写操作没有实现, 而事实上文件系统的写操作也没有被测试。
**lab8:**此部分主要涉及文件系统。文件系统本身的实现并没有包含在仓库当中,而是在另一个仓库[wangrunji0408/SimpleFileSystem-Rust](https://github.com/wangrunji0408/SimpleFileSystem-Rust)当中。注意除了 SimpleFileSystem 本身的实现, 文件系统的接口( VFS等) 也在该仓库当中, 而这一部分需要挪到主仓库当中。除此之外, 文件系统的挂载功能也没有被实现, 需要完善。另外在riscv32下IDE硬盘驱动似乎暂时不能工作, 目前是使用一段内存作为存储空间设备, 而该设备的写操作没有实现, 而事实上文件系统的写操作也没有被测试。
@ -46,4 +46,5 @@ ucoreOS lab基于x86结构, 主要由C语言完成编写。x86架构由于其
## 4 参考文献
## 4 参考文献
ucore OS lab实验指导书: https://objectkuan.gitbooks.io/ucore-docs/content/index.html
ucore OS lab实验指导书: https://objectkuan.gitbooks.io/ucore-docs/content/index.html
王润基同学的Rust OS开发文档: https://rucore.gitbook.io/rust-os-docs/
王润基同学的Rust OS开发文档: https://rucore.gitbook.io/rust-os-docs/