《深入理解计算机系统》PDF下载

  • 购买积分:22 如何计算积分?
  • 作  者:(美)Randal E. Bryant,(美)David OHallaron著;龚奕利,雷迎春译
  • 出 版 社:北京:中国电力出版社
  • 出版年份:2004
  • ISBN:7508321758
  • 页数:830 页
图书介绍:本书是国外最经典的计算机科学教材之一,著名的美国卡内基梅隆大学等众多高等院校一直将本书作为教材使用。作者R布赖恩特是卡耐基梅隆大学的计算机科学系主任,ACM和IEEE双院士,其研究成果多次获得ACM和IEEE的大奖。本书共分十三章,分别介绍了信息的表示和处理、程序的机器级表示、处理器体系结构、存储器层次结构、静态和动态链接、虚拟存储器、系统级I/O、网络编程和并发编程等精彩内容。其目的是解释计算机系统的所有本质概念,并向读者展示这些概念是如何实际地影响应用程序的正确性、性能和实用性。本书的最大优点是帮助读者理解概念,让读者很清楚地在脑海中构造一个层次型的计算机系统,从最低层数据在内存中的表示(如我们一直陌生的浮点数表示),到流水线指令的构成,到虚拟存储器,到编译系统,到动态加载库,到最后的用户应用。本书提供了大量的例子和练习及部分答案,并且还有配套的教师手册,方便教学使用。尤其值得一提的是,对于每一个基本概念都有相应的笔头或程序试验,以加深读者的理解。

第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