第1章 计算机系统漫游
一、程序的编译过程
以hello程序为例,其生命周期是从一个C语言程序开始的。源程序文件hello.c,并把它翻译成一个可执行目标文件hello。其翻译的过程可以分为四个阶段:预处理阶段、编译阶段、汇编阶段和链接阶段。如下图所示:
二、系统的硬件构成
系统的硬件构成主要包含以下各模块:
1. 总线。它携带信息字节并负责在各个部件间传递,通常总线被设计成传送定长的字节块,也就是字。
2. I/O设备。是系统与外部世界的联系通道,每个I/O设备都通过一个控制器或适配器与I/O总线相连。
3. 主存。主存是一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。从物理上来说,主存是由一组动态随机存取存储器(DRAM)芯片组成。
4. 中央处理器(CPU)。是解释执行存储在主存中指令的引擎,处理器的核心是一个字长的存储设备,称为程序计数器(PC)。
CPU执行一条指令的过程分为以下各步:
加载:把一个字节或者一个字从主存复制到寄存器,以覆盖寄存器原来的内容。
存储:把一个字节或者一个字从寄存器复制到主存的某个位置,以覆盖这个位置上原来的内容。
操作:把两个寄存器的内容复制到ALU,ALU对这两个字做算术运算,并将结果存放到一个寄存器中,以覆盖该寄存器中原来的内容。
跳转:从指令本身中抽取一个字,并将这个字复制到程序计数器(PC)中,以覆盖PC中原来的值。
此外,处理器的指令集结构和微体系结构分别为:指令集结构描述的是每条机器代码指令的结果;微体系结构描述的是处理器实际上是如何实现的。
三、存储设备的层次结构
一个存储器的层次结构如下图所示:
存储器层次结构的主要思想是一层上的存储器作为第一层存储器的高速缓存。在这个层次结构中,从上到下,设备变得访问速度越来越慢、容量越来越大,并且每个字节的造价也越来越便宜。
四、操作系统管理硬件
操作系统看成是应用程序和硬件之间插入的一层软件,所有应用程序对硬件的操作尝试都必须通过操作系统。操作系统有两个基本功能:防止硬件被失控的应用程序滥用;向应用程序提供简单一致的机制来控制复杂而又通常大相径庭的低级硬件设备。
操作体系上的抽象如下图所示:
其中,文件是对I/O设备的抽象表示,虚拟存储器是对主存和磁盘I/O设备的抽象表示,进程则是对处理器、主存和I/O设备的抽象。
五、虚拟存储器
进程的虚拟地址空间如下图所示:
1. 程序代码和数据。对于所有的进程来说,代码是从同一固定地址开始,紧接着的是和C全局变量相对应的数据位置。
2. 堆。以C语言为例,当用户调用如malloc和free这样的标准库时,堆可以在运行时动态地扩展和收缩。
3. 共享库。用来存放像C标准库和数学库这样共享库的代码和数据的区域。
4. 栈。编译器用于实现函数的调用,和堆一样,用户栈在程序执行期间可以动态地扩展和收缩。当调用一个函数时,栈就会增长;从一个函数返回时,栈就会收缩。
5. 内核虚拟存储器。该部分不允许应用程序读写这个区域的内容或者直接调用内核代码定义的函数。
六、一些主题
并发,是指一个同时具有多个活动的系统;并行,是指用并发使一个系统运行的更快。
一个进程可以由多个线程执行单元组成,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据。
超线程,有时称为同时多线程,是一项允许一个CPU执行多个控制流的技术。
如果一个处理器可以达到比一个周期一条指令更快的执行速率,就称之为超标量处理器。
允许一条指令产生多个可以并行执行的操作,这种方式称为单指令、多数据,即SIMD并行。SIMD指令多是为了提高处理影像、声音和视频数据应用的执行速率。