本文将解释与机器指令执行过程以及相关的一些术语。指令的执行包含以下4个阶段:取指(instruction fetch)、指令解析(instruction decoding)、指令执行(instruction execution)、写回(Write Back\WB )。请注意:某些指令的执行阶段可能需要从内存读取操作数。下面详细介绍每个阶段。
机器指令的执行过程
取指(instruction fetch)
1.将指令指针寄存器(IP)中的内容发送到存储器地址寄存器(MAR/Memory Address Register),进而发送到地址总线(AB/Address Bus)。
2. 控制单元(CU/Control Unit)经控制总线(CB/Control Bus)向存储器发送读取命令。
3. 所读取的指令通过数据总线(DB/Data Bus)发送到存储器数据寄存器(MDR/Memory Data Register)。
4. 将存储器数据寄存器中的内容发送到指令寄存器(IR/Instruction Register)。
5. 使得PC的值加1,以便下一条指令的执行。
取指阶段细分为上述5个子阶段。请注意数据总线不仅用于传输数据,也用于传输指令。
指令解析(instruction decoding)
机器指令包含两个组成部分:操作码(opcode)与地址码。操作码描述了指令的功能;地址码描述了参与运算的操作数的位置,以及运算结果的存放位置。操作码发送到指令译码器(instruction decoder)进行解析,具体说就是从控制存储器查找出与当前机器指令对应的微程序(microprogram)。微程序由一条又一条微指令构成。控制存储器(CM/Control Memory)存储了所有机器指令对应的微程序,控制存储器是只读存储器。微指令又由一条又一条微命令构成。下面单独开辟两个小节,详细解释微命令这个概念。
计算机系统中的硬件可划分为两大类:控制部件和执行部件。控制器就是控制部件,而运算器、存储器、外围设备相对控制器来说就是执行部件。那么两者是这么联系的呢?控制部件与执行部件的一种联系借助于控制线发生。控制部件通过控制线向执行部件发出各种控制命令,这种控制命令被称为微命令,执行部件接受到微命令后所执行的操作就叫做微操作。
控制部件与执行部件之间的另一种联系是通过反馈线发生。执行部件通过反馈线向控制部件反馈微操作的执行情况,使得控制部件根据反馈情况来下达新的微命令。
简单说,指令解析阶段所做的工作就是从控制存储器中查找与当前机器指令对应的微程序。
指令执行(instruction execution)
此处的指令执行是狭义的,狭义的指令执行指的是上述微程序的执行。
写回(Write Back)
写回指的是将机器指令执行的结果存储在某个位置。
术语解释:时序逻辑电路(sequential logic circuit)
时序逻辑电路与组合逻辑电路不同。组合逻辑电路的输出仅由当前输入决定。时序逻辑电路包含两个部分:组合逻辑电路与存储电路,存储电路用于存储时序逻辑电路的上一次输出。时序逻辑电路的输出不仅与当前输入有关,也与上一次的输出相关。
时序逻辑电路分为两大类:同步时序逻辑电路与异步时序逻辑电路。在同步时序逻辑电路中,有一个公共的信号,此信号由系统时钟周期性地发出,用于控制其中的存储电路。只有该时钟信号到来时,存储电路的输出才能发生变化,进而使得时序逻辑电路的输出发生变化。
术语解释:系统时钟
系统时钟是一种物理器件,是CPU的组成部分,用于定期发出信号,所发出的信号被称为时钟信号。赫兹(hertz)用于度量频率。例如;若系统时钟一秒发出一次信号,那么此系统时钟的频率为1赫兹。系统时钟的频率(时钟频率)是衡量CPU性能的重要指标。CPU的时钟频率可人为指定,具体方法限于篇幅本文不再赘述。
术语解释:时钟周期(clock cycle)
又称为震荡周期,是时钟频率(clock rate)的倒数。时钟周期是最基本的、最小的,不可分割的时间单位。本文提到的各种各样的“周期”说到底都由一个又一个时钟周期组成。在时钟周期内,仅可完成一个最基本的操作。
术语解释:机器周期(machine cycle)
机器周期又称为CPU周期。不同的指令,长度并不相同,因此从内存读取不同指令所耗费的时间也不一样。机器周期指的是读取最短指令所耗费的时间。节拍周期包含一个或多个时钟周期,可人为指定,一般情况下,将节拍周期设置为一个时钟周期,因此时钟周期也被称为节拍周期。(关于节拍周期的讨论就到此为止吧,坦白说,当下的我并不能理解节拍周期这个概念,明天专门写一盘文章阐述与节拍周期相关的知识)。状态周期包含一个或多个节拍周期,状态周期可人为指定,有些情况下,将状态周期设置为两个节拍周期。(明天专门写一篇文章阐述与状态周期相关的文章。)
术语解释:指令周期(instruction cycle)
指令周期指的是CPU从内存获取指令并执行所耗费的时间。通常情况下,指令周期包含若干个机器周期。不同的指令具有不同的功能,有的指令功能复杂,有的简单,从而对应的指令周期并不一样。例如加法指令的指令周期不同于乘法指令。简而言之,两条指令的指令周期可能不一样。
今日总结:现在是1:23,上述内容耗费了大量时间,写这篇文章的目的是了解原语(primitive)这个概念,可是到现在,上文还未提到原语这个词语。在操作系统这个层面有原语这个概念,在硬件层面也有原语这个概念。硬件层面的原语是操作系统层面原语的基础,进而是“并发控制”的基础。想要真的理解并发控制是如何实现的,必须从最为根本的硬件层面的原语开始。
从上面的分析可以看出,一条机器指令的执行是多么的复杂,我之前以为一条机器指令的执行是连续的,不可分割的。或者说,一条机器指令一旦开始执行,那么CPU一定会执行完此指令,才会执行其他的指令,事实上不是这个样子。一条机器指令的执行被划分为四个阶段,有的子阶段又被细分。一条机器指令对应一个微程序,一个微程序包含一条又一条微指令,一条微指令又包含一个又一个微命令。今天最大的收获就是认识到一条机器指令的执行可能不是连续的,一条机器指令的执行过程,可能会被中断。
现在是1:40,今天到此为止。