您的位置:首页 > 运维架构 > Linux

推荐一本最接近完美的Linux内核入门教材

2016-03-28 22:03 495 查看
其实我认为这本书不仅仅适合作为入门教材,同时也是一部真正算得上是深入理解Linux内核的凤毛麟角之作;这本书不仅在Linux内核类书籍中出类拔萃,甚至与计算机其他领域的经典巨著相比也毫不逊色。这本书就是《Linux内核情景分析》(下简称《情景分析》)。如果所有关于Linux内核的书籍(不管英文的还是中文的)中存在一本最佳书籍,相信看过《情景分析》的人都会认为非它莫属了。

《情景分析》是一本好书,而作为一本技术类的好书一般有这样几个特点:

l 自包含性强
什么是自包含呢?举个例子,比如书中详细介绍了磁盘交换技术,但是仅仅讲磁盘交换本身是不够的,因为磁盘交换还依赖于其他概念,比如内存管理,文件系统,设备驱动等,如果不具备这些知识,那么想理解磁盘交换技术几乎是不可能的。如果把这些磁盘交换相关的技术和概念都集中在同一本书中加以详解,那么就可以认为该书在磁盘交换这个概念上是自包含的。可想而知,如果阅读一本自包含性很差的书,那么读者在碰到新知识点时,就不得不经常中断阅读转向其他资料寻找理解该知识点所必需的其他知识点,从而大幅地降低了阅读效率。

读者不妨回忆一下自己阅读代码的经历,当一个模块所依赖的定义大部分都集中在一个文件时,那么阅读该部分代码效率是很高的;反之,如果一个文件大量地引用了外部定义,即与外部耦合较重的情况下,读这个模块的代码无疑是一件痛苦的事,如果不幸该模块依赖的外部模块又和其他模块耦合较重时,那简直就是个灾难。
对于阅读书本也同样的道理。遗憾的是,很多Linux内核书籍在自包含方面太欠缺,阅读这些书往往会使读者陷于这样的处境:为了理解书中的某个概念,必须阅读其他资料理解这个概念;一旦通过其他途径理解了这个概念后,其实就不需要再看这本书中相关概念的内容了。
l 布局精巧
读者在开始阅读《情景分析》前,不妨先看一下它的目录:



第一章是预备知识暂且不提。第二章讲内存管理。熟知Linux内核的读者应该知道,内存管理是整个系统的基础,无论是进程,设备驱动还是文件系统,无不依赖于内存管理机制,因此内存管理理所当然地成为第一个正式介绍的子系统。接下来是中断,其基础作用不言自明;然后开始介绍进程及其调度,因为此时进程所依赖的两大基础子系统都已介绍完毕,学习进程的入口条件已经具备。
读者可能已经发现,进程和进程间通信这两部分内容并没有安排在同一章中,既然都是进程相关内容,为什么部署在不同章呢?原因是进程间通信有一部分机制还依赖于文件系统,这就是为什么进程和进程通信分开描述的原因,并且在两者之间插入了第五章“文件系统”。由此可见,作者在内容顺序编排上并非随意为之,而是经过仔细考虑的,正因为有如此细致周到的安排,才给读者带来了良好的阅读体验。读者可以自行浏览《Understanding
Linux Kernel》的目录作为对比,高下立判。

在每个章节的正文部分,作者按场景来组织内容和讲解,对于每个场景或模块基本上遵循着这样的套路:概述->代码片段->代码讲解->深入分析。既保证用适量的代码充分覆盖场景,又使人读来不觉枯燥。
Linux内容庞杂,任何单本著作都不可能,也没必要覆盖所有细节,这就要求做到既全面覆盖,具有较强自包含性,同时在内容上又有疏有密,而不是对所有内容作同等深度的展开,避免篇幅超大而让读者陷入文山字海中。《情景分析》安排内容详略的总体原则可以总结为:书中授之以“鱼”,使读者掌握自己之“渔”,进而获得书中未授之“鱼”。

l 有作者独到的看法和评论
以下摘录若干作者在书中的评论,大家可以先感受一下:
1.



