6 内 容 提 要 本书讨论了 Linux 内核的概念、结构和实现。主要内容包括多任务、调度和进程管理,物理内存的管理 以及内核与相关硬件的交互,用户空间的进程如何访问虚拟内存,如何编写设备驱动程序,模块机制以及虚 拟文件系统,Ext 文件系统属性和访问控制表的实现方式,内核中网络的实现,系统调用的实现方式,内核 对时间相关功能的处理,页面回收和页交换的相关机制以及审计的实现等。此外,本书借助内核源代码中最 关键的部分进行讲解,帮助读者掌握重要的知识点,从而在运用中充分展现 Linux 系统的魅力。 本书适合 Linux 内核爱好者阅读。 图灵程序设计丛书 深入Linux内核架构 ◆ 著 [德] Wolfgang Mauerer 译 郭 旭 责任编辑 傅志红 执行编辑 印星星 杨 爽 ◆ 人民邮电出版社出版发行 北京市崇文区夕照寺街14号 邮编 100061 电子函件 315@ptpress.com.cn 网址 http://www.ptpress.com.cn 北京 印刷 ◆ 开本:800×1000 1/16 印张:66 字数:1852千字 印数:1 — 3 500册 2010年 6 月第 1 版 2010年 6 月北京第 1 次印刷 著作权合同登记号 图字:01-2009-5737号 ISBN 978-7-115-22743-0 定价:149.00元 读者服务热线:(010)51095186 印装质量热线:(010)67129223 反盗版热线:(010)67171154 前 言 1 版 权 声 明 Original edition, entitled Professional Linux Kernel Architecture, by Wolfgang Mauerer,ISBN 9780470343432, published by John Wiley & Sons, Inc. Copyright © 2008 by Wolfgang Mauerer. All rights reserved.This translation published under License. Translation edition published by POSTS & TELECOM PRESS Copyright © 2010. Copies of this book sold without a Wiley sticker on the cover are unauthorized and illegal. 本书简体中文版由John Wiley & Sons, Inc.授权人民邮电出版社独家出版。 本书封底贴有John Wiley & Sons, Inc.激光防伪标签,无标签者不得销售。 版权所有,侵权必究。 2 3 4 5 6 7 8 9 10 11 引 言 V 1 引 言 UNIX操作系统简单而一致,但只有天才(至少程序员)才能领会并欣赏其简单性。 ——Dennis Ritchie 2 13 作者注:是的,我们疯了。预先警告:你们也会一样。 ——Benny Goodheart 与James Cox UNIX操作系统以简单、一致、优雅的设计著称,这种真正非凡的特性使得UNIX系统在超过1/4 世纪的时间里影响了整个世界。而且,正是由于Linux的蓬勃发展,发源于UNIX的思想才依然活力依 旧,并在可预见的未来其发展势头会一直持续下去。 UNIX和Linux操作系统带有某种强烈的吸引力,前述的两段引文很好地描述了这种吸引力的精神 本质。UNIX操作系统诞生于贝尔实验室,Dennis Ritchie是其发明人之一。他在引文中提到,只有天 才才能欣赏UNIX操作系统的简单性,这是否是完全正确的呢?显然不是,因为Ritchie在经过全面考 虑后立即改口,称程序员也同样有资格欣赏UNIX操作系统。 UNIX和Linux操作系统的源代码复杂、文档少、对程序员的要求高,要想看懂这些代码并不是一 件容易事。但只要一个人开始感受到内核源代码中所能获得的远见卓识,那就很难逃脱Linux的吸引 力了。在此我给读者提出一个忠告:一旦开始潜心钻研操作系统内核,就很容易沉溺于此种乐趣之中。 事实上,Benny Goodheart和James Cox在其书The Magic Garden Explained(该书解释了UNIX System V 的内部实现机制)的序言中,早已对此做过说明(前文第二段引文)。当然,Linux肯定也能让读者发 疯! 本书可用作指南和手册,引导读者阅读内核源代码,并使得读者能够更敏锐地体会到这些代码的 美丽、优雅,以及相关概念在设计上的美学取向。当然,要理解内核,是有一些前提条件的。读者必 须熟悉C语言。如果对您来说C只是一个字母,或者是一门外语,那可以休矣。操作系统绝非仅仅是一 个“开始”按钮,熟悉少量相关的算法绝对是有益无害的。最后,如果读者对计算机体系结构有一定的 了解,而不是仅仅知道如何造一个新奇的机箱,那就更有用了。从学术观点来看,上述要求比较接近 于系统程序设计、算法和操作系统原理课程。本书的前一版本已经在几所大学用于向高年级本科生讲 授Linux原理,我希望这一版也能用于同样的目的。 本书不可能对前述的所有主题都进行详细讲解,在读者思考拿在手里的这本大部头书的时候(当 然也可能因为书太厚,没拿在手里),读者肯定会同意我的看法。如果某个主题与内核没有直接的关 系,但对理解内核的运作机制是必需的,那么我会在书中相关之处简要介绍它。如果读者需要更透彻 地理解相关知识,可以查阅我推荐的有关计算机原理方面的图书。市面上有大量的教科书可供选择, 我觉得某些图书特别具有启发性,包括Brian W. Kernighan和Denis M. Ritchie的C Programming Language 14 15 16 17 18 19 VI 引 言 [KR88];Andrew S. Tanenbaum的Modern Operating Systems [Tan07](该书是关于一般操作系统的基础 知识),Andrew S. Tanenbaum和Albert S. Woodhull的Operating Systems:Design and Implementation [TW06] (该书是关于UNIX操作系统(Minix)的),W. Richard Stevens和Stephen A. Rago的《UNIX环境高级编 程(第2版)》[SR05](该书是关于用户空间程序设计的),还有John L. Hennessy和David A. Patterson的 两本书Computer Architecture和Computer Organization and Design [HP06, PH07](这两本书是关于计算 机体系结构基础的) 。上述图书都是公认的经典。 此外,附录C包含了一些内核中用到的GNU C编译器扩展的相关信息,但这些扩展在一般的程序 设计中并未广泛应用。 在撰写本书第一版时,内核的发布基本上不存在预定计划。正如我在附录F中讨论到的,这一点 在内核2.6的开发期间发生了很大的变化,内核开发者在这方面做了很好的改进,开始以可预测的间隔 周期性地发布新版本。我所讨论的内容集中于内核版本2.6.24,但也包含了一些对2.6.25和2.6.26版本 的引用,这两个版本是在本书定稿后发布的,只不过发布时本书尚未出版。由于对整个内核的许多 全面的修改已经合并到2.6.24版本,因此选择这个版本作为本书的目标还算是不错。虽然与本书中讨 论的代码相比,在比较新版本的内核中,某些细节已经发生了变化,但大的方面会保持一段时间不 会改变。 在讨论内核的各个组件和子系统时,我试图忽略不重要的细节,以避免使本书的篇幅过长。同样, 我尽力保持本书的行文与内核源代码之间的联系。目前的情况还是比较幸运的,由于Linux的存在, 使得我们能够查看一个真正的、可工作的、产品级操作系统的源代码,因此如果忽视了内核的这种本 质性的方面,那将是可悲的。为保证书的篇幅不至于太长,我只能选择内核源代码中那些最关键的部 分进行陈述。在理解Linux内核的结构和实现的过程中,阅读和使用实际的源代码是必不可少的一个 步骤。附录F介绍了一些技巧,能够使得阅读和使用源代码容易一些。 关于Linux(和一般的UNIX操作系统)的一个特别有趣的事实是:它很能调动人的情绪。在因特 网上有关操作系统的Flame wars(特指UseNet上的激烈争论)和热烈的技术辩论可能是一个例子,但 有哪个UNIX以外的操作系统会专门有一本小册子(指The Unix-Haters Handbook[GWS94],由Simson Garfinkel等编辑)来论述憎恶这种系统到底有多好呢? 在为第一版写序言时,我提到,某个国际软件 公司用难解的控告和争论来应对Linux,这对未来而言并不是坏信号。五年以后,形势已经改善,前 述的厂商已经私下接受了下述的事实:Linux已经成为操作系统领域中一个重要的竞争者。在下一个 五年,情况当然会变得更好。 毫不夸张,我承认自己肯定是被Linux迷住了(有时候,我可以肯定自己几乎因此而疯狂)。如果 本书能够感染到你,那么我为写作此书付出的大量心血都是值得的! 改进建议和批评意见可以发送到wm@linux-kernel.net,或经由www.wrox.com反馈给我。当然,如 果有人告诉我他很喜欢这本书,那我会非常高兴! 本书涵盖的内容 本书讨论了Linux内核的概念、结构和实现。各章分别介绍了下述主题。 第1章概述Linux内核,讲述了内核的总体图景,后续章节则根据总体结构对内核进行更详细的 研究。 第2章讨论了多任务、调度和进程管理的基本知识,并分析了这些基本技术和概念抽象的实现 方式。 第3章讨论了如何管理物理内存。本章既讨论了内核与相关硬件的交互,也讨论了内核内部通 引 言 VII 过伙伴系统和slab分配器来分配内存的方式。 第4章继续对内存进行讨论,讲解了用户空间的进程如何访问虚拟内存,以及在内核层面实现 虚拟内存视图所需要的详细的数据结构和相关机制。 第5章介绍了保证内核能够在多处理器系统上正确运作所需的机制。此外,本章还介绍了进程 如何相互通信。 第6章引导读者理解如何编写设备驱动程序,使内核支持新的硬件。 第7章阐述了模块机制,该机制能够向内核动态添加新的功能。 第8章讨论了虚拟文件系统,
深入Linux内核架构
温馨提示:如果当前文档出现乱码或未能正常浏览,请先下载原文档进行浏览。
本文档由 user 于 2021-02-28 15:25:48上传分享