如果你是一个 C 程序员,你想过这些问题吗:空指针到底是什么?你调用 malloc 时,系统做了什么?fork 是怎么实现的?如果你很好奇,如果你是一位有志青年,你可以看看这本书。
操作系统是什么?操作系统其实是运行在硬件上的一个程序,这个程序的客户是应用软件,如:office,shell,等等。从这个角度来看,操作系统其实没那么神秘,无非是屏蔽硬件的细节,给上层的应用软件提供方便操作的接口,当然操作系统由于其处于软件系统的底层,对性能要求极为苛刻。操作系统给应用软件提供了访问硬件资源的接口,不同应用软件访问硬件资源的需求又各有差异,如何能公平的满足这些需求?从这个角度来看,操作系统内部是非常复杂的。
本书逐个分析了 linux 内核的几个模块:进程调度,内存管理,文件系统,I/O 设备。单单某一个模块就非常复杂,而这些模块之间有错综复杂的关系,所以想独立的分析某个模块而不牵扯其他模块是很困难的,这也是阅读本书的困难之处。比如说内存管理模块,要给内核本身提供内存分配的接口,用于内存本身的管理,文件系统缓存等等,也要给应用程序提供内存分配接口,内核认为内核本身申请内存,那一定是有足够理由的,所以会优先满足,而应用程序的申请往往会尽量延迟满足,除非你要访问那个内存单元,否则你得只是看起来拥有一块内存而已。应用程序使用内存可能是一次申请一大块,内核不能一下子就把这么多内存都拿出来,万一应用程序申请了不用怎么办?万一应用程序浪费怎么办?所以内核会先给应用程序一个线性地址范围,当应用程序访问那个内存单元时,才把一个线性地址映射到真正的物理内存。当然频繁申请/释放内存的情况也是有的,对于这种情况,内核利用了对象池技术,保证这种访问行为的性能。
当然复杂中也有简单,有一些核心思想是很容易理解的:
性能很重要,对普通应用是这样的,对内核更是,所以,能用缓存都用缓存,如:内核充分利用 CPU 的一级/二级缓存,并且为 I/O 设备做内存缓存。
当然节约空间也很重要,所以 linux 内核使用了大量的位操作,用位而不是字节以便节约空间。
这本书不仅能给带我们浏览 linux 内核的工作原理,也能向我们展示大量的编程技巧:如何优化 if 判断、如何利用位运算、如何写换行宏、如何把一个结构加入多个链表等等。
linux 内核源代码从最开始的 1 万行,到现在发展为几百万行,要想通读下来基本上是不可能的,这本书只截取了部分重要的数据结构和极少数的重要的代码片段。本书的写作风格我不是很喜欢,基本上就是列出一个数据结构/一个内核函数,后面给出一大段分析,读起来很枯燥,段落之间连贯性不强。
书名是“深入理解 linux 内核”,其实这本书没那么深入,只要有一点 C 语言的基础就能大概读懂,对内核的各个模块也没做深入的分析,基本就是给代码做注释。如果你是搞嵌入式系统开发的,那你应该知道读那些章节,如果你是一个普通的应用开发者,建议你看看内存管理和进程调度这几个章节,收获应该不小。
有志青年必读
对“有志青年必读”的回应
《深入理解LINUX内核》热门书评
-
Mr. Process的一生-Linux内核的社会视角 (1)调度
88有用 4无用 马牛 2010-01-08
这里没法插图片,完整版(带图片和一些格式调整)见http://www.manio.org/cn/scheduling-of-linux-view-of-society/注:我看的是影印版,写得很好。Linux内核是一个无比复杂的系统,要想看清大致的脉络也非易事。其实,可以把运行中的Linux想像成一...
-
灵与肉的结合
36有用 1无用 卉 2011-11-04
曾几何时,我们为调试成功第一段汇编小程序而欢欣鼓舞,为写完C语言小程序通宵达旦,为自己的数据结构解决了一个实际问题而踌躇满志。再后来我们学习了计算机组成原理或者高级点的计算机系统结构,学习过操作系统的实现和设计,看过算法导论...但好像一切又渐渐变得遥远了,虽然书本上的一切也...
-
一本好书让不负责任的翻译给毁掉了
25有用 2无用 liangc 2009-10-06
因为要做内核相关的东西了,理所当然的买了这本书,刚读了开头就觉得:一本好书让翻译给毁掉了。并不是说技术上不行,而是这些个翻译的态度就不端正!比如刚开始第一页,把SVR写成了SRV,下面的注释中竟然把linus torvalds的名字写错了。虽然不是什么大问题,也不会影响到读者理解linux,但是这反...
-
书是好书!但是对读者的要求有些高
12有用 1无用 敬承文 2006-04-10
非常棒的内核方面的书!我买了很久了。多久?大概快一年半了。我虽然喜欢Linux方面的书籍,但在书店逛的时候,大多不会买:站在那儿,一会儿就能够翻完的书,从含金量方面考虑,值得买么?而这本书,含金量是足够了,但是看起来非常耗时,非常基础的底层技术:汇编知识(主要是X86体系的硬件接口知识)、C/C++...
-
翻译,,,很雷
10有用 0无用 夜的旅者 2009-08-23
很多句子都不变换一下语序,不知道是偷懒还是连最基本的翻译技巧都不知道。最过分的是常用的说法翻的也不够地道,最典型的是“上下文”被翻成了“文境”,但搞笑的是在附录的索引里却翻成了“上下文”。还有很多术语也不符合常规的说法,看的很不爽!...
书名: 深入理解LINUX内核
作者:
出版社: 东南大学出版社
原作名: Understanding the Linux Kernel
出版年: 2006-4-1
页数: 923
定价: 98.00元
ISBN: 9787564102760