2.



3.



类似于这种捅破窗户纸,给人以豁然开朗之感的的论述,在书中比比皆是,留待读者自己慢慢发掘吧。
对照上述几个标准,《LinuxKernel Development》既不够自包含,更谈不上布局谋篇,实在不适合入门者,而200多页的篇幅显然也难以满足有一定Linux内核基础的读者的胃口,读者倒不如将其当作Linux内核的学习笔记来使用,在淡忘了某个已经学过的模块原理时,可以翻一下这本书快速恢复印象;备受广大读者推崇的《Understanding
Linux Kernel》则在自包含方面稍显不足,并且少有作者个人的解读;至于那些通篇用于注释源码的书籍,建议还是不要看吧,学习代码,最好的资料就是代码本身。

在阅读《情景分析》的过程中,能够感受到作者不仅在专业方面积累深厚,在写作方面也极具功力,远非各种“大话”、“精通”、“深入”系列的江湖水平所能及。不难发现这两项能力也为所有好书作者所共有,专业积累的深浅决定了书本是否言之有物,而写作功力的高低则直接影响读者对书本内容的理解速度和深度。

如果说《情景分析》有什么缺点,就是本书出版于2001年,基于Linux 2.4内核版本,而现在最新的内核版本已经到了4.4,后续很多新增的特性,如近年非常流行的Linux容器技术,在当时的内核版本中还没有引入,因此本书就没有描述;同时,相当一部分模块的实现和API都发生了较大的变化,书中的有些内容已经不能作为当前版本代码阅读的参考了。但是,对于Linux这样一个庞然大物,即便经历了十几年的变迁,其核心架构和大部分模块实现仍可谓历久弥新,对于想掌握Linux内核原理而非所有模块细节的读者而言,只要能够熟知其核心架构和主要模块的工作原理,其他局部的修改变动就尽在掌握了。因此,《情景分析》的阅读价值并未因版本的演进而有丝毫降低,反而提供了一个了解老版本和对比新老版本变化的绝佳机会。同时,我们也期待基于新内核版本的同样优秀的Linux书籍出世 。

最后提供一些关于阅读本书的建议:
1. 首先重点阅读“第1章预备知识”和“第2章存储管理
”这两章,特别是对于不太熟悉X86架构和段式/页式内存管理的读者。这不仅是因为这两章奠定了全书的基础,还在于“预备知识”这一章虽然篇幅不大,但对Linux的来龙去脉和X86内存管理机制的历史渊源作了详尽的介绍,使读者能够了解到一些内核机制存在的原因和历史背景,我一直认为要了解一项工程技术,首先要了解的是其作用和起源,然后才能更好地掌握其内部实现;再者,第一章和第二章的开头部分很少涉及代码,主要是作者对历史和内存机制的讲解,看起来不会枯燥,同时也可对作者的叙述能力有所领略,不失为阅读本书的好起点。

2. 关于设备驱动,“第8章设备驱动”占了全书篇幅的约1/4(全书1500多页),但其覆盖的内容也只是冰山一角。作者也特别提到:“由于设备的多样性,设备驱动是一个需要整本专著的大课题”,“此外,有些设备的原理和机制就很复制,需要有专著加以介绍。我们既无足够的篇幅,也缺乏有关的专门知识来深入阐述这些设备的原理、机制和操作”。
尽管如此,对于想了解设备驱动的读者,“第8章设备驱动”仍然值得一读,而且《情景分析》不是一本Linux内核说明书或开发者手册,而是一本带领读者掌握Linux核心原理和了解其背后设计思想的书,作者的一些观点在其他书中难得一见,可以把第8章看做是设备驱动的导读,带着这章提供的全局视角去阅读其他设备驱动的专著,相信会有一览众山小的感觉。

3. 本书前后章节有很强的依赖关系,对于没怎么接触过Linux的读者建议还是按原文章节顺序阅读,否则直接跳到后续章节阅读会有寸步难行的感觉;而对于已经熟悉Linux的主体框架,想深入理解某个模块的读者,大可以按需挑选章节阅读。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: