《深入理解计算机系统 Computer Systems: A P

2022-07-20  本文已影响0人  Sun东辉

本书(简称 CS:APP)的主要读者是计算机科学家、计算机工程师,以及那些想通过学习计算机系统的内在运作而能够写出更好程序的人。

我们的目的是解释所有计算机系统的本质概念,并向你展示这些概念是如何实实在在地影响应用程序的正确性、性能和实用性的。其他的系统类书籍都是从构建者的角度来写的,讲述如何实现硬件或系统软件,包括操作系统、编译器和网络接口。而这本书是从程序员的角度来写的,讲述应用程序员如何能够利用系统知识来编写出更好的程序。当然,学习一个计算机系统应该做些什么,是学习如何构建一个计算机系统的很好的出发点,所以,对于希望继续学习系统软硬件实现的人来说,本书也是一个很有价值的介绍性读物。大多数系统书籍还倾向于重点关注系统的某一个方面,比如:硬件架构、操作系统、编译器或者网络。本书则以程序员的视角统一覆盖了上述所有方面的内容。

如果你研究和领会了这本书里的概念,你将开始成为极少数的“牛人”,这些“牛人”知道事情是如何运作的,也知道当事情出现故障时如何修复。你写的程序将能够更好地利用操作系统和系统软件提供的功能,对各种操作条件和运行时参数都能正确操作,运行起来更快,并能避免出现使程序容易受到网络攻击的缺陷。同时,你也要做好更深入的准备,研究像编译器、计算机体系结构,操作系统、嵌入式系统、网络互联和网络安全这样的高级题目。

读者应具备的背景知识

本书的重点是执行 x86-64 机器代码的系统。对英特尔及其竞争对手而言,x86-64 是他们自 1978 年起,以 8086 微处理器为代表,不断进化的最新成果。按照英特尔微处理器产品线的命名规则,这类微处理器俗称为“x86”。随着半导体技术的演进,单芯片上集成了更多的晶体管,这些处理器的计算能力和内存容量有了很大的增常。在这个过程中,它们从处理 16 位字,发展到引入 IA32 处理器处理 32 位字,再到最近的 x86-64 处理 64 位字。

我们考虑的是这些机器如何在 Linux 操作系统上运行 C 语言程序。Linux 众多继承自最初由贝尔实验室开发的 Unix 的操作系统中的一种,这类操作系统的其他成员包括 Solaris、FreeBSD 和 MacOS X。近年来,由于 Posix 和标准 Unix 规范的标准化努力,这些操作系统保持了高度兼容性。因此,本书内容几乎直接适用于这些“类 Unix”操作系统。

本书的前几章揭示了 C 语言程序和它们相对应的机器语言程序之间的交互作用。机器语言示例都是用运行在 x86-64 处理器上的 GUN GCC 编译器生成的。不需要你以前有任何硬件、机器语言或是汇编语言编程的经验。

如何阅读此书

从程序员的角度学习计算机系统是如何工作的会非常有趣,主要是因为你可以主动地做这件事情。无论何时你学到一些新的东西,都可以马上实验并且直接看到运行结果。事实上,我们相信学习系统的唯一办法就是做(do)系统,即在真正的系统上解决具体的问题,或是编写和运行程序。

这个主题贯穿全书。当引入一个新的概念时,将会有一个或多个练习题紧随其后,你应该马上做一做来检查你的理解。这些练习题的解答在每章的末尾。当你阅读时,尝试自己来解答每个问题,然后在查阅答案,看自己的答案是否正确。对每个家庭作业题,都标注了难度级别:

文中每段代码示例都是由经过 GCC 编译的 C 程序直接生成并在 Linux 系统上进行了测试,没有任何人为改动。如果系统上的 GCC 版本不同,或者根本就是另外一种编译器,那么可能生成不一样的机器代码,但是整体行为表现应该是一样的。所有的源程序代码都可以从 csapp.cs.cmu.edu 上的 CS:APP 主页上获取。

为了避免本书内容过多,本书中添加了许多网络旁注(Web aside),包括一些对本书主要内容的补充资料。所有的网络旁注都可以从 CS:APP 的主页上获取。

上一篇下一篇

猜你喜欢

热点阅读