如果说 Linux 的出现是一个偶然,那么,席卷全球的 Linux 热潮则是一个奇迹,Linux
正以势不可挡的趋势迅猛发展,其发展前景是无法预测的。
有人说,“Linux 不就是类 UNIX 吗?”是的,它的外在表现形式确实与 UNIX 完全兼容,
这也是它赖以生存的基本条件。但是,它的内涵则完全不同,这首先体现在其源代码全部重
写及开放,其次是它的快速更新和发展,而更重要的是世界范围内众多计算机爱好者能通过
Internet 参与开发,由此可见,借助于 Internet 的肥沃土壤,Linux 的迅速发展是毫无置疑
的!
实际上,Linux 最本质的东西体现在其“自由”和“开放”的思想,“自由”意味着世
界范围内的知识共享,而“开放”则意味着 Linux 对所有的人都敞开大门,在这开放而自由
的天地里,你的创造激情可以得到充分的发挥。
Linux 内核源代码的开放给希望深入操作系统内部世界的人敞开无私的胸怀,我们有幸
走进了这个世界,这是一个神奇、错综复杂而又充满诱惑的世界,让喜欢迎接挑战的人们可
以充分检验自己的勇气和耐力。
Linux 内核全部源代码是一个庞大的世界,大约有 200 多万行,占 60MB 左右的空间。因
此,如何在这庞大而复杂的世界中抓住主要内容,如何找到进入 Linux 内部的突破口,又如
何能把 Linux 的源代码变为自己的需要,这就是本书要探讨的内容。
首先,本书的第一章领你走入 Linux 的大门,让你对 Linux 内核的结构有一个整体的了
解。然后,第二章介绍了分析 Linux 源代码应具备的基本硬件知识,这是继续向 Linux 内核
迈进的必备条件。中断作为操作系统中发生最频繁的一个活动,本书用一章的内容详细描述
了中断在操作系统中的具体实现机制。
众所周知,操作系统中最核心的内容就是进程管理、内存管理和文件管理。本书用大量
的篇幅描述了这三部分内容,尤其对最复杂的虚拟内存管理进行了详细的分析,其中对内存
初始化部分的详细描述将对嵌入式系统的开发者有所帮助。
在对 Linux 内核有一定了解后, 读者可能希望能够利用内核函数进行内核级程序的开发,
例如开发一个设备驱动程序。Linux 的模块机制就是支持一般用户进行内核级编程。另外,
读者在进行内核级编程时还可以快速查阅本书附录部分提供的 Linux 内核 API 函数。
网络也是 Linux 中最复杂的部分之一,这部分内容足可以写一本书。本书仅以面向对象
的思想为核心,分别对网络部分中的四个主要对象:协议、套接字、套接字缓冲区及网络设
备接口进行了分析。有了对这四个对象的分析,再结合文件系统、设备驱动程序的内容,读
者就可以具体分析自己感兴趣的相关内容。
Linux 在不断地发展,本书介绍的版本为 Linux 2.4.16。尽管本书力图反映 Linux 内核
较本质的东西,但由于笔者的知识有限,对有些问题的理解难免有偏差,甚至可能有“Bug”,
希望读者能尽可能多地发现它,以共同对本书进行改进和完善。
在本书的编写的过程中,笔者查阅了大量的资料,也阅读了大量的源代码,但本书中反
映的内容也仅仅是 Linux 的主要内容。因为一本书的组织形成是一种线性结构,而知识本身
的组织结构是一种树型结构,甚至是多线索的网状结构,因此,在本书的编写过程中,笔者
深感书的表现能力非常有限,一本书根本无法囊括全部。在参考书目中,我们将给出主要的
参考书及主要网站的相关内容。
本书的第一版是《Linux 操作系统内核分析》,在第一版的编写过程中,康华、季进宝、
陈轶飞、张波、张蕾及胡清俊等参与了编写。第一版出版后得到了很多读者的充分肯定和赞
扬,并授权台湾地区出版。在本次改版的过程中,依然保留了第一版的风格,但加深了对进
程管理、内存管理及文件管理等众多内容的剖析。
GNU 与 Linux 的成长
GNU 是自由软件之父 Richard Stallman 在 1984 年组织开发的一个完全基于自由软件的
软件体系,与此相应的有一份通用公共许可证(General Public License,简称 GPL)。Linux
以及与它有关的大量软件是在 GPL 的推动下开发和发布的。
自由软件之父 Stallman 像一个神态庄严的传教士一样喋喋不休地到处传播自由软件的
福音,阐述他创立 GNU 的梦想:“自由的思想,而不是免费的午餐”。这位自由软件的“顶
级神甫”为自己的梦想付出了大半生的努力,他不但自己创作了许多自由软件如 GCC 和 GDB,
在他的倡导下,目前人们熟悉的一些软件如 BIND、Perl、Apache、TCP/IP 等都成了自由软件
的经典之作。
如果说 Stallman 创立并推动了自由软件的发展,那么,Linus 毫不犹豫奉献给 GNU 的
Linux,则把自由软件的发展带入到一个全新的境界。
实际上,Linus 是一个理想主义者,但他又脚踏实地。当 Linux 的第一个“产品”版本
Linux 1.0 问世的时候,是按完全自由扩散版权进行扩散的。他要求 Linux 内核的所有源代
码必须公开,而且任何人均不得从 Linux 交易中获利。他这种纯粹的自由软件的理想实际上
妨碍了 Linux 的扩散和发展, 因为这限制了 Linux 以磁盘拷贝或者 CD-ROM 等媒体形式发行的
可能,也限制了一些商业公司参与 Linux 的进一步开发并提供技术支持的良好愿望。于是
Linus 决定转向 GPL 版权,这一版权除了规定自由软件的各项许可权之外,还允许用户出售
自己的程序拷贝。
这一版权上的转变对 Linux 的进一步发展可谓至关重要。从此以后,便有很多家技术力
量雄厚又善于市场运作的商业软件公司,加入到了原先完全由业余爱好者和网络黑客所参与
的这场自由软件运动,开发出了多种 Linux 的发行版本,磨光了自由软件许多不平的棱角,
增加了更易于用户使用的图形用户界面和众多的软件开发工具,这极大地拓展了 Linux 的全
球用户基础。
Linux 内核的功能以及它和 GPL 的结合,使许多软件开发人员相信这是有前途的项目,
开始参加内核的开发工作。并将 GNU 项目的 C 库、gcc、Emacs、bash 等很快移植到 Linux 内
核上来。可以说,Linux 项目一开始就和 GNU 项目紧密结合在一起,系统的许多重要组成部
分直接来自 GNU 项目。 Linux 操作系统的另一些重要组成部分则来自加利福尼亚大学 Berkeley
分校的 BSD UNIX 和麻省理工学院的 X Window 系统项目。这些都是经过长期考验的成果。
正是 Linux 内核与 GNU 项目、BSD UNIX 以及 MIT 的 X11 的结合,才使整个 Linux 操作系
统得以很快形成,而且建立在稳固的基础上。
当 Linux 走向成熟时,一些人开始建立软件包来简化新用户安装和使用 Linux。这些软
件包称为 Linux 发布或 Linux 发行版本。发行 Linux 不是某个个人或组织的事。任何人都可
以将 Linux 内核和操作系统其他组成部分组合在一起进行发布。在早期众多的 Linux 发行版
本中,最有影响的是 Slackware 发布。 当时它是最容易安装的 Linux 发行版本,在推广 Linux
的应用中,起了很大的作用。Linux 文档项目(LDP)是围绕 Slackware 发布写成的。目前,
RedHat 发行版本的安装更容易, 应用软件更多, 已成为最流行的 Linux 发行版本; 而 Caldera
则致力于 Linux 的商业应用,它的发展速度也很快。这两个发行版本也有相应的成套资料。
在中文的 Linux 发行版本方面,国内已经有众多的 Linux 厂商,如红旗 Linux,BluePoint
Linux,中软 Linux 等。每种发行版本有各自的优点和弱点,但它们使用的内核和开发工具则
是一致的