> ## Documentation Index
> Fetch the complete documentation index at: https://docs.0907world.cn/llms.txt
> Use this file to discover all available pages before exploring further.

# 第 6 章 中央处理器

> 整理 CPU 结构与寄存器、指令周期、数据通路、微程序控制器、异常与中断、指令流水线与多处理器。

本章按“CPU 结构与寄存器 → 指令周期 → 数据通路 → 微程序控制器 → 异常与中断 → 指令流水线 → 多处理器”整理。复习时先建立 CPU 的功能与组成框架，再重点掌握数据通路的微操作序列、流水线的性能计算与三类冒险。

> [!TIP]
>
> 计算题的两条主线：数据通路题用“能同时驱动总线吗”判断微操作并行性，流水线题用 $T=(k+n-1)\Delta t$ 及其派生公式解决。做题先画结构或列阶段，再逐项代入。

## CPU 的基本结构

> [accordion] CPU 的功能
>
> CPU 是计算机的核心部件，主要功能包括：
>
> * **指令控制**：取指令、分析指令、执行指令。
> * **操作控制**：产生控制信号，指挥各部件完成操作。
> * **时间控制**：控制各操作的执行时序。
> * **数据加工**：完成算术运算和逻辑运算。
> * **处理中断和异常**：响应外部中断，处理执行过程中出现的异常。

> [accordion] CPU 的基本组成
>
> CPU 主要由**运算器**和**控制器**两大部分组成。
>
> **运算器**
>
> * ALU：算术逻辑单元。
> * GPR：通用寄存器组。
> * ACC：累加寄存器。
> * PSW：程序状态字寄存器。
> * 暂存寄存器、移位器等。
>
> **控制器**
>
> * PC：程序计数器。
>
> * IR：指令寄存器。
>
> * ID：指令译码器。
>
> * CU：控制单元。
>
> * 时序与控制电路。
>
> > [!NOTE]
> >
> > 不同处理器的具体结构有所区别；MAR、MDR 等寄存器是否划归 CPU 内部，也取决于教材采用的模型。

> [accordion] 运算器与控制器的区别
>
> | 对比 | 运算器 | 控制器 |
> | - | - | - |
> | 核心任务 | 数据运算与加工 | 指令分析与控制 |
> | 典型部件 | ALU、寄存器组 | PC、IR、译码器、CU |
> | 主要作用 | 产生运算结果 | 产生控制信号 |
>
> 记忆：运算器负责“算”，控制器负责“指挥”。

## CPU 中的寄存器：用户可见与用户不可见

这里的“用户”指机器指令程序员，而不是普通计算机使用者。

> [accordion] 用户可见寄存器
>
> 程序员能够通过机器指令直接或间接访问的寄存器。
>
> | 类型 | 作用 | 典型示例 |
> | - | - | - |
> | 通用寄存器 | 保存操作数、地址及中间结果 | R0、R1、R2 |
> | 数据寄存器 | 保存数据 | 数据寄存器 |
> | 地址寄存器 | 保存操作数地址 | 基址寄存器、变址寄存器 |
> | 条件码寄存器 | 保存运算状态标志 | ZF、CF、OF、SF |
> | 程序计数器 PC | 保存下一条待执行指令的地址 | PC |
>
> > [!NOTE]
> >
> > 补充：PC 通常属于程序员可见的控制类寄存器，但某些体系结构对其访问方式有限制。教材的分类口径可能略有不同。

> [accordion] 用户不可见寄存器
>
> 主要供 CPU 内部控制和执行使用，通常不能被普通机器指令直接访问。
>
> | 寄存器 | 英文全称 | 作用 |
> | - | - | - |
> | MAR | Memory Address Register | 存放待访问的存储单元地址 |
> | MDR | Memory Data Register | 存放从存储器读出或准备写入的数据 |
> | IR | Instruction Register | 存放当前指令 |
> | 暂存寄存器 | Temporary Register | 暂存操作数或中间结果 |
> | 微地址寄存器 | Microaddress Register | 微程序控制器中存放下一条微指令的地址 |
>
> > [!WARNING]
> >
> > 注意：MAR、MDR、IR 通常是考研重点；PC 的可见性与分类要结合教材口径。

