第1章计算机系统漫游 1
1.1信息就是位+上下文 2
1.2程序被其他程序翻译成不同的格式 4
1.3了解编译系统如何工作是大有益处的 5
1.4处理器读并解释储存在存储器中的指令 6
1.5高速缓存 9
1.6形成层次结构的存储设备 10
1.7操作系统管理硬件 11
1.8利用网络系统和其他系统通信 15
1.9下一步 17
1.10小结 17
第1部分程序结构和执行 21
第2章信息的表示和处理 21
2.1信息存储 23
2.2整数表示 42
2.3整数运算 54
2.4浮点 66
2.5 小结 81
第3章程序的机器级表示 103
3.1 历史观点 105
3.2程序编码 107
3.3数据格式 112
3.4访问信息 113
3.5算术和逻辑操作 119
3.6控制 124
3.7过程 143
3.8数组分配和访问 152
3.9异类的数据结构 161
3.10对齐(alignment) 168
3.11综合:理解指针 169
3.12现实生活:使用GDB调试器 173
3.13存储器的越界引用和缓冲区溢出 174
3.14浮点代码 178
3.15在C程序中嵌入汇编代码 188
3.16小结 194
第4章处理器体系结构 217
4.1 Y86指令集体系结构 219
4.2逻辑设计和硬件控制语言HCL 231
4.3 Y86的顺序(sequential)实现 239
4.4流水线的通用原理 262
4.5 Y86的流水线实现 270
4.6小结 304
第5章优化程序性能 321
5.1优化编译器的能力和局限性 323
5.2表示程序性能 325
5.3程序示例 327
5.4消除循环的低效率 329
5.5减少过程调用 333
5.6消除不必要的存储器引用 334
5.7理解现代处理器 336
5.8降低循环开销 347
5.9转换到指针代码 350
5.10提高并行性 353
5.11 综合:优化合并(Combing)代码的效果小结 360
5.12分支预测和预测错误处罚 362
5.13理解存储器性能 364
5.14现实生活:性能提高技术 371
5.15确认和消除性能瓶颈 372
5.16小结 377
第6章存储器层次结构 387
6.1存储技术 388
6.2局部性 406
6.3存储器层次结构 410
6.4 高速缓存存储器 414
6.5编写高速缓存友好的代码 430
6.6综合:高速缓存对程序性能的影响 435
6.7综合:利用程序中的局部性 446
6.8小结 446
第2部分在系统上运行程序 461
第7章链接 461
7.1编译器驱动程序 462
7.2静态链接 464
7.3 目标文件 464
7.4可重定位目标文件 465
7.5符号和符号表 466
7.6符号解析 469
7.7重定位 476
7.8可执行目标文件 481
7.9加载可执行目标文件 482
7.10动态链接共享库 483
7.11 从应用程序中加载和链接共享库 485
7.12与位置无关的代码(PIC) 487
7.13处理目标文件的工具 490
7.14小结 491
第8章异常控制流 501
8.1异常 503
8.2进程 508
8.3系统调用和错误处理 513
8.4进程控制 514
8.5信号 528
8.6非本地跳转 545
8.7操作进程的工具 548
8.8小结 548
第9章测量程序执行时间 559
9.1计算机系统上的时间流 561
9.2通过间隔计数(interval counting)来测量时间 565
9.3周期计数器 568
9.4用周期计数器来测量程序执行时间 570
9.5基于gettimeofday函数的测量 583
9.6综合:一个实验协议 586
9.7展望未来 586
9.8现实生活:K次最优测量方法 586
9.9得到的经验教训 587
9.10 小结 587
第10章虚拟存储器 593
10.1物理和虚拟寻址 595
10.2地址空间 596
10.3虚拟存储器作为缓存的工具 597
10.4虚拟存储器作为存储器管理的工具 601
10.5虚拟存储器作为存储器保护的工具 604
10.6地址翻译 604
10.7案例研究:Pentium/Linux存储器系统 614
10.8存储器映射 622
10.9动态存储器分配 627
10.10垃圾收集 648
10.11 C程序中常见的与存储器有关的错误 652
10.12扼要重述一些有关虚拟存储器的关键概念 656
10.13小结 657
第3部分程序间的交互和通信 669
第11章系统级I/O 669
11.1 Unix I/O 670
11.2打开和关闭文件 671
11.3 读和写文件 673
11.4用Rio包进行健壮地读和写 674
11.5读取文件元数据 679
11.6共享文件 681
11.7 I/O重定向 684
11.8标准I/O 685
11.9综合:我该使用哪些I/O函数? 686
11.10小结 687
第12章网络编程 691
12.1 客户端-服务器编程模型 692
12.2网络 693
12.3全球IP因特网 697
12.4套接字接口 704
12.5 Web服务器 712
12.6综合:Tiny Web服务器 719
12.7小结 726
第13章并发编程 731
13.1基于进程的并发编程 733
13.2基于I/O多路复用的并发编程 736
13.3基于线程的并发编程 744
13.4多线程程序中的共享变量 749
13.5用信号量同步线程 752
13.6综合:基于预线程化的并发服务器 762
13.7其他并发性问题 765
13.8小结 772
附录A处理器控制逻辑的HCL描述 783
A.1 HCL参考手册 784
A.2 SEQ 788
A.3 SEQ+ 792
A.4 PIPE 796
附录B错误处理 805
B.1 Unix系统中的错误处理 806
B.2错误处理包装函数 808
B.3 csapp.h头文件 809
B.4 csapp.c源文件 813