CPU 的功能和基本结构

中央处理器(CPU)由运算器和控制器组成,控制器负责协调并控制计算机各部件执行程序的指令序列,运算器负责对数据的加工处理。CPU 的具体功能包括:

  • 指令控制。完成取指令、分析指令和执行指令。
  • 操作控制。产生完成一条指令所需要的操作信号,把各种操作信号送到相应部件,从而控制这些部件按指令的要求执行。
  • 时间控制。严格控制各种操作信号的出现时间、持续时间和出现顺序。
  • 数据加工。对数据进行算术运算和逻辑运算。
  • 中断处理。对运行过程中出现的异常情况和中断请求进行处理。

运算器主要由算数逻辑单元(ALU)、暂存寄存器、累加寄存器(ACC)、通用寄存器组(GPRs)、程序状态字寄存器(PSW)、移位寄存器(SR)、计数器(CT)等组成。功能是根据控制器送来的命令,对数据完成算数运算、逻辑运算和条件判断。

控制器主要有程序计数器(PC)、指令寄存器(IR)、指令译码器(ID)、存储器地址寄存器(MAR)、存储器数据寄存器(MDR)以及一些时序电路和信号发生器。主要功能是根据指令的操作码和条件信号,生成当前计算机各部件的控制信号,让整个硬件系统协调运行。

通用寄存器组:用于存放操作数和各种地址信息,在指令中要指定寄存器的编号才能明确访问的是哪个寄存器。

累加寄存器:用于暂时存放 ALU 的结果。

移位寄存器:用于移位运算。

暂存寄存器:暂时存放操作数,以便在下一个操作取出之后同时送入 ALU。

程序状态字寄存器:用于存放状态信息,比如 OF、SF、ZF、CF 等。

程序计数器:指出下一条指令的位置。

指令寄存器:保存正在执行的指令。

存储器地址寄存器:存放主存单元的地址。

存储器数据寄存器:存放读出/写入主存储器的数据。

指令执行过程

指令周期

CPU 每取出一条指令并执行所需的全部时间被称为指令周期,不同指令的指令周期可能不同。指令周期通常用若干机器周期表示,每个指令周期的机器周期数不等。一个指令周期分成了几个不同的阶段,取指周期 → 间址周期 → 执行周期,当 CPU 采用中断方式实现主机和 I/O 设备的信息交换是,CPU 在每条指令结束前,都会发出中断查询信号,如果有中断请求,CPU 会进入中断响应阶段,也称中断周期,这样一个完整的指令周期可包括,取指周期 → 间址周期 → 执行周期 → 中断周期

当 CPU 执行指令时,首先进入取指周期,从程序计数器 PC 指出的主存储单元中取出指令,送至指令寄存器 IR,同时程序计数器 PC+“1”作为下一条指令的地址。当遇到转移指令等改变执行顺序的指令时,程序计数器 PC 会在+“1”后重新计算并更新值,至此取指周期完成。然后判断是否有间接寻址,如果有,则会进入间址周期以获得有效的操作数,完成之后就进入了执行周期完成对操作数的操作,在执行周期结束之后,CPU 发出中断查询信号,如果有中断请求,CPU 会进入中断响应阶段,此时需要关中断、保存断点、修改 PC 值为中断服务程序的入口地址并转向中断服务程序。

指令周期的数据流

取指周期

前面提到过,取指周期的任务是根据程序计数器 PC 的内容从主存中取出指令保存至指令寄存器 IR,同时程序计数器 PC 的值加 1.

整个取指周期的数据流如下:

  1. 将当前指令地址送至存储器地址寄存器 MAR,PC→MAR→ 地址总线 → 存储器。
  2. CU 控制单元通过控制总线向存储器发出读命令,CU→ 控制总线 → 存储器。
  3. 将 MAR 所指出的数据通过数据总线送入存储器数据寄存器 MDR,存储器 → 数据总线 →MDR。
  4. 将 MDR 得到的指令送到指令寄存器 IR 中,MDR→IR。
  5. CU 发出控制信号使 PC 内容加 1。

