深入理解计算机系统(英文版)(第3版) 9787111561279

配送至
$ $ USD 美元

编辑推荐

《深入理解计算机系统(英文版)(第3版)》的主要读者是计算机科学家、计算机工程师,以及那些想通过学习计算机系统的内在运作而能够写出更好程序的人。

作者简介

Randal E. Bryant
1973年获得密歇根大学学士学位,随即就读麻省理工学院的研究生院,并在1981年获得计算机博士学位。从1984年至今一直任教于卡内基-梅隆大学,现在是卡内基-梅隆大学计算机科学学院院长、教授,同时受邀任教于工学院电子与计算机工程系。他还是ACM院士、IEEE院士和美国国家工程院院士。其研究成果获得过数项大奖,其中包括Semiconductor Research Corporation颁发的两个发明荣誉奖和一个技术成就奖,ACM颁发的Kanellakis理论与实践奖,还有IEEE颁发的W. R. G. Baker奖、Emmanuel Piore奖和Phil Kaufman奖。

David R. O,Hallaron
拥有弗吉尼亚大学计算机科学博士学位,现为Intel匹兹堡实验室主任,卡内基-梅隆大学计算机科学和电子与计算机工程副教授。他曾获得卡内基-梅隆大学计算机科学学院颁发的Herbert Simon杰出教学奖,并同Quake项目中其他成员一起获得了高性能计算领域中的高国际奖项——Gordon Bell奖。

目录