> [accordion] 必考辨析
>
> * **PC**：存放指令地址。
>
> * **IR**：存放指令内容。
>
> * **MAR**：存放访存地址。
>
> * **MDR**：存放访存数据。
>
> * **PSW**：保存程序状态及条件标志。
>
> > [!NOTE]
> >
> > 口诀：PC 找指令，IR 存指令；MAR 找数据，MDR 存数据。

## 指令周期：IF、ID、EX、MEM、WB

> [accordion] 五个阶段的含义
>
> * **IF（Instruction Fetch，取指）**：从指令存储器中取出指令，送入指令寄存器或流水线寄存器，并更新 PC。
>
> * **ID（Instruction Decode，译码）**：解析操作码，识别指令类型、源操作数和目的操作数，读取寄存器。
>
> * **EX（Execute，执行）**：进行算术逻辑运算、计算有效地址或判断分支条件等。
>
> * **MEM（Memory Access，访存）**：对需要访问数据存储器的指令进行读写操作。
>
> * **WB（Write Back，写回）**：将运算结果或读取的数据写回寄存器。
>
> > [!NOTE]
> >
> > IF、ID、EX、MEM、WB 是经典五段流水线的划分，并不等同于所有处理器的统一指令周期定义。不同指令可能不需要执行全部阶段。

> [accordion] 不同指令的执行过程
>
> | 指令类型 | IF | ID | EX | MEM | WB |
> | - | - | - | - | - | - |
> | `ADD R1,R2,R3` | 取指 | 译码、读寄存器 | 加法 | 通常不访存 | 写回 R1 |
> | `LOAD R1,0(R2)` | 取指 | 译码、读寄存器 | 计算有效地址 | 读取数据 | 写回 R1 |
> | `STORE R1,0(R2)` | 取指 | 译码、读寄存器 | 计算有效地址 | 写入数据 | 通常不需要 |
> | 条件分支 | 取指 | 译码、读操作数 | 判断条件、确定目标 | 通常不需要 | 通常不需要 |
>
> 这里使用的是典型 RISC 五段流水线模型。

> [accordion] 指令周期与时钟周期
>
> * **指令周期**：完成一条指令所需的时间。
> * **时钟周期**：处理器时钟的基本时间单位。
> * **机器周期**：传统模型中完成一个基本操作所需的时间。
>
> 一条指令可以包含多个时钟周期。在流水线中，多条指令的执行阶段可以重叠，因此不能简单地把五段流水线理解为一条指令必须连续占用五个时钟周期、其他指令只能等待。

## 数据通路的组成

数据通路是 CPU 内部用于数据传送、存储和运算的硬件路径。主要由组合逻辑元件、时序逻辑元件以及连接它们的总线和选择电路构成。

> [accordion] 组合逻辑元件
>
> 组合逻辑电路的输出只取决于当前输入，不具有独立的状态记忆功能。
>
> | 元件 | 作用 |
> | - | - |
> | ALU | 完成加、减、与、或、比较等运算 |
> | 多路选择器 MUX | 从多个输入中选择一个输出 |
> | 译码器 | 将编码输入转换为对应的控制输出 |
> | 加法器 | 完成加法，例如计算 PC 的下一地址 |
> | 三态门等 | 在满足使能条件时控制信号传送 |

> [accordion] 时序逻辑元件
>
> 时序逻辑电路的输出不仅与当前输入有关，还与存储的状态有关。
>
> | 元件 | 作用 |
> | - | - |
> | 触发器 | 存储一位二进制信息 |
> | 寄存器 | 存储一组二进制信息 |
> | 程序计数器 PC | 保存指令地址状态 |
> | 流水段寄存器 | 暂存各流水段之间的数据与控制信息 |
>
> > [!NOTE]
> >
> > 核心区别：组合逻辑负责计算，时序逻辑负责记忆状态。

