随着智能技术的飞速发展,计算机系统能力成为解决我国信息技术发展瓶颈和实施大型工程的关键。计算机系统能力是指能够利用计算机系统层面的基本原理来构建以计算机技术为核心的应用系统,以及解决实际工程问题的能力。对于计算机专业的学生来说,具备计算机系统能力是其相对其他非计算机专业学生的一大优势,这一点已得到普遍认可,并已在实践中得到证实。
本书作为“计算机系统”或“计算机系统导论”“计算机系统基础”课程的教材,从程序员的角度说明了计算机系统的基本原理及底层实现机制,期望程序员能够成为:
· 更有效率的程序员——能有效地找出并消除程序中的bug,更好地进行程序性能调优。
· 更有“底”气的程序员——能够深入了解计算机系统中的一些底层实现,能够结合计算机的底层实现写出更可靠、更安全的程序。
· 更为全面的程序员——为后续的计算机“系统”级课程做好准备,提高解决复杂问题、设计复杂系统的能力。
虽然不同计算机系统的硬件和软件千差万别,但计算机系统的构建原理以及在计算机系统上的程序转换和执行机理是相通的,因而,本书仅介绍一种特定计算机系统平台下的相关内容。本书所用的环境为IA-32/x86-64+Linux+GCC+C语言。
全书共11章,旨在阐述计算机系统的核心概念。
第1章是计算机系统概论,介绍计算机系统的基本功能和基本组成、程序的开发与执行过程、计算机系统层次结构等内容。
第2章介绍计算机系统是如何用二进制来表示信息的,以及如何通过上下文来将同样的二进制字节序列识别为不同的数据对象。
第3章将实际的计算机系统分别抽象描述成一个最小系统与原型系统,并在这两个系统上讨论程序的执行过程。
第4章介绍汇编语言的概念与特点,并详细讲解了ATT汇编语言的典型指令。
第5章以整数与浮点数为例说明如何利用不同的二进制编码来实现对不同数据的存储和表达。
第6章介绍程序的机器级表示,通过对比C语言代码及其对应的汇编代码,从简单操作与访问、控制、过程、数据结构等多个方面来探索硬件层面的程序行为,从而理解程序在机器中的执行过程。
第7章介绍汇编代码通过链接形成最终的可执行文件的详细过程。
第8章介绍基本的存储技术以及存储器在计算机系统中是如何被组织成层次结构的,在此基础上讨论了程序的局部性问题。
第9章结合进程的生命周期,阐释了源自系统硬件底层及操作系统层面软件形式的异常(信号),及其相关异常处理。
第10章将从虚拟存储器的功能解读开始,阐释虚拟地址的翻译过程、存储器映射,并结合实际案例研究虚拟存储器系统。
第11章探讨如何使用几种不同类型的程序优化技术让程序运行得更快。
此外,附录还介绍了一个简单CPU的设计与实现过程,以及机器级程序(指令)的电路级行为仿真。
本书具体编写分工如下:赵欢、张子兴编写第1章和第2章,杨科华编写第3章和第4章,佘兢克编写第5章和第6章,黄丽达编写第7章、第9章和第10章,肖雄仁编写第8章,谢国琪编写第11章,凌纯清、刘彦编写附录部分,全书由赵欢、杨科华统稿。
本书内容基于“快速入门、循序渐进”的原则,每个知识点都提供了相应的教学视频,读者可以扫描书中的二维码来访问。同时也提供了大量的案例,尽量将每一个知识点融合到具体的案例中,建议读者在阅读本书的过程中按照案例的具体要求进行操作与实践,以加深对各个知识点的理解。
为便于本书教学内容的理解,并利于与先修后续课程“高级语言程序设计”“数字逻辑电路”“汇编语言程序”“计算机组成原理”“操作系统”“编译原理”等的融会贯通,作者通过一个自创的原型机系统与编译工具链来进行演示,使读者可以理解代码的底层运行机制,对照数字逻辑电路课程的学习内容,读者还可以进一步理解指令的电路级行为。但正如前所述,本书主要是为后续的计算机类“系统”级课程做准备,提高读者解决复杂问题、设计复杂系统的能力,因此并没有对这些原理进行深入的阐述,而只对这些内容的联系进行讲解,让读者对计算机系统有整体了解。在后续的“数字系统设计”“操作系统”“编译原理”“计算机体系结构”等课程的学习过程中,读者可以与本书内容相互印证,最终形成比较完整的、密切关联的计算机系统整体概念。