前言



Linux是Internet的产物,从属于一个学生(Linus Torvalds)的个人爱好演变成为一 个当今最流行的免费操作系统。对许多人而言,Linux是乎是个迷。 一个免费的东 西怎么会有价值?在一个被一群软件巨头统治的(系统)软件王国里,一个由一些电 脑hackers编写的操作系统如何能够参与竞争?一个由不同的国家许多不同的人编写 的软件如何能够保持其稳定性和高效性?这里的答案是Linux具有非常好的可靠性, 高效性和竞争能力。许多大学和研究机构都在用Linux来作计算。许多人们已在其 PC上安装了Linux。绝大多数公司都或多或少地在使用Linux。Linux被广泛地用来浏 览web站点,文件处理,发送email ,玩计算机游戏。Linux绝不是一个计算机界的 玩具,而是一个由全世界的爱好者开发的非常完善的,专业化的操作系统。 Linux 的源头可以追溯到Unix 家族。1969年,贝尔实验室的研究人员Ken Thompson其 开始在一台空闲的PDP-7机器上实验其多用户,多任务的操作系统(multi-user, multi-tasking operating system) 。不久Dennis Richie和其他两位同事加入了他的行列。他们与 实验室中的其他同事一道开发出了最早期的Unix版本。Richie在早期的项目MULTICS 中发挥了很大的作用。Unix其实是MULTICS的双关语。早期的Unix是用汇编写的。第 3版时采用了C语言。C语言是Richie设计并编写的,以用来作为编写操作系统设计的 语言。用C改写过的Unix使得Unix可以被移植PDP-11/45 和DIGITAL 11/70 计算机上。 Unix移植到DIGITAL 11/70是一个历史性的转折,使得Unix正式从实验室走向大型机 计算环境。很快,绝大多数的计算机制造商都发布了其相应的Unix版本。 Linux诞生的原因极其简单。Linus Torvalds,Linux的作者和主要管理者,当时穷 的只能够付的起Minix。Minix是一个非常简单,Unix风格的,被广泛用在教学上的 操作系统。Linus对Minix的功能不是很满意(译者注:不知Andrew Tanenbaum看见这 句话会有何感想。“后生可畏?”。有兴趣的读者可以访问Andrew的主页.) 决定自己动手编写一个软件。因为在学校里每天用的都是Unix, 所以他选择将Unix作 为他的软件的模型.最开始的工作是在一台Intel 386 的PC机上。他的进展很迅速。 Linus对他所做的事情充满了兴趣,并通过刚刚出现的,还局限在学术领域的计算机网络, 将已有的代码共享给其他的学生。 其他的人看见了Linus的软件并开始加入开发的行列。 不同的人由于在使用Linux时碰到不同的问题,所以这个软件也就不断地被更新和完善。 不久之后,Linux就成为一个完整的操作系统了。值得注意的是Linux中没有任何Unix代码, 而是根据POSIX标准重新编写的Linux中使用了许多在Cambridge, Massachusetts的Free Software Foundation的提供GNU软件。 多数人仅把Linux 当做一个简单的工具来使用。也有许多用户在Linux进行应用程序 的开发。只有很少数的人敢于为Linux写设备驱动程序和核心的patches(译者注:这 个词不太好翻译)。 Linus Torvalds接受来自任何人和地方的关于核心的补充和修改。 这似乎有点象无政府主义。当Linus严把质量关并由他自己将新的代码加入核心。当 然,在任何时候,从事Linux核心开发的人员毕竟是只有一少部份人。 大多数Linux用户似乎不关心这个操作系统是如何构造和运行的。这不是个明智的决 定因为学习Linux是更多理解一个操作系统功能的有利途径。Linux不仅仅是设计的 很好,更重要的是其源代码是公开的。这是因为虽然作者拥有这个软件的版权,但 在Free Software Foundation's GNU Public License的基础上,源代码是可以免费 获取的。对刚接触源码的人,起初会觉得迷惑当看见一些叫做kernel,mm,和net的 子目录。它们含有些什么?这些代码是如何工作的?为了解决上述问题,我们需要 的是对整个Linux的结构有个总体的了解。这也正是本书的目的:提供一个关于Linux核 心如何工作的清楚的画面,从而使得当你在运行一些应用程序时,你可以明白操作 系统核心处正在发生着什么(译者注:这一点是为什么要鼓励应用程序开发者了解操 作系统的结构。例如,不理解操作系统的调度,很难想象一个应用程序开发者可以 编出一个高效的多线程并发程序)。 (此处译者略去原作者的自我介绍,有兴趣的读者可以访问其site) 这本书讲述的是Alpha AXP-based Linux版本(译者注:这是因为作者在写此书时在 Digital公司(后来被Compag吞并;著名的Alta Vista seearch engine出自Digital)任 职。然而95%的Linux核心源代码是与具体的硬件平台无关的。换而言之,本书95%的 内容是讲述与硬件无关的Linux核心。 关于读者 本书不要求读者必须具备任何知识和经验的前提。我们假设读者会在需要时补充相 关的知识。具备一定的计算机知识和C语言功底将帮助读者更好地理解本书。 本书的组织 本书并不是关于Linux内部的手册。它是关于通常意义上的操作系统,特别是对于Linux的 介绍。每一章节按照从”普通到特殊“的规则来布局。首先在具体介绍细节之前, 我们给出一个对核心子系统的综述。 关于核心的具体算法被特意地略去。有兴趣的读者可以参阅具体的源代码。本书将 重点放在核心数据结构和其之间的关系上。 本书每一章都相对独立,就象每一个Linux子系统完成相对独立的功能一样。当然章 节之间也是相关联的。例如,你不能很好地描述一个进程如果不理解虚拟内存是如 何工作的。 硬件基础章节给出一个对当代PC的简要介绍。一个操作系统必须工作在一个硬件基 础上。操作系统中的某些功能是与硬件相关的。为了理解Linux操作系统,读者需要 具备一定的底层硬件知识。 软件基础章节介绍了基本的软件知识原理并论及了汇编和C语言。它们都是编写一个 操作系统不可缺少的工具。另外本章给出了对操作系统的功能和目标的一个综述。 内存管理章节描述了Linux如何管理系统中的物理和虚拟内存。 进程章节描述了什么是一个进程,Linux核心如何创见,管理和删除系统中的进程。 进程之间,进程与核心之间通过通讯来调整/安排它们的行为。Linux支持很多种进 程间通讯--IPC(Inter-Process Communication)机制。信号与管道是其中的两种Linux还 支持System V IPC机制。关于IPC机制的内容在IPC章节描述。 PCI标准是一个高效的PC总线。PCI章节讲述了Linux核心如何初始化合使用PCI总线 和系统中的PCI 设备。 中断和中断处理章节探讨了Linux核心如何处理中断。尽管操作系统核心里提供一些 通用的机制和接口来处理中断,一些关于中断处理的细节是与硬件体系结构有关的。 Linux的优点之一是它支持许多硬件设备。设备驱动程序章节描述了Linux核心如何 控制系统中的物理设备。 文件系统章节讲述了Linux核心如何维护其文件系统中的文件,描述了虚拟文件系统 (Virtual File System)和如何支持Linux核心中的真正文件系统。 网络与Linux是一对同义词。从某种真实的意义上讲,Linux是Internet或World Wide Web (WWW)的产物。Linux的开发和使用 者通过web来交换信息和代码 。Linux=通常 被用来支持机构的网络需求。网络章节描述了Linux如何支持TCP/IP协议族。 核心机制章节探讨了Linux核心需要支持/完成的一些通用任务和机制,以用来使得 核心其他部份有效地工作在一起。 模块章节讲述了Linux如何动态地装载功能模块,例如文件系统。 源代码章节描述了对应于特定的核心功能的Linux核心源代码地址。读者可以依据本 章的介绍来开始阅读源代码。 本书的约定 serif font 用户必须输入的命令或文本。 Type font 数据结构和数据结构中的域。 本书中所引用的源程序都基于相对路径/usr/src/linux。如foo/bar.c,则其实际的 路径是/usr/src/linux/foo/bar.c。 商标 Caldera, OpenLinux and the ``C'' logo are trademarks of Caldera, Inc. Caldera OpenDOS 1997 Caldera, Inc. DEC is a trademark of Digital Equipment Corporation. DIGITAL is a trademark of Digital Equipment Corporation. Linux is a trademark of Linus Torvalds. Motif is a trademark of The Open System Foundation, Inc. MSDOS is a trademark of Microsoft Corporation. Red Hat, glint and the Red Hat logo are trademarks of Red Hat Software, Inc. UNIX is a registered trademark of X/Open. XFree86 is a trademark of XFree86 Project, Inc. X Window System is a trademark of the X Consortium and the Massachusetts Institute of Technology. 感谢 I must thank the many people who have been kind enough to take the time to e-mail me with comments about this book. I have attempted to incorporated those comments in each new version that I have produced. Special thanks must go to John Rigby and Michael Bauer who gave me full, detailed review notes of the whole book. Not an easy task.