译者序 1
第1章 计算机概念和技术 1
1.1 引言 1
序言 2
1.2 程序内部 2
前言 4
1.3 内部的硬件 5
1.3.1 鼠标 6
1.3.2 显示器 7
1.3.3 打开机箱 8
1.3.4 数据的安全 12
计算机组织和在线设计 13
1.3.5 与其他计算机通信 13
1.4 集成电路:推动创新 13
1.5 实例:制造Pentium芯片 16
1.6 谬误和陷阱 18
1.7 结论 19
1.8.1 第一台电子计算机 20
1.8 历史回顾和参考文献 20
1.8.2 商业发展 23
1.8.3 各代计算机 27
1.8.4 参考文献 28
1.9 重要术语 29
1.10 习题 31
第2章 性能评价 35
2.1 引言 35
2.2 性能测量 38
2.3 各种性能指标之间的关系 40
2.4 选择性能评价程序 44
2.5 性能比较与综合评价 48
2.6 实例:新型处理器的SPEC95基准程序及性能评价 49
2.7 谬误和陷阱 52
2.8 结论 58
2.9 历史回顾和参考文献 59
2.9.1 MIPS、MOPS以及FLOPS 59
2.9.2 早期综合性基准程序及核心基准程序的问题 61
2.9.4 综合评价是不可靠的 62
2.9.5 SPEC基准程序集的性能 62
2.9.3 将简单程序用于基准测试的问题 62
2.9.6 参考文献 64
2.10 重要术语 64
2.11 习题 65
第3章 指令:机器的语言 76
3.1 引言 76
3.2 计算机硬件的操作 76
3.3 计算机硬件的操作数 78
3.4 指令的计算机内部表示 83
3.5 决策指令 88
3.5.1 循环 91
3.5.2 case和switch语句 93
3.6 计算机硬件对过程的支持 96
3.6.1 使用更多的寄存器 97
3.6.2 嵌套过程 99
3.6.3 为新数据分配空间 101
3.7 数字以外 104
3.8 MIPS的其他寻址方式 106
3.8.1 常数或立即数 106
3.8.2 分支和跳转指令的寻址 109
3.8.3 MIPS寻址方式小结 111
3.8.4 机器语言的解码 112
3.9 启动程序 116
3.9.1 编译器 116
3.9.2 汇编程序 116
3.9.3 链接程序 118
3.9.4 加载程序 120
3.10 一个完整的例子 121
3.10.1 swap过程 121
3.10.2 sort过程 123
3.11 数组与指针 128
3.11.1 clear的数组版 128
3.11.2 clear的指针版 129
3.11.3 比较clear的两个版本 130
3.12 实例:PowerPC和80x86指令 131
3.12.1 IBM/Motorola PowerPC 131
3.12.2 Intel 80x86 133
3.13 谬误和陷阱 139
3.14 结论 140
3.15.1 累加器体系结构 142
3.15 历史回顾和参考文献 142
3.15.2 通用寄存器体系结构 143
3.15.3 紧凑代码和堆栈体系结构 144
3.15.4 高级语言计算机体系结构 145
3.15.5 精简指令集计算机体系结构 145
3.15.6 80x86简史 145
3.15.7 参考文献 146
3.16 重要术语 147
3.17 习题 148
4.2 带符号数与无符号数 156
第4章 计算机的算术运算 156
4.1 引言 156
4.3 加法与减法 165
4.4 逻辑运算 170
4.5 构造算术逻辑单元 174
4.5.1 1位ALU 175
4.5.2 32位ALU 178
4.5.3 MIPS的32位ALU 179
4.5.4 超前进位 183
4.6.1 第一种乘法算法及其硬件实现 190
4.6 乘法 190
4.6.2 第二种乘法算法及其硬件实现 193
4.6.3 第三种乘法算法及其硬件实现 195
4.6.4 带符号数乘法 196
4.6.5 布斯算法 196
4.6.6 MIPS中的乘法运算 201
4.6.7 小结 201
4.7 除法 202
4.7.1 第一种除法算法及其硬件实现 203
4.7.2 第二种除法算法及其硬件实现 205
4.7.3 第三种除法算法及其硬件实现 206
4.7.4 带符号数除法 208
4.7.5 MIPS中的除法运算 208
4.7.6 小结 209
4.8 浮点运算 211
4.8.1 浮点数表示方法 212
4.8.2 浮点数加法 216
4.8.3 浮点数乘法 220
4.8.4 MIPS的浮点指令 224
4.8.5 精确的算术运算 231
4.8.6 小结 233
4.9 实例:PowerPC和80x86中的浮点部件 236
4.9.1 PowerPC的乘累加指令 236
4.9.2 80x86的浮点体系结构 236
4.10 谬误和陷阱 239
4.11 结论 243
4.12 历史回顾和参考文献 246
4.12.1 有关浮点运算的第一场争论 247
4.12.2 浮点运算的差异性与可移植性 248
4.12.3 新不如旧 249
4.12.4 专家的烦恼 250
4.12.5 浮点运算的不断完善 251
4.12.6 最早采用IEEE 754标准的芯片 253
4.12.7 IEEE 754标准现状 255
4.12.8 参考文献 256
4.13 重要术语 257
4.14 习题 258
5.1 引言 269
5.1.1 实现方式概述 269
第5章 处理器:数据通路及其控制 269
5.1.2 逻辑设计规则和时钟 270
5.1.3 MIPS子集的实现 272
5.2 数据通路的建立 273
5.3 简单实现方案 277
5.3.1 创建一个简单的数据通路 278
5.3.2 ALU控制 280
5.3.3 主控制单元的设计 282
5.3.4 为什么不使用单周期实现方式 295
5.4 多周期实现方案 299
5.4.1 将指令的执行分到各个时钟周期 303
5.4.2 定义控制 308
5.5 微程序设计:简化控制设计 316
5.5.1 微指令格式的定义 316
5.5.2 微程序的创建 319
5.5.3 微程序的实现 322
5.6 异常 324
5.6.1 异常的处理 324
5.6.2 控制异常检测 327
5.7 实例:Pentium Pro的实现方法 328
5.7.2 Pentium Pro的实现结构 329
5.7.1 实现更复杂的体系结构的挑战 329
5.8 谬误和陷阱 330
5.9 结论 331
5.10 历史回顾和参考文献 332
5.10.1 参考文献 334
5.11 重要术语 335
5.12 习题 335
第6章 利用流水线提高性能 340
6.1 流水线概述 340
6.1.2 流水线冒险 344
6.1.1 设计流水线指令集 344
6.1.3 小结 350
6.2 流水线数据通路 351
6.3 流水线控制 365
6.4 数据冒险与转发 374
6.5 数据冒险与阻塞 385
6.6 分支冒险 392
6.6.1 假定分支不发生 392
6.6.2 缩短分支延迟 393
6.6.3 动态分支预测 395
6.6.4 流水线小结 398
6.7 异常 399
6.8 超标量和动态流水线 403
6.8.1 超标量MIPS 404
6.8.2 动态流水线调度 407
6.9 实例:PowerPC 604和Pentium Pro的流水线 409
6.10 谬误和陷阱 411
6.11 结论 412
6.12 历史回顾和参考文献 414
6.12.1 参考文献 417
6.13 重要术语 418
6.14 习题 419
第7章 存储器层次结构 425
7.1 引言 425
7.2 Cache基础知识 428
7.2.1 访问Cache 430
7.2.2 Cache缺失处理 433
7.2.3 Cache实例:DECStation 3100 434
7.2.4 利用空间局部性的优点 437
7.2.5 设计支持Cache的存储器系统 440
7.2.6 小结 443
7.3 Cache性能的评估和提高 444
7.3.1 通过更灵活的块定位方式来减少Cache缺失 447
7.3.2 在Cache中进行块寻址 450
7.3.3 替换块的选择 452
7.3.4 减少多级Cache的缺失损失 452
7.3.5 小结 454
7.4 虚拟存储器 455
7.4.1 页存放和查找 458
7.4.2 缺页 459
7.4.3 关于写的情况 462
7.4.4 加快地址变换:TLB 463
7.4.5 集成虚拟存储器、TLB和Cache 466
7.4.6 用虚拟存储器实现保护 468
7.4.7 处理缺页和TLB缺失 469
7.4.8 小结 472
7.5 存储器层次结构的一般框架 472
7.5.1 问题1:块被放置到何处 472
7.5.2 问题2:如何找到块 473
7.5.4 问题4:写操作怎么办 475
7.5.3 问题3:Cache缺失时替换哪一块 475
7.5.5 三C:一种理解存储器层次结构行为的直观模型 477
7.6 实例:Pentium Pro和PowerPC 604的存储器层次结构 479
7.6.1 减少缺失损失的附加技术 479
7.6.2 Pentium Pro和PowerPC 604的存储器层次结构 480
7.7 谬误和陷阱 481
7.8 结论 484
7.9 历史回顾和参考文献 486
7.9.1 存储器层次结构的发展 488
7.9.2 保护机制 489
7.9.3 参考文献 490
7.10 重要术语 490
7.11 习题 492
第8章 输入输出系统 498
8.1 引言 498
8.2 I/O性能指标:有关磁盘和文件系统的例子 500
8.2.1 超级计算机I/O标准 501
8.2.2 事务处理I/O标准 501
8.3.1 鼠标 502
8.3 I/O设备的种类和特性 502
8.2.3 文件系统I/O标准 502
8.3.2 磁盘 504
8.3.3 网络 508
8.4 总结:把I/O设备连接到处理器和存储器 510
8.4.1 总线类型 512
8.4.2 同步和异步总线 514
8.4.3 提高总线带宽 517
8.4.4 获得总线访问权 519
8.4.5 总线仲裁 521
8.4.6 总线标准 523
8.5 将I/O设备连接到存储器、处理器和操作系统 524
8.5.1 向I/O设备发出指令 525
8.5.2 与处理器通信 526
8.5.3 在设备和存储器之间传输数据 528
8.5.4 直接存储器访问和存储器系统 531
8.6 设计I/O系统 532
8.7 实例:一个典型的桌面I/O系统 534
8.8 谬误和陷阱 535
8.9 结论 536
8.10 历史回顾和参考文献 539
8.10.1 参考文献 542
8.11 重要术语 543
8.12 习题 544
第9章 多处理器 552
9.1 引言 552
9.2 多处理器编程 554
9.3 用单一总线连接的多处理器 555
9.3.1 多处理器的Cache一致性 558
9.3.2 Cache一致性协议实例 560
9.3.3 使用一致性同步 561
9.4 通过网络连接的多处理器 563
9.5 机群 568
9.6 网络拓扑结构 570
9.7 实例:多处理器的未来发展趋势 573
9.7.1 大规模并行处理器的情况 573
9.7.2 大规模并行 574
9.8 谬误和陷阱 575
9.9 结论:计算机体系结构的改良与变革 577
9.10 历史回顾和参考文献 578
9.10.1 单指令多数据计算机 579
9.10.2 向量计算机 580
9.10.3 多指令多数据计算机 582
9.10.4 参考文献 583
9.11 重要术语 585
9.12 习题 586
附录A 汇编程序、链接程序和SPIM模拟器 589
A.1 引言 589
A.2 汇编程序 594
A.3 链接程序 600
A.5 内存的使用 601
A.4 装载 601
A.6 过程调用协议 603
A.7 异常和中断 611
A.8 输入输出 614
A.9 SPIM 616
A.10 MIPS R2000汇编语言 624
A.11 结论 643
A.12 重要术语 644
A.13 习题 644
B.2 门电路、真值表和逻辑等效电路 646
附录B 逻辑设计基础 646
B.1 引言 646
B.3 组合逻辑 649
B.4 时钟信号 658
B.5 存储单元 659
B.6 有限状态机 669
B.7 时钟控制原理 672
B.8 结论 676
B.9 重要术语 676
B.10 习题 677
附录C 控制器的硬件实现 680
C.1 引言 680
C.2 组合逻辑控制单元的实现 680
C.3 有限状态机控制的实现 684
C.4 用时序机来实现后续状态函数 694
C.5 微程序的硬件实现 699
C.6 结论 702
C.7 重要术语 702
C.8 习题 702