《深入理解计算机系统》
关于这本书
译序 2004.2.15
中科院,雷迎春
现实中需要程序员更好地理解计算机系统,知道程序如何在计算机上被执行。
这本书最大优点是为程序员描述计算机系统用的实现细节,帮助其在大脑中构造一个层次性的计算机系统,从最底层的数据在内存中的表示,到流水线指令的构成,到虚拟存储器。到编译系统,到动态加载库,到最后的用户态应用。
使程序员在设计程序时,能充分意识到计算机系统的重要性,建立起被所写程序可能被执行的数据或指令流图,明白当程序被执行时,到底发生了什么事,从而能设计出一个高效、可移植、健壮的程序,并能够更快地对程序排错、调整程序性能等。
卡内基梅隆大学的计算机系统导论课程书
第0部分 计算机系统漫游
1.1信息就是位+上下文
1.2程序被其他程序翻译成不同的格式
预处理阶段、编译阶段、汇编阶段、连接阶段
1.3了解编译系统如何工作是大有益处的
优化程序性能能
理解链接时出现的错误
避免安全漏洞
1.4处理器读并解释储存在存储器中的指令
一个典型系统的硬件组成
1.5高速缓存
1.6形成层次结构的存储设备
一个存储器层次模型
1.7操作系统管理硬件
1.8利用网络系统和其他系统通信
小结
操作系统内核是应用程序和硬件之间的媒介。它提供三个基本的抽象概念:文件是对I/O设备的抽象概念;虚拟存储器是对主存和磁盘的抽象概念;进程是处理器、主存和I/O设备的抽象概念。最后,网络提供了计算机系统之间通信的手段。从某个系统的角度来看,网络就是一种I/0设备。
第一部分 程序执行和结构
第二章 信息的表示和处理
信息存储
整数表示
整数运算
浮点
小结
第三章 程序的机器级表示
历史观点
程序编码
数据格式
访问信息
算数和逻辑操作
控制
过程
数组分配和访问
异类的数据结构
对齐(alignment)
综合:理解指针
现实生活:使用GDB调试器
存储器的越界引用和缓冲区溢出
浮点代码
在C程序中嵌入汇编代码
小结
第四章 处理器体系结构
4.1Y86指令集体系结构
4.2逻辑设计和硬件控制语言HCL
4.3Y86的顺序(sequential) 实现
取指,解码,执行,访存,写回,更新PC
4.4流水线的通用原理
4.5Y86的流水线实现
4.6小结
第五章 优化程序性能
5.1优化编译器的能力和局限性
5.2表示程序性能
5.3程序示例
5.4消除循环的低效率
5.5减少过程调用
5.6 消除不必要的存储器引用
5.7理解现代处理器
5.8降低循环开销
5.9转换到指针代码
5.10提高并行性
5.11综合: 优化合并(Combing) 代码的效果小结
5.12分支预测和预测错误处罚
5.13理解存 储器性能
5.14 现实生活:性能提高技术
5.15确认和消除 性能瓶颈
5.16小结
第六章 存储器层次结构
6.1存储技术
6.2局部性
6.3存储器层次结构
6.4高速缓存存储器
6.5编写高速缓存友好的代码
6.7综合:利用程序中的局部性
6.8小结
6.6综合:高速缓存对程序性能的影响
深入了解应用程序是如何被表示和执行的。学会大量编程技巧,从而可以编写更可靠并充分利用计算资源的程序。
第二部分 程序间的交互和通信
第7章 链接
7.1编译器驱动程序
7.2静态链接
7.3目标文件
7.4可重定位目标文件
7.5符号和符号表
7.6符号解析
7.7重定位
7.8可执行目标文件
7.9加载可执行目标文件
7.10动态链接共享库
7.11从应用程序 中加载和链接共享库
7.12 *与位置无关的代码 (PIC)
7.13处理 目标文件的工具
7.14 小结
第8章 异常控制流
8.1异常.
中断,故障,终止,陷阱
8.2进程.
8.3系统调用和错误处理
8.4进程控制
8.5信号
8.6非本地跳转
8.7操作进程的工具
8.8小结
第9章 测量程序执行时间
9.1计算机系统上的时间流
9.2通过间隔计数(interval counting)来测量时间
9.3周期计数器
9.4用周期计数器来测量程序执行时间
9.5基于gettimeofday函数的测量
9.6综合:一个实验协议
9.7展望未来
9.8现实生活: K次最优测量方法
9.9得到的经验教训
9.10小结
第10章 虚拟存储器
10.1物理和虚拟寻址
10.2地址空间
10.3虚拟存储器作为缓存的工具
10.4虛拟存储器作为存储器管理的工具
10.5處拟存储器作为存储器保护的工具
10.6地址翻译
10.7案例研究: Pentium/Linux 存储器系统
10.8存储器映射
10.9动态存储器分配
10.10 垃圾收集
10.11 C程序中常见的与存储器有关的错误
10.12扼要重述一 些有关 虚拟存储器的关键概念
10.13小结
第三部分 程序间的交互和通信
第11章 系统级I/O
11.1 Unix 1/O
11.2打开和关闭文件
11.3读和写文件
11.4用Rio包进行健壮地读和写
11.5 读取文件元数据
11.6共享文件
11.7 /O重定向
11.8 标准/0
11.9综合:我该使用哪些/O函数?
11.10 小结
第12章 网络编程
12.1客户端服务器编程模型
12.2网络
12.3全球IP因特网
12.4套接字接口
12.5Web服务器
12.6综合: Tiny Web服务器
12.7小结
第13章 并发编程
13.1基于进程的并发编程
13.2基于/O多路复用的并发编程
13.3基于线程的并发编程
13.4多线程程序中的共享变量
13.5用信号量同步线程
13.6综合:基于预线程化的并发服务器
13.7其他并发性问题
13.8小结
附录
《深入理解计算机系统》