站在大师级的UNIX开发高手的肩膀上
《返璞归真-UNIX技术内幕》书评
《软件设计精要与模式》一书作者 张逸 提供
敏捷人士认为代码是最好的文档,盖因只有代码才能真实表达设计者与实现者的意图。然而,一旦系统变得复杂,通过阅读源代码来理解系统就会变成一桩苦差事。系统千头万绪,直接阅读源代码,常常会陷入“只见树木,不见森林”的困境。可以说,纯粹理论描述的文档太空,直接阅读源代码又太细,任选其一都不利于对系统的了解。若能为二者搭建一座桥梁,问题就迎刃而解了。真实的源代码加上明白通畅的理论描述,或许可以称得上是学习软件技术的“终南捷径”。
郝庆丰先生显然体会到了这一点,他的大作《返璞归真-UNIX技术内幕》节选了10000行UNIX内核源码,并结合自己在UNIX环境下浸淫多年的宝贵经验,对UNIX的内幕进行了彻底的解剖。剖析入木三分,鞭辟入里,更有自己独到的见解与项目实践,说是呕心沥血之作,绝不为过。
我曾经使用过SUN的Solaris与HP-UNIX,不过都是浅尝辄止,并没有深入去了解操作系统的内核。我拜读过Eric S. Raymond的杰作《UNIX编程艺术》,但该书更多地关注在设计层面,而不是阐述与剖析UNIX的实现。系统的实现总是枯燥无味的,何况是软件系统中最为复杂的操作系统的实现。要彻底啃下UNIX的内核代码殊为不易,若要融汇贯通,则没有多年的项目体验与分析思考,几乎不可完成;如果再要将自己体会所得,以明白晓畅的方式著书立说,更无异于“蜀道之难,难于上青天”了。我对本书质量最初报以怀疑的态度,因为我知道要写成这样的书籍,其中的困难非同等闲,但等我阅读了本书的前面几个章节之后,就彻底打消了这个疑虑。关键之处在于,作者擅于以图文结合的方式阐述原理,而他对于源代码的注释讲解,虽然不多,却字字关键。
以本书第三章《虚拟内存》为例,首先即以图例表达出虚拟内存的本质(参见书中的图3-1),然后再以七页的篇幅内容向读者介绍了虚拟 内存的优点、PDP11/40的虚拟内存机制。有了这些理论内容作为铺垫,再来学习UNIX的虚拟内存实现,自然就能水到渠成。作者对UNIX核心代码的分析非常自信,对每一段重要代码都有自己的看法与理解。从对malloc函数的分析可见一斑。首先给出函数原型与功能描述以及参数说明。在讲解参数map结构时,以图例方式(参见本书图3-20)介绍了map数据结构指向内存块的方式。接着,给出了malloc函数的代码,并对实现的算法与设计的原理给予了详细的描述,甚至以流程图方式(参见本书图3-21)剖析了malloc的执行流程。最后,再给出一个简单案例,分析malloc的使用,并以图例(参见本书图3-22和图3-23)说明函数执行的过程与结果。条理清晰,叙述得当,代码、文字与图例相结合,能够更好地帮助读者理解这些优雅但略显艰深的UNIX内核代码。通观全书,作者一直保持这样严谨却又不失生动的风格,图文并茂,增强了书的感染力。
本书的优秀还在于作者对主题内容的选择。作者面对的读者群应该是那些渴望深入了解操作系统原理与UNIX内核,希望提高编程能力、逻辑思维能力和算法分析能力的开发人员。如果选择某一厂商的UNIX系统,难免会顾此失彼。UNIX V6是现代各类UNIX操作系统的源头,包含了对进程管理与调度、内存管理、文件系统等的支持。了解了UNIX V6,可以说就是把握了类似Solaris、HP-UNIX等操作系统的命脉。本书的价值不仅于此,即使是无心UNIX技术的C程序员,也能够从本书提供的大量源代码以及代码阐释中有所收益,毕竟这些代码都是C语言的鼻祖Kenneth Thompson和Dennis Ritchie所编写。阅读大师作品,当然有助于我们的成长。无论是编码风格、编码习惯、高效编程以及各种巧妙技能的运用,包括大师的设计思想与原则,都散发出熠熠光辉。本书打开了这扇门,登堂入室的道路就需要读者自己的努力了。
“如果说我看得比别人更远些,那是因为我站在巨人的肩膀上。”伟大的科学家牛顿如是说道。UNIX内核的代码能够开源,并为我们所用,是我们的幸运。站在大师级的UNIX开发高手的肩膀上,无疑让我们能够看得更远。而本书则是一把阶梯,可以帮助我们更加容易地攀爬上大师们的肩膀。如此而已,却又如此令人钦佩与赞赏。
作者: 郝庆丰
定价: 89.00元(含CD光盘1张)
出版时间: 2010-06
ISBN: 9787121108716
内容简介
操作系统是一种对计算机中各个设备和资源进行管理并给应用软件提供各种服务的系统软件,它的实现可分用户态和内核态两大部分。一般而言,操作系统的算法和设计的复杂性大多在内核态部分。因此,了解操作系统的内核实现对于了解整个操作系统是非常重要的。
本书详细阐述操作系统的内核(也包括少量用户态部分),选择UNIX第6版的全部内核代码及少量用户部分代码、总计10 000行作为讲解对象,由框架到细节、由基础到高级地进行讲述;在此过程中贯穿了操作系统中的各种知识和概念,比如内存管理、进程调度、中断和设备管理以及文件系统等,使得内容非常易于读者理解。
选择UNIX作为讲解对象是因为它强大的生命力和应用的广泛性。在精妙的设计思想下,它具有小巧高效而健壮的内核、丰富的功能、易扩展的架构和良好的开放性。UNIX所定义的很多接口(比如文件访问接口)已经成为行业标准。本书在讲解时,作者把这10 000行代码按照不同的功能模块分成不同的章节。每章一般最小以函数为单位,但在讲解某个功能或接口时,又会牵涉到很多相关的函数,并其中揭示了很多优秀的设计思想、数据结构和算法。
本书适用于具有丰富开发经验的高级软件工程师,尤其是有志于进行操作系统研究或对操作系统实现感兴趣的软件工程师,也可作为本专科院校计算机及相关专业学生学习操作系统和C语言的参考书。初级软件开发人员在阅读本书时可能会碰到一些困难,但如能坚持研究,它也会是你提高编程水平的一个很好的选择。