408 知识网络
返回模块节点

CO-4/5 CPU 与指令流水线

计算机组成原理

来源:20-CO45-CPU与流水线.md · 完整笔记(7 节,未删减)

计算机组成原理模块。计组大题核心区:数据通路微操作、控制器、流水线三件套。 主线承接 CO-2:指令格式定了之后,CPU 要回答“一条指令如何被逐拍执行”以及“如何执行得更快”。


核心问题

这一部分为什么存在?

CO-2 给出了指令的“纸面约定”,但硬件不能只认纸面——它必须回答:

  1. 谁在执行:一条指令从取指到写回,数据在寄存器、ALU、主存之间按什么顺序流动(数据通路),每一步由谁发令(控制器)?
  2. 何时发令:控制器每个时钟周期输出哪些控制信号?用组合逻辑(硬布线)还是查表(微程序)?
  3. 怎么更快:串行执行时,取指部件、ALU、访存部件在大部分时间里闲置——让多条指令像流水装配一样重叠执行(流水线),但重叠立刻带来三类冲突(冒险),又要逐一解决。

没有这一层:指令系统只是文档;没有流水线:主频被最慢的一条指令锁死(单周期的病),现代 CPU 的高吞吐无从谈起。


概念体系

flowchart TD
    A["一条指令怎么落地?"] --> B["指令周期 = 若干机器周期<br/>取指 → 间址 → 执行 → 中断"]
    B --> C["数据通路:微操作序列<br/>PC→MAR→MDR→IR …"]
    C --> D["控制器发控制信号"]
    D --> D1["硬布线:组合逻辑<br/>快、难改 → RISC"]
    D --> D2["微程序:控制存储器 CS<br/>慢、规整 → CISC"]
    A --> E["部件闲置 → 流水线五段<br/>IF/ID/EX/MEM/WB"]
    E --> F1["结构冒险 → 资源分离"]
    E --> F2["数据冒险 → 转发 + 气泡"]
    E --> F3["控制冒险 → 分支预测"]
    B --> G["异常与中断<br/>内:缺页/除0/自陷<br/>外:时钟/外设"]

核心概念:

概念 要点 易考点
指令周期 取一条指令并执行完的全部时间 = 若干机器周期 × 若干时钟周期 每个指令周期 ≥ 一个时钟周期;取指必访存(2011-19);NOP 也令 PC 自增(2011-19 C 项陷阱)
中断周期 当前指令执行周期之后、由中断隐指令完成:关中断、保存断点(PC/PSW)、送入口 中断周期属于当前指令的指令周期,不属于中断服务程序;保存断点 = 硬件,保存现场(通用寄存器)= 软件(2024-21)
微命令/微操作/微指令/微程序 控制线 → 动作 → 同周期微命令集合 → 解释一条机器指令的微指令序列 微程序存于 CS(控制存储器,CPU 内 ROM);MM 存指令和数据、CS 存微指令(2017-18)
五段流水 IF / ID / EX / MEM / WB;时钟周期 = 最长段 + 流水段寄存器延时 2009-18(≥90ns)、2018-20(80+20=100ps)
三类数据相关 RAW(写后读,真相关)、WAR、WAW 408 主要考 RAW
转发(旁路) 把 EX/MEM 段的 ALU 结果直接送回 EX 输入,不等写回 load-use 无法纯靠转发,必须插 1 个气泡(2024-19)

实现机制

1. 指令周期与微操作序列(背默级,来源:复习资料 P1 §五–六)

单总线数据通路模型下,取指公共序列:

T1: MAR ← (PC)          PCout, MARin
T2: MDR ← M(MAR), PC+1  MemR, MDRinE, PC+1
T3: IR ← (MDR)          MDRout, IRin
T4: 译码

写微操作序列的三条纪律:① 单总线一拍只能传一路数据,所以 ALU 两端要经暂存器 Y、Z 周转;② 访存必走 MAR/MDR;③ 每步给出微操作 + 有效控制信号两列。范例(2009-44,ADD (R1), R0,(R0)+M[(R1)]→M[(R1)]):

