七年之后的《深入理解计算机系统》

《深入理解计算机系统》是通过程序员的视角来介绍计算机系统,首先把高级语言转换成计算机所能理解的一种中间格式(如汇编语言),然后描述计算机如何解释和执行这些中间格式的程序,是系统的哪一部分影响程序的执行效率。在讲述计算机系统知识的同时,也给出了关于 C 语言和汇编语言的编程、阅读技巧以及基本的系统编程工具,还给出一些方法帮助程序员基于对计算机系统的理解来改善程序的性能等问题。本书强调 对计算机系统概念的理解,但并不意味着不动手。如果按照本书的安排做每一章后面的习题,将有助于理解和加深正文所述的概念和知识,更可以从实际动手中学习 到新的知识。

 七年之后的《深入理解计算机系统》

第2版与第1版的差别查看详情

 

本书的主要内容是关于计算机体系结构与编译器和操作系统的交互,包括:数据表示;汇编语言和汇编级计算机体系结构;处理器设计;程序的性能度量和优化;程序的加载器、链接器和编译器;包括 I/O 和设备的存储器层次结构;虚拟存储器;外部存贮管理;中断、信号和进程控制。

本书的最大优点是为程序员描述计算机系 统的实现细节,帮助其在大脑中构造一个层次型的计算机系统,从最底层的数据在内存中的表示(如大多数程序员一直陌生或疑惑的浮点数表示),到流水线指令的 构成,到虚拟存储器,到编译系统,到动态加载库,到最后的用户态应用。贯串本书的一条主线是使程序员在设计程序时,能充分意识到计算机系统的重要性,建立 起被所写程序可能被执行的数据或指令流图,明白当程序被执行时,到底发生了什么事。从而能设计出一个高效、可移植、健壮的程序,并能够更快地对程序排错、 改进程序性能等。

原书是卡耐基-梅隆大学( CMU )的教材,现在很多国内外著名的大学也选用其为教材或辅助性资料,因此,本书的读者不仅仅是那些因为工作和兴趣而关注本书的人,还包括一些在校的大学生。我们认为,在校学生越早接触本书的内容,将越有利于他们学习计算机的相关课程,培养对计算机系统的研究兴趣。

总的来说,《深入理解计算机系统》一书是一个桥梁,它帮助程序员衔接了计算机系统的各个领域的知识,为程序员构造了一个概念性框架。对于各个领域,如计算机系统结构、操作系统、编译器、网络、并发编程的知识进一步获取,还需要进一步阅读相关书籍。

《深入理解计算机系统》从第一版到第二版,已经是七年的时光了。由于计算机技术的飞速发展,第二版相对于第一版做了大量的修改。首先,针对硬件技术和编译器技术的变化,第二版对系统的介绍,特别是实际使用部分,做了增加和修改。例如,既保持了原有的针对 32 位系统的说明,又增加了对 64 位系统的描述。其次,第二版增加了很多关于由算术运算溢出以及缓冲区溢出造成安全漏洞的内容。第三,更详细讲述了处理器对异常的发现和处理,这是计算机系统中的一个重点和难点。第四,对存储器的描述改为了基于 Intel Core i7 处理器的存储器层次结构,还增加了固态硬盘的内容。第五,强调了并发性,并发性既体现在处理器的实现中,也体现在应用程序编程中。

这次我们不仅对第二版较第一版有改动之 处做了仔细的翻译,而且对第一版之译稿做了重新审视,重新校正,精益求精。比如,在保证原意正确的情况下,对一些句式做了变动,还有尽量减少被动语态的使 用等,以符合中文的习惯。再如,根据我这几年教授《计算机体系结构》课程的经验,改变了某些术语的翻译,使之更接近于中文教科书中的术语使用。

本书中有些术语的翻译还是让我们难以抉择。在此,我们预先做一些解释和说明。 Operator 这个词,如果根据上下文,它表示的是一个运算,我们就翻译成运算符。如果它对应于一个操作,我们就翻译成操作符。 Local variable ,可以翻译成局部变量,也可以翻译成本地变量。考虑到还有 local data 、 local buffer 等词,我们选择统一将 local 翻译成“局部的”。 Chunk 这个词是一片或者一块的意思,常常用来表示一块连续的内存区域。它在第 6 、 7 和 9 章中出现较多。为了使之区别于 block (块),我们选择将其翻译成“片”。

本书内容多,篇幅长,出于降低印刷成本和最后定价的考虑,我们不得不忍痛割爱,在中文版中不附上附录。经常读计算机书籍的读者都知道附录对于一本书完整度的重要性,所以,我们还是对附录进行了翻译和编辑,放到华章图书的网站以及一些相关网站上,供大家参考使用。

由于本书内容量大,翻译时间紧迫,尽管我们尽量做到认真仔细,但还是难以避免出现错误和不尽如人意的地方。在此欢迎广大读者批评指正,我们也会把勘误表及时在网上更新,便于大家阅读。

龚奕利,雷迎春

2010 年 9 月于珞珈山

 

你可能感兴趣的:(计算机)