2.系统的硬件组成
(1).总线:贯穿整个系统的一组电子管道,它携带信息字节并负责在各个部件间传递。通常总线被设计成传送定长的字节块,就是字(word)。字中的字节数(即字长)是一个基本的系统参数,现在大多数机器字长是4个或8个字节。
(2).I/O设备:每个I/O设备(如鼠标、键盘、显示器、磁盘等)都通过一个控制器或适配器与I/O总线相连。控制器和适配器之间的区别在于它们的封装方式,控制器是置于I/O设备本身的或者系统的主印制电路板(即主板)上的芯片组,而适配器是一块插在主板插槽上的卡。两者作用都是在I/O总线和I/O设备之间传递信息。
(3).主存:是一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。从物理上来说,主存是由一组动态随机存取存储器(DRAM)组成的;从逻辑上来说,存储器是一个线性的字节数组,每个字节都有其唯一的地址,这些地址从零开始。
(4).处理器:即中央处理单元(CPU),是解释存储在主存中指令的引擎。处理器的核心是一个字长的存储设备(或寄存器),称为程序计数器(PC)。在任何时刻,PC都指向主存中的某条机器语言指令(即含有该条指令的地址)。从系统通电开始,直到系统断电,处理器一直在不断的执行程序计数器指向的指令,再更新程序计数器,使其指向下一条指令。指令指示的操作都是围绕着主存、寄存器文件和算术/逻辑单元(ALU)进行的。
- 寄存器是一个小的存储设备,由一些1字节长的寄存器组成,每个寄存器都有唯一的名字。
- ALU计算新的数据和地址值。
CPU在指令的要求下可能会执行以下操作:
-
- 加载:把一个字节或一个字从主存复制到寄存器,以覆盖寄存器原来的内容;
- 存储:把一个字节或一个字从寄存器复制到主存的某个位置,以覆盖这个位置上原来的内容;
- 操作:把两个寄存器的内容复制到ALU,ALU对这两个字做算术操作,并将结果放在一个寄存器中,以覆盖该寄存器中原来的内容。
- 跳转:从指令本身中抽取一个字,并将这个字复制到程序计数器中,以覆盖原来的值。
举例:运行hello程序
- 初始时,shell执行它的指令,等待输入一个命令、当在键盘上输入"./hello"后,shell程序将字符逐一读入寄存器,再把它存放到存储器中;
- 当在键盘上敲回车键时,shell程序知道命令输入结束,然后shell执行一系列指令来加载可执行的hello文件,将hello文件中的代码和数据从磁盘复制到主存(利用直接存储器存取DMA技术,数据可以不通过处理器而直接从磁盘到底主存)。
- 一旦目标文件hello中的代码和数据被加载到主存,处理器就开始执行hello程序的main程序中的机器语言指令。这些指令将"hello,world!\n"字符串中的字节从主存复制到寄存器文件,再从寄存器文件中复制到显示设备,最终显示在屏幕上。
(5).高速缓存:位于处理器芯片上的L1高速缓存的容量可以达到数万字节,访问速度几乎和访问寄存器一样快。一个容量为数十万到数百万字节的更大的L2高速缓存通过一条特殊的总线连接到处理器,访问L2高速缓存的时间要比访问L1长5倍,但这仍比访问主存的时间快5-10倍。L1和L2高速缓存是用一种叫做静态随机访问存储器(SRAM)的硬件实现的。系统可以获得一个很大的存储器,同时访问速度也很快,原因是利用了高速缓存的局部性原理,即程序具有访问局部区域里的数据和代码的趋势,通过让高速缓存里存放可能经常访问的数据的方法,大部分的存储器操作都能在快速的高速缓存中完成。
(6).存储设备的层次结构:寄存器->L1高速缓存(SRAM)->L2高速缓存(SRAM)->L3高速缓存(SRAM)->主存(DRAM)->本地二级存储(本地磁盘)->远程二级存储(分布式文件系统,Web服务器)