# 第8章 CPU的结构和功能

> 📖 本章介绍CPU的功能、内部结构和指令执行过程。
> 🎯 重点理解CPU组成和指令周期
> ⚠️ **考试范围**：8.1、8.2、8.3（不含8.3.4和8.3.5）、8.4节不考。复习重点：例题8.1，课后习题8.1、8.2、8.11、8.12
> 🔥 **高频考点**：CPU功能与组成、指令周期/机器周期/时钟周期关系、流水线性能计算、流水线冲突分析

---

## 📋 本章目录

- [[#8.1 CPU的结构]]
- [[#8.2 指令周期]]
- [[#8.3 指令流水]]
- [[#本章小结]]
- [[#📖 真题与作业精选]]
- [[#例题与解析]]

---

## 8.1 CPU的结构

### 8.1.1 CPU的功能

> [!info] 核心功能
> CPU负责协调并控制计算机各部件执行程序的指令序列。

**基本功能**：

| 功能 | 说明 |
|------|------|
| **指令控制** | 控制程序的顺序执行 |
| **操作控制** | 产生完成每条指令所需的控制命令 |
| **时间控制** | 对各种操作加以时间上的控制 |
| **数据加工** | 对数据进行算术运算和逻辑运算 |
| **中断处理** | 处理异常情况和特殊请求 |

CPU就像公司的大脑：指令控制按顺序执行程序，像总经理按顺序安排工作；操作控制产生控制信号，像总经理发出工作指令；时间控制控制操作时序，像总经理控制工作进度；数据加工进行各种运算，像员工处理数据；中断处理处理紧急事件，像总经理处理紧急情况。

### 8.1.2 CPU结构框图

```mermaid
graph TB
    subgraph "CPU内部结构"
        subgraph "运算器"
            ALU[ALU<br/>算术逻辑单元]
            ACC[ACC<br/>累加寄存器]
            PSW[PSW<br/>程序状态字]
            REG[通用寄存器组]
        end

        subgraph "控制器"
            CU[CU<br/>控制单元]
            PC[PC<br/>程序计数器]
            IR[IR<br/>指令寄存器]
            MAR[MAR<br/>存储器地址寄存器]
            MDR[MDR<br/>存储器数据寄存器]
        end
    end

    ALU <--> |"数据"| REG
    ALU <--> |"数据"| ACC
    CU --> |"控制信号"| ALU
    CU --> |"控制信号"| REG
    PC --> |"地址"| MAR
    IR --> |"指令"| CU
    MAR <--> |"地址"| MEM[主存]
    MDR <--> |"数据"| MEM

    style ALU fill:#ff9999
    style CU fill:#99ccff
    style PC fill:#99ff99
    style IR fill:#ffcc99
```

CPU结构就像公司的组织架构：运算器中，ALU（算术逻辑单元）是生产车间负责加工产品，ACC（累加寄存器）是操作台临时存放加工中的产品，PSW（程序状态字）是状态指示灯显示当前工作状态，通用寄存器组是工具箱存放常用工具。控制器中，CU（控制单元）是总经理指挥整个公司运转，PC（程序计数器）是任务清单记录下一个要执行的任务，IR（指令寄存器）是当前任务单记录正在执行的任务，MAR（存储器地址寄存器）是仓库地址簿记录要访问的仓库位置，MDR（存储器数据寄存器）是传送带传送仓库和车间之间的物品。

当你执行一条加法指令时：PC记录下一条指令的地址，IR存放当前加法指令，CU译码并发出控制信号，ALU执行加法运算，ACC存放运算结果，PSW记录运算状态。

> [!tip] 考试高频题型
> 给出CPU结构图，要求识别各寄存器（A、B、C、D分别是什么）并描述取指/读数的数据通路。这是期中考试的经典题型，务必掌握图中每个部件的功能和数据流向。

### 8.1.3 CPU的寄存器

#### 用户可见寄存器

| 寄存器类型 | 功能 | 示例 |
|------------|------|------|
| **通用寄存器** | 可编程使用，存放操作数 | AX, BX, CX, DX |
| **数据寄存器** | 存放操作数 | 数据寄存器 |
| **地址寄存器** | 存放地址 | 基址寄存器、变址寄存器 |
| **条件码寄存器** | 存放运算结果状态 | Z（零）、C（进位）、S（符号）、O（溢出） |

通用寄存器像员工可以使用的工具，可编程使用存放各种数据；数据寄存器专门存放数据；地址寄存器专门存放地址；条件码寄存器记录运算结果的状态。

#### 控制和状态寄存器

| 寄存器 | 功能 | 可见性 |
|--------|------|--------|
| **PC** | 程序计数器，存放现行指令地址 | 用户可见 |
| **IR** | 指令寄存器，存放当前指令 | 用户不可见 |
| **MAR** | 存储器地址寄存器 | 用户不可见 |
| **MDR** | 存储器数据寄存器 | 用户不可见 |
| **PSW** | 程序状态字寄存器 | 部分可见 |

PC（程序计数器）记录下一个要执行的任务，执行完一个任务后自动指向下一个任务，遇到跳转指令时指向跳转目标。IR（指令寄存器）记录正在执行的任务，包含操作码（要做什么）和地址码（操作数在哪里），操作码送给CU译码。MAR（存储器地址寄存器）记录要访问的仓库位置，把地址送到仓库。MDR（存储器数据寄存器）传送仓库和车间之间的物品。PSW（程序状态字寄存器）显示当前工作状态，包括条件码、中断屏蔽位等。

> [!important] 数据通路（期中/期末常考）
> **取指数据通路**：PC → MAR → 主存 → MDR → IR（这是最基本的数据通路，必须熟记）
> **读数据通路**：X → MAR → 主存 → MDR → ALU → ACC（从内存读操作数参与运算）
> 这两条数据通路在考试中经常以识图题的形式出现，参见真题精选部分。

---

## 8.2 指令周期

### 8.2.1 指令周期的基本概念

> [!info] 定义
> 指令周期是指从取指令到执行完该指令所需的全部时间。

**指令周期的组成**：
- **取指周期**：取指令的时间
- **执行周期**：执行指令的时间

指令周期就像完成一个任务的时间：取指周期是从仓库取任务单的时间，执行周期是执行任务的时间。简单指令取指周期+执行周期，复杂指令取指周期+多个执行周期。

### 8.2.2 指令周期的时序

```mermaid
graph TB
    A[取指周期] --> B[执行周期]
    B --> C[取指周期]
    C --> D[执行周期]
    D --> E[...]
```

**时序信号**：
- **时钟周期**：CPU的最小时间单位
- **机器周期**：完成一个基本操作的时间
- **指令周期**：完成一条指令的时间

> [!tip] 三者关系（考试重点）
> **时钟周期**（最小）< **机器周期**（一个机器周期通常包含若干时钟周期）< **指令周期**（一条指令可能需要多个机器周期）
>
> 这三者的包含关系是选择题和填空题的高频考点。记住：一个指令周期包含若干机器周期，一个机器周期包含若干时钟周期。

时钟周期像CPU的最小工作时间单位，1GHz CPU的时钟周期是1ns；机器周期完成一个基本操作的时间，通常包含几个时钟周期；指令周期完成一条指令的时间，根据指令类型不同而不同。

### 8.2.3 指令执行过程

**取指周期**：
1. PC → MAR → 地址总线
2. CU发出读命令
3. 存储器 → 数据总线 → MDR
4. MDR → IR
5. PC + 1 → PC

**执行周期**：
1. IR的操作码 → CU译码
2. CU发出控制信号
3. 执行指令操作

取指周期像从仓库取任务单：把任务单地址送到仓库地址簿，告诉仓库要取任务单，仓库把任务单送到传送带，任务单送到当前任务单，任务清单指向下一个任务。执行周期像执行任务：总经理看任务单决定要做什么，总经理发出工作指令，员工执行任务。

当你执行一条加法指令时：取指周期从内存取加法指令到CPU，执行周期执行加法运算。

---

## 8.3 指令流水

### 8.3.1 流水线的基本概念

> [!info] 定义
> 流水线是指将指令执行过程分成多个阶段，多个指令可以同时在不同阶段执行。

**流水线的阶段**：
- **取指（IF）**：取指令
- **译码（ID）**：译码指令
- **执行（EX）**：执行指令
- **访存（MEM）**：访问存储器
- **写回（WB）**：写回结果

流水线就像工厂的生产线：取指从仓库取原材料，译码看图纸决定要做什么，执行加工产品，访存从仓库取需要的材料，写回把成品放到仓库。多个指令可以同时在不同阶段执行，提高吞吐率和效率。

### 8.3.2 流水线的性能

这是本章最重要的计算题考点，几乎每次考试都会出现。

**吞吐率**（单位时间完成的指令数）：
$$TP = \frac{n}{k + (n-1)}$$

其中 $n$ 为指令条数，$k$ 为流水线段数，每段假设时间相同为 $\Delta t$。当各段时间不同时，吞吐率受限于最慢的段：
$$TP_{max} = \frac{1}{\max(\Delta t_i)}$$

**加速比**（非流水线时间 / 流水线时间）：
$$S = \frac{nk}{k + (n-1)}$$

**效率**（流水线各段的利用率）：
$$E = \frac{S}{k} = \frac{n}{k + (n-1)}$$

流水线性能像工厂的生产效率：吞吐率是单位时间完成的任务数，加速比是流水线比非流水线快多少倍，效率是流水线的利用率。

假设流水线有4个阶段，执行100条指令：吞吐率100/(4+99)=0.97条/周期，加速比100×4/(4+99)=3.88，效率3.88/4=97%。

> [!warning] 不等段流水线计算（作业/考试原题）
> 当各段时间不相等时，完成时间 = 第一段总时间 + (n-1) x max(各段时间)，吞吐率以最慢段为瓶颈。详见真题精选第1题。

### 8.3.3 流水线冲突

流水线冲突分析是考试中分析题的常见考点，要能判断指令间存在哪种冲突以及如何解决。

**结构冲突**：硬件资源不足，两个指令同时访问同一个存储器，增加硬件资源解决。

**数据冲突**：指令之间有数据依赖，后面的指令需要前面指令的结果。解决方法：数据旁路（将结果直接转发给后续指令）或流水线暂停（插入气泡等待数据就绪）。

**控制冲突**：分支指令改变程序流，跳转指令导致流水线需要重新取指。解决方法：分支预测或延迟分支。

结构冲突像两个工人都要用同一个工具，多买几个工具解决；数据冲突像上一个产品还没做完下一个产品需要它的零件，等做完或先做其他产品解决；控制冲突像突然改变生产计划，提前预测或等确定后再生产解决。

> [!tip] 冲突判断技巧（考试高频）
> - 看两条指令是否同时使用同一硬件资源 → 结构冲突
> - 看后一条指令的源操作数是否是前一条指令的目的操作数 → 数据冲突（RAW/RAW相关）
> - 看是否出现条件转移或无条件跳转 → 控制冲突
> 一道题中可能同时出现多种冲突，注意逐一排查。参见真题精选第2题。

---

## 📝 本章小结

### 核心概念

1. **CPU功能**：指令控制、操作控制、时间控制、数据加工、中断处理
2. **CPU结构**：运算器、控制器、寄存器
3. **指令周期**：取指周期、执行周期
4. **指令流水**：提高CPU效率的重要技术
5. **流水线冲突**：结构冲突、数据冲突、控制冲突

### 关键术语

| 术语 | 英文 | 含义 |
|------|------|------|
| CPU | Central Processing Unit | 中央处理器 |
| ALU | Arithmetic Logic Unit | 算术逻辑单元 |
| CU | Control Unit | 控制单元 |
| PC | Program Counter | 程序计数器 |
| IR | Instruction Register | 指令寄存器 |
| MAR | Memory Address Register | 存储器地址寄存器 |
| MDR | Memory Data Register | 存储器数据寄存器 |
| 流水线 | Pipeline | 指令流水 |
| 吞吐率 | Throughput | 单位时间完成指令数 |
| 加速比 | Speedup | 流水线相对非流水线的提升 |

### 重点图示

> [!summary] 必须掌握的图
> 1. CPU内部结构图（识别各寄存器）
> 2. 取指/读数据通路图
> 3. 指令周期时序图
> 4. 流水线时空图
> 5. 流水线冲突示意图

---

## 📖 真题与作业精选

以下是来自作业、期中/期末考试和复习资料的精选题目，考试中出现过原题或类似题。

### 真题1：不等段流水线性能计算（作业三原题）

**题目**：某5段流水线各段时间分别为4ns、5ns、6ns、7ns、4ns，执行200条指令。求最大吞吐率、完成时间和效率。

**解答**：

1. **最大吞吐率**：受限于最慢的段（第4段，7ns），所以
   $$TP_{max} = \frac{1}{7\text{ns}}$$

2. **完成时间**：第一条指令经过全部5段的时间 + 后续199条指令每条等待一个最慢段的时间
   $$T = (4+5+6+7+4) + (200-1) \times 7 = 26 + 1393 = 1400\text{ns}$$

   也可以用另一种理解：流水线建立后每7ns出一条指令，第一条26ns完成，之后每隔7ns完成一条。总时间 = 26 + 199 x 7 = 1400ns。

3. **效率**：各段实际工作时间之和 / (段数 x 总时间)
   $$E = \frac{5 \times 200}{5 \times 200 + 4 \times 7} \times 100\% = \frac{1000}{1028} \times 100\% \approx 97.3\%$$

   分子是各段的有效工作量（200条指令 x 5个段），分母要加上流水线排空阶段末尾4个段各空闲了一个最慢段时间（4 x 7ns换算成的工作单元数）。

> [!tip] 解题要点
> 不等段流水线的关键是找到**最慢段**，它决定了流水线的实际吞吐率。这类题是作业和考试的高频计算题。

### 真题2：流水线冲突分析（作业三原题）

**题目**：分析以下指令序列中的相关与冲突：
```assembly
MUL R2, R1, R0    ; R2 = R1 x R0
JEQ X             ; 若Z=1则跳转到X
ADD R3, R4, R5    ; R3 = R4 + R5
```

**解答**：

- **MUL与JEQ**：存在**数据相关**。JEQ需要检测PSW中的Z（零）标志位，而该标志位由MUL指令的运算结果设置。MUL还没执行完，JEQ就可能需要读取Z标志，因此产生数据冲突。同时JEQ是条件转移指令，还会引起**控制冲突**（是否跳转不确定，流水线不知道下一条取哪里的指令）。

- **ADD与前面的指令**：ADD的源操作数R4、R5和目的操作数R3与MUL、JEQ均无数据依赖关系，因此ADD与前面的指令**不存在数据相关**。但JEQ引起的控制冲突仍会影响ADD是否应该被取指执行。

> [!tip] 冲突分析三步法
> 1. 先找数据依赖：后指令的源操作数是否等于前指令的目的操作数
> 2. 再找控制依赖：是否出现跳转/分支指令
> 3. 最后看结构依赖：是否同时访问同一硬件资源

### 真题3：CPU寄存器识别与数据通路（复习资料原题）

**题目**：某CPU内部结构图中标注了A、B、C、D四个部件，分别连接在数据通路上。请指出它们分别是什么寄存器，并描述取指和读数据的完整数据通路。

**解答**：

- **A = MDR**（存储器数据寄存器）：CPU与主存之间传送数据的缓冲
- **B = MAR**（存储器地址寄存器）：存放要访问的主存地址
- **C = IR**（指令寄存器）：存放当前正在执行的指令
- **D = PC**（程序计数器）：存放下一条要执行的指令地址

**取指数据通路**：PC → MAR → 主存（取指令）→ MDR → IR

具体过程：PC把指令地址送到MAR，MAR通过地址总线把地址送到主存，主存根据地址找到指令并通过数据总线送到MDR，MDR把指令送到IR，同时PC+1指向下一条指令。

**读数据通路**：X → MAR → 主存（读数据）→ MDR → ALU → ACC

具体过程：操作数地址X送到MAR，MAR把地址送到主存，主存找到数据送到MDR，MDR把数据送到ALU参与运算，运算结果送到ACC。

> [!important] 期中/期末曾考此题
> 识别CPU结构图中各部件是经典考试题型。关键记忆：MAR管地址、MDR管数据、IR存指令、PC存下条地址。

### 真题4：流水线效率分析与改进（复习资料原题）

**题目**：某流水线只有IF、ID、EX、WB四个阶段，各段时间为IF(2t)、ID(2t)、EX(t)、WB(t)。计算该流水线的效率，并提出改进方案。

**解答**：

1. **原流水线效率**：最慢段为2t（IF和ID），流水线实际吞吐率以2t为节拍。
   - 非流水线总时间 = 2t + 2t + t + t = 6t
   - 流水线时间 = 4段建立时间 + (n-1) x 2t = 6t + (n-1) x 2t
   - 当n足够大时，加速比 S = 6t / 2t = 3
   - 效率 E = S / k = 3 / 4 = 75%... 实际上因各段时间不等，效率约为 50%

   各段利用率：IF段和ID段持续工作（利用率100%），EX段只工作t但占2t的时间槽（利用率50%），WB段同样50%。平均效率 = (100% + 100% + 50% + 50%) / 4 = 75%。但由于EX和WB的闲置，整体效率降至约50%。

2. **改进方案**（二选一）：
   - **方案一：拆分慢段**——将ID拆成ID1(t)和ID2(t)两段，使所有段的时间都变为t，流水线均匀，效率提升到接近100%
   - **方案二：并联重复设置**——在ID段和EX段各设置两套硬件，交替使用，使吞吐率翻倍

> [!tip] 流水线改进的核心思路
> 效率低的根本原因是各段时间不均衡，导致快的段等待慢的段。改进方法要么拆分慢段使之均匀，要么并联重复设置瓶颈段。

---

## 例题与解析

### 例题1：CPU功能分析

**题目**：简述CPU的五大功能。

**答案**：

CPU的五大功能：指令控制控制程序的顺序执行，像总经理按顺序安排工作；操作控制产生完成每条指令所需的控制信号，像总经理发出工作指令；时间控制对各种操作加以时间上的控制，像总经理控制工作进度；数据加工对数据进行算术运算和逻辑运算，像员工处理数据；中断处理处理异常情况和特殊请求，像总经理处理紧急情况。

### 例题2：指令周期计算（参考课后习题8.1、8.2）

**题目**：某CPU主频为1GHz，取指周期为4个时钟周期，执行周期为6个时钟周期，求执行100条指令所需时间。

**答案**：

主频1GHz=10^9 Hz，时钟周期1/10^9 =1ns。
取指周期4个时钟周期=4ns，执行周期6个时钟周期=6ns。
单条指令时间=4+6=10ns。
100条指令时间=100 x 10ns=1000ns=1us。

> 这道题对应课后习题8.1和8.2的类型，计算指令周期时间是最基础的考题。

### 例题3：流水线性能计算（参考例题8.1）

**题目**：某CPU有4级流水线，执行100条指令，求吞吐率、加速比和效率。

**答案**：

流水线阶段数k=4，指令数n=100。
吞吐率TP=100/(4+99)=0.97条/周期。
加速比S=100 x 4/(4+99)=3.88。
效率E=3.88/4=97%。

> 这是例题8.1的标准题型，各段时间相等的情况。考试中可能变为不等段时间，参见真题精选第1题。

### 例题4：流水线冲突分析

**题目**：分析以下指令序列中的数据冲突：
```
ADD R1, R2, R3  ; R1 = R2 + R3
SUB R4, R1, R5  ; R4 = R1 - R5
```

**答案**：

ADD指令产生R1的值，SUB指令需要R1的值。如果ADD指令还没执行完SUB指令就需要R1的值，就会发生数据冲突（RAW相关——写后读冲突）。

解决方案：数据旁路（ADD指令执行完后直接把结果传给SUB指令，不用等写回阶段）或流水线暂停（插入气泡等ADD指令执行完后再执行SUB指令）。

### 例题5：中断系统设计

**题目**：设计一个简单的中断系统，支持4个中断源。

**答案**：

中断请求：4个中断请求触发器（IR0-IR3）保存中断请求信号。
中断屏蔽：4个中断屏蔽触发器（IM0-IM3）控制中断是否被屏蔽。
中断判优：优先级编码器，IR0>IR1>IR2>IR3。
中断响应：中断响应信号（INTA），CPU响应中断请求。
中断向量表：4个中断向量，存放中断服务程序入口地址。

---

## ⚡ 知识点速记卡

> 考前快速过一遍，30秒回忆整章核心
>
> **考试题型分布**：选择/填空（CPU寄存器识别、周期关系）、计算（流水线性能）、分析（流水线冲突判断）

**CPU五大功能**：指令控制（顺序执行）、操作控制（发控制信号）、时间控制（时序）、数据加工（ALU运算）、中断处理。

**CPU内部关键寄存器**：PC（下条指令地址）、IR（当前指令）、MAR（访存地址）、MDR（访存数据）、PSW（程序状态）、ACC（累加器）、通用寄存器组。考试常考：给出结构图让你标注各寄存器名称。

**指令周期层次关系**：指令周期（最大）> 机器周期 > 时钟周期（最小）。一个指令周期包含若干机器周期，一个机器周期包含若干时钟周期。这是选择题高频考点。

**取指数据通路**：PC → MAR → 主存 → MDR → IR，PC+1 → PC。读数据通路：X → MAR → 主存 → MDR → ALU → ACC。这两条通路务必熟记。

**流水线五阶段**：IF（取指）→ ID（译码）→ EX（执行）→ MEM（访存）→ WB（写回）。

**流水线公式（等段时间）**：完成时间 T = k + (n-1)（以时钟周期数计），吞吐率 TP = n/(k+n-1)，加速比 S = nk/(k+n-1)。n=100条、k=4级 → TP约等于0.97，S约等于3.88。

**流水线公式（不等段时间）**：吞吐率受限于最慢段，TP_max = 1/max(Delta_t_i)。完成时间 = 满载时间 + (n-1) x 最慢段时间。

**流水线三种冲突**：结构冲突（争硬件，加资源）、数据冲突（数据依赖，旁路或暂停）、控制冲突（分支跳转，预测或延迟）。考试中给出指令序列让你判断冲突类型是常见分析题。

**冲突判断口诀**：后读前写的数 → 数据冲突；跳转分支 → 控制冲突；同争一个硬件 → 结构冲突。

---

## 🔗 相关链接

- [[00_计算机组成原理学习指南]] - 返回主目录
- [[07_指令系统]] - 上一章
- [[09_控制单元功能]] - 下一章
- [[10_控制单元设计]] - 控制单元设计

---

*本章难度：⭐⭐⭐⭐⭐ 困难*
*重要程度：⭐⭐⭐⭐⭐ 重点*
*考试占比：约15%-20%，流水线计算几乎必考*
*复习建议：重点练习流水线性能计算（不等段时间）和冲突分析，结合课后习题8.11、8.12强化训练*
