深入Linux内核架构
201005
人民邮电出版社
Wolfgang Mauerer
1038
郭旭
无
本书讨论了Linux内核的概念、结构和实现。主要内容包括多任务、调度和进程管理,物理内存的管理以及内核与相关硬件的交互,用户空间的进程如何访问虚拟内存,如何编写设备驱动程序,模块机制以及虚拟文件系统,Ext文件系统属性和访问控制表的实现方式,内核中网络的实现,系统调用的实现方式,内核对时间相关功能的处理,页面回收和页交换的相关机制以及审计的实现等。此外,本书借助内核源代码中最关键的部分进行讲解,帮助读者掌握重要的知识点,从而在运用中充分展现Linux系统的魅力。 本书适合Linux内核爱好者阅读。
作者:(德国)莫尔勒(Wolfgang Mauerer) 译者:郭旭莫尔勒(Woflgang Mauerer),资深Linux专家,有数十年Linux开发经验。从1997年最初发表关于内核的系列文章开始,他就醉心于解释Linux核心的内部机制、编写相关的文档,此外,他还著有LaTex排版方面的图书,其撰写的大量文章已经被释译成7种语言。
第1章 简介和概述 1.1 内核的任务 1.2 实现策略 1.3 内核的组成部分 1.3.1 进程、进程切换、调度 1.3.2 UNIX进程 1.3.3 地址空间与特权级别 1.3.4 页表 1.3.5 物理内存的分配 1.3.6 计时 1.3.7 系统调用 1.3.8 设备驱动程序、块设备和字符设备 1.3.9 网络 1.3.10 文件系统 1.3.11 模块和热插拔 1.3.12 缓存 1.3.13 链表处理 1.3.14 对象管理和引用计数 1.3.15 数据类型 1.3.16 本书的局限性 1.4 为什么内核是特别的 1.5 行文注记 1.6 小结 第2章 进程管理和调度 2.1 进程优先级 2.2 进程生命周期 2.3 进程表示 2.3.1 进程类型 2.3.2 命名空间 2.3.3 进程ID号 2.3.4 进程关系 2.4 进程管理相关的系统调用 2.4.1 进程复制 2.4.2 内核线程 2.4.3 启动新程序 2.4.4 退出进程 2.5 调度器的实现 2.5.1 概观 2.5.2 数据结构 2.5.3 处理优先级 2.5.4 核心调度器 2.6 完全公平调度类 2.6.1 数据结构 2.6.2 CFS操作 2.6.3 队列操作 2.6.4 选择下一个进程 2.6.5 处理周期性调度器 2.6.6 唤醒抢占 2.6.7 处理新进程 2.7 实时调度类 2.7.1 性质 2.7.2 数据结构 2.7.3 调度器操作 2.8 调度器增强 2.8.1 SMP调度 2.8.2 调度域和控制组 2.8.3 内核抢占和低延迟相关工作 2.9 小结 第3章 内存管理 3.1 概述 3.2 (N)UMA模型中的内存组织 3.2.1 概述 3.2.2 数据结构 3.3 页表 3.3.1 数据结构 3.3.2 页表项的创建和操作 3.4 初始化内存管理 3.4.1 建立数据结构 3.4.2 特定于体系结构的设置 3.4.3 启动过程期间的内存管理 3.5 物理内存的管理 3.5.1 伙伴系统的结构 3.5.2 避免碎片 3.5.3 初始化内存域和结点数据结构 3.5.4 分配器API 3.5.5 分配页 3.5.6 释放页 3.5.7 内核中不连续页的分配 3.5.8 内核映射 3.6 slab分配器 3.6.1 备选分配器 3.6.2 内核中的内存管理 3.6.3 slab分配的原理 3.6.4 实现 3.6.5 通用缓存 3.7 处理器高速缓存和TLB控制 3.8 小结 第4章 进程虚拟内存 4.1 简介 4.2 进程虚拟地址空间 4.2.1 进程地址空间的布局 4.2.2 建立布局 4.3 内存映射的原理 4.4 数据结构 4.4.1 树和链表 4.4.2 虚拟内存区域的表示 4.4.3 优先查找树 4.5 对区域的操作 4.5.1 将虚拟地址关联到区域 4.5.2 区域合并 4.5.3 插入区域 4.5.4 创建区域 4.6 地址空间 4.7 内存映射 4.7.1 创建映射 4.7.2 删除映射 4.7.3 非线性映射 4.8 反向映射 4.8.1 数据结构 4.8.2 建立逆向映射 4.8.3 使用逆向映射 4.9 堆的管理 4.10 缺页异常的处理 4.11 用户空间缺页异常的校正 4.11.1 按需分配/调页 4.11.2 匿名页 4.11.3 写时复制 4.11.4 获取非线性映射 4.12 内核缺页异常 4.13 在内核和用户空间之间复制数据 4.14 小结 第5章 锁与进程间通信第6章 设备驱动程序 第7章 模块 第8章 虚拟文件系统 第9章 Ext文件系统族 第10章 无持久存储的文件系统 第11章 扩展属性和访问控制表 第12章 网络 第13章 系统调用第14章 内核活动 第15章 时间管理 第16章 页缓存和块缓存第17章 数据同步第18章 页面回收和页交换 第19章 审计 附录A 体系结构相关知识 附录B 使用源代码 附录C 有关C语言的注记 附录D 系统启动 附录E ELF二进制格式 附录F 内核开发过程 参考文献
插图:内核很神奇,但归根结底它只是一个大的C程序,带有一些汇编代码(不时出现很少量的“黑巫术”)。是什么使得内核如此吸引人?原因有几个。首要一点在于,内核是由世界上最好的程序员编写的,源代码可以证实这一点。其结构良好,细节一丝不苟,巧妙的解决方案在代码中处处可见。一言以蔽之:内核应该是什么样子,它现在就是什么样子。但这并不意味着内核是应用教科书风格的程序设计方法学得出的产品。尽管内核采用了设计得非常干净的抽象,以保持代码的模块化和易管理性,但这一点与内核的其他方面混合起来,使得代码非常有趣和独特。在必要的情况下,内核会以上下文相关的方式重用比特位置,多次重载结构成员,从指针已经对齐的部分压榨出又一个存储位,自由地使用goto语句,还有很多其他东西,这些都会使任何强调结构的程序员因痛苦而尖叫。教科书答案中难以想象的那些技巧,对于实现能够在真正的现实世界中正常工作的内核不仅是有益的,甚至是必需的。正是因为找到了一条在内核完全对立的两面之间保持平衡的路径,内核才如此令人兴味盎然、富有挑战性并且妙趣横生!颂扬了内核源代码之后,还有许多不同于用户层程序的严肃问题需要说明。口调试内核通常要比调试用户层程序困难。对后者来说有大量的调试器可用,而对于后者来说调试器的实现难度要高得多。附录B讨论了在内核开发中使用调试器的各种技巧,但与用户层对应的方法相比都需要更多的工作。口内核提供了许多辅助函数,类似于用户空间的c语言库,但内核领域中的东西总是朴素得多。口用户层应用程序的错误可能会导致段错误(segmentation fault)或内存转储(core dump),但内核错误会导致整个系统故障。甚至更糟的是:内核会继续运行,在错误发生若干小时之后系统离奇地崩溃。如上所述,因为在内核空间调试比用户层应用程序更困难,所以在内核代码投入使用之前要进行更多的考虑。口必须考虑到内核运行的许多体系结构上根本不支持非对齐的内存访问。由于编译器插入的填充(padding)字段,也会影响到数据结构在不同体系结构之间的可移植性。附录C会进一步讨论这个问题。口所有的内核代码都必须是并发安全的。由于对多处理器计算机的支持,Linux内核代码必须是可重入和线程安全的。也就是说,程序必须允许同时执行,而数据必须针对并行访问进行保护。口内核代码必须在小端序和大端序计算机上都能够工作。口大多数的体系结构根本不允许在内核中执行浮点计算,因此计算需要想办法用整型来替代。后面读者会看到如何处理这些问题。
“这本书叙述深入浅出,内容全面详尽,是学习掌握Lmux所有内在工作机理最理想的参考书之一”。 ——C.Glovanni,资深Linux程序开发者
《深入Linux内核架构》编辑推荐:众所周知,Linux操作系统的源代码复杂、文档少,对程序员的要求高,要想看懂这些代码并不是一件容易事。《深入Linux内核架构》结合内核版本2.6.24源代码中最关键的部分。深入讨论Lirnux内核的概念、结构和实现。具体包括进程管理和调度、虚拟内存、进程间通信、设备驱动程序、虚拟文件系统、网络、时间管理、数据同步等。《深入Linux内核架构》引导你阅读内核源代码,熟悉Linux妍有的内在工作机理,充分展现Linux系统的魅力。《深入Linux内核架构》适合Linux系统编程人员、系统管理者以及Linux爱好者学习使用。内容全面深入全球开源社区集体智慧结晶领略Linux内核的绝美风光
无
本书讨论了Linux内核的概念、结构和实现。主要内容包括多任务、调度和进程管理,物理内存的管理以及内核与相关硬件的交互,用户空间的进程如何访问虚拟内存,如何编写设备驱动程序,模块机制以及虚拟文件系统,Ext文件系统属性和访问控制表的实现方式,内核中网络的实现,系统调用的实现方式,内核对时间相关功能的处理,页面回收和页交换的相关机制以及审计的实现等。此外,本书借助内核源代码中最关键的部分进行讲解,帮助读者掌握重要的知识点,从而在运用中充分展现Linux系统的魅力。 本书适合Linux内核爱好者阅读。
虽然书的后边有一个书评说是深入浅出,但个人的感觉是,非常深入,但说得并不是那么浅白,如果没有对Linux内核的初步结构的认识,那么会看得比较吃力。
个人建议可以一边去翻在国内已经闻名已经久的四本Linux内核著作(《Linux内核原代码情景分析》、《Linux内核设计与实现》、《深入理解Linux内核》、《Linux设备驱动程序》),再一边看这本书,把这本书当作一个补充或者当作一个内核框架图谱说明书来阅读,收效会更好。
搞内核开发也有蛮长时间了,不过一直没系统看过内核架构。
最近做安卓开发,看了这本书还是有很多启发的。
如果是linux新手入门就不要看这本书了。
深入Linux内核架构 这本书,不错,Very good.慢慢去看了
深入Linux内核架构这本书很好。。。。
主要是讲linux内核关键代码的流程及功能,虽然也有一小部分是讲理论基础(个人觉得写得恰到好处,就是篇幅小了点),看来还是要先把《深入理解linux内核》之类的偏理论的书看一看,再继续深入看下去。另外翻译一级棒。
虽然我现在看不懂,但是我发现它对linux内核讲得还是很深入的,该书不适合初学者。
是想学linux内核原理的一本很好的参考书.
学习Linux内核的经典书,看过pdf所以才想入手的!
Linux内核学习者的必读之书!
忧郁了很久关于linux内核的书买哪本,终于下定决定买了这本。
仔细看完的话对linux的内核理解就狠厉害了...
讲的比较细,用来学习操作系统结构还是不错的。当然书中也夹杂了一些内核开发的代码段,可以作为参考。我觉得学习这本书最大的收获,不是怎么开发内核,而是对系统有一个全面的了解,可以帮助我们开发系统相关的程序。
不错,这个书不错哦。
详细,和bsd内核架构设计一起看,对系统架构了解的跟彻底。
读书笔记我会放我博客上
***.sklinux****
对于理解类LINUX架构很有用的一本书。
如果想深入掌握linux这书是肯定要看的
这本书实在是厚,内容非常详尽,很棒的东西啊~!它里面的代码非常丰富,讲解非常透彻,这点让我非常满意。和其它linux书不同的就是,作者不厌其烦,写的很仔细,很用心
买了好几本书,衷心想评价此书!不愧为linux专家的用心之作,内容很给力;翻译也不错的。人民邮电出版社的书纸张挺白挺厚,印刷很清晰有力!很喜欢这本书。
挺好的书 不适合对Linux了解不多的人看
经典巨著和understanding the linux kernel不相上下,买来两本配套看
真是一本厚书,确是一本好书啊,能为我勾勒出linux的骨骼。
对全面了解内核很有帮助
相当给力,到目前为止只看了网络和虚拟文件系统这两章,觉得自己还是有了一些提高的,最近工作中经常需要设计一些网络编程方面的东西,有参考价值,这种涉及底层的书就应该坚持看下去,虽然一千多页有点让人望而生畏,但看完应该会受益匪浅
很系统,全面,列出了程序中的关键位置,要抽时间仔细看看
这本书很好,我正在看,想对内核有深入了解
包装不错,书本身是用薄塑料包好的,没有拆封,关键是外边还包了一层泡沫塑料,很好。内容就不多说了,经典著作,从来都买正版。
内容比较深,初学者可能会不理解。适合有开发基础并实践过的人阅读。
确实很深入~~
有点深奥~~
之前逛书城的时候就看中了这本书,内容很详实,对自己的工作学习有非常大的帮助。
不错的好书,超值
挺好的一本书,但需要时间去读
书很不错,好厚啊,不过有的页印刷不是特别好
好书,厚的就是好啊!!两本差不多2000多页,有的看了
传说中的经典,不过看起来有点难度呀,源码很多,要有一定基础看才好,正在学习中
这本书也不错,讲的很详细,很好,研究中!
书很好,内容很丰富, 需要用很长时间去认真学习.
里面内容复杂,不适合初学者
内容丰富,经典;买来当枕头书,好好学习
书本质量很好,里面的内容更加强大,经典的书籍啊,估计要消化里面的知识非得几年不可。
好书,
不过包装有点破裂,还有就是对快递员处理质量异议的态度很感冒. 很气人.
这本当作工具书了,很强悍的工具书~
具体内容还没看多少,正在专心拜读中。
好厚的一本书,看了一些,感觉内容好丰富。。。慢慢研究
本书讲的内容比较详细,但是没有一个完整的主题含义!
书不错,但是要花时间研究
还没有时间仔细拜读,相信一定受益匪浅!
作者功底深厚 足够研究很长时间了
适合老公
经典之作不容错过,但要有耐心,比板砖还厚
经典又权威的书,就不用多说了。
第一天中午下的订单,第二天下午就到了,只是书边有一点点磨破了,希望注意点。
确实经典,必读
这书经典之极
还没看完...正在研究中....
实用的一本书,长度少于10字的评论得不到积分
这本书 不错,可是 纸质 有点一般了。
很好的一本书,北京发货速度很快。
这本书非常非常的不错,但看这本书要不错的基础才行,否则看起有些吃力,一个字,好
很厚重的一本书,印刷很好
这本书一直等着看,很好,舒服
但是还没有那个能力阅读
大概看了一下,写的很详细,内容很丰富,是非常实用的一本工具书
还没细看内容,书质量还行
拿回来看了一小节,内容讲的很细,内容安排合理
纸张不错,内容很好,有些翻译语法错误
内容全面,翻译的也还行,作为参考吧
书大概翻看了一下,内容写的很深,有基础的学习更好,是好收,喜欢德国人写的书,思维缜密
好书,内容比较深奥,需要慢慢消化。
发货很快,书的质量不错。具体书的内容还没看,不错网上评价不错,应该不错。
看了评论后才买的,确实很不错,就是纸张不是很好,书这么贵,弄点好的纸张来印刷就更好了。从书的内容上来讲,还是值得收藏的。
看样子不错,很详细,具体内容还没看
很详细,可以当作工具书了
不错,看了电子版的还是决定买
很详细!有点小贵!
看评价买的~~希望不要坑爹~好厚好贵啊...便宜点就好了...不知道有没有空读完啊...
好书。太厚了,不知道什么时候看完。
书倒是很好,已经在看了,就是价钱贵了点,多搞搞计算机书籍的优惠活动啊
书很好,得研究一阵,有点难
开始啃我的书了,哈哈!
书将的挺细,对于某一方面想了解的可以从书上查找,权当工具书来使用
据说很好,暂时还没看
love it beat for me~
非常非常厚实
灰常灰常的厚,灰常灰常的有feel
帮朋友买的 他说质量不错
送货超级快,印刷和纸张也很好,但是书皮有些脏,外表有些磕碰了。但是还算满意。还没开始看。
翻译太菜
老外的书都不错 讲的清楚细致 买本送朋友
书很好,就是太厚了一点
据说还不错,买来看看
帮LG买的,他说很好
很厚,要花N就才能读完~~~
帮同事买的,反应很好。
很实用的书,受益非浅
解释挺具体的,不过需要一定的基础
公司很多人买了,好厚,慢慢看看,哈哈
有点深奥,太厚了。。。
刚才看到一篇有点浮躁的评论,也发表些感触:这本书英文版和中文版我都看过,英文版翻译自德文版,颇有笔误和修订错误,对照时,发现中文版改掉了相当一部分笔误,但也有些新的笔误引入进来,幸而不影响阅读,没有白花100大洋实事求是地说,这本书(简称称plka)的英文版称不上经典,因为plka反映的是英文翻译的水平,而不是德文原作者的水平,另外就是多次修订,引入了较多的笔误和错误;但就plka内容涵盖的范围之广泛,概念/算法讲解之清晰深入,对内核结构的掌控来说,都有教科书般的水准(plka是德国某些大学的操作系统教科书);如果与ulk3对照而言,无非是长短互见罢了刚才看到的评论说plka堆砌代码,概念不清,远比不上《深入理解Linux内核(第三版)》,有些感触: 0.这本书既不拼凑代码,概念也很清晰 1.这个书有英文电子版的,可以先看看电子版,确定自己的水平是否达到,再决定是否买中文版 2.作者说得清楚,他只引用了很关键的代码,根本不存在代码堆积的问题;代码的处理流程都是通过流程图来说明的 3.本书引用任何概念时,都从最基本处入手,讲清背景;而后结合代码逐步深入,非常清楚明晰 4.ulk3是很不错的,比plka水平还高一点的,但ulk3稍显凌乱,有好些东...西要找来找去;而且二者互补性很强,plka里的很多东西,ulk3里都不涉及的 5.《深入理解Linux内核(第三版)》是几个人攒的,攒得太差;第二版我买了,后悔不迭,很多翻译南辕北辙,让人忍俊不堪;第三版只敢在网上看看样张,没敢买 6.《深入Linux内核架构》的水准要好得多,相对较严谨,虽然也有若干笔误,但并不影响阅读告诫:别太浮躁,Linus Torvalds不是说么,see the fuxking source code!这本书你要是看不进去,ulk3你也一样看不进去!plka和ulk3只要能看明白一本,就不需要买另外一本! 阅读更多 ›
德国人的书总是一板一眼,绝不偷懒,给我留下深刻印象的还有《C++标准程序库》一书。初读此书时我还没有系统的学习过操作系统的知识,尽管自律着读完了全书,但是很多东西没有体会。为了能够更好理解Linux内核,我在一年的业余时间里补充了计算机体系结构和操作系统概念的知识,现在想来也许不必要读那么多。但推荐像我一样的读者看了《操作系统概论》或者《现代操作系统》之后再认真读本书。
虽然我已经有了Linux技术内幕,但是还是买了这本书。
看过电子英文版的前几张。不太适合新手,但书绝对是经典的。
买了还没看,不过感觉挺好的