深度探索Linux操作系统 ——系统构建和原理解析
真正认真开始学习计算机是在2000年,当时书店里到处充斥着一系列如“21天精通xxx”、“7天掌握xxx”之类的图书,更有甚者宣称“24小时学会xxx”。既是高科技,又这么容易学,谁会拒绝呢?于是我走上了这一行。最初,确实如这些书所说,只要按照书中描述,将类似于Visual Studio等IDE安装到机器上,然后像搭积木一样,拖拽几个控件,再添加几行代码,一个程序就完成了。
短暂的兴奋后,好奇心驱使我想更深层次地探索这一切是如何发生的。于是我开始关注更多的书籍、更多的文章、更多的编程参考,国内的、国外的。但是,结果让我很沮丧,如果依然是用积木来举例子,我发现它们的区别就像一盒10块的积木和一盒100块的积木,只有量的变化,没有质的区别。有人说Win32编程更底层,于是我抛开MFC,研究Win32编程。但是,结局一样让我失望。其实它们也没有本质区别,只不过如果把MFC比作大块积木,Win32是小块积木而已。其间我又遍寻那些Windows内幕的书进行研读,也是铩羽而归,似乎前方已无路可走……
2003年4月毕业后,我到了中科院软件所工作,开始从事与Linux相关的开发。经历了从Windows到Linux转型的阵痛后,我开始喜欢上了Linux,因为它是开源的,我似乎看到了曙光。于是我开始疯狂地购买Linux方面各种各样的书籍,阅读各种权威资料,基本上网络上各种权威专家推荐的书籍在我的书桌上全部可以找到。其中,绝大部分是关于内核源码分析的书,于是我一头扎进讲解内核源码分析的书中。但是我很快淹没在庞大的内核代码中,几次都到了难以坚持的程度,但是我强迫自己坚持,强制自己接受作者的灌输。但是,最终的结果是:看的时候似乎明白,但是看完后感觉又什么也没有看。现在回头看,当初很有点像“盲人摸象”这个典故所描述的,在我还没有看清整个“大象”的时候,我就直接去研究“大象”的某些部分的构造了。
彷徨中,我又看到了另外一条路,低版本的内核。我就像一个在沙漠中饥渴难忍的人突然看到了绿洲,我甚至将低版本的内核打印出纸版,然后就像拿着伟人语录一样,只要觅得空隙,就虔诚地潜心研读。但是这条新路除了代码量小了点,与之前的相比并没有太多本质的区别,而且还有一个致命的缺点——早期版本的内核不能和工作中使用的Linux很好地结合。
2005年,我从软件所被派到了中科红旗。最初从事桌面操作系统的开发,使用的是基于Qt的KDE,因为比较成熟,所以当时做得更多的是一些维护工作。但是在我的探索过程中依然重复着上面的故事,没有任何的起色。转折大概出现在2007年,Intel因为一个低功耗平台项目开始和中科红旗合作,他们要在低功耗平台上开发一套Linux操作系统,我接手了这项工作。因为这个平台的处理器性能相对要低,所以对于操作系统的要求比较高。同时因为用于消费类电子产品,用户体验要求也与普通的PC环境完全不同。所以,基于已有的桌面系统几乎是不可能了。于是,我们开始从头开发和定制。
这个从零开始的过程,让我彻底认识了整个Linux操作系统,而不仅仅是Linux的内核。曾经对内核中很多做法和模块不明了,通过构建整个操作系统,我豁然开朗。比如,内核中的DRM模块,其全称是Direct Rendering Manager,从字面上看是直接渲染管理,这到底是什么意思?如果你仅仅从内核的角度来理解,相信我,你永远也不能正确理解它。恰恰是在构建系统时,亲手组装和调试图形环境,包括X、OpenGL、2D/3D图形驱动,让我明白了DRM的用途。这样的例子举不胜举。
经过这个过程中,我深刻认识到,学习操作系统,有三件最重要的事:第一是实践,第二依然是实践,第三还是实践。老祖宗说“纸上得来终觉浅”,唯物主义者说“实践是检验真理的唯一标准”,两句话中都蕴含着同一个道理——追求真理离不开实践。只是阅读、分析源码还远远不够,我们要动手实践,从实践中学习,实践反过来再促进思考。而且,实践也使学习不再是一个枯燥乏味的负担,而是一个乐趣。
通过这个过程,我也体会到,即使只为了学习内核,也不能将目光全部放在内核上。从整个操作系统的角度,从各个组件间关系的角度理解内核,效果反而更好。当对整个系统有了深入的理解后,再去理解组成操作系统的各个组件,会事半功倍。一旦从总体上理解了系统,你就会“艺高人胆大”,就可以尽情地“折腾”Linux系统了,因为每一个组件尽在你的掌握之中。而恰恰在这不断的“折腾”中,理论又得到不断的提高,从此进入一个良性循环。
很早我就想把这种方法整理成书,和更多的读者分享,希望帮助所有有志于操作系统、又尚在门外徘徊的年轻人少走些弯路。但是因为忙于生计,只能在有限的业余时间写作,所以直到2013年中期,才基本把整个书稿写完。
对于计算机而言,操作系统的重要性不言而喻,但它也是我们心中的痛,我将为此求索一生。如果有生之年没能成功,请将我埋在后来者脚下。