博客很久都没有更斯了,因为一直在忙于一个小项目的开发。
事情的起因是这样的:因为今年开设了操作系统课程,但是纯粹的理论学习始终给我一种漂浮在云中的感觉。为了能在实践中深刻理解操作系统的运行机制和x86CPU以及硬件原理,我决定自己动手写一个操作系统内核的Demo程序。
当然,一开始没有相关的基础自然要找资料去学习。在翻阅了于渊的《Orange’s 一个操作系统的实现》和川合秀实先生的《30天自制操作系统》后感觉这两本书都不是很适合初学者学习。前者体系略乱且在一开始就陷入了硬件机制的漩涡,容易让初学者找不到北;后者不需要初学者有足够的基础,但是在硬件机制等内容上过于简略。只适合一般的爱好者去使用,而作为计算机专业的同学只能作为参考。(肆意诋毁大神作品,罪过罪过……)
后来在Google上搜索到了《JamesM’s kernel development tutorials》这篇文档后,我立即被作者合理有序的安排所吸引。我理想中的教程就是这样的,应该一步一步逐渐搭建起整个系统原型,由“发现问题——寻找机制——建立策略”的流程来处理。而不是一股脑的告诉我们所有的硬件机制,然后才是一般性的实现策略。
我主张的学习方法就是先学习一个新事物的基础框架和基本的模式结构,而旁枝末节的细节问题完全可以交给实践去慢慢掌握。暂时用不到的东西就不要告诉读者,完全可以用到了再慢慢补充。同时以任务和实践的方式驱动学习过程,既提升了理论学习的速度,又充满了实践的乐趣和成就感。
不过我在实践的过程中逐渐发现了这篇教程还是过于简陋,很多地方知其然而不知其所以然,并且部分的代码存在BUG。虽然代码能在当前的测试中通过,但会导致复杂化后其它的模块出现问题。另外这里调试也存在问题,若是能实现内核代码级别的调试功能就能极大的方便学习和开发。
出于这些问题,我对整个项目代码进行重构,参考Linux内核的代码命名和一些基础设计进行重新演绎,参考MIT的XV6系统和清华的XV6升级版ucore等内核给这个内核Demo增加了很多新的模块和机制。考虑到方便以后的同学在学习操作系统理论时参考这个实现,我决定对原始的英文文档进行重写。
重写的文档使用XeLaTex进行编写,是完全抛弃了原文的重新演绎,并且配上了很多参考资料和图片以及代码说明。我相信这个新的内核Demo项目以及其所属文档能给后来者带来极大的便利。这个内核Demo现在还很不完整,但是由于个人时间的原因,没有办法再进行开发和增补,希望有兴趣的同学能继续研究下去。
项目主页点击这里,完整的代码和文档也在其上,我甚至提供了文档分章节的阶段代码目录以供后来的同学参考。
为了便于后来的同学修改和丰富文档内容,我提供了文档的XeLaTex的源码。文档源码和文档同时以 署名-非商业性使用-相同方式共享 3.0 中国大陆协议 发布。
最后,因为我个人水平有限,代码和文档中的疏漏在所难免。希望看到错误的同学能给予指点,在此谢过。