6 、中央处理器
一、CPU 的基本组成🧀
CPU 主要由运算器和控制器组成。
| 部件 | 组成与作用 |
|---|---|
| 运算器 | ALU、通用寄存器、暂存寄存器、移位器等,负责处理数据 |
| 控制器 | 指令寄存器 IR、程序计数器 PC、控制单元 CU 等,负责取指、译码并产生控制信号 |
ALU、寄存器、内部总线以及多路选择器等共同组成数据通路;控制器向数据通路发出控制信号,但通常不把控制器本身算作数据通路的一部分。
1、常见寄存器🧀
| 寄存器 | 作用 | 是否通常对用户可见 |
|---|---|---|
ACC | 累加器,保存操作数和运算结果 | 取决于 ISA |
MQ | 乘商寄存器,参与乘除法 | 通常不可见 |
X | 操作数暂存寄存器 | 通常不可见 |
MAR | 保存要访问的主存地址 | 不可见 |
MDR | 保存从主存读出或准备写入主存的数据 | 不可见 |
IR | 保存当前正在执行的指令 | 不可见 |
PC | 保存下一条待取指令的地址 | 通常由指令隐式修改,是否可直接访问取决于 ISA |
PSW | 保存条件码、中断状态和处理器状态 | 部分可见或可由专用指令访问 |
| 通用寄存器 | 保存操作数、地址或中间结果 | 可见 |
“用户可见”指程序能够通过指令显式使用。MAR、MDR、IR 属于 CPU 内部工作寄存器;通用寄存器和条件码通常属于指令系统的一部分。
2、ACC、MQ 与 X 的典型分工🧀
以下是传统单累加器模型中的常见约定,具体硬件可能不同:
| 寄存器 | 加法 | 减法 | 乘法 | 除法 |
|---|---|---|---|---|
ACC | 被加数、和 | 被减数、差 | 乘积高位 | 被除数、余数 |
MQ | — | — | 乘数、乘积低位 | 商 |
X | 加数 | 减数 | 被乘数 | 除数 |
记号必须区分寄存器、地址和内容:
M表示主存地址,(M)或 \(M[M]\) 表示该地址中的内容。ACC表示寄存器本身,(ACC)表示其中保存的内容。- 其他寄存器同理。
例如,从主存地址 M 取出一个操作数送入 X,可以写成:
\[ (M)\rightarrow X \]
二、指令周期🧀
CPU 完成一条指令通常经历以下阶段:
- 取指:根据
PC从主存读取指令。 - 译码:控制器分析操作码和寻址方式。
- 取数:需要时计算有效地址并读取操作数。
- 执行:由数据通路完成运算、访存或转移。
- 写回:把结果写入寄存器或主存。
- 中断检查:在合适的边界响应允许的中断。
在简化模型中,取指阶段的微操作可以表示为:
\[ PC\rightarrow MAR \]
\[ M[MAR]\rightarrow MDR\rightarrow IR \]
\[ PC+L\rightarrow PC \]
其中 \(L\) 为当前指令长度。即使执行的是空操作 NOP,取指后 PC 也已经正常更新。
1、指令周期的层次🧀
常见三级时序关系为:
\[ \text{指令周期}\supset\text{机器周期}\supset\text{时钟周期(节拍)} \]
- 指令周期:完成一条指令所需的全部时间。
- 机器周期:完成一次相对独立的基本操作,如取指或访存。
- 时钟周期:同步电路工作的最小时间单位。
不同教材也可能使用“CPU 周期”或“状态周期”等名称,做题时应先确认题目定义。
2、时钟周期的确定🧀
同步电路的时钟周期必须不小于关键路径的组合逻辑延迟,再加上寄存器建立时间、时钟偏斜等额外开销:
\[ T_{clk}\geq T_{critical}+T_{register\ overhead} \]
因此“最长组合路径的延迟”决定了时钟周期的主要下限,但二者通常不能简单画等号。
三、控制器🧀
控制器根据指令和状态产生控制信号,常见实现方式有:
| 类型 | 特点 |
|---|---|
| 硬布线控制器 | 由组合逻辑和时序电路直接产生控制信号,速度快,但设计和修改困难 |
| 微程序控制器 | 用控制存储器中的微指令产生控制信号,结构规整、便于修改,但通常较慢 |
一条指令在不同阶段需要不同的控制信号。CPU 并不是根据某段二进制“长得像指令还是数据”进行区分,而是由当前指令周期、地址来源及读写控制信号决定如何解释它。
四、异常与中断🧀
- 异常:由当前指令内部产生,如除零、缺页或非法指令。
- 中断:通常由外部设备或定时器异步提出请求。
处理器响应时通常需要:
- 保存断点和必要的程序状态。
- 根据入口地址转去执行处理程序。
- 处理完成后恢复现场并返回原程序。
精确异常要求处理器对外表现得像是在某条指令边界停止:此前的指令已经完成,此后的指令尚未产生可见影响。