MAR←(R1) → MDR←M(MAR) → Y←(MDR) → Z←(R0)+(Y) → MDR←(Z) → M(MAR)←(MDR)

先取内存操作数、再运算、再写回——大题 6 步全给分。同型题:2015-44(为单总线数据通路补连线)。

2. 控制器两条路线(与 CO-2 的 CISC/RISC 呼应)

维度 硬布线 微程序
信号产生 组合逻辑直接生成 查 CS 中的微指令
速度 (2009-19 考点) 慢(多次访 CS)
修改/扩展 难(重排电路) 易(改微码)
适配 RISC(指令规整) CISC(指令复杂)

微程序方向的两个计算点:字段直接编码(互斥类共享字段,每类编码数 = 该类微命令数 + 1 表示“都不发”;2012-18:7/3/12/5/6 → 3+2+4+3+3 = 15 位);断定法下地址字段(总微指令数 = 公共取指 + 各指令微程序;2014-18:2+32×4 = 130 → 8 位)。

3. 流水线:为什么快、快多少、何处卡壳

为什么快:不是让一条指令更快,而是让单位时间完成的指令数更多(重叠执行各段)。kk 段、每段 Δt\Delta tnn 条指令无阻塞(来源:复习资料 P1 §八):

T=(k+n1)Δt,TPmax=1Δt,S=nkk+n1T = (k+n-1)\Delta t,\quad TP_{max} = \frac{1}{\Delta t},\quad S = \frac{nk}{k+n-1}

k=5,Δt=2ns,n=1000k=5, \Delta t=2\text{ns}, n=1000S4.98S \approx 4.98(理想加速比上限 = 段数 kk)。2013-18:4 级流水、1.03GHz、100 条 → 吞吐率 = 100/(103 × 时钟周期)。

三类冒险及解法

冒险 成因 解法 真题落点
结构 争用同一部件(如同一存储器取指+取数) 指令/数据 Cache 分离、加部件 2010-12? 理解级
数据(RAW) 后指令要用前指令还没写回的结果 转发解决大部分;load-use 必须再插 1 气泡 2010-19(旁路不引起阻塞)、2016-19(无转发时数相关对)、2024-19
控制 转移/中断改 PC,已流入的后续指令作废 分支预测、延迟槽、停顿 2014-44(分支引起 3 周期阻塞)

load-use 为什么转发救不了(补充理解):load 的数据要到 MEM 段末才从主存取出,而紧随其后的指令在 EX 段初就需要它——时间倒序,转发只能“向过去借数据”无法“向未来借”,只能硬等一拍。

与单周期/超标量的区分(2016-20、2017-17):单周期 CPI=1 但时钟周期被最慢指令拉低(且不能用单总线——一拍内要同时完成多次传输);超标量是一个周期发射多条指令,不缩短各段时间(2017-17 I 项陷阱)。

4. 异常与中断(X-2 连接点,来源:复习资料 P1 §九)

类型 例子 返回点
外中断(可屏蔽/不可屏蔽) 时钟、键鼠、DMA 结束 下一条指令
故障 Fault 缺页、除 0、非法地址 重新执行该指令(与 X-1 缺页呼应)
自陷 Trap 系统调用 下一条指令
终止 Abort 硬件故障 不返回

中断响应时机:每条指令执行周期末尾才检查(不是任意时刻);断点(PC/PSW)由中断隐指令(硬件)在中断周期保存,现场(通用寄存器)由服务程序(软件)保存(2024-21)。响应优先级由硬件排队器决定,处理优先级由中断屏蔽字(软件)决定,二者可不同(2011-21)。


方案比较

执行方案 CPI 时钟周期 特点
单周期 1 最慢指令决定(长) 简单、频率低、不能单总线
多周期 >1(指令不同不同) 单步决定(短) 部件复用、需内部寄存器
流水线 理想 1(受冒险影响 >1) 最长段 + 段寄存器延时 吞吐率最大化,要处理冒险
超标量 <1 同流水线 一个周期发射多条,靠多套部件

