跳至主要内容

Computer Systems: A Programmer's Perspective

Bryant, R.E所著的这本Computer Systems: A Programmer's Perspective,在国内翻译为《深入理解计算机系统》,由中国电力出版社2004出版,应该算是一本重量级的书了。从同学推荐到今天看完,足足花了有5个月的时间,虽然看得不深,但总的感觉还是不错,在这里就对它作一个总结吧。
Computer Systems表明这本书讲解的是计算机系统知识,但A Programmer's Perspective却又告诉我们它与其它书籍的不同之处,便是从程序员的角度,即偏向软件的角度,而不过多地涉及硬件内容。计算机系统本身就是一门涉及面广,内容繁多的学科,这本书不可避免地从各个角度讲解了这些内容。下面以我个人的观点进行一些总结。
第1章:计算机系统漫游
主要是对全书内容作了一个简要的概括。
第2章:信息的表示和处理
这一章主要讲解了整数与浮点数。虽然对于整数我们已经很熟悉了,但是在实际中仍会犯下各种各样的错误,书中对不同整型数间的转换及运算作出了很详细的论述。浮点数似乎一直是计算机书籍里不愿涉及的话题,对于想了解浮点数表示及浮点数运算的人来说,这部分关于浮点的描述可以作为一个很好的起点。
第3章 程序的机器级表示
对于任何一个希望了解底层的人来说,这一章可说是相当精彩的。本章主要讲解了IA32的指令集,因此以汇编为主,在控制流指令部分还将C语言及对应的汇编形式进行了对照,在调用部分还详细讲解了本地栈。最后为对浮点感兴趣的人准备了IA32中用于处理浮点的指令集。
第4章 处理器体系结构
这一章是本书中最接近硬件的部分了,从设计一个简单的处理器Y86出发并逐步完善它,一步步地引导读者理解处理器体系结构。虽然我们可能永远也不会自己设计处理器,但了解它是何工作的能有助我们理解整个计算机系统是如何工作的,比如对程序优化就很有帮助。本章首先给出了Y86的指令集,并使用一种硬件描述语言HCL对硬件的逻辑结构进行了描述,然后将指令分成取指、译码、执行、访存、写回、更新PC六个阶段,给出了每条指令的每一部分的操作内容,并对每一部分的硬件实现分别进行了讨论。显然,这种顺序的实现过程是低效的,本章的后面部分便围统着流水线的实现以及遇到的问题展开了论述。
第5章 优化程序性能
本章介绍了一些代码优化的内容,如前面所说,只有理解了处理器系统才能充分地利用处理器资源,进行更好的优化,于是这部分除了讲解如何优化外,还说明了为什么要这么做。
第6章 存储器层次结构
本章主要讲述存储器的相应知识,这里的存储器不专指内存,如SRAM、DRAM、磁盘。从局部性原理原理展开,引出计算机系统一个重要的概念:层次结构。后面则主要针对高速缓存及如何利用高速缓存加快程序运行速度进行了讨论。
第7章 链接
链接是生成程序的最后一步,对这方面进行描述的书籍不多,大概也是因为很长一段时间内,链接过程并没有发生本质变化的缘故吧。具体内容可以参见我对这一章的总结
第8章 异常控制流
这里所说的异常控制流不是专指C++中的异常处理。书中将异常定义为控制流的突变,用来响应处理器状态中的某些变化。这样,中断、系统调用、信号都属于本章讨论的范围了。个人觉得这一章写得比较杂,涉及的内容有:进程(多任务操作系统下的执行、用户/内核模式及二者切换、Linux下的一些关于进程的系统调用)、信号,最后对C中的非本地跳转进行了介绍(setjmp及longjmp)。
第9章 测量程序执行时间
在现代多任务的操作系统环境下,要想精确地测量程序执行的时间是很困难的,本章对此进行了讨论,不过对运行时间的影响因素太多了,本章的内容作为一个了解就可以了。
第10章 虚拟存储器
可以说这一章是继第4章后的重要一章了。本章主要讨论了虚拟存储器,并对物理地址与虚拟地址的转换进行了论述,同时也涵盖了高速缓存的内容。后半部分则讲述了内存分配/释放策略,这也是一个很重要的内容。
第11章 系统级I/O
主要介绍了在unix/linux系统下一些关于I/O方面的系统调用函数。
第12章 网络编程
主要介绍了socket的一些知识,并给出了一个简单的Web服务器的实现。
第13章 并发编程
主要从进程、I/O多路复用及线程三个方面介绍了并发编程的基本内容,并对信号量、生产者-消费者模型及其它并发性问题如死锁进行了讨论。

总的来说,这本书对重要的概念讲解得比较透彻,为了保证完整性,涉及的内容较多,有些章节的讲解则很简单,特别是后面三章的内容,要深入学习需要参考其它著作。

