本人算是对操作系统比较熟悉,之前做过 xv6-riscv 实验,这次体验了 Rust 的操作系统试验。
ch3
ch3 可以说是 rCore 的入门题,帮助上手 rCore 的代码以及 rust 系统编程,还帮助熟悉 risc-v 的特权级指令。
ch4
ch4 主要是熟悉了操作系统的内存管理,从此,用户的地址空间和内核的地址空间隔离开,同时开启了页表。 ch4 实验重点是在内核和用户空间传输数据,因为内核是恒等映射,而用户空间开启了分页。如果二者没有共用页表,那么就需要手动模拟地址转换,并且还需要按照分页去写内存,因为一次返回的数据可能在不同的页中。此外还实现了简单的空间分配和管理,实现了简单的 mmap 和 munmap。
ch5
ch5 主要实现的进程管理和进程调度。把 fork 和 execve 融合魔改出来一个 spawn 能加深对 fork 和 execve 的印象。
ch6
ch6 是完善 easy-fs 的功能,但是我认为 easy-fs 没有解析路径、构建树形目录结构不能让学生了解到一个功能比较正常的文件系统的样子,而在此过早将 easy-fs 与其它内核模块解耦合也带来了增加功能和 debug 上的困难。
ch8
ch8 要求实现死锁检测算法,但是传统的银行家算法要求预先知道各个线程需要的资源,并且没有考虑线程因等待资源而阻塞的情况,这与现实的操作系统有出入。在现实中,可以认为阻塞的线程所需要资源为它所需的全部资源,将检测的申请资源调用后的状态作为最终状态,只需要检测此次申请是否可能死锁。
总结
对 rCore 的学习与实践更深入了解了操作系统的基本原理,也锻炼了 rust 代码能力。