本书着重于对Lin。系统最新版本(2甲4.0)内核源代码进行情景描述和情景分析。什么是情景描述?什么是情景分析?不妨以英语的教学为例。大家都知道,有‘种很有效的方法是通过“情景会话”学习英语。例如,去剧院问路要说些什么,去图书馆借书要说些f么,去餐馆吃饭碰上了熟人又说些什么,等等。每‘个这样的“情景”都是·个常见或常用的会话过程。以这样的一些情景为线索,沿着这些线索讲解“这足被动语态”、“那是习惯用法”,就容易引起学习人的兴趣从而印象深刻,并目.每学了这样一个情景就能够实际运用。另外,由于来自现实生活的情景在语法、语义等方面都不是单一的,在学习一个情景的时候通常都会涉及该语言种种不同的方面,通过一系列精心安排的情景会话的学习,就能对英语逐步地建立起比较全面的认识。事实上,就英语的学习而言,纯粹的系统化学习方法儿乎是不现实的。事实上,很少有人通过读字典来学单词,而都是结合课文来学,侮篇课文实际上也是一个情景。当然,系统化的学习还是要的,学了情景对话以后还要再系统地学习语法。但是无可否认的是,从情景对话入手学习英语比从语法入手要有效得多。相信读者会有这方面的体会和经历。现在来看对Linux内核的学习。如果以若十经过精心安排的情景为线索,例如,打开一个文件的全过程,执行一个可执行程序的全过程,从一个进程发送一个报文到另一个进程的过程等等,结合内核源代码逐个加以讲解,j}且在讲解过程中有针对性地介绍所涉及的数据结构和算法,读者就能得到对整个内核的生动而深刻的理解。本书的宗旨之一就在于引导读者走过许多这样的“情景”,从而建立起对Linux内核的全面的认识。至于情景的安排,仍然按照操作系统的原理分成若干章,例如存储管理、进程管理、文件系统等等。在每一章中,除了必要的叙述以外,都挑选了若干重要的情景,结合源代码逐个加以讲解。木一书所用的源代码,刚开始编写初稿时取自当时最新的Linux内核2.3.38版,后来历经2.3.98和2.4.0测试版,最后依据2.4.0正式版重新修改定稿。读者可以在相关的网站上自行下载该版内核的全部源代码。可以肖定,当读者看到本书时,县至本书付印时,最新的版本己不再是2.4.0了。但是不管怎样我们总得要锁定1个版本,这就是2.4.0一般情况下,分析操作系统源代码的专著或教材习惯上都是这样安排的:以主要数据结构的定义为核心,以数据结构之间的联系为线索,内容则以对文件、模块和函数的功能描述为主,辅以若+函数,},的代码片断作为实例,以达到介绍、分析各种特定机制的目的。这种思路和安排基本上类似一于先讲语法规则后举一些例句的外语教学方法,它比较适合于只要求对内核和它的原理有粗略了解的读者,但对需要深入理解内核或实际从事这方面工作的读者就未必合适。其实,这种安排对于初学者也未必足最好的。不错,要理解·个操作系统的内在机制及其实现机理,当然需要了解r工要数据结构的组成,了解数据结构之间的联系,了解整个内核代码的模块划分、文件划分和功能分解,了解土要函数对有关数据结构操作的大致逻辑流程。问题在于,怎样才能使读者和学生达到这些要求。根据我们多年来的切身体会,我们决定从具体、鲜活的源代码入手作情景分析,在分析过程中逐步引入相关的数据结构和互相问的联系,介绍具体函数的逻辑流程及其物理背景乃至代码作者的某些.RIC7j超技巧,让读者和作者一起完成必要的抽象过程,通过读者的思索,最后达到深入而全面的理解。对十从事系统设计或实现的读者,源代码的阅读和理解是一项重要的基本功。写小说的人人多是读了许多名著和文学评论以后,而不是读了“小说概论”以后才学到写作技巧,进而写出受读者喜爱的作品。写程序的人又何尝不是如此。木书的日的之一就是为读者提供一些类似于文学评沦的材料。另」方而,源代码的阅读和理解也是必要的。在某种意义上,源代码本身既是最准确的说明书也是最权威的教科一!弓,因为山它所构成的系统切切实实在运行。我们自己就有过这样的经历:学了一些原理和抽象的流程就自以为懂了,可是拿源代码一看却怎么也对不上号。于是卜决心钻进去,花了九牛二虎之力才搞懂. Linux内核源代码还为计算机行业的工作人员树立了一个参照物。我们在工作寸,常常看到,人们(包括我们自己)在碰到问题fl寸往往会先想·想:这在Linux(以前是Unix )甲面是怎样实现的?或者在Linux环境中能台实现?再查看‘下有关的源代码,便有了土张。有时甚至就在源代码中找几个文件加以裁剪、修改,问题很快就解决了(但须遵守GPL中的有关规定)。诚然,Linux内核源代码的阅读和理解是个艰苦的过程,最好能有些指导,有些帮助,而这正是我们写作本一伟的目的。
1