这本书的目的是解释计算机系统的本质,并向你展示这些概念是如何影响应用程序的正确性、性能和实用性的。学习这本书的建议:
- 建议有一台X86架构的Linux环境系统。这本书的内容几乎直接适用于这些类linux操作系统。
- 这本书需要对C/C++有一定的了解。
学习这本书建议在真正的系统上去尝试解决具体问题,或者是编写和运行程序。
这本书总共12章,重点在于描述计算机系统的核型概念,内容具体如下:
- 计算机系统漫游 这一章通过研究
Hello, world
这个简单程序的生命周期,介绍计算机系统的主要概念和主题。 - 信息的表示和处理 这里讲述计算机的算数运算,重点描述了会对程序员有影响的无符号数和数的补码表示的特性,以由此给出一个给定的字长,推导出器可能的编码范围。重点将数在计算机中的表示
- 程序的机器级表示 这一章讲解如何阅读C编译器生成的 x86-64 机器代码。我们说明为不同的控制结构(条件、循环)生成基本指令模式。还讲述了过程的实现,包括栈分配,寄存器使用惯例和参数传递。这里还讨论不同的数据结构(结构、联合和数组)的访问方式。还说明实现整数和浮点数运算的指令。还以分析程序在计算机级的样子作为途径,来理解常见的代码安全漏洞(缓冲区溢出等),以帮助理解程序员,编译器和操作系统可以采取的减轻这些威胁的措施。
- 处理器体系结构 这一章主要讲述了我们编写的C语言的代码是如何被处理器执行起来的。
- 优化程序性能 这一章介绍了许多提高代码性能的技术,主要思想就是让程序员通过是编译器能够产生更加有效的机器代码来
- 存储器层次结构 这一章讲述不同类型的RAM和ROM以及磁盘和固态硬盘的几何形状和组织构造。描述这些存储设备是如何放在层次结构中的,讲述访问局部性是如何使这种层次结构成为可能。最后描述如何通过改善程序对存储器访问的时间局部性和空间局部性来提高应用程序的性能。
- 链接 这一章讲述静态链接和动态链接,包含概念和可执行的目标文件、符号解析、重定位、静态库、目标共享库、位置无关代码,以及库打桩。
- **异常控制流$**这一章通过介绍异常控制流,介绍进程的基本概念。同时也初步展示程序的并发执行会引起不确定的行为。
- 虚拟内存
- 系统级I/O 这一章讲述了 Unix I/O基本操作,例如文件和描述符。
- 网络编程
- 并发编程
对于计算机的算数运算有深刻的理解是写出可靠程序的关键。比如,程序员不能使用
(x-y) < 0
来代替x < y
(前者可能会产生溢出)。也不能使用-y < -x
来代替。应为补码在表示中负数和正数的范围是不对称的。