出版者的话
推荐序一
推荐序二
前言
关于作者
第1章计算机系统漫游
1.1信息就是位+上下文
1.2程序被其他程序翻译成不同的格式
1.3了解编译系统如何工作是大有益处的
1.4处理器读并解释储存在内存中的指令
1.4.1系统的硬件组成
1.4.2运行hello程序
1.5高速缓存至关重要
1.6存储设备形成层次结构
1.7操作系统管理硬件
1.7.1进程
1.7.2线程
1.7.3虚拟内存
1.7.4文件
1.8系统之间利用网络通信
1.9重要主题
1.9.1Amdahl定律
1.9.2并发和并行
1.9.3汁算机系统中抽象的重要性
1.10小结
参考文献说明
练习题答案
第一部分程序结构和执行
第2章信息的表示和处理
2.1信息存储
2.1.1十六进制表示法
2.1.2字数据大小
2.1.3寻址和字节顺序
2.1.4表示字符串
2.1.5表示代码
2.1.6布尔代数简介
2.1.7C语言中的位级运算
2.1.8C语言中的逻辑运算
2.1.9C语言中的移位运算
2.2整数表示
2.2.1整型数据类型
2.2.2无符号数的编码
2.2.3补码编码
2.2.4有符号数和无符号数之间的转换
2.2.5C语言中的有符号数与无符号数
2.2.6扩展一个数字的位表示
2.2.7截断数字
2.2.8关于有符号数与无符号数的建议
2.3整数运算
2.3.1无符号加法
2.3.2补码加法
2.3.3补码的非
2.3.4无符号乘法
2.3.5补码乘法
2.3.6乘以常数
2.3.7除以2的幂
2.3.8关于整数运算的最后思考
2.4浮点数
2.4.1二进制小数
2.4.2IEEE浮点表示
2.4.3数字示例
2.4.4舍入
2.4.5浮点运算
2.4.6C语言中的浮点数
2.5小结
参考文献说明
家庭作业
练习题答案
第3章程序的机器级表示
3.1历史观点
3.2程序编码
3.2.1机器级代码
3.2.2代码示例
3.2.3关于格式的注解
3.3数据格式
3.4访问信息
3.4.1操作数指示符
3.4.2数据传送指令
3.4.3数据传送示例
3.4.4压入和弹出栈数据
3.5算术和逻辑操作
3.5.1加载有效地址
3.5.2一元和二元操作
3.5.3移位操作
3.5.4讨论
3.5.5特殊的算术操作
3.6控制
3.6.1条件码
3.6.2访问条件码
3.6.3跳转指令
3.6.4跳转指令的编码
3.6.5用条件控制来实现条件分支
3.6.6用条件传送来实现条件分支
3.6.7循环
3.6.8switch语句
3.7过程
3.7.1运行时栈
3.7.2转移控制
3.7.3数据传送
3.7.4栈上的局部存储
3.7.5寄存器中的局部存储空间
3.7.6递归过程
3.8数组分配和访问
3.8.1基本原则
3.8.2指针运算
3.8.3嵌套的数组
3.8.4定长数组
3.8.5变长数组
3.9异质的数据结构
3.9.1结构
3.9.2联合
3.9.3数据对齐
3.10在机器级程序中将控制与数据结合起来
3.10.1理解指针
3.10.2应用:使用GDB调试器
3.10.3内存越界引用和缓冲区溢出
3.10.4对抗缓冲区溢出攻击
3.10.5支持变长栈帧
3.1.1浮点代码
3.1.1.1浮点传送和转换操作
3.1.1.2过程中的浮点代码
3.1.1.3浮点运算操作
3.1.1.4定义和使用浮点常数
3.1.1.5在浮点代码中使用位级操作
3.1.1.6浮点比较操作
3.1.1.7对浮点代码的观察结论
3.1.2小结
参考文献说明
家庭作业
练习题答案
第4章处理器体系结构
4.1Y86—64指令集体系结构
4.1.1程序员可见的状态
4.1.2Y86—64指令
4.1.3指令编码
4.1.4Y86—64异常
4.1.5Y86—64程序
4.1.6一些Y86—64指令的详情
4.2逻辑设计和硬件控制语言HCL
4.2.1逻辑门
4.2.2组合电路和HCL布尔表达式
4.2.3字级的组合电路和HCL整数表达式
4.2.4集合关系
4.2.5存储器和时钟
4.3Y86—64的顺序实现
4.3.1将处理组织成阶段
4.3.2SEQ硬件结构
4.3.3SEQ的时序
4.3.4SEQ阶段的实现
4.4流水线的通用原理
4.4.1计算流水线
4.4.2流水线操作的详细说明
4.4.3流水线的局限性
4.4.4带反馈的流水线系统
4.5Y86—64的流水线实现
4.5.1SEQ+:重新安排计算阶段
4.5.2插入流水线寄存器
4.5.3对信号进行重新排列和标号
4.5.4预测下一个PC
4.5.5流水线冒险
4.5.6异常处理
4.5.7PIPE各阶段的实现
4.5.8流水线控制逻辑
4.5.9性能分析
4.5.10未完成的工作
4.6小结
参考文献说明
家庭作业
练习题答案
第5章优化程序性能
5.1优化编译器的能力和局限性
5.2表示程序性能
5.3程序示例
5.4消除循环的低效率
5.5减少过程调用
5.6消除不必要的内存引用
5.7理解现代处理器
5.7.1整体操作
5.7.2功能单元的性能
5.7.3处理器操作的抽象模型
5.8循环展开
5.9提高并行性
5.9.1多个累积变量
5.9.2重新结合变换
5.10优化合并代码的结果小结
5.11一些限制因素
5.11.1寄存器溢出
5.11.2分支预测和预测错误处罚
5.12理解内存性能
5.12.1加载的性能
5.12.2存储的性能
5.13应用:性能提高技术
5.14确认和消除性能瓶颈
5.14.1程序剖析
5.14.2使用剖析程序来指导优化
5.15小结
参考文献说明
家庭作业
练习题答案
第6章存储器层次结构
6.1存储技术
6.1.1随机访问存储器
6.1.2磁盘存储
6.1.3固态硬盘
6.1.4存储技术趋势
6.2局部性
6.2.1对程序数据引用的局部性
6.2.2取指令的局部性
6.2.3局部性小结
6.3存储器层次结构
6.3.1存储器层次结构中的缓存
6.3.2存储器层次结构概念小结
6.4高速缓存存储器
6.4.1通用的高速缓存存储器组织结构
6.4.2直接映射高速缓存
6.4.3组相联高速缓存
6.4.4全相联高速缓存
6.4.5有关写的问题
6.4.6一个真实的高速缓存层次结构的解剖
6.4.7高速缓存参数的性能影响
6.5编写高速缓存友好的代码
6.6综合:高速缓存对程序性能的影响
6.6.1存储器山
6.6.2重新排列循环以提高空间局部性
6.6.3在程序中利用局部性
6.7小结
参考文献说明
家庭作业
练习题符案
……
第二部分在系统上运行程序
第三部分程序间的交互和通信

序言

