本人是一名网络软件工程师,从事高性能网络相关的工作,从而有机会接触到内核相关的东西。但工作中学到的东西往往犹如隔靴搔痒,不得痛快。
于是自己也尝试在用c 重写linux 0.11。这里推下我个人的仓库,目前进行到inode操作,与rcore的进度其实高度吻合。
这个项目还是基于i386架构,在做的过程中让我感受到了与现实世界的差距。也看到过一句话,一个人可以走的快,但一群人可以走的更远。
为了更远的目标以及更贴近生产环境,我参加学习了这个基于risc-v架构rcore的几个基础课程。
虚拟内存管理
个人认为操作系统中最复杂的就是虚拟内存管理,在rcore的课程中,学习了 risc-v 的页表结构,pa 到 va的转换过程,以及va和pa的管理。
调度
这里主要讲了怎么进行上下文的切换(两个kernel stack) 的切换,特权级的切换(S to U/ U to S)。还实现了一个简单的stride调度算法。
并发
学到了怎么创建线程,以及线程间的资源管理逻辑。实现了mutex,信号量,con_var,还实现了一个简单的死锁检测。
文件系统
学了 easy-fs 的文件管理方式,以及通过高速缓冲区实现对磁盘的访问。