Ch12 CPU 结构和功能¶
CPU 内部结构¶
- 包含 ALU(算术逻辑单元)、CU(控制单元)、寄存器组、状态标志等。
- 内部处理器总线用于在 ALU 和寄存器间传递数据,因 ALU 仅能操作 CPU 内部存储数据。

寄存器组织¶
- 用户可见寄存器:
- 通用寄存器:多功能用途。
- 数据寄存器:仅存储数据。
- 地址寄存器:可能通用或专用于特定寻址模式(如栈指针)。
- 设计问题:通用化灵活但指令长;专用化指令短但不灵活;寄存器数量过少需频繁访存,过多则收益不显著。
- 控制和状态寄存器:
- 程序计数器(PC):保存下条指令地址。
- 指令寄存器(IR):存储最近读取的指令。
- 内存地址寄存器(MAR):保存地址,与地址总线直接相连。
- 内存缓冲寄存器(MBR):保存数据,与数据总线直接相连。
- 程序状态字(PSW):包含条件码等状态信息。
指令周期的数据流¶
- 取指周期
- 下条指令地址:PC → MAR → 地址总线 → 主存。
- 指令:主存 → 数据总线 → MBR → IR,同时 PC++(除非指令修改 PC)。

- 间接周期(如有)
- MBR 的低 N 位 → MAR → 地址总线。

- 执行周期
- 复杂多样,取决于具体指令。
- 中断周期
- PC 复制到 MBR,特定地址由控制单元给 MAR,MBR 数据存至主存。
- PC 装载中断服务程序地址

流水线技术¶
- 经典六阶段流水:
- 取指令(FI)
- 指令译码(DI)
- 计算操作数(CO)
- 取操作数(FO)
- 执行指令(EI)
- 写操作数(WO)
- 条件转移与流水线总清:
- 条件转移可能导致流水线停顿,需清空流水线并重新取指。

- 流水线性能增强的限制:
- 访存冲突(FI,FO,WO)
- 每个指令执行时间不完全相同
- 转移指令
- 中断
- 流水线阶段并非越多越好:阶段越多开销越大,单指令执行时间越长,且相关性更复杂。
-
流水线性能
-
流水线周期时间:通过流水线把一组指令推进一个阶段所需时间
\[ \tau = \tau_m + d \]其中 \(\tau_m\) 为最大阶段延迟,\(d\) 为锁存器延迟(通常可忽略)。
-
n 条指令总时间:
\[ T_{k,n} = [k + (n-1)]\tau \](k 阶段流水线,无分支)。
-
加速比:
\[ S_k = \frac{nk\tau}{[k + (n-1)]\tau} = \frac{nk}{k + n - 1} \]当 \(n\rightarrow\infty\) 时,\(\lim S_k = k\)。
-
-
流水线冲突:流水线由于条件不允许继续执行而停顿
- 资源冲突:
- 访存冲突(FI/FO/WO 同时请求内存)
- ALU 冲突(多条指令同时需 ALU)
- 数据冲突:
- 写后读(RAW):前指令修改数据,后指令读取时数据未更新。
- 读后写(WAR):后指令写数据时,前指令尚未读取该数据。
- 写后写(WAW):后指令写数据覆盖前指令未完成的写操作。
- 资源冲突:
条件分支处理¶
- 多指令流:复制流水线初始部分,同时取两条指令,但可能引发资源争用。
- 预取分支目标:识别转移时取两个分支指令,仅做取指和译指直至某分支执行。
- 循环缓冲区:存储最近取的顺序指令,转移时检查目标是否存在,适用于循环。
- 分支预测:
- 静态预测:如预测从不跳转、总是跳转、按操作码预测。
- 动态预测:如 1 位预测(根据上次跳转预测)、2 位预测(连续两次失败才反转预测)。

转移历史表¶
- 在预测分支并取来转移目标指令时,条件转移语句还没完成译指、计算操作数,无法得到转移目标语句的地址。
- 转移历史表:通过表格维护转移目标
- 分支语句的地址
- 转移目标语句的地址
- 转移历史位
- 预测转移时:
- 从表中直接查询得出转移目标地址
- 如果该分支语句在表中不存在:等到操作数计算完成后,加入表中