> [accordion] 数据通路的组织与分类
>
> 常见分类方式：
>
> * 按数据传送方式：单总线、双总线、多总线结构。
> * 按功能组织：专用数据通路与共享数据通路。
> * 按处理方式：非流水数据通路与流水数据通路。
>
> 多总线或专用通路通常能够提供更多并行传送机会，但需要更多硬件资源和控制逻辑。

> [accordion] 单总线数据通路
>
> 单总线结构中，多个寄存器和功能部件共享一条内部总线：R1、R2、R3 等寄存器与 ALU、暂存寄存器都挂在 CPU 内部总线上，运算结果再通过数据通路写回寄存器。
>
> **单总线结构的特点**
>
> * 结构简单，硬件成本相对较低。
> * 同一时刻通常只能有一个数据源驱动总线。
> * 需要两个操作数的运算，可能需要分多次传送。
> * 暂存寄存器常用于保存先读出的操作数或中间结果。
> * 微操作的并行性受到总线资源限制。
>
> **典型微操作示例**
>
> 执行 $R_3 \leftarrow R_1 + R_2$，一种典型实现为：
>
> ```text theme={null}
> T ← R1
> T ← T + R2
> R3 ← T
> ```
>
> 这只是抽象的操作序列，实际需要几个时钟周期取决于 ALU 的输入连接方式、寄存器设置和控制信号设计。
>
> > [!WARNING]
> >
> > 做题关键：给定数据通路图后，先看哪些部件能够直接连接，再判断能否同时传送，而不是单纯根据运算表达式判断周期数。

## 微程序控制器

> [accordion] 基本概念
>
> 微程序控制器将机器指令的执行过程分解为一系列微操作，并用存放在控制存储器中的微指令控制这些操作。
>
> 基本工作过程：
>
> 1. 机器指令。
> 2. 微地址形成与控制存储器寻址。
> 3. 取出微指令。
> 4. 产生控制信号，执行微操作。
> 5. 形成下一条微指令地址。

> [accordion] 微程序控制器的主要组成
>
> | 部件 | 作用 |
> | - | - |
> | 控制存储器 CM | 存放微程序 |
> | 微地址寄存器 μPC / CAR | 保存下一条微指令的地址 |
> | 微指令寄存器 MIR / CBR | 保存当前微指令 |
> | 微地址形成部件 | 确定下一条微指令的地址 |
> | 微指令译码与控制逻辑 | 产生相应控制信号 |
>
> > [!NOTE]
> >
> > 不同教材或实现对寄存器的命名可能不同，复习时应以王道所用术语为准。

> [accordion] 微指令的组成
>
> 一条微指令通常包含两类信息：
>
> * **操作控制字段**：规定本条微指令要执行哪些微操作。
> * **顺序控制字段**：帮助确定下一条微指令的地址或转移方式。
>
> 微指令的执行不仅要产生控制信号，还要确定后续微指令的执行顺序。

> [accordion] 微指令编码方式
>
> | 方式 | 特点 |
> | - | - |
> | 直接编码 | 控制位直接对应微命令，逻辑直观，但微指令字可能较长 |
> | 字段直接编码 | 将互斥的微命令分组编码，减少所需位数 |
> | 字段间接编码 | 通过字段解释或译码产生控制信号，可进一步节省编码空间 |
>
> > [!NOTE]
> >
> > 考点：编码越紧凑，通常越需要译码；直接表示则更容易实现并行控制，但可能需要更长的微指令字。

> [accordion] 硬布线控制器与微程序控制器
>
> | 对比 | 硬布线控制器 | 微程序控制器 |
> | - | - | - |
> | 控制信号来源 | 组合逻辑与时序逻辑 | 微指令 |
> | 主要实现 | 固定逻辑电路 | 控制存储器及微地址控制 |
> | 典型优点 | 控制路径通常较快 | 控制流程相对灵活 |
> | 典型缺点 | 修改控制逻辑较困难 | 需要取微指令等额外开销 |
>
> > [!NOTE]
> >
> > 注意：两者的实际速度取决于具体设计，表中的比较是考研常见的基本结论。

## 异常和中断

