深入Linux内核架构(全球开源社区集体智慧结晶,领略Linux内核的绝美风光)
基本信息
- 原书名: Professional Linux Kernel Architecture
- 原出版社: Wrox
- 作者: (德)Wolfgang Mauerer [作译者介绍]
- 译者: 郭旭
- 丛书名: 图灵程序设计丛书 操作系统
- 出版社:人民邮电出版社
- ISBN:9787115227430
- 上架时间:2010-6-13
- 出版日期:2010 年6月
- 开本:16开
- 页码:1038
- 版次:1-1
- 所属分类:
计算机 > 操作系统 > Linux
编辑推荐
内容全面深入
全球开源社区集体智慧结晶
领略Linux内核的绝美风光
推荐阅读
内容简介回到顶部↑
众所周知,linux操作系统的源代码复杂、文档少,对程序员的要求高,要想看懂这些代码并不是一件容易事。本书结合内核版本2.6.24源代码中最关键的部分,深入讨论linux内核的概念、结构和实现。具体包括进程管理和调度、虚拟内存、进程间通信、设备驱动程序、虚拟文件系统、网络、时间管理、数据同步等方面的内容。本书引导你阅读内核源代码,熟悉linux所有的内在工作机理,充分展现linux系统的魅力。
本书适合linux的系统编程人员、系统管理者以及linux爱好者学习使用。
本书适合linux的系统编程人员、系统管理者以及linux爱好者学习使用。
作译者回到顶部↑
本书提供作译者介绍
Wolfgang Mauerer,资深Linux专家,有数十年Linux开发经验。从1997年最初发表关于内核的系列文章开始,他就醉心于解释Linux核心的内部机制、编写相关的文档。此外,他还著有LaTeX排版方面的图书,其撰写的大量文章已经被翻译成7种语言。
.. << 查看详细
.. << 查看详细
目录回到顶部↑
第1章 简介和概述 1
1.1 内核的任务 2
1.2 实现策略 2
1.3 内核的组成部分 3
1.3.1 进程、进程切换、调度 3
1.3.2 unix进程 4
1.3.3 地址空间与特权级别 6
1.3.4 页表 9
1.3.5 物理内存的分配 11
1.3.6 计时 13
1.3.7 系统调用 13
1.3.8 设备驱动程序、块设备和字符设备 14
1.3.9 网络 14
1.3.10 文件系统 14
1.3.11 模块和热插拔 15
1.3.12 缓存 16
1.3.13 链表处理 16
1.3.14 对象管理和引用计数 17
1.3.15 数据类型 20
1.3.16 本书的局限性 22
1.1 内核的任务 2
1.2 实现策略 2
1.3 内核的组成部分 3
1.3.1 进程、进程切换、调度 3
1.3.2 unix进程 4
1.3.3 地址空间与特权级别 6
1.3.4 页表 9
1.3.5 物理内存的分配 11
1.3.6 计时 13
1.3.7 系统调用 13
1.3.8 设备驱动程序、块设备和字符设备 14
1.3.9 网络 14
1.3.10 文件系统 14
1.3.11 模块和热插拔 15
1.3.12 缓存 16
1.3.13 链表处理 16
1.3.14 对象管理和引用计数 17
1.3.15 数据类型 20
1.3.16 本书的局限性 22
前言回到顶部↑
UNIX操作系统简单而一致,但只有天才(至少程序员)才能领会并欣赏其简单性。
——Dennis Ritchie
作者注:是的,我们疯了。预先警告:你们也会一样。
——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 [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章讨论了如何管理物理内存。本章既讨论了内核与相关硬件的交互,也讨论了内核内部通过伙伴系统和slab分配器来分配内存的方式。
——Dennis Ritchie
作者注:是的,我们疯了。预先警告:你们也会一样。
——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 [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章讨论了如何管理物理内存。本章既讨论了内核与相关硬件的交互,也讨论了内核内部通过伙伴系统和slab分配器来分配内存的方式。
媒体评论回到顶部↑
“这本书叙述深入浅出,内容全面详尽,是学习掌握Linxu所有内在工作机理最理想的参考书之一。”
——C.Giovanni,资深Linxu程序开发者
——C.Giovanni,资深Linxu程序开发者
【插图】


点击看大图






加载中...