评论

此博客中的热门博文

反转剧

这两天明显感到天气转冷,呱呱的家里也已经下起了大雪,南京则是阴冷潮湿,让人没有了出行的欲望。没想到躲在被子里看反转剧也成了度过寒冬的一剂良药。在PPLive越来越让人失望的时候,PPStream横空出世,虽然广告仍是少不了的主题,但从视频质量和播放连续性上来说都超过PPLive,实为居家必备之良品(由此可见,新事物一定会战胜旧事物......)。韩国的反转剧最近似乎比较流行,称之为反转剧就在于其结果总是让人出乎意料,不合常理,其间又不乏各种搞怪搞笑的镜头,各种当红帅哥美女也一定让DDMM们爱不释手,20~30分钟一集的剧情一改韩剧拖沓的风貌,想看就看,容易切入。 反转剧,今天你看了吗?

如何突破自己的界限(ZZ)

大家都听说过温水煮青蛙的故事,也知道生于忧患死于安乐的道理,但是我们在生活中总会自然而然的根据自己的好恶养成一些习惯,在习惯的环境中,会感 觉很舒适,同时,这些习惯会开始渐渐在我们周围建起一座壁垒,哪怕这些习惯本身并没有什么错误,它们会慢慢局限我们的想法和决定,让我们失去很多应该获得 的机会,难以突破自己。 为什么我们常常会觉得工作和生活越来越沉闷,归根结底,是因为我们选择了这样的生活。 我们回避犯错误回避冒险。 不会犯错误的人永远不会创造出新的价值。 如果你想打破这种沉闷,让生活重新充满活力,下面有一些方法: 了解自己各种积习的真相。这些习惯往往曾经为你带来过成功,下一次你仍然会那么做。想要有所突破,必须放弃这些习惯,尝试新的思路模式和行动方法。除此之外别无他法,这些积习已经在阻碍你发现新鲜事物,让你停滞不前。 用不同的方法做事,看看效果。世界每一天都在发生变化,哪怕曾经让你无比成功的习惯,也不可能适应各种情况。 尝试用不同的方法做事,不要害怕失败,不要成为习惯的傀儡。 破除给自己强加的条条框框, 重新审视自己 ,给自己时间。积习难改,首先我们可能没有意识到这些习惯的存在,其次,在调整自我的过程中,这些习惯会不断的反扑,看看有多少人戒烟成功就知道了。 做你自己。很多时候我们不是在做自己,而是在做别人眼中的自己。大多数人都会有取悦别人的想法,希望达到别人的期望,哪怕是让自己变成自己都不愿 意成为的人。 你首先应该做好自己。 每个人都是不同的, 你应该把自己放在第一位,因为没有人会比你自己更在乎你。 把别人放在第二位是说给别人足够的尊重就可 以,不是让你完全忽略他们。 总是活在别人的阴影里是一种负担。 跳出这个圈子,给自己一个成为自己的机会。 放慢脚步,随遇而安。很多人都希望自己是一个充满智慧、优秀、受人爱戴的人。有时你的确是,有时却不一定。现实太复杂了,我们需要不断从别人那里 获取信息和支持来完成任何事情。我们所拥有的东西和知识都来自于别人。有时候,通过这些外界的帮助,我们可以做的更好。但有时却无法很好的利用。所以,要 了解自己是一个思想和感觉的复杂结合体,这些思想和感觉有时候很有用,有时候不。不需要给自己戴一个面具,也 不需要伪装自己什么都行,更没有必要因为发现自己的弱点而感到恐惧。 如果你能真诚的面对自己,会获得一种解脱。可能你不如自己想像得那么伟大,但也不

天将降大任于斯人也,必先折其体肤,洗其脑袋

元宵节就这么被一个半导体扼杀了。一趟大巴把我们拉到了汤山,我在那看到了keywords:温泉、洗浴、桑拿...可是没看到司机踩刹车... 当晚便开始训练,站在操场上,看着万家烟火,寒风凛冽,想着可怜的呱呱在家一个人吃汤圆,老泪纵横。Goodbye me lover, goodbye my friend. ——James Blunt语 当天正是降温的时候,第二天,天空居然飘起了小雪点,毛衣没带,冻得发抖。下午心动过速一小时,顶着,心里在想,如果倒下了,呱呱会怎样。接下来两天气温有些回升,训练也没有那么累了,Thank God。只是冬天的太阳狠,真狠,真是狠,真他妈狠,Yeah!脸皮痛,回到南京遂开始脱皮。一觉睡到大天亮,开始为期十二天的洗脑。生活颇为FB,行动却尤为不便,拜超级BT的领导所赐。好在呱呱也将有长达半月的培训,总算不会担心她会饿死,大饼的故事? 杀!!! ——顺带记念30年的第一次军训