第 5 章 名词库
这一页是复习主入口。 目标是把第 5 章的名词收全,并把每个词的边界和适用范围钉死。
每条最多四行:是(定义)/不是(划掉最常见的误解)/易混(成对的对手)/范围(该结论在什么条件下才成立)。
建设进度:✅ 5.1 CPU的功能和基本结构 ✅ 5.2 指令执行过程 ✅ 5.3 数据通路的功能和基本结构 ✅ 5.4 控制器的功能和工作原理 ✅ 5.5 异常和中断机制 ✅ 5.6 指令流水线 ✅ 5.7 多处理器的基本概念 (全章完整)
5.1.1 CPU 的功能
指令控制
- 是:控制指令之间的执行顺序——取指、分析、决定下一条指令的地址。输出是一个地址。
- 易混:↔ 操作控制(管指令之内)。粒度差一级。
- 范围:一道题问”保证指令按序执行”,答这一项。
操作控制
- 是:根据指令产生这一拍要发出的控制信号。输出是一组信号。
- 易混:↔ 指令控制。判据:输出是地址还是信号。
时间控制
- 是:决定各控制信号在第几拍发出、持续多久。
- 不是:不决定”发什么”,只决定”什么时候发”。
- 范围:单周期方案不需要时间控制,多周期和流水线才需要。
数据加工
- 是:算术逻辑运算,本章唯一属于运算器的功能。
- 范围:“怎么算”在第 2 章;本章只把 ALU 当作有接口的黑盒。
中断处理
- 是:识别并响应执行过程中的异常与外部请求。
- 范围:检测和响应归硬件,处理归软件。
5.1.2 CPU 的基本结构
数据通路(作为线)
- 是:图上传送值的线——指令、地址、操作数、结果。
- 范围:起点是寄存器或部件的输出端,宽度与字长同量级。
控制信号线
- 是:图上传送开合命令的线,1 位或几位。
- 不是:起点只能是控制部件的输出端。
- 范围:控制部件不生产数据——这是全章第一条主线判据。
运算器
- 是:ALU + 移位器 + 通用寄存器组 + 标志寄存器 + 暂存器 + 内部总线。
- 易混:↔ 数据通路(还包含通往 MAR/MDR/PC 的路径,范围更大)。
控制器
- 是:PC + IR + 指令译码器 ID + 时序系统 + 微操作信号发生器 CU。
- 不是:不在数据通路上,它驱动数据通路。
微操作信号发生器 CU
- 是:控制器的核心,把 (操作码, 节拍, 状态标志) 映射成一组控制信号。
- 不是:CU ≠ 控制器,它只是控制器里产生信号的那一块。
- 范围:三类输入缺一不可,漏掉”状态标志”是最常见失分点。
指令译码器 ID
- 是:对操作码译码,
条指令输出 根线,只有一根有效。 - 易混:↔ CU。ID 的输出是 CU 的输入。
暂存器 T / Y / Z
- 是:存放总线上传来的、还不能立即用掉的中间值。
- 不是:不属于 ISA 状态,程序不可见,没有编号。
- 范围:单总线结构必须有;多总线和专用通路可以不设。存在理由有两条——一拍只传一个值、隔断 ALU 输入输出的组合环路。
CPU 内部总线
- 是:连接 CPU 内部各寄存器与 ALU 的线,出口是 MAR 和 MDR。
- 易混:↔ 系统总线(在芯片外,需要仲裁)。内部总线的冲突由控制器排拍解决。
5.1.3 CPU 的寄存器
程序计数器 PC
- 是:存放下一条指令的地址,位数 = 主存地址位数。
- 不是:不是”当前指令的地址”——取指周期已经自增过了。
- 范围:“加 1”的实际增量 = 指令字长 ÷ 编址单位。按字节编址 + 32 位指令 → 加 4。
指令寄存器 IR
- 是:存放当前正在执行的指令,位数 = 指令字长。
- 不是:用户不可见。
- 范围:只有取指周期会改写它。
存储器地址寄存器 MAR
- 是:存放本次要访问的主存单元地址,位数 = 主存地址位数。
- 不是:位数不是机器字长。
- 易混:↔ PC(同宽,但 PC 一定装指令地址,MAR 装任意地址)。
存储器数据寄存器 MDR
- 是:与主存交换的数据,位数 = 存储字长,双向。
- 不是:位数不是机器字长。
- 范围:内容随阶段变化——取指是指令、间址是地址、执行是操作数、中断是断点。
累加器 ACC
- 是:一个通用寄存器,一地址指令的隐含操作数。
- 不是:不是”用户不可见”——隐含 ≠ 不可见。
- 易混:隐含(指令里不写出来,但 ISA 定义了它)↔ 不可见(ISA 里根本没有它)。
程序状态字寄存器 PSW
- 是:存放 ZF、SF、CF、OF、中断允许位 IF、模式位。
- 范围:全 CPU 唯一同时被数据通路和控制通路读写的寄存器——ALU 写它,转移指令读它,CU 也读它。
ISA 状态
- 是:换一个微体系结构实现仍必须存在、且值必须相同的寄存器——GPRs、PC、PSW。
- 范围:进程切换要保存的正好就是这一组,一个不多一个不少。
微体系结构状态
- 是:IR、MAR、MDR、暂存器、微指令寄存器——程序不可观察。
- 范围:切换发生在指令边界,此时这些寄存器里没有跨指令有用的信息,所以不必保存。
5.2.1 指令周期
时钟周期(节拍、T 周期)
- 是:最小时间单位,
。
机器周期(CPU 周期)
- 是:完成一个基本操作所需的时间,通常以访问一次主存的时间为基准。
- 范围:含几个时钟周期不固定。
指令周期
- 是:取出并执行一条完整指令的全部时间。
- 不是:不是固定长度——不同指令、不同寻址方式都不同。
- 范围:包含关系确定(指令周期 ⊇ 机器周期 ⊇ 时钟周期),倍数不确定。
取指周期 FE
- 是:按 PC 取指令送 IR、PC 自增。每条指令必有。
- 范围:动作与是哪条指令无关——这是流水线 IF 段能固定化的原因,也是微程序里取指微程序只有一段的原因。
间址周期 IND
- 是:按形式地址访存,取回操作数的地址。
- 范围:仅当寻址方式是间接寻址才有。408 不考多重间址。
执行周期 EX
- 是:取操作数、运算、送结果。每条指令必有。
- 范围:访不访存要看指令类型——寄存器型运算指令完全不碰 MAR/MDR。
中断周期 INT
- 是:保存断点、关中断、转服务程序入口。
- 范围:仅当有中断请求且允许响应。它是本条指令周期的一部分。
阶段标志触发器(FE / IND / EX / INT)
- 是:记录 CPU 当前处于哪个阶段的四个触发器,就是控制器状态机的状态变量。
- 范围:硬布线控制器的布尔表达式直接用它们作乘积项。
5.2.2 指令周期的数据流
取指周期数据流
- 是:
PC → MAR,M(MAR) → MDR,MDR → IR,PC+"1" → PC,OP(IR) → CU。 - 范围:PC 自增可与访存并行(走专用加法通路时)。
间址周期数据流
- 是:
Ad(IR) → MAR,M(MAR) → MDR。 - 范围:结束时 MDR 里是操作数的地址,不是操作数,也不是”无法确定”。
中断周期数据流
- 是:
断点存放地址 → MAR,PC → MDR → M(MAR),0 → IF,入口地址 → PC。 - 范围:保存的断点是下一条指令的地址;故障类异常除外(要回退到当前指令)。
断点
- 是:中断返回时要恢复的 PC 值。
- 不是:不是”被中断那条指令的地址”(故障类异常除外)。
- 易混:↔ 现场(通用寄存器,由软件保存)。
5.2.3 指令执行方案
单周期方案
- 是:一条指令一个时钟周期,
, = 最复杂指令的时间。 - 不是:CPI 最优不等于最快——它是三者中最慢的。
- 范围:每个部件一周期只能用一次,所以需要两套存储器接口。
多周期方案
- 是:一条指令分若干步,每步一个时钟周期,
= 最复杂阶段的时间。 - 范围:需要状态机记步数,需要暂存器存中间值;部件可复用,只要一套存储器接口。
流水线方案
- 是:多周期的各段同时为不同指令服务,理想
, = 最慢段 + 段间寄存器延迟。 - 范围:同时改善 CPI 和
两个因子,是本章唯一做到这一点的技术。
5.3.1 数据通路的功能
数据通路
- 是:数据在功能部件间传送的路径 + 路径上的功能部件。
- 不是:不包括主存(界面是 MAR/MDR);不包括控制器。
- 范围:它的功能只有传送、加工、暂存三件事,不包括”决定做什么”。
控制部件不生产数据
- 是:本章第一条主线判据。凡是”值”都必须由某个寄存器或部件的输出端提供。
- 范围:判断”某端点是否接控制部件”时,看它吃进去的是值还是开合命令。
关键路径
- 是:数据通路上最长的一条组合逻辑路径,通常穿过 ALU。
- 范围:它决定
,也就决定主频上限。切分它就得到多周期和流水线。
5.3.2 数据通路的组成
多路选择器 MUX
- 是:
路数据输入 + 位选择 → 1 路输出。输出是数据。 - 易混:↔ 译码器(方向相反,输出是控制)。
- 范围:用于**“从谁取”——寄存器堆读端口、ALU 输入选择。路数增长只让选择信号加
位但延迟随路数增长**;位宽增长让数据线成倍增加但共用同一组选择信号。
译码器 Decoder
- 是:
根输入 → 根输出,只有一根有效。输出是控制信号。 - 范围:用于**“发给谁”**——寄存器堆写端口、主存地址译码、指令译码、微地址译码。
寄存器堆 GPRs
- 是:一组通用寄存器 + 读端口(MUX)+ 写端口(译码器)。
- 范围:
rs(读编号)接 MUX,rd(写编号)接 译码器;二者都来自 IR。最多有个寄存器( = 编号字段位数)。典型配置是两读一写,这是三地址指令可行的硬件前提。
三态门
- 是:有 0、1、高阻三种输出状态的门,把寄存器接到共享总线上。
- 范围:控制信号
Xout控制的就是它。同一拍只能有一个Xout有效,否则总线冲突。
Xin 与 Xout 的不对称
- 是:
Xout同拍只能一个(三态门冲突);Xin同拍可以多个(多个寄存器接收同一个值合法)。 - 范围:这是排拍题唯一”白赚的并行”,也是微程序里判断互斥/相容的物理依据。
ALU 的”直送 A”(mova)
- 是:把一个输入原样输出的 ALU 功能。
- 范围:功能表里出现”直送”,几乎可断定该机器的寄存器间传送必须穿过 ALU。 移位器的”直送”同理。
5.3.3 数据通路的基本结构
CPU 内部单总线
- 是:所有寄存器的输入输出都挂在同一根内部总线上。
- 范围:一次寄存器间 ALU 运算要 3 拍(存 Y、算、经 Z 回写);必须有暂存器。
CPU 内部多总线
- 是:两三条内部总线,多个值可同时传送。
- 范围:三总线时一次运算可 1 拍完成;连线成倍增加。双总线的具体连法各教材不统一,按题目给的图判断。
专用数据通路
- 是:不设通用总线,按数据流向单独拉线。
- 范围:流水线必须用它——总线是全局共享的,天然违反”各段部件独立”。
排拍三规则
- 是:总线冲突(同拍同总线一个
Xout)、部件冲突(ALU/移位器/主存端口同拍各用一次)、数据依赖(用前一步结果的排下一拍)。 - 范围:贯穿 5.3.4 全部大题;与 5.4.2 安排微操作时序的三条原则是同一件事。
5.3.4 数据通路的操作举例
读图五步
- 是:①给线定性 ②数总线条数 ③找寄存器出入口 ④写数据流 ⑤按三规则排拍。
- 范围:书上例题少,但知识点只有 5.3.3 那张三结构对比表,其余是熟练度。
微操作序列的书写
- 是:按拍分行,每行给”微操作”和”控制信号”两列。
- 范围:三条评分要点——每拍查总线冲突、访存写
Read/Write、不要漏 PC 自增。
SRout
- 是:控制三态门的信号,决定移位器输出是否驱动内总线。
- 范围:凡是
Xout形式的信号,控制的都是三态门。
MUX 的常数输入
- 是:PC 顺序增量,值 = 指令字长 ÷ 编址单位。
- 范围:16 位定长指令 + 按字节编址 → 常数是 2。这个 MUX 就是”顺序寻址 / 跳跃寻址”的硬件岔路口。
5.4.1 控制器的结构和功能
控制器的三类输入
- 是:操作码(来自 IR)、节拍信号(来自时序系统)、状态标志(PSW、Ready、中断请求)。
- 范围:漏掉第三类是最常见失分点——没有它条件转移无法工作。
时序系统
- 是:时钟脉冲源 + 环形脉冲发生器 + 节拍发生器 + 启停控制。产物是节拍。
三个「地址」
- 是:机器指令的地址码 → 主存;微指令的下地址字段 → 控制存储器 CM;微指令的源/目的地址 → 寄存器堆。
- 范围:判据是”它索引的是哪个存储体”。 三者位数、单位、寻址对象全不相同。
5.4.2 硬布线控制器
硬布线控制器(组合逻辑控制器)
- 是:把
做成与-或阵列,每根控制线一个布尔表达式。 - 不是:里面没有控制存储器。
- 范围:速度最快(一级门延迟),最难修改;规模与”指令条数 × 节拍数”成正比,适合 RISC。
微操作命令表达式
- 是:形如
。 - 范围:别漏掉”仅某类指令才发”的那个乘积因子。
操作时间表
- 是:行是节拍、列是指令、格子填控制信号的表。四个阶段各一张。
- 范围:设计流程第 3 步的产物;第 4 步是竖着读它得到每根线的表达式。
同步 / 异步 / 联合控制
- 是:统一节拍 / 应答握手 / 主体同步加慢操作异步。
- 范围:实际机器普遍用联合控制。同一组概念在 6.2 总线定时再出现一次。
硬布线里没有「字段」
- 是:每根控制线独立算出,不存在把多根信号编码到一起。
- 范围:“互斥字段""水平型/垂直型”全部属于微程序控制器,串台是两节之间最常见的错误。
5.4.3 微程序控制器
微命令 / 微操作
- 是:微命令是控制信号(因),微操作是它引起的动作(果)。
- 范围:一一对应。
微指令
- 是:同一拍要发的一组微命令 + 下一条微指令的地址信息。
- 范围:一条微指令 ↔ 一个机器周期。
微程序
- 是:完成一条机器指令所需的全部微指令序列。
- 范围:一条机器指令 ↔ 一段微程序。
控制存储器 CM
- 是:存放全部微程序的只读存储器,在 CPU 内部。
- 不是:不是 RAM——“用户可通过编写微程序扩充指令系统”按错误处理(除非题目明说 WCS)。
- 范围:容量 = 微指令总条数 × 微指令字长。
操作控制字段
- 是:微指令中发出微命令的那一段。
- 范围:位数取决于编码方式——直接编码时等于微命令个数。
判别测试字段(P 字段)
- 是:指出这一步要测试哪一类条件,测试结果去修改下地址字段的若干位形成分支微地址。
- 不是:它不是条件本身,是选择器的选择信号。
- 范围:全 0 → 顺序执行;
用操作码散转到各指令的微程序入口; 用标志位做条件分支。
下地址字段
- 是:下一条微指令在 CM 中的地址,位数 =
。 - 不是:不是主存地址。
源地址 / 目的地址(垂直型微指令)
- 是:CPU 内部寄存器的编号,索引的是寄存器堆。
- 不是:不是内存地址。“地址”在这里就是”编号”。
- 范围:源编号送 MUX 选择端(读),目的编号送译码器(写)。
直接编码(直接控制)
- 是:操作控制字段每一位对应一个微命令。
- 范围:不需要译码,最快;字段最长,CM 容量最大。
字段直接编码
- 是:把互斥的微命令编在同一字段,用编码表示。
- 范围:位数
——必须留一个”本段不发命令”的编码。漏掉 +1 是微程序计算题最高频的失分点。
互斥 / 相容微命令
- 是:互斥 = 同一拍不可能同时有效;相容 = 可能同时有效。
- 范围:互斥的编在同一字段,相容的必须分开。 典型互斥:所有
Xout、ALUop各功能、Read/Write;典型相容:各个Xin。
水平型微指令
- 是:操作控制字段 + 判别测试 + 下地址,每位直接是控制信号,没有微操作码。
- 范围:字长长、微程序短、速度快、编写难,并行度高。
垂直型微指令
- 是:μOP + 目的地址 + 源地址,格式像一条迷你机器指令。
- 范围:字长短、微程序长、速度慢、编写易;慢的原因不止”一次做一件事”,还多了一层译码。
- 易混:判据是”有没有微操作码字段”。
断定方式 / 计数器方式
- 是:微指令直接给出下地址 / 用 μPC 顺序加 1。
- 范围:408 题目绝大多数按断定方式出(格式里明写”下地址字段”)。
微指令总条数
- 是:
各机器指令微程序的条数 + 公共取指微程序(+ 间址、中断微程序,若题目提及)。 - 范围:取指微程序只有一段、被所有指令共用——必考点。
5.5.1 异常和中断的基本概念
异常(内中断)
- 是:CPU 内部、同步、可复现的事件——除零、缺页、非法指令、
INT n。 - 范围:可操作判据是”重跑一遍还会在同一条指令上发生吗”。
中断(外中断)
- 是:CPU 外部、异步的事件——键盘、磁盘、时钟。
- 范围:在每条指令执行结束时统一检测。
广义中断 / 狭义中断
- 是:广义 = 内中断 + 外中断;狭义 = 只指外部异步事件。
- 范围:题目出现”内中断”→ 广义口径,此时内中断 = 异常。不要在一道题里混用两套口径。
中断的定义性特征
- 是:硬件在指令边界强行改写 PC,当前程序对此一无所知。
- 范围:否定判据更常用——凡是”程序自己调用的”,都不是中断。
addEventListener的回调由应用自己的事件循环调用,不是中断。
为什么在指令边界响应
- 是:保证保存的是完整的 ISA 状态,微体系结构状态无需保存。
- 范围:若允许指令中间响应,暂存器、微指令进度都要保存,ISA 与微体系结构的分层会崩塌。
Cache 缺失不是异常
- 是:由硬件完全处理,不改写 PC、不进入服务程序。
- 易混:↔ 缺页是异常(故障),需要操作系统介入。判据仍是”PC 有没有被强行改写”。
5.5.2 异常和中断的分类
故障 Fault
- 是:执行中发现、问题可能被修复的异常。返回时重新执行当前指令。
- 范围:缺页、除零、非法操作码。硬件必须把 PC 回退到当前指令开头——变长指令集里这一步尤其麻烦。
自陷 Trap
- 是:指令有意触发的异常。返回时执行下一条。
- 范围:系统调用、断点、单步。“主动”不影响它是异常。
终止 Abort
- 是:无法恢复的硬件错误。不返回。
可屏蔽中断 INTR
- 是:受 IF 和设备屏蔽位控制,可以被暂时挡住。
不可屏蔽中断 NMI
- 是:任何情况下都响应,走独立引脚,不参与排队。
- 范围:理由是时间紧迫(掉电只剩几毫秒),不是”更重要”。
断点 vs 现场
- 是:断点 = PC + PSW,硬件保存;现场 = 通用寄存器,软件保存。
- 范围:硬件不存通用寄存器是因为不知道要存多少——与 caller/callee-saved 的划分是同一思路。
5.5.3 异常和中断响应过程
响应的四个条件
- 是:设备请求 · 未被屏蔽 · CPU 开中断 · 一条指令刚执行完。
- 范围:NMI 不受第二、三项限制;异常不受第四项限制。
中断隐指令
- 是:硬件自动完成的三件事——①关中断 ②保存断点 ③引出中断服务程序。
- 不是:没有操作码、不在主存里,程序里找不到它。
- 范围:关中断必须在最前——否则保存断点期间再来中断会覆盖第一个断点。
中断类型号 / 中断向量地址 / 中断向量
- 是:类型号 = 标识中断源的小整数;向量地址 = 该向量在表中的地址;中断向量 = 服务程序的入口地址。
- 范围:三步链条 类型号 → 向量地址 → 向量 → PC。与
switch跳转表、微程序散转是同一个”编号 → 入口表”模式。
向量中断 / 查询中断
- 是:硬件给类型号查表得入口 / 转入公共程序由软件逐个查设备状态位。
- 范围:这决定了”判断中断源”归硬件还是软件。
软件查询法(判优)
- 是:按预定顺序逐个测试各设备的请求触发器。
- 范围:优先级由查询顺序决定,最灵活最慢,几乎不需硬件。
链式查询(菊花链)
- 是:响应信号沿一根链依次传递,正在请求的设备”吃掉”它。
- 范围:优先级由物理位置决定;最省线(1 根链);改优先级要重新接线;链上一环坏则后面全失效。
独立请求方式
- 是:每个设备独立的请求线和响应线,接优先权编码器并行判优。
- 范围:最快最费线(
根);编码器可编程时优先级可改。
响应优先级
- 是:同时到达时先响应谁,由判优电路决定,软件不能改。
处理优先级
- 是:嵌套时谁能打断谁,由中断屏蔽字决定,软件可以改。
- 范围:二者可以不一致——这是屏蔽字存在的全部理由。
中断屏蔽字
- 是:每个中断源一个,进入服务程序时送入屏蔽寄存器,某位为 1 表示屏蔽该中断源。
- 范围:对角线必为 1(每个源屏蔽自己);某行 1 越多处理优先级越高;标准下三角形态对应”处理优先级 = 编号顺序”。
多重中断(嵌套)
- 是:服务程序执行期间响应更高优先级的中断。
- 范围:两个条件——服务程序中有”开中断”指令(且在保存现场之后)+ 未被当前屏蔽字屏蔽。
精确异常
- 是:异常发生时,它之前的指令全部完成,之后的指令一条都没生效。
- 范围:靠冲刷后续指令实现。虚拟存储器能工作的前提——否则故障类异常无法重新执行当前指令。
5.6.1 指令流水线的基本概念
吞吐率 / 延迟
- 是:吞吐率 = 单位时间完成的指令条数;延迟 = 一条指令从进入到完成的时间。
- 范围:流水线提高吞吐率,不缩短延迟(因段间寄存器甚至略增)。这是 5.6 全节最重要的一条区分。
段间寄存器(流水寄存器)
- 是:两段之间存放上一段结果的寄存器。
- 范围:
; 是超流水线的天花板。
时空图
- 是:横轴时钟、纵轴指令的图。分建立、稳定、排空三段。
- 范围:总时间
。
静态流水线 / 动态流水线
- 是:同一时刻只能按一种功能连接 / 可按多种功能连接。
- 范围:只对多功能流水线才有意义。
- 易混:↔ 动态调度(乱序执行),中文都带”动态”但概念完全不同。
流水线成立的三个条件
- 是:各段时间尽量相等、各段之间有缓冲、各段部件独立。
- 范围:第一条是 RISC 定长规整设计的动机;第三条是结构冒险的来源,也是流水线必须用专用通路的原因。
5.6.2 流水线的基本实现
五段 IF / ID / EX / MEM / WB
- 是:取指 / 译码取数 / 执行 / 访存 / 写回。
- 范围:ID 段读寄存器、WB 段写寄存器,相隔三段——这是全部数据冒险的根源。
为什么必须两个存储器
- 是:IF 段与 MEM 段在同一拍分别访存。
- 范围:这才是 L1 分 I-Cache / D-Cache 的首要理由——是结构冒险,不是局部性差异。
MEM 段空转
- 是:运算指令在 MEM 段什么都不做,但仍占一拍。
- 范围:不能省——否则写端口冲突且完成顺序错乱,破坏精确异常。
控制信号随指令流动
- 是:控制器在 ID 段一次性生成全部控制信号,随段间寄存器往下传。
- 范围:因为流水线里同一拍有五条不同指令,一个 IR 无法同时服务五个段。段间寄存器还必须带上目的寄存器号。
5.6.3 流水线的冒险与处理
结构冒险
- 是:两条指令同一拍需要同一个硬件部件。
- 范围:解决靠停顿(CPI ↑)、资源重复(硬件 ↑,主流)、资源分时(寄存器堆前半拍写后半拍读)。
数据冒险 RAW
- 是:后一条要读前一条还没写回的值。五段顺序流水线里唯一会发生的相关。
- 范围:距离 1 停 2 拍、距离 2 停 1 拍、距离 3 视寄存器堆是否”前写后读”。
WAR / WAW
- 是:读后写 / 写后写。顺序流水线不会发生,只在乱序执行时出现。
- 范围:靠寄存器重命名解决。
数据转发(旁路 forwarding)
- 是:把 ALU 结果从段间寄存器直接送给下一条指令的 ALU 输入端。
- 范围:判据是”结果产生的段不能晚于需要它的段”。能解决绝大多数 RAW,代价是硬件成本。
load-use 冒险
- 是:
LW的数据到 MEM 段末才出来,下一条的 EX 段比它早一拍。 - 范围:转发也解决不了,必须停 1 拍。这是必考的那个例外。
软件插 nop
- 是:编译器/汇编器在编译时插入空指令填满冒险窗口。
- 范围:代价落在
↑(代码真的变长);与硬件阻塞(CPI ↑)效果相同、账记在不同因子上。
nop 的延迟与代价
- 是:延迟 5 拍(走完全部段),对程序的代价 1 拍(后续指令推迟一拍)。
- 范围:这是”延迟 ≠ 吞吐”最直接的例子;非流水线机器上这个区分不存在。
指令调度(编译器重排)
- 是:把附近无关的指令挪到冒险的两条之间。
- 范围:理想情况零代价,但附近未必有无关指令,找不到只能退回插
nop。
控制冒险
- 是:转移结果未定,IF 段已按顺序取了后面的指令。
- 范围:分支代价 = 确定转移结果的段号
。
分支预测
- 是:猜一个方向继续取指,猜错则冲刷。
- 范围:静态(总是不转、向后转移预测为转)/ 动态(1 位、2 位预测器、BHT)。2 位优于 1 位:循环只错一次而不是两次。
延迟槽
- 是:分支后面固定几条指令无论如何都执行。
- 范围:由编译器填,填不满就塞
nop。
5.6.4 流水线的性能指标
吞吐率 TP
- 是:
,极限 。
加速比 S
- 是:
,极限是段数 。 - 范围:
时只有约 ,远未达到上限。
效率 E
- 是:
= 时空图有效面积 / 总面积,极限 1。 - 不是:
一定是算错了。
三者的换算
- 是:
, 。 - 范围:算出一个立刻能推另外两个。
段数的最优值
- 是:
,被段间寄存器开销卡死。 - 范围:加上冒险代价随段数增长,存在最优段数,不是越多越好。
5.6.5 高级流水线技术
指令级并行 ILP / IPC
- 是:
。ILP 由程序本身决定,硬件只能逼近不能创造。
超流水线
- 是:把段切得更细,提高主频。
- 不是:IPC 仍是 1——它动的是
,不是 CPI。这是三种”超”里最容易错的一格。 - 范围:天花板是
和分支代价。
超标量
- 是:硬件在运行时判断相关性,每拍发射多条。
- 范围:IPC
;检测逻辑复杂度 ,主流停在 4~8 发射。
超长指令字 VLIW
- 是:编译器在编译时把可并行的指令打包成一条超长指令。
- 范围:硬件简单、编译器极复杂、代码密度差、二进制不兼容——它把功能部件配置暴露进 ISA,踩中 4.1.1 那条判据的反面。
动态调度(乱序执行)
- 是:按序发射、乱序执行、按序提交。
- 范围:存在理由是编译时不可知的延迟(尤其 Cache 是否命中)。按序提交是为了精确异常。
寄存器重命名
- 是:给硬件准备远多于 ISA 数量的物理寄存器,每次写入分配一个新的。
- 范围:消除 WAR 和 WAW,不是 RAW。它基本抵消了 x86 寄存器少的缺陷。
5.7.1 SISD、SIMD、MIMD
SISD
- 是:单指令流单数据流——普通单核。
- 范围:流水线、超标量、乱序执行全都还是 SISD——判据是独立指令流的条数。
SIMD
- 是:复制运算部件、共享控制器——一条指令同时对多个数据操作。
- 范围:向量处理器、x86 的 SSE/AVX、GPU。属数据级并行 DLP。适用前提是数据规整、操作一致、分支少。
MISD
- 是:不存在。 遇到直接选它。
MIMD
- 是:控制器和运算部件都复制——多个完整的处理器。
- 范围:内部再分共享内存多处理器与多计算机(消息传递),判据是”同一个地址在不同处理器上是不是同一个存储单元”。
时间并行 / 空间并行
- 是:同一套部件在不同时刻做不同阶段 / 复制部件同时做。
- 范围:时间并行只有流水线;超标量、SIMD、多核、多处理器全是空间并行。
三个并行层次
- 是:ILP(流水线、超标量)→ DLP(SIMD、向量、GPU)→ TLP(多线程、多核、多处理器)。
5.7.2 硬件多线程
硬件多线程
- 是:复制线程状态(PC、寄存器组、PSW),共享运算部件和 Cache。
- 范围:与 SIMD 正好镜像。复制的那一组正是 ISA 状态。切换不需保存恢复,开销可低至 0 拍——对比 OS 进程切换的几百到几千拍。
细粒度多线程
- 是:每个时钟周期轮换线程,同一拍只有 1 个线程的指令。
- 范围:能隐藏短停顿;单线程性能下降。
粗粒度多线程
- 是:只在长阻塞时(如 Cache 缺失)切换。
- 范围:切换开销大——要排空流水线;只能隐藏长阻塞。
同时多线程 SMT
- 是:不切换,同一拍可以有多个线程的指令同时发射。
- 范围:必须以超标量为基础——“同时”指的是同一拍的多个发射槽被不同线程占用。
超线程 Hyper-Threading
- 是:Intel 对 SMT 的商标名,通常每物理核 2 个逻辑核。
- 不是:不使性能翻倍(典型 15%~30%);不是”与操作系统无关”——OS 必须知道 CPU 拓扑才能把线程优先分散到不同物理核。
- 范围:两线程抢同类部件或工作集超 Cache 时可能变慢。
逻辑核心 / 物理核心
- 是:逻辑核心只复制寄存器和 PC,运算部件共享。
- 范围:
。逻辑 = 物理 ⟹ 没有 SMT。macOS 查法: sysctl -n hw.physicalcpu hw.logicalcpu。
5.7.3 多核处理器
多核处理器 CMP
- 是:一个芯片里集成多个完整的核心,属 MIMD 共享内存类。
- 范围:L1、L2 每核私有,L3 共享。私有 Cache 正是一致性问题的来源。
路 / 核 / 线程
- 是:路 = 物理芯片数;核 = 一颗芯片里的核心数;线程 = 每核能同时跑几个线程。
- 范围:
。“多核处理器采用偶数路”是单位错位——多核该用”核”计数。
三堵墙
- 是:功耗墙(
且 随 涨 → 约按 增长)、ILP 墙、存储墙。 - 范围:三条路同时走到头,才被迫转向多核。
多核省电的算法
- 是:两个半频核心
,单核满频 ——吞吐相当,功耗约四分之一。 - 范围:隐含前提是负载可并行。
Amdahl 定律
- 是:
。 - 范围:串行占 5% 时,无论多少核加速比也超不过 20 倍。
双核 ≠ 双路 ≠ 超线程
- 是:双核 = 一颗芯片两个核心;双路 = 主板两颗芯片;超线程 = 一个核两个逻辑核。
- 范围:双核与超线程正交,可同时存在。双核是空间并行,不是时间并行。
5.7.4 共享内存多处理器
共享内存多处理器
- 是:所有处理器共享同一个物理地址空间,同一地址指向同一单元。
UMA
- 是:所有处理器访问任何内存单元的时间相同。
- 范围:扩展性差(总线是瓶颈);SMP 通常指 UMA 结构。
NUMA
- 是:访问本地内存快、远程内存慢。
- 不是:地址空间仍然是统一的——“非均匀”指的是时间不是空间。
- 范围:扩展性好;需要 OS 配合(线程与数据尽量同结点)。
SMP 对称多处理器
- 是:各处理器地位对等,都能访问全部内存和 I/O,操作系统只有一份。
- 范围:按王道口径,一般采用偶数路 CPU。
Cache 一致性(Coherence)
- 是:同一个地址的多个副本的值要一致。
- 范围:多处理器特有(单核只有一份 Cache)。由硬件协议自动保证。
监听(侦听)协议 / 目录协议
- 是:靠总线广播监听 / 用目录集中记录再点播。
- 范围:监听简单但扩展性差(适合小规模);目录适合大规模 NUMA。
写失效 / 写更新
- 是:让别人的副本失效 / 广播新值。
- 范围:写失效是主流——只有第一次写付出代价,总线流量小。
存储一致性(Consistency)
- 是:不同地址的访问在各处理器看来的顺序。
- 不是:与 Cache 一致性不是一回事——一个管”值”,一个管”序”。
- 范围:需要内存屏障指令,一致性协议管不了。
一致性不提供互斥
- 是:一致性保证读到最新值,但”读-改-写”仍可能被打断。
- 范围:互斥需要 TAS / CAS / LL-SC 这类原子指令,操作系统再用它们实现锁。三个层次不能互相替代。
多计算机(消息传递)
- 是:每个结点有独立的地址空间,通信靠显式
send/recv。 - 范围:不需要一致性协议;扩展规模远大于共享内存系统。
高频范围限定清单
每一条都是”说法 → 它在什么条件下才成立 / 为什么错”。考前扫这一张表。
| 常见说法 | 范围限定 |
|---|---|
| ”一个指令周期等于四个机器周期” | 错。含几个机器周期取决于指令 |
| ”任何指令的指令周期都包含中断周期” | 错。只有响应中断时才有 |
| ”机器周期就是时钟周期” | 只在特定设计下成立,不能当通则 |
| ”所有指令的指令周期相同” | 错。指令类型和寻址方式都会改变周期数 |
| ”PC 每次加 1” | 错。加的是指令字长 ÷ 编址单位 |
| ”MAR 的位数等于机器字长” | 错。等于主存地址位数 |
| ”MDR 的位数等于机器字长” | 错。等于存储字长 |
| ”PSW 用户不可见” | 错。PSW 和 PC 都是可见的 |
| ”ACC 用户不可见” | 错。隐含操作数 ≠ 不可见 |
| ”CPU 里一定有暂存器” | 只在单总线结构下必须有 |
| ”间址周期结束后 MDR 中无法确定” | 错。一定是操作数的地址 |
| ”执行周期一定访存” | 错。寄存器型运算指令不访存 |
| ”中断保存的是当前指令的地址” | 错。是下一条;故障类异常除外 |
| ”单周期处理器速度最快” | 错。CPI 最优但 |
| ”三种执行方案的 IC 不同” | 错。同一程序同一指令集,IC 相同 |
| ”数据通路包括主存” | 错。界面是 MAR/MDR |
| ”指令译码器属于数据通路” | 错。属于控制器 |
| ”偏移量由控制部件给出” | 错。控制部件不生产数据,偏移量走数据线 |
”rd 应该接多路选择器” | 错。写要使能,接译码器 |
| ”译码器的输出是数据” | 错。是控制信号;MUX 的输出才是数据 |
”同一拍可以有多个 Xout 有效” | 错。总线冲突;Xin 才可以多个 |
| ”ALU 的’直送’功能没有用” | 错。它是寄存器间传送穿过 ALU 时的必需功能 |
| ”单总线一次寄存器间加法要 1 拍” | 错。要 3 拍 |
| ”流水线可以用总线结构的数据通路” | 错。会造成严重结构冒险,必须用专用通路 |
| ”CU 的输入是操作码和节拍” | 漏了状态标志——条件转移靠它 |
| ”硬布线控制器里有控制存储器” | 错。那是微程序控制器 |
| ”硬布线控制器易于修改扩充” | 错。要改电路 |
| ”互斥字段是硬布线控制器的概念” | 错。属于微程序控制器 |
| ”微指令的下地址字段是主存地址” | 错。是控制存储器 CM 的地址 |
| ”垂直型微指令的源地址是内存地址” | 错。是寄存器编号 |
| ”字段编码的位数是 | 错。是 |
| "相容的微命令编在同一字段” | 错。互斥的才编在同一字段 |
| ”控制存储器可由用户改写以扩充指令” | 错。CM 是只读的(除非题目明说 WCS) |
| “微指令总条数 = 指令数 × 每条的微指令数” | 漏了公共取指微程序那一段 |
| ”水平型微指令字长短” | 错。字长长、微程序短 |
| ”系统调用是中断” | 错。是异常中的自陷 |
| ”Cache 缺失是一种异常” | 错。硬件自行处理,不改写 PC |
| ”缺页返回时执行下一条指令” | 错。故障类要重新执行当前指令 |
| ”保存通用寄存器由硬件完成” | 错。硬件只保存断点(PC、PSW) |
| “关中断可以放在保存断点之后” | 错。会导致第一个断点被覆盖 |
| ”中断向量就是中断向量表的地址” | 错。中断向量 = 服务程序的入口地址 |
| ”改中断屏蔽字可以改变响应优先级” | 错。只能改处理优先级 |
| ”链式查询判优速度最快” | 错。独立请求最快;链式最省线 |
| ”链式查询改优先级很方便” | 错。要重新接线 |
| ”多重中断只要有更高优先级的请求就会发生” | 还需要服务程序里主动开中断 |
| ”开中断可以放在保存现场之前” | 错。嵌套会破坏还没存完的现场 |
| ”流水线缩短了单条指令的执行时间” | 错。缩短的是平均每条的时间(吞吐) |
| “流水线段数越多性能越好” | 错。段间寄存器开销 + 冒险代价 |
| ”单功能流水线分静态和动态” | 错。只有多功能才分 |
| ”L1 分 I/D 是因为指令和数据局部性不同” | 首要理由是结构冒险——IF 与 MEM 同拍访存 |
| ”运算指令可以跳过 MEM 段” | 错。会造成写端口冲突和完成顺序错乱 |
| ”五段流水线会出现 WAR 冒险” | 错。只有 RAW;WAR/WAW 需乱序才出现 |
| ”数据转发能解决所有 RAW” | 错。load-use 仍需停 1 拍 |
| ”硬件阻塞会增加指令条数” | 错。增加的是 CPI;插 nop 才增加 IC |
”nop 只占一个时钟周期” | 延迟是 5 拍,对程序的代价才是 1 拍 |
| ”延迟槽由硬件填充” | 错。由编译器填 |
| ”效率 | 错。一定是算错了 |
| ”加速比上限是 | 错。上限是段数 |
| “超流水线能使 CPI 小于 1” | 错。IPC 仍是 1,它动的是 |
| “超长指令字对硬件要求高” | 反了。对编译器要求极高,硬件反而简单 |
| ”VLIW 二进制兼容性好” | 错。功能部件配置暴露进 ISA,换代要重编译 |
| ”乱序执行的提交也是乱序的” | 错。必须按序提交,为了精确异常 |
| ”寄存器重命名解决 RAW” | 错。解决 WAR 和 WAW |
| ”超标量属于 MIMD” | 错。仍是 SISD,只有一条指令流 |
| ”多核是时间并行” | 错。空间并行;时间并行只有流水线 |
| ”MISD 是一种实际存在的结构” | 错。不存在 |
| ”SIMD 复制了控制器” | 错。SIMD 共享控制器、复制运算部件 |
| ”硬件多线程复制了运算部件” | 错。复制线程状态,共享运算部件 |
| ”细粒度多线程同一拍有多个线程的指令” | 错。只有 SMT 才有 |
| ”粗粒度多线程切换开销小” | 错。要排空流水线 |
| ”超线程使性能翻倍” | 错。典型 15%~30%,且可能变慢 |
| ”超线程与操作系统和应用软件无关” | 错。OS 必须知道拓扑;单线程程序用不上 |
| ”逻辑核心数一定等于物理核心数” | 错。有 SMT 时是倍数 |
| ”双核是主板上有两个 CPU” | 错。那是双路 |
| ”双核靠超线程实现” | 错。两者正交 |
| ”多核各核心共享 L1 Cache” | 错。L1、L2 私有,L3 共享 |
| ”串行程序在多核上会自动变快” | 错。受 Amdahl 定律限制 |
| ”多核处理器通常采用偶数路 CPU” | 单位错位。多核该用”核”计数,“路”数的是芯片 |
| ”NUMA 各处理器有独立的地址空间” | 错。地址空间统一,只是访问时间不同 |
| ”监听协议适合大规模系统” | 错。总线是瓶颈,适合小规模 |
| ”写更新协议的总线流量更小” | 错。写失效才小 |
| ”Cache 一致性等同于存储一致性” | 错。一个管值,一个管序 |
| ”Cache 一致性能保证临界区互斥” | 错。需要原子指令 |
| ”消息传递系统需要 Cache 一致性协议” | 错。地址空间独立,不存在共享副本 |
链接
- 🏠 返回总览:计算机组成原理第 5 章:中央处理器总览
- 📜 原始提问档案:第 5 章 原始提问档案(本地资料)(32 条)
- 📖 上一章名词库:第 4 章名词库
- 📚 权威节号:王道 2026 教材目录