计算机组成原理模块。计组大题核心区:数据通路微操作、控制器、流水线三件套。 主线承接 CO-2:指令格式定了之后,CPU 要回答“一条指令如何被逐拍执行”以及“如何执行得更快”。
核心问题
这一部分为什么存在?
CO-2 给出了指令的“纸面约定”,但硬件不能只认纸面——它必须回答:
- 谁在执行:一条指令从取指到写回,数据在寄存器、ALU、主存之间按什么顺序流动(数据通路),每一步由谁发令(控制器)?
- 何时发令:控制器每个时钟周期输出哪些控制信号?用组合逻辑(硬布线)还是查表(微程序)?
- 怎么更快:串行执行时,取指部件、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. 流水线:为什么快、快多少、何处卡壳
为什么快:不是让一条指令更快,而是让单位时间完成的指令数更多(重叠执行各段)。 段、每段 、 条指令无阻塞(来源:复习资料 P1 §八):
:(理想加速比上限 = 段数 )。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。
闭卷回忆链
- 一条指令从进到出分哪几个机器周期?间址周期和中断周期什么时候才有?
- 中断周期属于谁?保存断点和保存现场分别由谁做?(硬件/软件分工)
- 单总线上写微操作序列的三条纪律?(一拍一路、访存走 MAR/MDR、操作+信号两列)
- 控制器两条路线怎么选?为什么 RISC 配硬布线?
- 字段直接编码为什么要 +1?断定法下地址字段怎么算?
- 单周期处理器快吗?它的问题是什么?(CPI=1 但周期被最慢指令锁死)
- 流水线为什么能提速?加速比上限是多少?(重叠执行;段数 k)
- 时钟周期由什么决定?(最长段 + 段寄存器延时)
- 三类冒险各因何而起、怎么解?
- 转发能消除所有数据冒险吗?load-use 为什么必须插气泡?
- 分支指令为什么造成控制冒险?作废的是哪些指令?
- 缺页、系统调用、时钟中断分别属于哪类?处理后从哪继续?(Fault 重执行 / Trap 下一条 / 外中断下一条——接 X-2、X-1)