《深入理解计算机系统(英文版.第2版)》

深入理解计算机系统(英文版.第2版)》china-pub计算机新书推荐


本书双色印刷,计算机软硬件理论结合讲述的经典之作。

页码:1077


基本信息
原书名: Computer Systems: A Programmer's Perspective (2nd Edition)
原出版社: Addison Wesley
作者: (美)Randal E.Bryant    David R. O'Hallaron    [作译者介绍]
丛书名: 经典原版书库
出版社:机械工业出版社
ISBN:9787111326311


媒体评论

“2005年,我开始采用Bryant和O’Hallaron的这本书作为本科生计算机系统课程的教材。三年后,这本书仍然是我的计算机系统课程教科书的首选。” —— Mirela Damian,维拉诺瓦大学
“本书表述清晰、恰到好处——举重若轻地呈现了那些非常复杂的内容。” —— Ibrahim Matta, 波士顿大学
“这是一本学习计算机硬件和软件如何‘真正’协同工作的好书,还教会你为什么了解这些知识会使你成为一个更有价值的程序员。本书还帮你为学习像操作系统和编译器这样的高级课程做好准备。在本书中,我最喜欢的章节是关于缓存的,当我第一次发现缓存有多重要时,真是难以置信!” —— Vishal Shah,Ask.com总架构师

 

内容简介
本书是一本将计算机软件和硬件理论结合讲述的经典教程,内容覆盖计算机导论、体系结构和处理器设计等多门课程。本书的最大优点是为程序员描述计算机系统的实现细节,通过描述程序是如何映射到系统上,以及程序是如何执行的,使读者更好地理解程序的行为为什么是这样的,以及造成效率低下的原因。
相对于第1版,本版主要是反映了过去十年间硬件技术和编译器的变化,具体更新如下:
1. 对系统的介绍(特别是实际使用部分)做了增加和修改。例如,既保持了原有的针对32位系统的说明,又增加了对64位系统的描述。
2. 增加了很多关于由算术运算溢出以及缓冲区溢出造成安全漏洞的内容。
3. 更详细讲述了处理器对异常的发现和处理。
4. 描述了基于intel core i7处理器的存储器层次结构,还增加了固态硬盘的内容。
5. 强调并发性,增加了关于并发性一般原则的内容。

 

