加载中…
个人资料
叻叻
叻叻
  • 博客等级:
  • 博客积分:0
  • 博客访问:41,688
  • 关注人气:30
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

读书:《程序员的自我修养——链接、装载与库》

(2010-11-25 22:24:38)
标签:

程序员

潘爱民

中国

目标文件

装载

可执行文件

分类: 读书

 ZB11188364

    上个月中旬买的一本技术类书籍;其内容如书名——主要介绍链接、装载与库相关的机制。印象中,包括书中所述,介绍计算机这三个主题的书籍比较少;在这方面,比较权威的一部著作是《Linkers & Loaders》。本科期间,计算机专业课程也没有较深入的介绍。也正是因为这个原因,本书作者才萌生了写这样一本书的想法。

    本书作者有三人,按书上顺序分别是俞甲子,石凡和潘爱民。其中,潘爱民博士比较出名,因为他著对了我们比较熟悉的计算机相关经典名作,如《C++Primer中文版》(第三版)、《COM本质论》、《计算机网络》(第四版)、以及《深入解析Windows系统》等等。近期,潘爱民博士加盟了盛大创新院,并被称为“中国最熟悉Windows内核的人”(新闻稿见此处)。而俞甲子和石凡,为浙大硕士,应该属于技术型大牛。由于对此书主题的兴趣以及在潘博士的介绍和帮助下,他们两人一起完成此书的主要内容。能著有如此的一本原创的计算机技术类的书籍——很给力的年轻技术大牛啊~无限膜拜中~

    此书的内容,宏观些说是介绍计算机程序基本工作原理的内容,主要是介绍链接、装载与库技术和实现机制。简单来说,一个程序源代码得以执行的过程是预编译编译(生成汇编代码文件)、汇编(生成机器指令,即目标文件)、链接装载到内存、最后执行;此书就是详细汇编之后的过程,链接和装载,其中链接和装载涉及到具体的库,比如我们写的C语言源代码生成的目标需要与C标准库相关目标文件链接生成可执行文件,再经过装载,才能执行。

   链接的定义——一个软件分成各个源代码模块,经过独立地编译生成目标文件,然后按照规则将它们“组装”起来,这个组装模块的过程就是链接(Linking)。在网上没找着更好的定义,就简单引用了书中的定义;比如我们熟识的helloworld源代码,生成目标文件helloworld.o,链接时就得跟ctr1.o,crti.o,crtbeginT.o,crtend.o,crtn.o等目标文件(的目标文件)进行链接,生成可执行文件。而装载就是将这可执行文件装载到内存里,让计算机执行。详细各内容就不介绍了,比如静态链接和动态链接(后者基于共享,运行时链接等)、静态装载和动态装载(前者一开始全装载,后者选择性装载),运行库(包含了启动和退出、标准函数、IO、堆等代码集合)。

    讲讲贯穿此书的我认为的最值得学习的重要思想:

    第一个重要思想,是计算机体系结构关于层结构的一句名言——”Any problem in computer science can be solved by another layer of indirection.”。中文译:“计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决。”我是这样理解的:所谓的问题,其实就是复杂;解决问题就是让复杂变简单;增加中间层,其实就是分层,分成底层和高层,对使高层工作者,底层抽象了,其工作变得简单,使更多人参与,而底层工作人员可以精简化。

    我觉得,加入中间层的精髓在于“抽象”。曾经某课上一老师说到冯.诺尔曼结构最伟大的贡献是——把计算机抽象成硬件和软件。计算机科学各领域的发展,我觉得也是不断抽象的过程。在编程语言里,机器语言复杂,加一层(汇编器),于是有了汇编码;汇编还是复杂,加一层(编译器),于是有了高级语言;有跨平台问题,java加了一层(javaVM)搞定了;对于较高级语言层的开发人员很大程序上用不着担心被抽象掉的底层(要优化啥的可能得了解了解相关中间层转换的机制,毕竟加了一层使效率保证的难度也增大了)。 更扩展一下,现在比较火的“云计算”,在用户的角度上看,感觉就是抽象了主机或服务器(性能由云保证)、软件(SaaS,基本用不着关心本地安装)等;其核心实现技术虚拟化,就将一个设备抽象成N个设备等。

    第二个重要思想是类比的学习方法。此书主要介绍Linux下的实现机制,之后类比地介绍Windows的实现机制,比较注重两者的比较,突出其机制原理之间的相似度(基本可以说它们是“形似神合”的),以灌输“举一反三”的学习思想。扩展一下,如果提高学习的能力?对于同一类知识,学习其一要去领悟其核心原理,如此对于其他的就可以触类旁通了。如此学习才能打好基础,才能真正提高学习的能力。

    也可以说是理论基础决定上层建筑。用内功和外功打个比方,武侠小说里内功好是王道;内力好的人领悟力都高,比如张无忌,练外功都是飕飕地快,或者才能练好比较牛叉的外功,比如九限真经上传的外功。

    了解这个,我们才能把握学习的方向,而不会在新技术的汪洋中迷失(莫是技术狂的我,纯粹的自我鼓励~)。

 

    实话说,我对此书的内容并不感冒。当初经朋友推荐,同时自己的确想简单去了解计算机程序是怎么构造的,是如何的一个实现机制等,就一时兴起买了下来,之后纯当作一本技术类闲书。看了之后,对里面一些具体的知识还是不咋熟悉,比较目标文件的构造(各种元素通过各种数据结构表描述,里面元素还有各种数据结构表,哥表示很晕……)。后来看到库的时候,我发现这部分跟我以前学的有更多交集,比如栈和堆的实现,mini运行库的实现,学得颇为深刻。

    觉得自己还是不太适合学相对底层的知识,莫有太大兴趣;但是作为一名计算机专业学生,我还是坚持把此书的内容看完了,仅当作提高一点点自我修养。

    最后的最后,对这方面知识感兴趣的朋友,我大大推荐。

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有