译者序1
序言2
前言4
计算机组织和在线设计13
第1章计算机概念和技术1
11引言1
1.2程序内部2
1.3内部的硬件5
1.3.1鼠标6
1.3.2显示器7
1.3.3打开机箱8
1.3.4数据的安全12
1.3.5与其他计算机通信13
1.4集成电路: 推动创新13
1.5实例: 制造Pentium芯片16
1.6谬误和陷阱18
1.7结论19
1.8历史回顾和参考文献20
1.8.1第一台电子计算机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.1MIPS、MOPS以及FLOPS59
2.9.2早期综合性基准程序及核心基准程序的问题61
2.9.3将简单程序用于基准测试的问题62
2.9.4综合评价是不可靠的62
2.9.5SPEC基准程序集的性能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.2case和switch语句93
3.6计算机硬件对过程的支持96
3.6.1使用更多的寄存器97
3.6.2嵌套过程99
3.6.3为新数据分配空间101
3.7数字以外104
3.8MIPS的其他寻址方式106
3.8.1常数或立即数106
3.8.2分支和跳转指令的寻址109
3.8.3MIPS寻址方式小结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.1swap过程121
3.10.2sort过程123
3.11数组与指针128
3.11.1clear的数组版128
3.11.2clear的指针版129
3.11.3比较clear的两个版本130
3.12实例: PowerPC和80x86指令131
3.12.1IBM/Motorola PowerPC131
3.12.2Intel 80x86133
3.13谬误和陷阱139
3.14结论140
3.15历史回顾和参考文献142
3.15.1累加器体系结构142
3.15.2通用寄存器体系结构143
3.15.3紧凑代码和堆栈体系结构144
3.15.4高级语言计算机体系结构145
3.15.5精简指令集计算机体系结构145
3.15.680x86简史145
3.15.7参考文献146
3.16重要术语147
3.17习题148
第4章计算机的算术运算156
4.1引言156
4.2带符号数与无符号数156
4.3加法与减法165
4.4逻辑运算170
4.5构造算术逻辑单元174
4.5.11位ALU175
4.5.232位ALU178
4.5.3MIPS的32位ALU179
4.5.4超前进位183
4.6乘法190
4.6.1第一种乘法算法及其硬件实现190
4.6.2第二种乘法算法及其硬件实现193
4.6.3第三种乘法算法及其硬件实现195
4.6.4带符号数乘法196
4.6.5布斯算法196
4.6.6MIPS中的乘法运算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.5MIPS中的除法运算208
4.7.6小结209
4.8浮点运算211
4.8.1浮点数表示方法212
4.8.2浮点数加法216
4.8.3浮点数乘法220
4.8.4MIPS的浮点指令224
4.8.5精确的算术运算231
4.8.6小结233
4.9实例: PowerPC和80x86中的浮点部件236
4.9.1PowerPC的乘累加指令236
4.9.280x86的浮点体系结构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.7IEEE 754标准现状255
4.12.8参考文献256
4.13重要术语257
4.14习题258
第5章处理器: 数据通路及其控制269
5.1引言269
5.1.1实现方式概述269
5.1.2逻辑设计规则和时钟270
5.1.3MIPS子集的实现272
5.2数据通路的建立273
5.3简单实现方案277
5.3.1创建一个简单的数据通路278
5.3.2ALU控制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.1实现更复杂的体系结构的挑战329
5.7.2Pentium Pro的实现结构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.1设计流水线指令集344
6.1.2流水线冒险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超标量MIPS404
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.2Cache基础知识428
7.2.1访问Cache430
7.2.2Cache缺失处理433
7.2.3Cache实例: DECStation 3100434
7.2.4利用空间局部性的优点437
7.2.5设计支持Cache的存储器系统440
7.2.6小结443
7.3Cache性能的评估和提高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加快地址变换: TLB463
7.4.5集成虚拟存储器、TLB和Cache466
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.3问题3: Cache缺失时替换哪一块475
7.5.4问题4: 写操作怎么办475
7.5.5三C: 一种理解存储器层次结构行为的直观模型477
7.6实例: Pentium Pro和PowerPC 604的存储器层次结构479
7.6.1减少缺失损失的附加技术479
7.6.2Pentium 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.2I/O性能指标: 有关磁盘和文件系统的例子500
8.2.1超级计算机I/O标准501
8.2.2事务处理I/O标准501
8.2.3文件系统I/O标准502
8.3I/O设备的种类和特性502
8.3.1鼠标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.2Cache一致性协议实例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.4装载601
A.5内存的使用601
A.6过程调用协议603
A.7异常和中断611
A.8输入输出614
A.9SPIM616
A.10MIPS R2000汇编语言624
A.11结论643
A.12重要术语644
A.13习题644
附录B逻辑设计基础646
B.1引言646
B.2门电路、真值表和逻辑等效电路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
附录A数据库设计实例研究: 因特网商店624
附录BMINIBASE教学辅助软件633
参考文献636