> [accordion] 基本概念与分类
>
> 异常和中断都会使 CPU 暂时改变正常的指令执行流程，转而执行相应的处理程序。
>
> | 类型 | 产生原因 | 特点 | 示例 |
> | - | - | - | - |
> | 异常 | 指令执行过程中出现特殊事件 | 通常与当前指令同步 | 非法指令、除零、缺页 |
> | 中断 | 外部事件提出请求 | 通常与当前指令异步 | 定时器中断、外设中断 |
>
> 在传统 408 复习框架中，常将异常进一步区分为故障、自陷和终止。
>
> | 类型 | 特点 | 典型理解 |
> | - | - | - |
> | 故障（Fault） | 通常能够通过处理后重新执行引发异常的指令 | 缺页异常 |
> | 自陷（Trap） | 通常在指令执行完成后转入处理程序 | 调试断点、自陷指令 |
> | 终止（Abort） | 严重错误导致程序无法继续正常执行 | 严重硬件错误等 |
>
> > [!NOTE]
> >
> > 不同体系结构对异常类别的定义存在差异，考试时应优先遵循题目和教材的定义。

> [accordion] 中断处理过程
>
> 1. 发现中断请求。
> 2. 判断中断是否允许响应。
> 3. 保存断点和必要的现场信息。
> 4. 根据中断类型转入处理程序。
> 5. 执行中断服务程序。
> 6. 恢复现场并返回。
>
> 需要理解三个概念：
>
> * **断点**：被中断程序恢复执行时需要返回的位置。
>
> * **现场**：恢复程序运行所需的寄存器内容和状态信息。
>
> * **中断服务程序**：负责处理相应中断请求的程序。
>
> > [!WARNING]
> >
> > 注意：断点不一定简单等于当前 PC 的值。对于不同异常，返回地址可能指向引发异常的指令，也可能指向下一条指令。

> [accordion] 中断响应的条件
>
> 通常需要综合考虑：
>
> 1. 是否存在有效的中断请求。
>
> 2. 中断是否被屏蔽。
>
> 3. 当前 CPU 状态是否允许响应。
>
> 4. 中断优先级和当前处理状态是否满足要求。
>
> > [!NOTE]
> >
> > 中断响应与中断处理不是同一个概念。响应是 CPU 决定接受请求并转入处理流程，处理是执行具体的服务程序。

> [accordion] 中断与异常的易错点
>
> * 中断通常异步，异常通常同步。
> * 中断可能来自外设，异常通常由当前指令执行引起。
> * 中断响应可能受屏蔽位和优先级影响。
> * 异常处理后不一定都能恢复执行原程序。
> * 流水线中发生异常时，处理器可能需要冲刷错误路径上的指令，并维护精确异常状态。

## 指令流水线

> [accordion] 基本原理
>
> 指令流水线把指令执行过程划分为多个阶段，让不同指令在不同阶段重叠执行。
>
> 经典五段流水线为：
>
> $$
> IF \rightarrow ID \rightarrow EX \rightarrow MEM \rightarrow WB
> $$
>
> 例如，第一条指令在 ID 阶段时，第二条指令可以在 IF 阶段取指。如果没有冒险或资源冲突，多个阶段可以同时工作。
>
> > [!NOTE]
> >
> > 流水线的主要目标是提高指令吞吐率，而不是必然缩短单条指令的执行延迟。

> [accordion] 流水线性能计算
>
> 设：
>
> * $k$：流水段数；
> * $n$：指令条数；
> * $\Delta t$：每个流水段的时钟周期；
> * 忽略流水线寄存器开销、停顿和其他冒险。
>
> 流水线执行时间：
>
> $$
> T_{\text{流水}}=(k+n-1)\Delta t
> $$
>
> 非流水方式下，若每条指令都需要 $k$ 个等长阶段：
>
> $$
> T_{\text{非流水}}=nk\Delta t
> $$
>
> 加速比：
>
> $$
> S=\frac{nk}{k+n-1}
> $$
>
> 流水线效率：
>
> $$
> E=\frac{n}{k+n-1}
> $$
>
> 吞吐率：
>
> $$
> TP=\frac{n}{(k+n-1)\Delta t}
> $$
>
> 当指令数量足够大时，理想情况下：
>
> $$
> S\rightarrow k,\qquad E\rightarrow1
> $$

