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