系统硬件的构成
计算机系统的硬件构成由四部分组成:总线、I\O设备、主存、处理器。
一个典型的计算机系统构成
总线:贯穿整个系统的一组电子管道,总线携带信息字节并在各个部件之间传递。总线通常被设计为传送定长的字节块,即字。字中的字节数(字长)是一个基本的系统参数。大部分计算机的字长为4个字节和8个字节。
I/O设备:系统与外部世界联系的通道,包括:鼠标键盘,显示器,磁盘等。每个I/O设备通过一个控制器或适配器与I/O总线相连。控制器与适配器之间的区别在于他们的封装方式。控制器是I/O设备本身或者系统的主印制电路板上的芯片组。而适配器是插在主板插槽上的卡。
主存:主存是一个临时储存设备,在处理器执行程序的时候,用来存放程序和程序处理的数据。从物理上来说,主存是一组动态随机存取存储器(DRAM)芯片组成。从逻辑上来说,存储器是一个线性的字节数组,每个字节都有其唯一的地址(数组索引)这些地址从零开始。
处理器:中央处理单元(CPU),解释和执行存储在主存中指令的引擎。处理器的核心是一个大小为一个字的存储设备,成为程序计数器(PC)。在任何时候,PC都指向主存中某条机器语言指令。处理器从PC指向的内存处读取指令,解释指令中的位,执行该指令的简单操作,然后更新PC,指向下一条指令。以上操作围绕主存、寄存器和算术/逻辑单元进行。处理器执行的操作:
- 加载:从主存中复制一个字节和字道寄存器,覆盖原有的内容;
- 存储:从寄存器复制一个字或字节到主存的某个位置,覆盖原有的内容;
- 操作:将两个寄存器的内容复制到ALU,ALU对两个字做算术运算,并将结果放入寄存器中,覆盖寄存器中原有的内容;
- 跳转:从指令本身抽取一个字,将这个字符复制到PC中,覆盖PC中原有的值。
以hello.c为例看程序的运行过程
- 在SHELL中,当在键盘输入"./hello",shell将字符逐一读入寄存器中,再将其放入主存储器中。
- 当按下回车时,SHELL执行一系列指令加载可执行的hello文件,这些指令将hello目标函数中的代码和数据从磁盘中复制到主存中'hello world\n'。利用直接存储器存取(DMA)技术,数据可以不经过处理器而直接到达主存中;
- 当hello文件中的代码和数据被加载到主存中时,处理器开始处理hello程序中main中的机器指令。将'hello,world\n'从主存中复制到寄存器文件;在从寄存器文件复制到显示设备上。
高速缓存的重要性
从上面的内容可以看出,程序在运行的过程中,系统会花费大量的时间把信息从一个部件挪到另一个部件。根据机械原理,较大的存储设备要比较小的存储设备慢,处理器的运行速度远高于主存。为了解决这个问题,研究者们采用了高速缓存处理器作为一个暂时的集结区域,存放处理器近期可能会处理的信息。L1高速缓存的速度几乎和访问寄存器文件一样快,L2高速缓存的处理速度低于L1,但比直接访问贮存要快。 L1和L2高速缓存使用了一种静态随机访问存储器(SRAM)的技术。利用高速缓存的局部原理,程序可访问局部区域内的代码和数据。
存储设备的层次
在处理器和主存之间加入一个更小更快的设备已经成为了常用的做法。计算机系统也被组织成一个存储器层次结构。 存储器层次结构的主要思想为上一层的存储器为下一层存储器的高速缓存。
/\
/ \
/ \
/ \
L0 / 寄存器 \
L1 / L1高速缓存\
L2 / L2高速缓存 \
L3 / L3高速缓存 \
L4 / 主存 \
L5 / 本地二级存储 \
L6 / 远程二级存储 \
-----------------------