> [accordion] 计算示例
>
> 假设五段流水线，每段耗时 $2\text{ ns}$，执行 100 条指令，忽略一切额外开销。
>
> 流水线执行时间：
>
> $$
> T_{\text{流水}}=(5+100-1)\times2=208\text{ ns}
> $$
>
> 非流水执行时间：
>
> $$
> T_{\text{非流水}}=100\times5\times2=1000\text{ ns}
> $$
>
> 加速比：
>
> $$
> S=\frac{1000}{208}\approx4.81
> $$
>
> 流水线效率：
>
> $$
> E=\frac{100}{104}\approx96.15\%
> $$
>
> > [!NOTE]
> >
> > 结论：流水线段数为 5，并不意味着执行任意数量的指令都能获得 5 倍加速；指令数量较少时，流水线建立和排空的开销占比更大。

> [accordion] 三类流水线冒险
>
> | 冒险 | 原因 | 解决方法 |
> | - | - | - |
> | 结构冒险 | 多条指令竞争同一硬件资源 | 增加资源、分离资源、暂停 |
> | 数据冒险 | 指令之间存在数据依赖 | 数据转发、暂停、指令调度 |
> | 控制冒险 | 分支和跳转改变后续取指方向 | 分支预测、冲刷流水线等 |
>
> **数据冒险：RAW、WAR、WAW**
>
> * **RAW（写后读）**：后续指令需要读取前一条指令产生的数据。
> * **WAR（读后写）**：后续指令写入的位置与前一条指令要读取的位置相同。
> * **WAW（写后写）**：两条指令写入同一目的位置，写入顺序可能产生冲突。
>
> 经典按序五段流水线中，RAW 是最常见的重点；WAR、WAW 在乱序执行等处理器设计中更需要关注。

> [accordion] 流水线的其他考点
>
> * **流水线时钟周期**：通常由最慢的流水段及流水寄存器开销决定。
>
> * **流水线停顿**：某阶段等待条件满足，导致后续指令暂时无法推进。
>
> * **流水线冲刷**：丢弃错误路径或不应继续执行的指令。
>
> * **超标量**：一个时钟周期可以启动多条指令。
>
> * **超流水线**：将执行过程划分为更细的阶段，以提高工作频率为目标。
>
> > [!WARNING]
> >
> > 做题时一定要分清吞吐率、加速比、效率和单条指令延迟，不能把它们当作同一个指标。

## 多处理器的基本概念

> [accordion] 多处理器的含义
>
> 多处理器系统利用多个处理器或处理核心协同完成任务，以提高系统的并行处理能力。
>
> 需要区分：
>
> * **多核处理器**：一个处理器芯片中集成多个核心。
> * **多处理器系统**：系统中具有多个处理器，可以通过共享或互连结构协同工作。
> * **多线程**：通过多个执行线程组织程序，并不意味着一定有多个物理处理器。

> [accordion] 常见体系结构
>
> | 类型 | 基本特点 | 重点 |
> | - | - | - |
> | SMP：对称多处理 | 多个处理器地位相对对等，通常共享主存 | 共享资源、对称性 |
> | UMA：统一内存访问 | 各处理器访问主存不同位置的时间基本一致 | 访问延迟较均匀 |
> | NUMA：非统一内存访问 | 共享地址空间，但访问不同节点内存的代价可能不同 | 本地与远程内存访问 |
> | MPP：大规模并行处理 | 多个计算节点协同工作，常使用分布式内存 | 节点间通信和并行扩展 |
>
> > [!NOTE]
> >
> > 注意：SMP 与 UMA 经常一起出现，但两者强调的角度不同；NUMA 也可以支持共享地址空间。

