专访《程序员的自我修养——链接、装载与库》作者俞甲子

 

 
专访《程序员的自我修养——链接、装载与库》作者俞甲子
2009-04-30 13:49 51CTO.com 博文视点 我要评论(0) 字号:T | T

针对俞甲子、石凡和潘爱民三位的新书《程序员的自我修养——链接、装载和库》的出版,博文视点对俞甲子进行了专访

AD:

 

 

 

 

 

 

潘爱民、俞甲子、石凡原创精品

深入浅出地对系统软件的底层形成机制进行条分缕析

了解程序的前世今生,彻底理解敲入的代码如何变成程序

针对俞甲子、石凡和潘爱民三位的新书《程序员的自我修养——链接、装载和库》的出版,记者对俞甲子进行了专访,现将记者与俞甲子的访谈对话整理成文,以飨读者。

记者:甲子,你好!能否向读者介绍你是如何对操作系统的底层机制和运行原理产生兴趣的?

俞甲子:很大程度上是因为性格决定的吧,因为我是一个喜欢对技术问题寻根究底的人,不满足于仅仅了解一个技术的表面,而是希望能通过层层深入地挖掘,找出它背后最关键最核心的机理。我相信很多计算机技术都是相通的,它们的核心思想相对是稳定不变的。经常听很多人谈起,IT技术日新月异,其实真正核心的东西数十年都没怎么变化,变化的仅仅是它们外在的表现,大体也是换汤不换药吧。

为了了解操作系统内核及装载、链接等这些关键的技术,我曾经自己从头写了一个很小的内核、装载器及一个简单的运行库,它们组成了一个可以完整运行在PC上的支持多进程、多线程的操作系统环境,并且支持虚拟存储、简单的文件系统、网络、鼠标键盘等,前后加起来花了两年多时间,大约有数万行代码,编译器和链接器使用的是GCC和LD。当然,如果继续写下去,可以让它的功能变得更加完整,但是我停止了对它的继续维护,因为我认为通过这个雏形系统,我已经了解了其背后的机理,如果再继续写下去更多的只是重复性的工作,因为现在已经有了很多很优秀的内核、装载和链接的相关软件和标准。

虽然我在这个系统上花费了很多时间和精力,却没有获得什么直接的收益,也没有让我跟上最新的技术潮流,但是它带给我的间接收获却是无法言表的,它使我在后来学习其他技术的时候能够很快地触类旁通、自下而上地去理解整个系统,往往能够理解得更加深刻更加透彻。

记者:介绍链接、装载和库原理的资料非常少,你在自己钻研的过程中,遇到的最大困难是什么?

俞甲子:当然相关资料很少会给我们带来很多的困难和挑战,而且相关的源代码在经过多年的发展和锤炼后,变得非常注重性能和效率,而很少考虑可读性,这使得通过挖掘源代码理解机制变得更为困难。这些代码很多都是相关领域的黑客高手写的,他们对系统机制的了解已经到了很深刻的地步,一小段代码会用尽系统的各种机制和方法,经常让人看得不知所云。比如系统库在不同的链接和装载方式下对C++全局对象的构造和析构,就异常复杂。整个流程来回曲折,加上有些代码已经遗弃,还会造成误解。Glibc这种支持数十种平台的系统还要考虑到各个系统的通性和个性,更使整个过程雪上加霜。其实理解还不是最大的困难,最大的困难是理解了这个复杂而又晦涩的机制和过程,如何将它们尽量地简化,从中取舍,摈弃所有不必要的内容,再将它剥离出来后组织成尽量深入浅出层层引导的文字和图表,这才是最大的挑战。

记者:在自学的过程中,一定有许多令你得意或开心的事,可不可以分享一二?

俞甲子:在这个过程中,最烦恼的事莫过于一个困扰了你很久的问题,通过各种办法,包括阅读源代码等还是无法理解或无法解释某个程序现象。忽然有一天某个灵感突现,回头再仔细阅读代码,紧接着马上试验一下,果真如此!大有拨云见日、豁然开朗的感觉,这应该是最开心的事吧。

记者:你现在从事的工作和系统底层结合紧密吗?在系统运行机制上的积累对目前的工作有帮助吗?