来源:复习资料 P1 §五、§八。

数据相关 vs 数据冒险(易混对):相关是指令间的客观依赖关系(程序语义),冒险是这种依赖在特定流水线结构下会造成错误的执行风险——有相关不一定有冒险(无转发时有,有转发时多数消除;指令 1 与指令 5 间隔足够远就不阻塞,2014-44 第 4 问)。


应用与考法

形态一:数据通路大题:2009-44(写微操作序列 + 控制信号)、2013-44(数据通路部件识图)、2015-44(单总线补连线)。得分结构:取指公共段 + 执行段按“取数 → 运算 → 写回”展开。

形态二:流水线计算:2009-18(时钟周期 ≥ 最长段)、2013-18(吞吐率)、2018-20(段延时 + 段寄存器延时 = 100ps)、2012-44(无转发时空图:4 条指令 (5+4−1)=8 周期;x=a+b 指令序列分析)。

形态三:冒险分析:2010-19(旁路不是阻塞源)、2016-19(无转发时找出数据冒险指令对)、2014-44(哪些指令因数据相关阻塞、哪条控制冒险、为什么隔得远就不阻塞)、2019-18? (5 段流水指令序列分析)、2024-19(load-use 气泡)。

形态四:控制器与中断:2009-19(硬布线特点)、2012-18(字段直接编码 15 位)、2014-18(下地址 8 位)、2017-18(MM vs CS)、2011-19(NOP/指令周期)、2011-21(屏蔽字)、2024-21(断点=硬件、现场=软件)。

做题触发词:看到“控制信号”→ 单总线一拍一路;看到“转发/旁路”→ 想 RAW 与 load-use 例外;看到“分支指令”→ 数作废的已流入指令;看到“保存断点/现场”→ 硬件/软件分工。

来源:真题markdown/2009-2024统考真题.md 对应题号;复习资料 P1 §五–九。


前后联系

  • 向前依赖:CO-2(指令格式与寻址决定译码和执行步骤)、CO-1(ALU 与标志位)、CO-3(取指/取数经 Cache 与主存;指令/数据 Cache 分离消除结构冒险)。
  • 向后引出
    • 中断/异常是 OS 世界的入口 → OS-0 系统调用、OS-2 时钟中断调度、X-2;缺页属于 Fault → X-1
    • 访存段与 Cache 缺失、写缓冲 → CO-3;
    • 多核/多处理器基本概念 → 并行处理(2022-22 MIMD/SIMD);
    • 数据通路中的总线 → CO-6;I/O 中断与 DMA → CO-7 / X-3

闭卷回忆链

  1. 一条指令从进到出分哪几个机器周期?间址周期和中断周期什么时候才有?
  2. 中断周期属于谁?保存断点和保存现场分别由谁做?(硬件/软件分工)
  3. 单总线上写微操作序列的三条纪律?(一拍一路、访存走 MAR/MDR、操作+信号两列)
  4. 控制器两条路线怎么选?为什么 RISC 配硬布线?
  5. 字段直接编码为什么要 +1?断定法下地址字段怎么算?
  6. 单周期处理器快吗?它的问题是什么?(CPI=1 但周期被最慢指令锁死)
  7. 流水线为什么能提速?加速比上限是多少?(重叠执行;段数 k)
  8. 时钟周期由什么决定?(最长段 + 段寄存器延时)
  9. 三类冒险各因何而起、怎么解?
  10. 转发能消除所有数据冒险吗?load-use 为什么必须插气泡?
  11. 分支指令为什么造成控制冒险?作废的是哪些指令?
  12. 缺页、系统调用、时钟中断分别属于哪类?处理后从哪继续?(Fault 重执行 / Trap 下一条 / 外中断下一条——接 X-2、X-1)