第 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 拍
”延迟槽由硬件填充”错。由编译器填
”效率 可以大于 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 一致性协议”错。地址空间独立,不存在共享副本

链接