CS:APP 第一章:计算机系统漫游(2)

1.4 处理器读并解释存储在存储器中的指令

在前面的章节中,已经将hello.c编译为了可执行文件hello。在Unix/Linux中,我们要在Shell中输入命令执行该文件。当然,现在有了GUI的存在我们要执行文件不再仅仅是通过Shell了。

$./hello

在Shell中执行后,程序将会打印出hello, world。在这一小节中,将是介绍存储在磁盘中的可执行文件时如何被执行的。

1.4.1 系统的硬件组成

下图是Intel Pentium系统产品系列的模型图。一个典型系统的硬件一般都包含以下几个部分:处理器、主存、总线、I/O设备。
硬件组成模型
1. 总线
总线是贯穿整个系统的一组电子管道,负责携带信息在各个部件之间传递。总线通常被设计为传输一定的长度的字节块,该长度被称之为字长,即总线一次内能传输的字节个数。现在计算机的总线字长大多被设计为4个字节(32位)或8个字节(64位)。
2. I/O设备
I/O设备是连接计算机与外界的设备,如在图中的鼠标、键盘、显示器与磁盘。每个I/O设备通过控制器或者适配器(如网络适配器,即网卡)与I/O总线进行连接。控制器通常置于I/O设备本身或系统的主板之上,而适配器通常是可以插在主板扩展槽上的卡。
3. 主存
主存是在处理器执行程序的过程中,用来临时存放程序和程序处理的数据的一组由动态随机存取存储器(DRAM)芯片组成的设备。主存在逻辑上是一个从零开始的线性字节数组,每个字节拥有一个固定且唯一的地址。
4. 处理器
处理器通常被称之为CPU(Central Processing Unit,中央处理单元),是一个执行在主存中的指令的设备。处理器的核心是一个字长的寄存器,称为程序计数器(PC),它指向主存中某条指令的地址。在系统通电期间,处理器不断执行PC指向的指令,并更新PC使其指向下一条指令,但下一条指令不一定与当前指令的地址相邻(如jmp xxxx)。上述处理器的操作主要是围绕着主存、寄存器文件和算术/逻辑单元(ALU, Arithmetic/Logic Unit)进行的。寄存器文件是由拥有各自唯一名字的1字长的寄存器组成,用来临时存储数据,具有极快的读写速度(将在1.6中提及)。ALU负责计算新的数据和地址值。下述是CPU在执行指令时可能会执行的几种操作:
加载:从主存复制一个字节或一个字长的内容到寄存器,并覆盖原内容。
存储:与加载相反,从寄存器复制至主存
操作:将两个寄存器的内容复制至ALU,ALU对其进行算术运算后将结果存放到一个寄存器中。
跳转:将一个字的内容复制至PC中,即将其设为下一条执行的指令的地址。

1.4.2 运行hello程序

在运行hello程序的时,我们需要在Shell中输入./hello,Shell会将我们从键盘上输入的字符逐一读入寄存器中,之后再将其存放至主存中。
从键盘上读取hello命令
当我们输完命令敲下回车键后,代表着命令的输入已经结束,然后Shell会加载可执行文件hello,将hello中的指令与数据从磁盘复制至主存中。
从磁盘中加载可执行文件到主存
当hello中的数据与指令已经被加载至主存中,处理器就将会开始执行hello程序的指令。指令执行的结果会将”hello, world\n”中的字节从主存中复制至寄存器中,再从寄存器复制至显示设备上。完成这一过程后,将可以在显示屏上看到hello, world(\n代表换行)。
将输出的字符串从内存写到显示器


1.5 高速缓存至关重要

在程序运行的过程中,需要花费大量的时间将信息在不同设备之间传输。根据机械原理,较大的设备运行速度要慢于较小的设备,但价格远低于较小的设备。例如典型的寄存器文件只能存储几百字节信息,而主存里可存放几十亿字节,但寄存器的数据读取速度比主存将近快100倍且差距持续增大(加快处理器运行速度比加快主存速度要经济且较容易)。
为了针对这种差异,系统设计者采用了较主存更小、更快的存储设备,即高速缓存存储器,用以临时存放处理器近期可能需要的信息。位于处理器芯片上的L1告诉缓存容量可以达到数万字节(例如i5-2450M的L1的大小是2*64KB),而访问速度接近寄存器文件的速度。
除L1高速缓存外,还有容量更大的L2高速缓存和L3高速缓存通过一条特殊的总线连接到处理器中(现在随着技术发展大多已集成在处理器芯片中)。L2与L3高速缓存虽然速度小于L1高速缓存,但仍然比直接访问主存快数倍。
高速缓存存储器是使用一种叫静态随机访问存储器(SRAM)的硬件技术实现的。在程序的运行过程中高速缓存存放了程序可能经常需要访问的数据,大大减少了信息读取过程中时间的消耗,提高了程序运行的速度。
高速缓存


1.6 存储设备形成层次结构

下图是不同存储设备之间的关系。在存储设备金字塔中,越靠近塔尖的设备运行速度越快,但其容量小于下层设备且价格更贵;相反,越靠近底端的设备容量大且价格较为便宜,但运行速度较慢。在计算机系统中,CPU中的寄存器文件位于金字塔最顶端,L1至L3高度缓存低于寄存器文件但高于主存,而本地磁盘和远程网络服务器的磁盘文件位于金字塔的最底端。
在一个较快的存储设备(如CPU寄存器)与一个较慢的存储设备(如主存)之间插入一个比后者更小但更快的设备(如L1-L3高速缓存)能有效得提高计算机系统的运行速度。
存储器的层次结构示例


其它

文中内容主要源自深入理解计算机系统第二版,部分图片来自于该书中。

原创文章 29 获赞 31 访问量 7万+

猜你喜欢

转载自blog.csdn.net/ghosind/article/details/48014557