其实我在7月份就已经接触Rcore,并有所学习,不过只学到了进程管理那章,也没怎么做课后练习编程题。当11月初开始做Rcore时, 由于之前的积累,比较轻松地完成了Lab1。下面主要列举一下之后较难的2Lab的难点:

Lab2

难点在于理解跳板页面、TrapContext和TaskContext的区别。

跳板这个词是我以前接触不多的,大二学OS时采用了内核与用户态处在一个单地址空间的形式,不需要跳板页面,实现起来也比较简单。跳板的引入主要是为了在用户地址空间和内核地址空间进行切换时,CPU发出的虚拟地址在切换前后可以对应到正确的物理指令地址。

TrapContext记录的是用户态trap到内核态的上下文。TaskContext则是应用程序在内核态中发生任务切换时,保存的上下文。该上下文会指示该任务被重新调度时要返回的地址,其实就是__switch的下一条指令。

Lab4

文件系统的难点就在于代码量大,需要耐心阅读。其实文件系统重在分层,把每层的功能和重要的接口函数和功能理解清楚,做Lab就没有什么困难了。

总结

总的来说学Rcore时还算比较顺利,不过目前只做了4个Lab,想先进入第三阶段学习Hypervisor虚拟化了。