推 荐 序 一华章公司温莉芳女士邀我为即将出版的《Computer Systems:A Programmer抯 Perspective》第3版的中文译本《深入理解计算机系统》写个序,出于两方面的考虑,欣然允之。
一是源于我个人的背景和兴趣。我长期从事软件工程和系统软件领域的研究,对计算机学科的认识可概括为两大方面:计算系统的构建和基于计算系统的计算技术应用。出于信息时代国家掌握关键核心技术的重大需求以及我个人专业的本位视角,我一直对系统级技术的研发给予更多关注,由于这种“偏爱”和研究习惯的养成,以至于自己在面对非本专业领域问题时,也常常喜欢从“系统观”来看待问题和解决问题。我自己也和《深入理解计算机系统》有过“亲密接触”。2012年,我还在北京大学信息科学技术学院院长任上,学院从更好地培养适应新技术、发展具有系统设计和系统应用能力的计算机专门人才出发,在调查若干国外高校计算机学科本科生教学体系基础上,决定加强计算机系统能力培养,在本科生二年级增设了一门系统级课程,即“计算机系统导论”。其时,学校正在倡导小班课教学模式,这门课也被选为学院的第一个小班课教学试点。为了体现学院的重视,我亲自担任了这门课的主持人,带领一个18人组成的“豪华”教学团队负责该课程的教学工作,将学生分成14个小班,每个小班不超过15人。同时,该课程涉及教师集体备课组合授课、大班授课基础上的小班课教学和讨论、定期教学会议、学生自主习题课和实验课等新教学模式的探索,其中一项非常重要的举措就是选用了卡内基–梅隆大学Randal E.Bryant教授和David R.O扝allaron教授编写的《Computer Systems:A Programmer抯 Perspective》(第2版)作为教材。虽然这门课程我只主持了一次,但对这本教材的印象颇深颇佳。
二是源于我和华章公司已有的良好合作和相互了解。2000年前后,我先后翻译了华章公司引进(机械工业出版社出版)的Roger Pressman编写的《Software Engineering:A Practitioner抯 Approach》一书的第4版和第5版。其后,在计算机学会软件工程专业委员会和系统软件专业委员会的诸多学术活动中也和华章公司及温莉芳女士本人有不少合作。近二十年来,华章公司的编辑们引进出版了大量计算机学科的优秀教材和学术著作,对国内高校计算机学科的教学改革起到了积极的促进作用,本书的翻译出版仍是这项工作的延续。这是一项值得褒扬的工作,我也想借此机会代表计算机界同仁表达对华章公司的感谢!
计算机系统类别的课程一直是计算机科学与技术专业的主要教学内容之一。由于历史原因,我国的计算机专业的课程体系曾广泛参考ACM和IEEE制订的计算机科学与技术专业教学计划(Computing Curricula)设计,计算机系统类课程也参照该计划分为汇编语言、操作系统、组成原理、体系结构、计算机网络等多门课程。应该说,该课程体系在历史上对我国的计算机专业教育起了很好的引导作用。
进入新世纪以来,计算技术发生了重要的发展和变化,我国的信息技术和产业也得到了迅猛发展,对计算机专业的毕业生提出了更高要求。重新审视原来我们参照ACM/IEEE计算机专业计划的课程体系,会发现存在以下几个方面的主要问题。
1)课程体系中缺乏一门独立的能够贯穿整个计算机系统的基础课程。计算机系统方面的基础知识被分成了很多门独立的课程,课程内容彼此之间缺乏关联和系统性。学生学习之后,虽然在计算机系统的各个部分理解了很多概念和方法,但往往会忽视各个部分之间的关联,难以系统性地理解整个计算机系统的工作原理和方法。
2)现有课程往往偏重理论,和实践关联较少。如现有的系统课程中通常会介绍函数调用过程中的压栈和退栈方式,但较少和实践关联来理解压栈和退栈过程的主要作用。实际上,压栈和退栈与理解C等高级语言的工作原理息息相关,也是常用的攻击手段Buffer Overflow的主要技术基础。
3)教学内容比较传统和陈旧,基本上是早期PC时代的内容。比如,现在的主流台式机CPU都已经是x86-64指令集,但较多课程还在教授80386甚至更早的指令集。对于近年来出现的多核/众核处理器、SSD硬盘等实际应用中遇到的内容更是涉及较少。
4)课程大多数从设计者的角度出发,而不是从使用者的角度出发。对于大多数学生来说,毕业之后并不会成为专业的CPU设计人员、操作系统开发人员等,而是会成为软件开发工程师。对他们而言,最重要的是理解主流计算机系统的整体设计以及这些设计因素对于应用软件开发和运行的影响。
这本教材很好地克服了上述传统课程的不足,这也是当初北大计算机学科本科生教学改革时选择该教材的主要考量。其一,该教材系统地介绍了整个计算机系统的工作原理,可帮助学生系统性地理解计算机如何执行程序、存储信息和通信;其二,该教材非常强调实践,全书包括9个配套的实验,在这些实验中,学生需要攻破计算机系统、设计CPU、实现命令行解释器、根据缓存优化程序等,在新鲜有趣的实验中理解系统原理,培养动手能力;其三,该教材紧跟时代的发展,加入了x86-64指令集、Intel Core i7的虚拟地址结构、SSD磁盘、IPv6等新技术内容;其四,该教材

文摘

版权页:

插图:
ISBN9787111561279
出版社机械工业出版社
作者兰德尔 E.布莱恩特 (Randal E.Bryant)
尺寸16