描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111626589
内容简介
本书是计算机体系结构的入门教材,从程序员的视角展开讨论,重点介绍基础知识和概念,不深入底层技术的细节。这种视角旨在帮助程序员新手和计算机专业新生理解体系结构对编程的影响,书中浓缩的核心知识点涵盖了程序员需要掌握的所有硬件层面,从而有利于其更好地进行软件的设计、实现和运维。本书分为五个部分,包括数字逻辑、门和数据通路的基础知识,以及体系结构的三个主要方面——处理器、内存和I/O系统。此外,书中还涉及并行、流水线、能源和性能等高级主题,以及一个动手操作的实验。第2版共包含了三个全新的章节,并在整体上进行了与时俱进的修订。
目 录
出版者的话
译者序
前言
关于作者
第1章 简介及概览 1
1.1 体系结构的重要性 1
1.2 学习基础知识 1
1.3 本书结构 1
1.4 一笔带过的内容 2
1.5 术语:体系结构和设计 2
1.6 小结 2
第一部分 基础知识
第2章 数字逻辑基础 4
2.1 引言 4
2.2 数字计算装置 4
2.3 电气术语:电压和电流 4
2.4 晶体管 5
2.5 逻辑门 5
2.6 使用晶体管实现的“与非”逻辑门电路 7
2.7 表示逻辑门的符号 8
2.8 逻辑门互连的例子 8
2.9 实现二进制加法的数字电路 10
2.10 多逻辑门的集成电路 10
2.11 不只需要组合逻辑电路 11
2.12 维持状态的电路 11
2.13 传播延迟 12
2.14 使用锁存器构建存储器 12
2.15 触发器和波形图 13
2.16 二进制计数器 14
2.17 时钟和时序 15
2.18 反馈的重要概念 17
2.19 启动序列 18
2.20 软件迭代与硬件复制 18
2.21 门和芯片的最简化 19
2.22 使用闲置门 19
2.23 配电和散热 20
2.24 时序和时钟域 20
2.25 无时钟逻辑 21
2.26 电路规模和摩尔定律 21
2.27 电路板和层 22
2.28 抽象层次 23
2.29 小结 23
习题 23
第3章 数据和程序的表示 25
3.1 引言 25
3.2 数字逻辑与抽象的重要性 25
3.3 位和字节的定义 25
3.4 字节大小和可能的值 25
3.5 二进制位权表示法 26
3.6 位序 27
3.7 十六进制记法 28
3.8 十六进制和二进制常数记法 29
3.9 字符集 29
3.10 Unicode 30
3.11 无符号整数、溢出和下溢 30
3.12 给位和字节编号 31
3.13 有符号二进制整数 31
3.14 一个补码数字的例子 32
3.15 符号扩展 33
3.16 浮点数 33
3.17 IEEE浮点值的范围 34
3.18 特殊值 35
3.19 二进制编码的十进制表示 35
3.20 有符号数、分数和压缩BCD表示法 36
3.21 数据聚合 36
3.22 程序的表示 37
3.23 小结 37
习题 37
第二部分 处理器
第4章 处理器和计算引擎的多样性 40
4.1 引言 40
4.2 两种基本的体系结构 40
4.3 哈佛与冯·诺依曼体系结构 40
4.4 处理器的定义 41
4.5 处理器的范围 41
4.6 分层结构和计算引擎 42
4.7 传统处理器的结构 43
4.8 处理器的分类和角色 44
4.9 处理器技术 44
4.10 存储程序 45
4.11 取指–执行周期 45
4.12 程序转换 46
4.13 时钟速率和指令速率 46
4.14 控制:启动和停止 47
4.15 启动取指–执行周期 47
4.16 小结 48
习题 48
第5章 处理器类型和指令集 49
5.1 引言 49
5.2 数学能力、便利性和成本 49
5.3 指令集架构 49
5.4 操作码、操作数和结果 50
5.5 典型的指令格式 50
5.6 可变长度指令与固定长度指令 50
5.7 通用寄存器 51
5.8 浮点寄存器和寄存器标识 51
5.9 使用寄存器编程 51
5.10 寄存器存储体 52
5.11 复杂指令集和精简指令集 53
5.12 RISC设计和执行流水线 53
5.13 流水线和指令延迟 54
5.14 引起流水线停顿的其他原因 55
5.15 对程序员的影响 56
5.16 编程、停顿和无操作指令 56
5.17 转发 56
5.18 操作类型 57
5.19 程序计数器、取指–执行以及分支 57
5.20 子程序调用、参数以及寄存器窗口 58
5.21 一个示例指令集 59
5.22 极简化的指令集 61
5.23 正交性原则 61
5.24 条件码和条件分支 62
5.25 小结 62
习题 62
第6章 数据通路和指令执行 64
6.1 引言 64
6.2 数据通路 64
6.3 示例指令集 64
6.4 内存中的指令 66
6.5 移到下一条指令 67
6.6 取指令 68
6.7 解码指令 69
6.8 连接到寄存器单元 69
6.9 控制和协调 70
6.10 算术运算和复用 70
6.11 涉及存储器中数据的操作 71
6.12 执行过程的示例 72
6.13 小结 73
习题 73
第7章 操作数寻址和指令表示 75
7.1 引言 75
7.2 零、一、二或三地址设计 75
7.3 每指令零操作数 75
7.4 每指令单操作数 76
7.5 每指令两操作数 76
7.6 每指令三操作数 77
7.7 操作数来源和立即数 77
7.8 冯·诺依曼体系结构的瓶颈 77
7.9 显式和隐式操作数编码 78
7.10 组合多个值的操作数 79
7.11 权衡操作数的选择 79
7.12 内存中的值和间接引用 80
7.13 操作数寻址模式的示例 80
7.14 小结 81
习题 81
第8章 CPU:微码、保护和处理器模式 83
8.1 引言 83
8.2 中央处理器 83
8.3 CPU的复杂性 83
8.4 执行模式 84
8.5 向后兼容性 84
8.6 改变模式 84
8.7 特权和保护 85
8.8 多级保护 85
8.9 微码指令 86
8.10 微码变体 87
8.11 微码的优势 87
8.12 FPGA和指令集的改变 88
8.13 垂直微码 88
8.14 水平微码 88
8.15 水平微码的例子 89
8.16 水平微码程序示例 91
8.17 需要多个周期的操作 91
8.18 水平微码和并行执行 92
8.19 前瞻性和高性能执行 92
8.20 并行和执行顺序 93
8.21 乱序指令执行 93
8.22 条件分支和分支预测 94
8.23 对
译者序
前言
关于作者
第1章 简介及概览 1
1.1 体系结构的重要性 1
1.2 学习基础知识 1
1.3 本书结构 1
1.4 一笔带过的内容 2
1.5 术语:体系结构和设计 2
1.6 小结 2
第一部分 基础知识
第2章 数字逻辑基础 4
2.1 引言 4
2.2 数字计算装置 4
2.3 电气术语:电压和电流 4
2.4 晶体管 5
2.5 逻辑门 5
2.6 使用晶体管实现的“与非”逻辑门电路 7
2.7 表示逻辑门的符号 8
2.8 逻辑门互连的例子 8
2.9 实现二进制加法的数字电路 10
2.10 多逻辑门的集成电路 10
2.11 不只需要组合逻辑电路 11
2.12 维持状态的电路 11
2.13 传播延迟 12
2.14 使用锁存器构建存储器 12
2.15 触发器和波形图 13
2.16 二进制计数器 14
2.17 时钟和时序 15
2.18 反馈的重要概念 17
2.19 启动序列 18
2.20 软件迭代与硬件复制 18
2.21 门和芯片的最简化 19
2.22 使用闲置门 19
2.23 配电和散热 20
2.24 时序和时钟域 20
2.25 无时钟逻辑 21
2.26 电路规模和摩尔定律 21
2.27 电路板和层 22
2.28 抽象层次 23
2.29 小结 23
习题 23
第3章 数据和程序的表示 25
3.1 引言 25
3.2 数字逻辑与抽象的重要性 25
3.3 位和字节的定义 25
3.4 字节大小和可能的值 25
3.5 二进制位权表示法 26
3.6 位序 27
3.7 十六进制记法 28
3.8 十六进制和二进制常数记法 29
3.9 字符集 29
3.10 Unicode 30
3.11 无符号整数、溢出和下溢 30
3.12 给位和字节编号 31
3.13 有符号二进制整数 31
3.14 一个补码数字的例子 32
3.15 符号扩展 33
3.16 浮点数 33
3.17 IEEE浮点值的范围 34
3.18 特殊值 35
3.19 二进制编码的十进制表示 35
3.20 有符号数、分数和压缩BCD表示法 36
3.21 数据聚合 36
3.22 程序的表示 37
3.23 小结 37
习题 37
第二部分 处理器
第4章 处理器和计算引擎的多样性 40
4.1 引言 40
4.2 两种基本的体系结构 40
4.3 哈佛与冯·诺依曼体系结构 40
4.4 处理器的定义 41
4.5 处理器的范围 41
4.6 分层结构和计算引擎 42
4.7 传统处理器的结构 43
4.8 处理器的分类和角色 44
4.9 处理器技术 44
4.10 存储程序 45
4.11 取指–执行周期 45
4.12 程序转换 46
4.13 时钟速率和指令速率 46
4.14 控制:启动和停止 47
4.15 启动取指–执行周期 47
4.16 小结 48
习题 48
第5章 处理器类型和指令集 49
5.1 引言 49
5.2 数学能力、便利性和成本 49
5.3 指令集架构 49
5.4 操作码、操作数和结果 50
5.5 典型的指令格式 50
5.6 可变长度指令与固定长度指令 50
5.7 通用寄存器 51
5.8 浮点寄存器和寄存器标识 51
5.9 使用寄存器编程 51
5.10 寄存器存储体 52
5.11 复杂指令集和精简指令集 53
5.12 RISC设计和执行流水线 53
5.13 流水线和指令延迟 54
5.14 引起流水线停顿的其他原因 55
5.15 对程序员的影响 56
5.16 编程、停顿和无操作指令 56
5.17 转发 56
5.18 操作类型 57
5.19 程序计数器、取指–执行以及分支 57
5.20 子程序调用、参数以及寄存器窗口 58
5.21 一个示例指令集 59
5.22 极简化的指令集 61
5.23 正交性原则 61
5.24 条件码和条件分支 62
5.25 小结 62
习题 62
第6章 数据通路和指令执行 64
6.1 引言 64
6.2 数据通路 64
6.3 示例指令集 64
6.4 内存中的指令 66
6.5 移到下一条指令 67
6.6 取指令 68
6.7 解码指令 69
6.8 连接到寄存器单元 69
6.9 控制和协调 70
6.10 算术运算和复用 70
6.11 涉及存储器中数据的操作 71
6.12 执行过程的示例 72
6.13 小结 73
习题 73
第7章 操作数寻址和指令表示 75
7.1 引言 75
7.2 零、一、二或三地址设计 75
7.3 每指令零操作数 75
7.4 每指令单操作数 76
7.5 每指令两操作数 76
7.6 每指令三操作数 77
7.7 操作数来源和立即数 77
7.8 冯·诺依曼体系结构的瓶颈 77
7.9 显式和隐式操作数编码 78
7.10 组合多个值的操作数 79
7.11 权衡操作数的选择 79
7.12 内存中的值和间接引用 80
7.13 操作数寻址模式的示例 80
7.14 小结 81
习题 81
第8章 CPU:微码、保护和处理器模式 83
8.1 引言 83
8.2 中央处理器 83
8.3 CPU的复杂性 83
8.4 执行模式 84
8.5 向后兼容性 84
8.6 改变模式 84
8.7 特权和保护 85
8.8 多级保护 85
8.9 微码指令 86
8.10 微码变体 87
8.11 微码的优势 87
8.12 FPGA和指令集的改变 88
8.13 垂直微码 88
8.14 水平微码 88
8.15 水平微码的例子 89
8.16 水平微码程序示例 91
8.17 需要多个周期的操作 91
8.18 水平微码和并行执行 92
8.19 前瞻性和高性能执行 92
8.20 并行和执行顺序 93
8.21 乱序指令执行 93
8.22 条件分支和分支预测 94
8.23 对
前 言
硬件工程已经从使用分立电子元件转向使用可编程器件。因此,编程变得更加重要。那些理解硬件如何运转和熟知基本硬件原理的程序员,可以更加高效且少犯错误地构建软件系统。掌握计算机体系结构的基础知识使得编程人员能够理解软件如何映射到硬件上,并做出更好的软件设计选择。掌握底层硬件知识也有助于调试,因为它可以让程序员快速地定位问题的根源。
本书适用于一个学期的本科课程。在众多计算机科学课程中,计算机体系结构或计算机组成课程是唯一介绍计算机结构基本概念的课程,这些概念有助于学生理解他们赖以编程的计算机结构。遗憾的是,大多数计算机体系结构书籍都是硬件工程师编写的,目标读者是那些想学习如何设计硬件的学生。本书则采用了不同的方法:不再专注于硬件设计和工程细节,而是针对程序员,解释程序员需要知道的硬件基础知识。因此,本书从程序员的角度解释主题,并强调其对程序员的影响。
全书分为五个部分。第一部分介绍数字逻辑、门电路、数据通路和数据表示的基础知识。大多数学生喜欢这种简短的学习底层硬件的方式(特别是本书不介绍细微的硬件细节)。第二至四部分涵盖体系结构的三个主要方面:处理器、存储器和输入/输出系统。在每一章中,都为学生提供了足够的背景知识,以便他们了解相关机制如何运作及其对程序员的影响,而无须继续了解许多细节。最后,第五部分涵盖并行、流水线、功耗和能耗以及性能等高级主题。
附录A描述课程的一个重要方面——实验,学生可以通过实践学习。尽管大多数实验问题都集中在编程上,但学生应该在前几周完成在面包板上连接门电路。该设备价格低廉(我们购买供学生实验的长期设备时,每位学生花费少于15美元,学生自己购买实验设备花费不到20美元)。
附录C提供对x86汇编语言和x64扩展的简单介绍。许多老师讲授x86系统,要求将其包含在内。该材料位于附录中,意味着选择RISC汇编语言(例如,ARM体系结构)的老师可以将其用于比较。
第2版新增了两章并对全书内容做了一些修改和更新。例如,在第3章中,有关数据通路的部分展示了计算机系统的组件,并描述了当指令执行时数据是如何在这些组件间流动的。通过简单的例子在第2章介绍的数字逻辑与接下来章节介绍的处理器之间搭建了桥梁。在第20章中,覆盖了功耗与能耗的基本概念,读者无须了解更多细节。它解释了为什么以半速运行的双核处理器芯片的功耗要低于全速运行的单核处理器芯片的功耗。
我们建立了一个与本书配套的网站:http://www.eca.cs.purdue.edu。
本书正文及实验练习被普渡大学用作教材,学生对这两方面都非常积极。我们收到了大量关于本书的感谢信息。对于许多学生来说,实验课是他们与硬件的第一次近距离接触,因此学习热情高涨。
感谢许多为本书做出贡献的人。Bernd Wolfinger全面审阅了本书,并就主题和方向提出了一些重要建议。一些教授和学生指出了第1版中的错别字。George Adams为第2版提供了详细的意见和建议。
最后,感谢我的妻子Chris,她耐心细致的编辑和提出的宝贵建议,改进和完善了本书。
本书适用于一个学期的本科课程。在众多计算机科学课程中,计算机体系结构或计算机组成课程是唯一介绍计算机结构基本概念的课程,这些概念有助于学生理解他们赖以编程的计算机结构。遗憾的是,大多数计算机体系结构书籍都是硬件工程师编写的,目标读者是那些想学习如何设计硬件的学生。本书则采用了不同的方法:不再专注于硬件设计和工程细节,而是针对程序员,解释程序员需要知道的硬件基础知识。因此,本书从程序员的角度解释主题,并强调其对程序员的影响。
全书分为五个部分。第一部分介绍数字逻辑、门电路、数据通路和数据表示的基础知识。大多数学生喜欢这种简短的学习底层硬件的方式(特别是本书不介绍细微的硬件细节)。第二至四部分涵盖体系结构的三个主要方面:处理器、存储器和输入/输出系统。在每一章中,都为学生提供了足够的背景知识,以便他们了解相关机制如何运作及其对程序员的影响,而无须继续了解许多细节。最后,第五部分涵盖并行、流水线、功耗和能耗以及性能等高级主题。
附录A描述课程的一个重要方面——实验,学生可以通过实践学习。尽管大多数实验问题都集中在编程上,但学生应该在前几周完成在面包板上连接门电路。该设备价格低廉(我们购买供学生实验的长期设备时,每位学生花费少于15美元,学生自己购买实验设备花费不到20美元)。
附录C提供对x86汇编语言和x64扩展的简单介绍。许多老师讲授x86系统,要求将其包含在内。该材料位于附录中,意味着选择RISC汇编语言(例如,ARM体系结构)的老师可以将其用于比较。
第2版新增了两章并对全书内容做了一些修改和更新。例如,在第3章中,有关数据通路的部分展示了计算机系统的组件,并描述了当指令执行时数据是如何在这些组件间流动的。通过简单的例子在第2章介绍的数字逻辑与接下来章节介绍的处理器之间搭建了桥梁。在第20章中,覆盖了功耗与能耗的基本概念,读者无须了解更多细节。它解释了为什么以半速运行的双核处理器芯片的功耗要低于全速运行的单核处理器芯片的功耗。
我们建立了一个与本书配套的网站:http://www.eca.cs.purdue.edu。
本书正文及实验练习被普渡大学用作教材,学生对这两方面都非常积极。我们收到了大量关于本书的感谢信息。对于许多学生来说,实验课是他们与硬件的第一次近距离接触,因此学习热情高涨。
感谢许多为本书做出贡献的人。Bernd Wolfinger全面审阅了本书,并就主题和方向提出了一些重要建议。一些教授和学生指出了第1版中的错别字。George Adams为第2版提供了详细的意见和建议。
最后,感谢我的妻子Chris,她耐心细致的编辑和提出的宝贵建议,改进和完善了本书。
道格拉斯·科莫
评论
还没有评论。