俞甲子:我目前从事的工作跟系统底层关系不是很大,现在最常用的都是Web前端、MySQL数据库等这些应用层面的系统。虽然不是直接与系统底层打交道,但是之前的积累无时无刻不在帮助我去深入理解应用开发。比如MySQL系统的内存和文件系统的优化,如果对操作系统的虚拟存储和文件系统机制没有深入了解,那么可能只能在配置参数上做一些“猜测”性质的调整,不断地尝试各种参数,或者参考网络上别人提供的配置参数,但不一定适合自己的应用情况。了解虚存如何运作,进程地址空间的分布等,将会对应用的优化甚至是构架设计上都会有更高层次的俯视。

记者:对知识的渴求,对未知世界的好奇是人类的天性。但这种天性也需要引导,小心保护,否则就可能会丧失。读书是一种很好的保护途径,可不可以向读者推荐几本对你个人成长影响最大的书?

俞甲子:如果是推荐非技术类的书籍,我应该不是很在行。在这里向大家推荐几本我读过的,并且跟本书主题相关的书籍吧。

《Linkers and Loaders 》,John R. Levine。这本书基本上是链接和装载方面最为完整和权威的理论著作了,但是内容有些偏旧,并且有些晦涩。

《Intel® 64 and IA-32 Architectures Software Developer’s Manuals》,Intel官方的x64和x86CPU的技术手册,总共分3卷,另外还有几本优化手册,这些手册不适合通读,但强烈建议阅读其中的介绍性章节,并且手边能够常备一份,以便需要时查阅,查阅网址http://www.intel.com/products/processor/manuals/。

《Linux内核源代码情景分析》,毛德操,胡希明。这部书分为上下两卷,总共近2000页,虽然出版年份较早(2001年出版),而且是基于Linux 2.4内核的,但是它对很多细节的描述非常到位,比很多Linux内核的书籍要详细,值得一看。

《深入理解计算机系统,Computer Systems A Programmer’s Perspective》,(美)布赖恩特(Bryant,R.E.)。这本书对整个计算机软硬件体系结构进行了深入浅出的介绍,是理解系统底层不可多得的好书,强烈推荐!

《深入解析Windows操作系统,第4版——Microsoft Windows Server 2003/Windows XP/Windows 2000技术内幕》,Mark E.Russinovich(著),潘爱民(译)。这本书是理解Windows内核最好的选择,至少我没有看到任何一本描述关于Windows内核的书能与它相媲美。

《Advanced Programming in the UNIX Environment,Second Edition》,W.Richard Stevens,Stephen A.Rago。这本书被誉为UNIX程序设计的“圣经”,也是了解*NIX系统内核,运行库和执行环境的很好选择。


《程序员的自我修养——链接、装载与库》内容简介

本书主要介绍系统软件的运行机制和原理,涉及在Windows和Linux两个系统平台上,一个应用程序在编译、链接和运行时刻所发生的各种事项,包括:代码指令是如何保存的,库文件如何与应用程序代码静态链接,应用程序如何被装载到内存中并开始运行,动态链接如何实现,C/C++运行库的工作原理,以及操作系统提供的系统服务是如何被调用的。每个技术专题都配备了大量图、表和代码实例,力求将复杂的机制以简洁的形式表达出来。本书最后还提供了一个小巧且跨平台的C/C++运行库MiniCRT,综合展示了与运行库相关的各种技术。

本书对装载、链接和库进行了深入浅出的剖析,并且辅以大量的例子和图表,可以作为计算机软件专业和其他相关专业大学本科高年级学生深入学习系统软件的参考书。同时,还可作为各行业从事软件开发的工程师、研究人员以及其他对系统软件实现机制和技术感兴趣者的自学教材。

出版信息

【书名】程序员的自我修养——链接、装载与库

【作者】俞甲子  石凡  潘爱民

【出版社】电子工业出版社博文视点公司

【书号】978-7-121-08511-6

【上市日期】2009年5月

【定价】65.00元

 

你可能感兴趣的:(专访《程序员的自我修养——链接、装载与库》作者俞甲子)