读书频道 > 系统 > linux > 深度探索Linux操作系统系统构建和原理解析
前言
2013-09-28 10:46:39     我来说两句 
收藏    我要投稿   
全书一共8章:第1章介绍了如何准备工作环境。在第2章中构建了编译工具链,这是后面构建操作系统各个组件的基础。在这一章中,不仅详细讲解了工具链的构建过程,而且还通过对编译链接过程的探讨,深入讨论了工具链  立即去当当网订购

为什么要写这本书

真正认真开始学习计算机是在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年中期,才基本把整个书稿写完。

对于计算机而言,操作系统的重要性不言而喻,但它也是我们心中的痛,我将为此求索一生。如果有生之年没能成功,请将我埋在后来者脚下。

读者对象

对于如同笔者一样怀揣操作系统梦的爱好者,希望本书能帮他们顺利地迈进操作系统这扇门;对于正在或者准备学习操作系统理论的大学生,本书将帮助他们感性地触摸那些“高居庙堂之上”的抽象理论;对于高级读者,本书中的很多内容对他们也很有用处,比如动态链接部分的讨论、Linux图形原理部分的讨论等。

除了以上的读者外,本书适合以下相关从业人员阅读

系统程序员。要想成为一个合格的系统程序员,操作系统和编译链接技术是必不可少的技能,本书对此有较深入的讨论。

嵌入式Linux工程师。作为一名嵌入式Linux工程师,应该知道如何使用交叉编译工具链、配置编译内核、裁剪系统、搭建图形系统,甚至定制桌面环境,这些相关知识读者在本书中都可以找到。

Linux发行版工程师。作为制作发行版的工程师,更需要彻底熟悉操作系统的每个组件以及组件间的关系,本书可以满足他们这方面的需求。

Linux应用开发工程师。对于应用开发程序员,也推荐阅读本书,因为越深入地理解操作系统和编译链接原理,就越能写出高效而简洁的程序。

如何阅读本书

本书围绕着构建一个完整的Linux操作系统这一主线展开,除了第1章外,其余各章环环相扣,所以请读者严格按照章节顺序阅读。

工欲善其事,必先利其器。尤其是对于这样一本实践丰富的书来说,工作环境是后续内容的基础。因此,第1章介绍了如何准备工作环境。但是类似安装Linux发行版这样的内容,相关参考随处可见,因此书中并没有浪费篇幅去一一介绍,而是仅仅指出其中需要特别注意之处。

工具链是后面进行构建的基础,因此,接下来在第2章中构建了工具链。工具链是整个操作系统中非常重要的一部分,理解工具链的工作原理,对理解操作系统至关重要,所以第2章中并没有仅仅停留在构建的层次,还通过探讨编译链接过程,讨论了工具链的组成以及各个组件的作用。

在第3章和第4章,我们从零开始,构建了一个具备用户字符界面的最小操作系统。同时在第5章,我们从更深层次的角度探讨了这一切是如何发生的。我们从内核的加载、解压一直讨论到用户进程的加载,包括用户空间的动态链接器为加载程序所做的努力。

在第6章和第7章,我们首先构建了系统的基础图形系统,然后在其上构建了桌面环境。在第8章,我们深入探讨了计算机图形的基础原理,讨论了2D和3D程序的渲染、软件渲染、硬件渲染,我们也从操作系统的角度审视了Pipeline。

笔者强烈建议读者在真实的计算机上安装一个Linux操作系统,让它成为你日常的工作机。然后将书中的,尤其是与实践相关的所有命令实际运行一遍。之后再尝试脱离本书,自己争取从头再构建一遍,相信你一定会在这个过程中受益匪浅的。

勘误和支持

由于作者水平有限,加之编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者提出宝贵意见,批评指正。来信请发送至邮箱baisheng_wang@163.com,笔者会尽自己最大的努力给出回复。

致谢

首先感谢恩师李明树先生,是他将我带进了操作系统这扇大门。

感谢机械工业出版社华章公司的策划杨福川,在他身上我看到了专业精神,这也是我在与几个出版团队沟通后,毫不犹豫地决定请他们出版的原因。

感谢机械工业出版社华章公司的姜影编辑,她清晰的思路让我深深折服。每每在遇到困惑不知如何表达时,她都能通过简单的几句话点醒梦中人。

感谢我的父母,感谢他们的养育之恩。感谢我的哥哥,为了让我受到更好的教育,在他刚刚毕业不久,就顶着生活的压力,将我从农村接到了城里接受教育,为我的学业奔波操劳。感谢我的嫂子在生活上给予我的无微不至的照顾。把最后一份感谢留给我的妻子,是她在我工作这些年,承担了照顾父母、操持家务的重任,是她的无私付出让我能全身心地投入到工作和学习中。

王柏生
北京

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:深度探索Linux操作系统系统构建和原理解析
下一篇:目录
相关文章
图文推荐
3.3.6 GNOME的软件管
3.3.5 GNOME的文件管
3.3.4 GNOME的窗口管
3.3.3 收藏夹和快捷
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站