这是一个很早就想要作的系列,从零开始写一个小的操做系统,算是致敬之前学校里作的 OS 项目,也是但愿能帮助到对这一块感兴趣的同窗。html
操做系统是计算机专业的核心学科,但我想即便是不少大学的 CS 本科操做系统专业课,也未必会设置这样规模和难度的项目。我是在 CMU 读研时修了它们的本科课程 15-410,这是课程的最大一个项目做业。对于不少计算机专业的同窗,以及非科班转计算机的同窗,尝试去作,哪怕是读懂这样一个项目,我想都是大有益处的。编程
网上也有不少相似的很好的系列教程,我也但愿个人这个系列可以稍微带来些不同的地方,你能够大概地有个心理预期:多线程
为了读懂这个系列,你须要有足够的专业知识准备,总的来讲就是大学操做系统专业课的全部理论知识,不要求精通,但最起码能了解,须要用到的时候知道怎么去查。这里推荐《深刻理解计算机系统》这本书,若是你的水平已经覆盖了这本书,那么能够继续了。工具
再具体一些,但愿你的理论和实践能力能够覆盖如下这些:操作系统
是否是看上去有点多......这的确是对你的基本要求,但仍是那句话,不要求熟练精通,只须要能”了解“,你能够只有一个模糊的理论概念,薄弱的实践基础,能够在项目中提升这些能力,这其实也是这个项目的终极目的所在。线程
仅仅看我这个系列可能未必足够,也不必定对每一个人适合,因此我推荐一些我看过的书和教程:htm
这个系列是很是推荐的,做者的重点把握明确,组织结构和代码很是清晰。但这个系列项目规模偏小,没有 boot loader 和内核成形后的线程,进程以及系统调用方面的内容,总体比较偏 Demo 和教学性质,很适合初学。教程
这也是很推荐的一本书,与上面的系列相反,这本书从头至尾完整地实现了一个功能比较完善的内核,规模比较大,并且做者的讲解很细致,不厌其烦,甚至我都以为有些啰嗦,比较适合在实际项目开发中做为参考和理论手册查询,而不适合从头至尾通读。进程
个人这个系列项目其实参考并综合了以上二者,取了折中,把规模和难度控制在了我认为比较合理的程度。图片
在开始系列以前,咱们首先列一下项目的目录清单,后面把这些坑一个个填上。