JOS操作系统

操作系统,江湖流传着 计算机三大浪漫之一。在学习这门课时,如果仅仅把目光停留在课本上一些关于操作系统概念上的叙述,并不能对操作系统有着深层次的理解。 当然也
体会不到其中的浪漫

MIT的操作系统课程6.828是大家口中的OS神课。麻雀虽小,五脏俱全。它能够
帮助我们真正的了解操作系统在做什么以及一个小型OS具体到代码是如何实现的。开始折腾吧,它值得你付出时间和精力。

我将该项目的目前完成Lab的代码实现托管在github上,传送们.欢迎star

虽然之前读过《深入理解计算机系统》,读完之后对很多OS的概念和实现细节都是只见树木不见森林。然后从寒假回家就窝家里开始刷Lab。目前对OS的理解清楚了很多,
从书本概念到0距离接触代码这一过程,将很多之前学习过的知识点都串了起来。比如elf文件的理解,函数调用的底层机制实现。当然汇编代码的阅读能力,没有了之前对它的恐惧感,算是得到质的提升吧。

不可否认的是有些Exercise真的非常让人头痛、一个bug可能会调很久甚至几天没有进展。一
个概念查阅大量的资料,反复的理解,一遍又一遍地认识

具体每个Lab所完成的工作(目前只刷到lab4)

  • Lab1是熟悉的过程,需要学习QEMU模拟器的使用、开机启动流程、调试工具、bootloader、以及整个加载kernel的流程。做完这个lab会具备基本的内核调试能力,以及掌握开机到通电,
    bootloader是如何加载kernel的。

  • Lab2要完成
    JOS的的内存管理模块,需要学习一些计算机基础知识,如虚拟地址系统是如何工作的,地址空间是如何切分的,物理页面是如何管理的。做完这个lab将会给JOS添加最基本的内存管理功能,即
    Kernel其余模块需要物理页,这个模块可以分配出来

  • Lab3为
    JOS添加进程的支持、异常/中断的支持、系统调用和页中断的支持。这个lab内容比较多,但收获也比较大,做完后会对从用户态陷入内核态,执行系统调用,然后返回这整个流程都非常清楚(不是泛泛的清楚,而是代码级别的清楚,这是和学概念不同的地方)。

由于考研,准备实习,该项目也就暂时搁浅了。Lab4为
JOS添加多核支持、RR调度、COW的fork、抢占式内核、时钟中断和最基本的IPC机制。Lab6为
JOS添加网络的支持。这两个Lab对我来说,还是有很大的吸引力。日后一定会抠出时间,将它们完成。至于Lab5的文件系统,本人不太感冒。
PS:想想之后
将Dartnet协议栈移植到JOS就激动,先在这挖个大坑吧

归根结底这只一个课程OS,JOS还有很大的提升空间,离工业级使用还差很多,以下是一些改进点:

  • JOS和xv6的内存管理方式都是空闲链表,这导致
    如果内核想要连续的物理内存,将十分困难,所以linux采用了buddy system来解决碎片问题。

  • JOS和xv6的进程调度是最简单的RR方式,这使得它们
    无法应用在某些特殊的场景下,而且父进程很容易fork子进程把CPU时间全抢了

打算之后再读读《Linux内核设计与实现》,
发现JOS到底哪里做得不好以及Linux是如何解决的
最后
感谢开源,在刷Lab的过程中遇到不少的坑,总能从前辈的经验中学习,帮助自己更有方向性的解决问题

参考链接
推荐一门课:6.828