《Linux 内核设计与实现》(LKD)第三版译者序

不知不觉涉足Linux内核已经十多个年头了,与其它有志(兴趣)于此的朋友一样,我们也经历了学习—实用—追踪—再学习的过程,也就是说,我们也是从漫无边际到茫然无措,再到初窥门径,转而觉得心有戚戚焉这一路走来的。“在你的立足处深挖下去,总会有泉水涌出,别管蒙昧者们叫嚷‘下边永远是地狱!’”,尼采哲语的警钟时常在脑海敲起。

   Linux最为人称道的莫过于它的自由精神,所有源代码唾手可得。源码在前,了无秘密。是的,但是我们在面对它的时候,为什么却总是因为这种规模和层面所造就的陡峭学习曲线陷入困顿呢?很多朋友就此倒下,纵然Linux世界繁花似锦,纵然内核天空无边广阔。但是,眼前的迷雾重重,心中的阴霾又怎能被阳光驱散呢?纵有雄心壮志,拔剑四顾心茫然,脚下路在何方?

    Linux内核入门是不容易,它之所以难学,在于庞大的规模和涉及的层面。规模一大,就不易现出本来面目,浑然一体,自然不容易找到着手之处;层面一多,就会让人眼花缭乱,盘根错节,怎能让人提纲挈领?

   “如果有这样一本书,既能提纲挈领,为我理顺思绪,指引方向,同时又能照顾小节。阐述细微,帮助我们更好更快地理解STL源码,那该有多好”,这番话虽然针对的是C++,但道出的是研习源码的人们共同的心声。但Linux源码研究的方法却不大相同。这还是由于规模和层面决定的,比如说,在语言学习中,我们可以采取小步快跑的方法,通过一个个小程序和小尝试,就可以取得渐进的成果,就能从新技术中有所收获。而Linux呢?如果没有对整体的把握,即使你对某个局部的算法、技术或是代码再熟悉,也无法将其融入实用。其实,像内核这样的大规模的软件,正是编程技术施展身手的舞台(当然,目前的内核虽然包含了一些面向对象思想,但还不能让C++一展身手)。

   那么,我们能不能做出点什么,让Linux的内核学习过程更符合程序员的习惯呢?

   Robert Love回答了这个问题。Robert Love是一个狂热的内核爱好者,所以他的想法自然贴近程序员。是的,我们注定要在对所有核心的子系统有了全面认识之后,才能开始自己的实践,但却完全可以舍弃旁支末节,将行李压到最小,自然可以轻装快走,迅速进入动手阶段。

   因此,相对于Daniel P. BovetMarco Cesati的内核巨著《Understand Linux Kernel》,它少了五分细节,相对于实践经典《Linux Device Driver》,它多了五分说理。可以说,本书填补了Linux内核理论和实践之间的鸿沟,“一桥飞架南北,天堑变通途”。

   就我们的经验,内核初学者(不是编程初学者)可以从这本书着手,对内核各个核心子系统有个整体把握,包括它们提供什么样的服务,为什么要提供这样的服务,又是怎样实现的。而且,此书还包含了Linux内核开发者在开发时需要用到的很多信息,包括调试技术、编程风格、注意事项等等。在这消化这本书的基础上,如果你侧重于内核的了解,可以进一步研究《Understand Linux Kernel》和源代码本身;如果你侧重于实际编程,可以研读《Linux Device Driver》,直接开始动手工作;如果你想有一个轻松的内核学习和实践环节,请访问我们的网站www#kerneltravel.net。

  Linux内核像一艘永不停息的轮船,它将驶向何方我们并不知晓,但在这些变化的背后,总有一些原理是恒定不变的,总有一些变化是我们想知晓的,比如调度程序的大幅度改进,内核性能的不断提升,本书第三版虽然针对的是较新的2.6.34内核版本,但你在旧版本上积累的知识和经验依然有效,而新增内容将使你在应对变化了的内核代码时有了一种从容。

   感谢牛涛和武特,他们在第二版和第三版差异的校对中花费了大量精力。感谢素不相识的网友Cheng Renquan他主动承担了其中一章的修订。还要感谢苏锦绣,黄伟,王泽宇,赵格娟,刘周平,周永飞,曹江峰,陈白虎,孟阿龙他们参与了后期的校对和查错补漏。

   最后,特别感谢我的合作者康华,从十年多前一块分析Linux内核代码到十年后的今天,他对技术孜孜不倦的追求不但在业界赢得声誉,也使我们在翻译过程中所遇到的技术难点和晦涩句子被一一降服。感谢合作者张波,他流畅有趣的文笔让本书少了份枯燥,多了份趣味。

展开阅读全文

没有更多推荐了,返回首页