取值周期数据流

间址周期

间址周期的任务是获得操作数的有效地址,以一次间址为例,将指令中的地址码送道 MAR 并运送至地址总线,此后 CU 向存储器发出读命令,以获取有效地址并存至 MDR。总体流向如下:

  1. Ad(IR)→MAR→ 地址总线 → 存储器。
  2. CU 发出读命令 → 控制总线 → 存储器。
  3. 主存 → 数据总线 →MDR。

间址周期数据流

执行周期

执行周期的任务是取操作数,并根据 IR 中的指令操作码通过 ALU 运算单元操作并产生执行结果,不同指令执行过程不同,没有统一的数据流向。

中断周期

中断周期的任务是处理中断请求,需要保存断点需要使用到堆栈指针 SP。具体流向大致如下:

  1. CU 控制 SP 减 1,SP→MAR→ 地址总线 → 存储器。
  2. CU 发出写命令 → 控制总线 → 存储器。
  3. PC→MDR→ 数据总线 → 主存。
  4. CU(中断服务程序入口地址)→PC。

中断周期数据流

数据通路

数据在指令执行过程所经过的路径,包括路径上的部件,称为数据通路。组成数据通路的元件主要分为组合逻辑元件和时序逻辑元件。

数据通路的组成

组合逻辑元件(操作元件)

任何时刻产生的输出仅取决于当前的输入。组合电路中不包含存储信号的记忆单元,也不受时钟信号的控制,输入输出之间无反馈通路,信号是单向传输的。数据通路中常用的组合逻辑元件有译码器、算术逻辑单元、多路选择器、三态门等。

时序逻辑元件(状态元件)

任何时刻产生的输出不仅取决于当前的输入,还和该时刻前的输入有关,所以需要有存储信号的记忆单元。

数据通路的基本结构

CPU 内部单总线结构

将 ALU 以及所有寄存器都连接在一条内部公共总线上,称为单总线结构的数据通路。这种结构比较简单,但数据传输存在较多冲突,性能较低。

单总线结构

tips:内部总线是指同一部件,比如 CPU 内部连接的寄存器和运算部件之间的总线。系统总线是指同一台计算机系统的各部件比如 CPU、内存、通道等相互连接的总线。

CPU 内部多总线结构

CPU 内部有两条或者更多总线时,称为多总线结构。将所有寄存器的输入端和输出端都连接到多条公共通路上,相比单总线中一个时钟只允许传送一个数据,多总线方式可以同时在多条中线上传送不同的数据,提高效率。

专用数据通路

根据指令执行过程中的数据流向专门建立电路避免共享使用总线,性能很好但是硬件量成本很高。

控制器

控制器是计算机系统的指挥中心,主要功能如下:

  • 从主存中取出一条指令,并指出下一条指令的位置。
  • 对指令进行姨妈或测试,产生相应的操作控制信号,以便启动规定的动作。
  • 指挥并控制 CPU、主存、输入输出设备之间的数据流向。

根据控制器产生微操作控制信号的方式不同,控制器可以分为硬布线控制器和微程序控制器,这两种控制器中的 PC 和 IR 是一致的,不同的是确定和表示指令执行步骤的方法以及给出控制各部件运行所需信号的方案。

硬布线控制器

跳过

微程序控制器

微程序的设计思想就是将每条机器指令编写成一个微程序,每个微程序包含了若干微指令,每条微指令对应了一个或者多个微操作,现在大部分计算机都采用微程序控制技术。

微命令和微操作

在微程序控制的计算机中,控制部件向执行部件发出的各种控制信号称为微命令,它是构成控制序列的最小单位。执行部件接收到微命令之后进行的操作叫做微操作。微命令有相容性和互斥性之分。相容性的微命令是指可以同时出现、共同完成某一些微操作的微命令,互斥性则不能。

微指令和微周期

微指令是若干微命令的集合,一条微指令由操作控制字段和顺序控制字段组成。微周期是指从控制器中取出一条微指令并执行所需的全部时间,通常为一个时钟周期。