前言
本书的主要读者是计算机科学家、计算机工程师,以及那些想通过学习计算机系统的内在运作而能够写出更好程序的人。
我们的目的是解释所有计算机系统的本质概念,并向你展示这些概念是如何实实在在地影响应用程序的正确性、性能和实用性的。其他的系统类书籍都是从构建者的角度来写的,讲述如何实现硬件或是系统软件,包括操作系统、编译器和网络接口。而本书是从程序员的角度来写的,讲述应用程序员如何能够利用系统知识来编写出更好的程序。当然,学习一个计算机系统应该做些什么,是学习如何构建一个计算机系统的很好的出发点,所以,对于希望继续学习系统软硬件实现的人来说,本书也是一本很有价值的介绍性读物。
本书概述
本书由12 章组成,旨在阐述计算机系统的核心概念。
·第1 章:计算机系统漫游。这一章通过研究“hello, world”这个简单程序的生命周期,介绍计算机系统的主要概念和主题。
·第2 章:信息的表示和处理。我们讲述了计算机的算术运算,重点描述了会对程序员有影响的无符号数和数的二进制补码(two’s complement)表示的特性。我们考虑数字是如何表示的,以及由此确定对于一个给定的字长,其可能编码值的范围。我们讨论该如何表示数字,以及因此用给定的字长能编码的数值的范围。我们探讨有符号和无符号数字之间类型转换的效果,还阐述算术运算的数学特性。菜鸟级程序员经常很惊奇地了解到(用二进制补码表示的)两个正数的和或者积可能为负。另一方面,二进制补码的算术运算满足代数环的特性,因此,编译器可以很安全地把一个常量乘法转化为一系列的移位和加法。我们用C 语言的位级操作来说明布尔代数的原理和应用。我们从两个方面讲述了IEEE 标准的浮点格式:一是如何用它来表示数值,一是浮点运算的数学属性。
·第3 章:程序的机器级表示。我们教读者如何阅读由C 编译器生成的IA32 和x86-64 汇编语言。我们说明为不同控制结构,比如条件、循环和开关语句,生成的基本指令模式。我们还讲述过程的执行,包括栈分配、寄存器使用惯例和参数传递。我们讨论不同数据结构(如结构、联合(union)和数组)的分配和访问方式。我们还以分析程序在机器级的样子作为途径,来理解常见的代码安全漏洞,例如,缓冲区溢出,以及理解程序员、编译器和操作系统可以采取的减轻这些威胁的措施。
·第4 章:处理器体系结构。这一章讲述基本的组合和时序逻辑元素,并展示这些元素如何在数据通路(datapath)中组合到一起来执行IA32 指令集的一个称为“Y86”的简化子集。本章中处理器设计的控制逻辑是用一种称为HCL 的简单硬件描述语言来描述的。用HCL 写的硬件设计能够编译和链接到本书提供的模拟器中,还可以根据这些设计生成Verilog 描述,它适合合成(synthesis)到实际可以运行的硬件上去。
·第5 章:优化程序性能。在这一章里,我们介绍了许多提高代码性能的技术,主要思想就是让程序员通过使编译器能够生成更有效的机器代码来学习编写C 代码。
·第6 章:存储器层次结构。对应用程序员来说,存储器系统是计算机系统中最直接可见的部分之一。我们讲述不同类型的随机存取存储器(RAM)和只读存储器(ROM),以及磁盘和固态硬盘的几何形状和组织构造。我们描述这些存储设备是如何放置在层次结构中的,讲述访问局部性是如何使这种层次结构成为可能的。我们通过一个独特的观点使这些理论具体化、形象化,那就是将存储器系统视为一个“存储器山”,山脊是时间局部性,而斜坡是空间局部性。最后,我们向读者阐述如何通过改善程序的时间局部性和空间局部性来提高应用程序的性能。
·第7 章:链接。本章讲述静态和动态链接,包括的概念有可重定位的(relocatable)和可执行的目标文件、符号解析、重定位(relocation)、静态库、共享目标库,以及与位置无关的代码。
·第8 章:异常控制流。在本书的这个部分,我们通过介绍异常控制流(比如,除了正常分支和过程调用以外的控制流的变化)的一般概念,打破单一程序的模型。我们给出存在于系统所有层次的异常控制流的例子,从底层的硬件异常和中断,到并发进程的上下文切换,到由于Unix 信号传送引起的控制流突变,到C 语言中破坏栈原则的非本地跳转(nonlocal jump)。
·第9 章:虚拟存储器。我们讲述虚拟存储器系统是希望读者对它是如何工作的以及它的特性有所了解。我们想让读者了解为什么不同的并发进程各自都有一个完全相同的地址范围,能共享某些页,而又独占另外一些页。我们还覆盖讲了一些管理和操纵虚拟存储器的问题。
特别地,我们讨论了存储分配操作,就像Unix 的malloc 和free 操作。
·第10 章:系统级I/O。我们讲述Unix I/O 的基本概念,例如文件和描述符。我们描述如何共享文件,I/O 重定向是如何工作的,还有如何访问文件的元数据。我们还开发了一个健壮的带缓冲区的I/O 包,可以正确处理一种称为short counts 的奇特行为,也就是库函数只读取一部分的输入数据。我们阐述C 的标准I/O 库,以及它与Unix I/O 的关系,重点谈到标准I/O 的局限性,这些局限性使之不适合网络编程。
·第11 章:网络编程。对编程而言,网络是非常有趣的I/O 设备,将许多我们前面文中学习的概念,比如进程、信号、字节顺序(byte order)、存储器映射和动态存储器分配,联系在一起。网络程序还为下一章的主题—并发,提供了一个很令人信服的上下文。本章只是网络编程的一个很小的部分,使读者能够编写一个Web 服务器。我们还讲述了位于所有网络程序底层的客户端- 服务器模型。我们展现了一个程序员对Internet 的观点,并且教读者如何用套接字(socket)接口来编写Internet 客户端和服务器。最后,我们介绍超文本传输协议HTTP,并开发了一个简单的迭代式(iterative)Web 服务器。
·第12 章:并发编程。这一章以Internet 服务器设计为例介绍了并发编程。我们比较对照了三种编写并发程序的基本机制(进程、I/O 多路复用技术和线程),并且展示如何用它们来建造并发Internet 服务器。我们探讨了用P、V 信号操作来实现同步、线程安全和可重入5(reentrancy)、竞争条件以及死锁等的基本原则。我们还讲述了线程级编程的使用方法,来解释应用程序中的并行性,使得程序在多核的处理器上能执行得更快。
本版新增内容
本书的第1 版于2003 年出版。考虑到计算机技术发展如此迅速,这本书的内容还算是保持得很好。事实证明Intel x86 的机器上运行类Unix 操作系统,加上采用C 语言编程,是一种能够涵盖当今许多系统的组合。硬件技术和编译器的变化,以及很多教师教授这些内容的经验,都促使我们做了大量的修改。
下面列出的是一些更加详细的改进:

