1.1 系统结构的重要性 1
1.2 学习要旨 1
1.3 本书的组织 1
第1章 引言和纵览 1
1.4 省略的内容 2
1.5 术语:系统结构和设计 2
1.6 小结 2
第1部分 数字逻辑与数据表示基础 4
第2章 数字逻辑基础 4
2.1 引言 4
2.2 有关电的术语:电压和电流 4
2.3 晶体管 4
2.4 逻辑门 5
2.6 用晶体管构建门 7
2.5 逻辑门的符号表示 7
2.7 门和门互连的例子 8
2.8 多门集成电路 10
2.9 不只需要组合电路 10
2.10 能保持状态的电路 11
2.11 状态转换图 11
2.12 二进制计数器 12
2.13 时钟和顺序 12
2.14 反馈的重要概念 15
2.15 启动的一个动作序列 16
2.16 软件重复与硬件副本的比较 16
2.17 门和芯片的极小化 17
2.18 利用空闲的门 17
2.20 定时 18
2.19 供电和散热 18
2.21 物理尺寸和处理工艺 19
2.22 电路板和多层印刷 20
2.23 抽象的层次 20
2.24 小结 21
第3章 数据和程序的表示 22
3.1 引言 22
3.2 数字逻辑和抽象 22
3.3 位和字节 22
3.4 字节大小和可能表示的值 23
3.5 二进制运算 23
3.6 十六进制表示法 24
3.7 十六进制常数和二进制常数表示法 25
3.8 字符集 26
3.10 无符号整数、上溢和下溢 27
3.9 Unicode 27
3.11 位和字节的编号 28
3.12 带符号整数 29
3.13 一个补码表示的数的例子 29
3.14 符号扩展 30
3.15 浮点 31
3.16 特殊值 32
3.17 IEEE浮点值的范围 32
3.18 数据聚集 33
3.19 程序的表示 33
3.20 小结 33
习题 34
4.2 冯·诺依曼体系结构 36
4.1 引言 36
第4章各种处理器和计算引擎 36
第2部分 处理器 36
4.3 处理器的定义 37
4.4 处理器的类别 37
4.5 分层结构和计算引擎 38
4.6 常规处理器的结构 39
4.7 算术逻辑部件(ALU)的定义 40
4.8 处理器的类别及作用 40
4.9 处理器工艺技术 41
4.10 存储程序 42
4.11 读取-执行周期 42
4.12 时钟速率和指令速率 43
4.13 控制:启动和停止 43
4.15 小结 44
4.14 启动读取-执行周期 44
习题 45
第5章 处理器类型和指令系统 46
5.1 引言 46
5.2 数学功能、方便性和代价 46
5.3 指令系统及表示 47
5.4 操作码、操作数和结果 47
5.5 典型的指令格式 47
5.6 可变长度指令和固定长度指令 48
5.7 通用寄存器 48
5.8 浮点寄存器和寄存器标识 49
5.9 利用寄存器编程 49
5.10 寄存器组 50
5.11 复杂指令系统和简化指令系统 51
5.12 RISC设计和执行流水线 51
5.13 流水线和指令阻塞 53
5.14 流水线阻塞的另外一些原因 54
5.15 对程序员的影响 54
5.16 编程、阻塞及空操作 55
5.17 提前传递 55
5.18 操作的类型 55
5.19 程序计数器、读取-执行及转移 56
5.20 子程序调用、变量及寄存器窗口 57
5.21 指令系统的一个例子 58
5.22 最低限度指令系统 60
5.23 正交性原则 60
5.24 条件码和条件转移 61
5.25 小结 61
习题 62
6.2 零地址、一地址、二地址及三地址设计 63
6.1 引言 63
第6章 操作数寻址和指令表示 63
6.3 零操作数指令 64
6.4 单操作数指令 64
6.5 双操作数指令 64
6.6 三操作数指令 65
6.7 操作数源和立即值 65
6.8 冯·诺依曼瓶颈 66
6.9 显式和隐式操作数编码 66
6.9.1 隐式操作数编码 67
6.9.2 显式操作数编码 67
6.10 组合多个值的操作数 68
6.11 操作数选择的权衡 68
6.12 存储器中的数值和间接引用 69
6.14 小结 70
6.13 操作数寻址方式 70
习题 71
第7章 CPU:微代码、保护及处理器模式 72
7.1 引言 72
7.2 中央处理器 72
7.3 CPU的复杂性 72
7.4 执行模式 73
7.5 向后兼容 73
7.6 改变模式 74
7.7 特权和保护 75
7.8 多级保护 75
7.9 微代码指令 76
7.11 微代码的优点 77
7.10 微代码的变体 77
7.12 让程序员看到微代码 78
7.13 纵向微代码 78
7.14 横向微代码 79
7.15 例示横向微代码 80
7.16 一个横向微代码的例子 81
7.17 要求多个周期的操作 82
7.18 横向微代码和并行执行 82
7.19 高性能执行 83
7.20 并行性和执行次序 84
7.21 指令的乱序执行 84
7.22 条件转移和转移预测 84
7.23 对程序员的影响 85
7.24 小结 85
习题 86
8.1 引言 87
8.2 高级程序设计语言的特征 87
第8章 汇编语言和程序设计范例 87
8.3 低级程序设计语言的特征 88
8.4 汇编语言 88
8.5 汇编语言语法和操作码 89
8.5.1 语句格式 89
8.5.2 操作码命名 89
8.5.3 注释约定 90
8.6 操作数的次序 90
8.7 寄存器命名 91
8.8 操作数类型 92
8.9 汇编语言程序设计范式和风格 92
8.11 用于可选条件执行的汇编代码 93
8.10 用于条件执行的汇编代码 93
8.12 用于限定循环的汇编代码 94
8.13 用于未限定循环的汇编代码 94
8.14 用于过程调用的汇编代码 95
8.15 用于参数化过程调用的汇编代码 95
8.16 对程序员的影响 96
8.17 用于函数调用的汇编代码 96
8.18 汇编语言和高级语言之间的交互作用 97
8.19 用于变量和存储的汇编代码 97
8.20 二次扫描汇编程序 98
8.21 汇编语言宏指令 99
8.22 小结 101
9.2 定义 104
9.1 引言 104
9.3 存储器的两个关键方面 104
第3部分 存储器 104
第9章 存储器和存储 104
9.4 存储器工艺的特性 105
9.4.1 存储器的易失性 105
9.4.2 存储器访问范式 105
9.4.3 数值的持久性 105
9.4.4 主存储器和辅助存储器 106
9.5 重要的存储器分级概念 106
9.6 指令和数据的储存 106
9.7 读写范式 107
9.8 小结 107
10.2 计算机存储器的特性 108
10.3 静态和动态RAM的工艺技术 108
10.1 引言 108
第10章 物理存储器和物理寻址 108
10.4 存储器工艺技术的度量 110
10.5 密度 110
10.6 读性能和写性能的分离 110
10.7 等待时间和存储器控制器 110
10.8 同步存储器技术 111
10.9 多倍数据速率存储器技术 112
10.10 存储器工艺技术的例子 112
10.11 存储器组织结构 112
10.12 存储器存取和存储器总线 113
10.13 存储器的传输容量 113
10.14 物理地址和字 113
10.15 物理存储器操作 114
10.16 字长和其他数据类型 114
10.17 一个极端情况:字节寻址 114
10.18 以字传输的字节寻址 115
10.20 字节对齐和程序设计 116
10.19 利用2的幂 116
10.21 存储器容量和地址空间 117
10.22 用字寻址程序设计 117
10.23 存储器容量的量度 118
10.24 指针和数据结构 118
10.25 存储器转储 119
10.26 间接性和间接操作数 120
10.27 存储体和交叉存取 120
10.28 按内容存取存储器 121
10.29 三元CAM 122
10.30 小结 122
习题 123
11.3 一个虚拟的例子:字节寻址 124
11.4 虚拟存储器术语 124
11.1 引言 124
11.2 定义 124
第11章 虚拟存储器技术和虚拟寻址 124
11.5 对多个物理存储器系统的接口 125
11.6 地址转换或地址映射 126
11.7 避免算术运算 127
11.8 不连续地址空间 127
11.9 其他的存储器组织 128
11.10 采用虚拟存储器的动机 129
11.11 多虚拟空间和多道程序设计 129
11.12 多级的虚拟化 130
11.13 动态地创建虚拟空间 130
11.14 起点-界限寄存器 131
11.16 虚存、起点-界限和保护 132
11.17 分段 132
11.15 改变虚拟空间 132
11.18 请求式分页 133
11.19 用于请求式分页的硬件和软件 133
11.20 页面替换 134
11.21 分页的术语和数据结构 134
11.22 分页系统中的地址转换 135
11.23 利用2的幂 136
11.24 存在位、使用位和修改位 137
11.25 页表的存储 137
11.26 分页效率和快速转换旁视缓冲器 138
11.27 对程序员的影响 138
11.28 小结 139
习题 140
12.2 定义 141
第12章 高速缓存和高速缓存技术 141
12.1 引言 141
12.3 高速缓存的特性 142
12.4 高速缓存技术的重要性 142
12.5 高速缓存技术的例子 143
12.6 高速缓存术语 143
12.7 高速缓存性能的最好情况和最坏情况 144
12.8 对一个典型序列的高速缓存性能 145
12.9 高速缓存的替换策略 145
12.10 LRU替代策略 146
12.11 多级高速缓存结构 146
12.12 预装高速缓存 147
12.13 存储器使用高速缓存 147
12.16 物理存储器高速缓存 148
12.15 请求式分页作为一种高速缓存形式 148
12.14 TLB作为高速缓存 148
12.17 直写和写回 149
12.18 高速缓存的相关性 149
12.19 L1,L2和L3高速缓存 150
12.20 L1,L2和L3高速缓存的大小 151
12.21 指令高速缓存和数据高速缓存 151
12.22 虚拟存储器高速缓存技术和高速缓存排空 152
12.23 存储器高速缓存技术的实现 153
12.24 直接映射存储器高速缓存 153
12.25 为提高效率而采用2的幂 154
12.26 组相联存储器高速缓存 155
12.27 对程序员的影响 156
12.28 小结 156
习题 157
13.2 输入和输出设备 160
13.3 外部设备的控制 160
第4部分 输入和输出 160
13.1 引言 160
第13章 输入输出概念和术语 160
13.4 数据传送 161
13.5 串行和并行数据传送 162
13.6 自同步数据 162
13.7 全双工交互和半双工交互 163
13.8 接口的等待时间和吞吐量 163
13.9 多路传输的基本思想 163
13.10 每个外部接口连接多个设备 164
13.11 处理器的I/O视图 165
13.12 小结 165
14.3 处理器、I/O设备与总线 166
14.2 总线的定义 166
第14章 总线和总线体系结构 166
14.1 引言 166
14.4 专有总线和标准化总线 167
14.5 共享总线和存取协议 167
14.6 多个总线 167
14.7 并行、无源机制 167
14.8 物理连接 168
14.9 总线接口 168
14.10 地址线、控制线和数据线 169
14.11 读取-存储范式 170
14.12 总线上的读取-存储 170
14.13 总线的宽度 171
14.14 多路传输 171
14.16 总线地址空间 172
14.15 总线宽度和数据项的大小 172
14.17 潜在的错误 173
14.18 地址配置和插座 174
14.19 多个总线还是一个总线 175
14.20 设备所用的读取-存储 175
14.21 一个使用读取-存储的设备控制例子 175
14.22 接口的操作 176
14.23 不对称指派 176
14.24 统一的存储器和设备寻址 177
14.25 地址空间里的空洞 178
14.26 地址映射 178
14.27 对总线的程序接口 179
14.28 两个总线间的桥接 180
14.29 主总线和辅助总线 180
14.30 对程序员的影响 181
14.31 切换组构网 182
14.32 小结 183
习题 183
第15章 程序控制I/O和中断驱动I/O 184
15.1 引言 184
15.2 I/O范式 184
15.3 程序控制I/O 184
15.4 同步 185
15.5 轮询 185
15.6 用于轮询的代码 185
15.7 控制和状态寄存器 187
15.8 处理器使用和轮询 187
15.10 中断驱动I/O 188
15.9 第一代、第二代和第三代计算机 188
15.11 硬件中断机制 189
15.12 中断和读取-执行周期 189
15.13 中断的处理 189
15.14 中断向量 190
15.15 初始化和中断的允许及禁止 191
15.16 防止中断代码被中断 191
15.17 多级中断 191
15.18 中断向量和优先权的指派 192
15.19 动态总线连接和可插入的设备 193
15.20 中断的优点 193
15.21 灵巧的设备和改进的I/O性能 193
15.22 直接存储器存取(DMA) 194
15.23 缓冲链接 195
15.24 分散读和集中写操作 195
15.26 小结 196
15.25 操作链接 196
习题 197
第16章 程序员眼中的设备、I/O和缓冲 198
16.1 引言 198
16.2 设备驱动器的定义 198
16.3 设备无关性、密封和隐藏 198
16.4 设备驱动器的概念性部件 199
16.5 两种类型的设备 200
16.6 一个设备驱动器的操作流程的例子 200
16.7 队列的输出操作 201
16.8 强制中断 202
16.9 队列的输入操作 203
16.10 支持双向传送的设备 203
16.12 异步性、灵巧设备和互斥 204
16.11 异步还是同步编程范式 204
16.13 应用程序所见的I/O 205
16.14 运行时I/O程序库 205
16.15 程序库和操作系统的两分法 206
16.16 操作系统支持的I/O操作 207
16.17 I/O操作的代价 207
16.18 降低系统调用开销 208
16.19 缓冲的重要概念 208
16.20 缓冲的实现 209
16.21 排空缓冲器 210
16.22 输入的缓冲 211
16.23 缓冲的效能 211
16.27 小结 212
16.26 一个例子:Unix标准I/O库 212
16.25 与高速缓存的关系 212
16.24 操作系统中的缓冲 212
习题 213
第5部分 高级课题 216
第17章 并行性 216
17.1 引言 216
17.2 并行和流水线体系结构 216
17.3 并行性的特征 216
17.4 微观并行性与宏观并行性 217
17.5 微观并行性的例子 217
17.6 宏观并行性的例子 218
17.7 对称并行性与非对称并行性 218
17.11 并行体系结构的类型(弗林分类法) 219
17.10 并行体系结构 219
17.9 显式的与隐式的并行性 219
17.8 细粒并行性与粗粒并行性 219
17.12 单指令单数据流(SISD) 220
17.13 单指令多数据流(SIMD) 220
17.14 多指令多数据流(MIMD) 222
17.15 通信、协调和争用 224
17.16 多处理器的性能 225
17.17 对程序员的影响 226
17.17.1 锁和互斥 226
17.17.2 显式和隐式并行计算机的编程 228
17.17.3 对称多处理器和非对称多处理器的编程 228
17.18 冗余并行体系结构 228
17.19 分布计算机和群集计算机 229
17.20 小结 229
习题 230
18.2 流水线技术的概念 231
18.1 引言 231
第18章 流水线技术 231
18.3 软件流水线技术 233
18.4 19软件流水线的性能和开销 233
18.5 19硬件流水线技术 234
18.6 19硬件流水线技术怎样提高性能 234
18.7 19流水线的使用时机 236
18.8 19处理的概念性分割 237
18.9 19流水线体系结构 237
18.10 19流水线的建立时间、阻塞时间和排空时间 238
18.11 19超级流水线体系结构的定义 238
18.12 19小结 239
习题 239
19.2 19能力和性能的测量 240
19.1 19引言 240
第19章 19性能评估 240
19.3 19计算能力的测量 241
19.4 19使用专门的指令计数 242
19.5 19指令混合比 242
19.6 19标准化的基准测试程序 243
19.7 I/O和存储器瓶颈 243
19.8 19软、硬件之间的分界 244
19.9 19选择要优化的项目 244
19.10 19艾姆德尔法则和并行系统 245
19.11 19小结 245
习题 245
第20章 19体系结构的层次和例子 246
20.1 19引言 246
20.2 19体系结构的层次 246
20.4 19总线互连和桥接 247
20.3 19系统级体系结构:个人计算机 247
20.5 19控制器芯片和物理体系结构 248
20.6 19虚拟总线 249
20.7 19连接速度 250
20.8 19桥接功能和虚拟总线 251
20.9 电路板级体系结构 251
20.10 19芯片级体系结构 252
20.11 芯片上功能部件的结构 253
20.12 小结 254
20.13 计算机系统结构之外的分级 254
附录A 计算机系统结构课程实验 255
A.1 引言 255
A.2 实验所用的数字硬件 255
A.3 免焊实验电路板 255
A.5 测试 256
A.4 免焊实验电路板的使用 256
A.6 电源和接地连接 257
A.7 实验练习题 258
实验1 入门和账号配置 259
实验2 数字逻辑:实验电路板的使用 260
实验3 数字逻辑:用门电路构建一个加法器 262
实验4 数字逻辑:时钟和多路分配 264
实验5 表示法:测试大端法与小端法 266
实验6 表示法:一个用C编写的十六进制转储程序 268
实验7 处理器:学习RISC汇编语言 270
实验8 处理器:能被C程序调用的函数 272
实验9 存储器:数组的行主序存储和列主序存储 273
实验10 输入输出:一个缓冲I/O库 275
实验11 用汇编语言编写的十六进制转储程序 277
参考书目 278