程序和微程序

程序和微程序是两个完全不同的概念,程序是指令的有序集合,用于完成特定的功能,微程序是微指令的有序集合,用于描述机器指令。一条指令的功能由一段微程序来实现。

微指令控制器的工作过程

微程序控制器中有以下这些部件:

  • 控制存储器 CM:用于存放各指令对应的微程序,控制存储器可用 ROM 构成。
  • CMAR:别名 μPC,微地址寄存器,接收微地址形成部件送来的微地址,为 CM 中读取微指令做准备。
  • CMDR:别名 μIR,用于存放微指令。
  • 微地址形成部件:用于产生初始和后续微地址,保证微指令的连续执行。

微指令控制器的工作过程

微指令的设计

编码方式:

  • 直接编码方式:直接编码无需进行译码,微指令的操作字段中每一位都代表一个微命令。选用或不用某个微命令,只要将对应位设置为 1 或者 0 即可,这种编码方式简单直观、执行速度快,但是微指令字长过长。

  • 字段直接编码:将微操作分类,同一类的微操作都是互斥的,再对每一类独立编码,每种编码代表一个微命令且各字段编码含义单独定义。这种方式可以缩短微指令字长,但速度比直接编码慢。

  • 字段间接编码:一个字段的某些微命令可能需要另一个字段的某些微命令来解释,由于不是靠字段直接译码发出的微命令,所以叫字段间接编码,也称为隐式编码,这种方式进一步缩短了微指令字长,但也削弱了微指令的并行控制能力。

微指令的地址形成方式:

  • 由下地址字段指出,在微指令格式中设置一个下地址字段,这种方式称为断定方式。
  • 根据机器指令的操作码形成。
  • 增量计数法,μPC+1→μPC。
  • 根据各种标志决定。
  • 由硬件直接产生。

指令流水线

指令流水线从两个方面提高了处理及的并行性和程序的执行效率。

  1. 时间上的并行技术,将一个任务分解为几个不同的子阶段,每个子阶段在不同的功能部件上并行执行,以便在同一时刻能够同时执行多个任务。这种方法叫做流水线技术
  2. 空间上的并行技术,在一个处理机内部设置多个执行相同任务的功能部件,并让这些功能部件并行工作,这样的处理机叫做超标量处理机

一条指令的执行过程可以分解为若干阶段,每个阶段由相应的功能部件完成。如果将各阶段视为相应的流水段,则指令的执行过程就构成了一条指令流水线。

假设一条指令的执行过程分为五个流水段:

  • 取指(IF):从指令存储器或 Cache 中取指令。
  • 译码/读寄存器(ID):操作控制器对指令进行译码,同时从寄存器中取操作数。
  • 执行/计算地址(EX):执行运算或者计算地址。
  • 访存(MEM):对存储器进行读写操作。
  • 写回(WB):将指令执行结果写回寄存器。

指令流水线

指令流水线的影响因素

为了方便流水线的设计,将每个阶段的耗时取成一样,以最长好事为准。

结构相关(资源冲突)

由于多条指令在同一时刻争用同一资源形成的冲突称为结构相关,比如取指和访存阶段都需要对 Cache 访问,这就可能导致发生冲突,所以一般 Cache 会设置一个指令 Cahce 和一个数据 Cache 来解决这个问题。

数据相关(数据冲突)

后面的指令用到前面指令的结果式前面的前面指令的结果还没有产生。

解决方法

  • 延迟执行相关指令,插入若干空指令
  • 旁路技术,设置相关转发通路,不等前一条指令写回直接发送到下一条指令 ALU 输入端。
  • 编译优化通过编译器调整顺序来解决数据相关。

控制相关(控制冲突)

当流水线遇到转移指令和其他改变 PC 值的指令而造成断流时,会引起控制相关。

解决方法

  • 转移指令分支预测。
  • 预取转移成功和不成功两个控制流方向上的目标指令。
  • 加快和提前形成条件码。