.·第2 章:信息的表示和处理。通过更加详细地解释概念以及更多的练习题和家庭作业,我们试图使这部分内容更加易懂。我们将一些比较偏理论的内容放到了网络旁注里。还讲述了一些由于计算机算术运算的溢出造成的安全漏洞。
·第3 章:程序的机器级表示。我们将内容的覆盖范围扩展到了包括x86-64,也就是将x86处理器扩展到了64 位字长。也使用了更新版本的GCC 产生的代码。另外还增强了对缓冲区溢出漏洞的描述。在网络旁注里,我们给出了两类不同的浮点指令,还介绍了当编译器试图做更高等级优化的时候,做的一些奇特的变换。另外,还有一个网络旁注描述了如何在一个C 语言程序中嵌入x86 汇编代码。
·第4 章:处理器体系结构。更加详细地说明了我们的处理器设计中的异常发现和处理。在网络旁注里,我们也给出了处理器设计的Verilog 描述映射,使得我们的设计能够合成到可运行的硬件上。
·第5 章:优化程序性能。我们极大地改变了对乱序处理器如何运行的描述,还提出了一种简单的技术,能够基于程序的数据流图表示中的路径来分析程序的性能。在网络旁注里,描述了C 语言程序员如何能够利用较新的x86 处理器中提供的SIMD(单指令流,多数据流)指令来编程。
·第6 章:存储器层次结构。我们增加了固态硬盘的内容,还更新了我们的表述,使之基于Intel Core i7 处理器的存储器层次结构。
·第7 章:链接。本章的变化不大。
·第8 章:异常控制流。我们改进了对于进程模型如何引入一些基本的并发概念的讨论,例如非确定性。
·第9 章:虚拟存储器。我们更新了存储器系统案例研究,采用了64 位Intel Core i7 处理器为例来讲述。我们还更新了malloc 函数的示例实现, 使之既能在32 位也能在64 位环境中执行。
·第10 章:系统级I/O。本章的变化不大。
·第11 章:网络编程。本章的变化不大。
·第12 章:并发编程。我们增加了关于并发性一般原则的内容,还讲述了程序员如何利用线程级并行性使得程序在多核机器上能运行得更快。
此外,我们还增加和修改了很多练习题和家庭作业。

图书详情及购买地址:http://www.china-pub.com/197441&ref=cnblogs

posted on 2011-01-19 13:20  china-pub   阅读(407)  评论(0编辑  收藏  举报