> [accordion] 多处理器的性能问题
>
> 多处理器的性能并不等于处理器数量乘以单处理器性能，原因包括：
>
> * 程序中存在不能并行执行的部分。
> * 处理器之间需要通信和同步。
> * 多个处理器可能竞争内存带宽或共享资源。
> * 缓存一致性与数据依赖可能带来额外开销。
>
> 如果题目涉及阿姆达尔定律，设程序中不可并行的比例为 $f$，处理器数量为 $p$，理想加速比为：
>
> $$
> S(p)=\frac{1}{f+\frac{1-f}{p}}
> $$
>
> 当处理器数量趋于无穷大时：
>
> $$
> S_{\max}=\frac{1}{f}
> $$
>
> 即使增加大量处理器，只要程序中仍存在不可并行的部分，加速比就会受到限制。

## 本章高频考点与易错点

> [accordion] 高频考点
>
> 1. 运算器和控制器的组成与区别。
> 2. 用户可见与用户不可见寄存器的划分。
> 3. PC、IR、MAR、MDR、PSW 的作用。
> 4. IF、ID、EX、MEM、WB 的含义。
> 5. LOAD、STORE、ADD、分支指令的执行过程分析。
> 6. 组合逻辑与时序逻辑的区别。
> 7. 单总线结构及微操作序列。
> 8. 微程序控制器的组成、微指令格式与编码方式。
> 9. 硬布线控制器与微程序控制器的区别。
> 10. 异常与中断、断点与现场的区分，中断响应与处理流程。
> 11. 流水线执行时间、加速比、效率和吞吐率的计算。
> 12. 结构、数据、控制冒险及解决方法。
> 13. SMP、UMA、NUMA、MPP 的区分。
> 14. 并行加速比的限制。

> [accordion] 易错点
>
> 1. **PC 与 IR**：PC 存放指令地址，IR 存放指令内容。
> 2. **MAR 与 MDR**：MAR 存放访存地址，MDR 存放访存数据。
> 3. **PC 的可见性**：PC 常归为程序员可见的控制类寄存器，但具体口径依教材而定。
> 4. **指令周期不等于时钟周期**：一条指令可包含多个时钟周期，流水线下多条指令可以重叠。
> 5. **数据通路周期数**：要根据部件连接和控制信号判断，不能只凭运算表达式。
> 6. **中断与异常**：中断通常异步、来自外部；异常通常同步、由当前指令引起。
> 7. **断点与返回地址**：断点不一定等于当前 PC 的值。
> 8. **流水线性能**：分清吞吐率、加速比、效率和单条指令延迟。
> 9. **RAW / WAR / WAW**：按序五段流水线重点考 RAW，WAR、WAW 多见于乱序执行。
> 10. **多处理器加速比**：受不可并行部分限制，$S_{\max}=1/f$。

### 考前自查

> [!TIP]
>
> 按下列清单逐项自测，未掌握的条目回到对应小节复习。

> [accordion] 1. CPU 的基本结构
>
> * 掌握运算器和控制器的组成与区别。

> [accordion] 2. CPU 中的寄存器
>
> * 区分用户可见与用户不可见寄存器。
> * 掌握 PC、IR、MAR、MDR、PSW 的作用。

> [accordion] 3. 指令周期
>
> * 掌握 IF、ID、EX、MEM、WB 的含义。
> * 能分析 LOAD、STORE、ADD、分支指令的执行过程。

> [accordion] 4. 数据通路
>
> * 区分组合逻辑和时序逻辑。
> * 掌握单总线结构及微操作序列。

> [accordion] 5. 微程序控制器
>
> * 掌握主要组成、微指令格式与编码方式。
> * 区分硬布线控制器和微程序控制器。

> [accordion] 6. 异常和中断
>
> * 区分异常与中断、断点与现场。
> * 掌握中断响应与处理流程。

> [accordion] 7. 指令流水线
>
> * 会计算执行时间、加速比、效率和吞吐率。
> * 掌握结构、数据、控制冒险。

> [accordion] 8. 多处理器
>
> * 区分 SMP、UMA、NUMA、MPP。
> * 理解并行加速比的限制。

> [!NOTE]
>
> 建议复习优先级：数据通路与微操作、流水线计算、寄存器与指令周期、微程序控制器、异常与中断、多处理器概念。前三项尤其适合结合王道课后题进行专项训练。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.