# 第8章 CPU的结构和功能
> 📖 本章介绍CPU的功能、内部结构和指令执行过程。
> 🎯 重点理解CPU组成和指令周期
---
## 📋 本章目录
- [[#8.1 CPU的结构]]
- [[#8.2 指令周期]]
- [[#8.3 指令流水]]
- [[#8.4 中断系统]]
- [[#本章小结]]
---
## 8.1 CPU的结构
### 8.1.1 CPU的功能
> [!info] 核心功能
> CPU负责协调并控制计算机各部件执行程序的指令序列。
**基本功能**:
| 功能 | 说明 |
|------|------|
| **指令控制** | 控制程序的顺序执行 |
| **操作控制** | 产生完成每条指令所需的控制命令 |
| **时间控制** | 对各种操作加以时间上的控制 |
| **数据加工** | 对数据进行算术运算和逻辑运算 |
| **中断处理** | 处理异常情况和特殊请求 |
### 8.1.2 CPU结构框图
```mermaid
graph TB
subgraph "CPU内部结构"
subgraph "运算器"
ALU[ALU
算术逻辑单元]
ACC[ACC
累加寄存器]
PSW[PSW
程序状态字]
REG[通用寄存器组]
end
subgraph "控制器"
CU[CU
控制单元]
PC[PC
程序计数器]
IR[IR
指令寄存器]
MAR[MAR
存储器地址寄存器]
MDR[MDR
存储器数据寄存器]
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
```
### 8.1.3 CPU的寄存器
#### 用户可见寄存器
| 寄存器类型 | 功能 | 示例 |
|------------|------|------|
| **通用寄存器** | 可编程使用,存放操作数 | AX, BX, CX, DX |
| **数据寄存器** | 存放操作数 | 数据寄存器 |
| **地址寄存器** | 存放地址 | 基址寄存器、变址寄存器 |
| **条件码寄存器** | 存放运算结果状态 | Z(零)、C(进位)、S(符号)、O(溢出) |
#### 控制和状态寄存器
| 寄存器 | 功能 | 可见性 |
|--------|------|--------|
| **PC** | 程序计数器,存放现行指令地址 | 用户可见 |
| **IR** | 指令寄存器,存放当前指令 | 用户不可见 |
| **MAR** | 存储器地址寄存器 | 用户不可见 |
| **MDR** | 存储器数据寄存器 | 用户不可见 |
| **PSW** | 程序状态字寄存器 | 部分可见 |
**PC(程序计数器)**:
- 存放现行指令地址
- 具有计数功能(PC+1→PC)
- 遇到转移指令时可被修改
**IR(指令寄存器)**:
- 存放当前正在执行的指令
- 包含操作码和地址码
- 操作码送CU译码
**MAR(存储器地址寄存器)**:
- 存放将被访问的存储单元地址
- 位数与地址总线宽度相同
**MDR(存储器数据寄存器)**:
- 存放欲存入存储器的数据或从存储器读出的数据
- 位数与数据总线宽度相同
### 8.1.4 数据通路
```mermaid
graph TB
subgraph "CPU内部数据通路"
PC[PC] --> |"地址"| MAR[MAR]
MAR --> |"地址"| MEM[主存]
MEM --> |"数据"| MDR[MDR]
MDR --> |"指令"| IR[IR]
MDR --> |"数据"| ALU[ALU]
REG[通用寄存器] <--> |"数据"| ALU
ALU --> |"结果"| REG
ALU --> |"状态"| PSW[PSW]
end
```
---
## 8.2 指令周期
### 8.2.1 指令周期的基本概念
> [!info] 定义
> 指令周期是取出一条指令并执行这条指令的时间。
**组成**:
```mermaid
graph LR
A[指令周期] --> B[取指周期]
A --> C[执行周期]
B --> B1[取指令]
B --> B2[分析指令]
C --> C1[执行指令]
```
### 8.2.2 指令周期流程
```mermaid
graph TB
START[开始] --> FETCH[取指周期]
FETCH --> DECODE[分析指令]
DECODE --> EXEC[执行周期]
EXEC --> CHECK{中断?}
CHECK -->|是| INT[中断处理]
CHECK -->|否| NEXT[取下一条指令]
INT --> NEXT
NEXT --> FETCH
```
### 8.2.3 取指周期
**操作序列**:
1. PC → MAR(地址送MAR)
2. MAR → 地址总线 → 主存(地址送主存)
3. CU发读命令(控制信号)
4. 主存 → 数据总线 → MDR(指令送MDR)
5. MDR → IR(指令送IR)
6. PC + 1 → PC(程序计数器加1)
7. OP(IR) → CU(操作码送CU译码)
```mermaid
sequenceDiagram
participant PC
participant MAR
participant MEM as 主存
participant MDR
participant IR
participant CU
PC->>MAR: PC → MAR
MAR->>MEM: 地址送主存
CU->>MEM: 发读命令
MEM->>MDR: 指令送MDR
MDR->>IR: 指令送IR
Note over PC: PC+1 → PC
IR->>CU: 操作码送CU
```
### 8.2.4 执行周期
**不同指令的执行周期**:
| 指令类型 | 执行操作 |
|----------|----------|
| **取数指令** | MAR → 主存 → MDR → 寄存器 |
| **存数指令** | 寄存器 → MDR → 主存 |
| **加法指令** | 取操作数 → ALU运算 → 存结果 |
| **转移指令** | 修改PC值 |
| **空操作指令** | 无操作 |
### 8.2.5 指令周期的时序
```mermaid
graph TB
subgraph "指令周期时序"
T0[时钟周期T0] --> T1[时钟周期T1]
T1 --> T2[时钟周期T2]
T2 --> T3[时钟周期T3]
end
subgraph "取指周期"
T0 --> F1[PC → MAR]
F1 --> F2[读主存]
F2 --> F3[MDR → IR]
F3 --> F4[PC+1]
end
subgraph "执行周期"
T0 --> E1[分析指令]
E1 --> E2[取操作数]
E2 --> E3[执行操作]
E3 --> E4[存结果]
end
```
### 8.2.6 指令流水
> [!info] 概念
> 将指令执行过程分解为多个阶段,各阶段并行执行。
**流水线阶段**:
```mermaid
graph LR
subgraph "指令流水线"
IF[取指IF] --> ID[译码ID] --> EX[执行EX] --> MEM[访存MEM] --> WB[写回WB]
end
```
**流水线时序**:
```mermaid
gantt
title 指令流水线时序
dateFormat X
axisFormat %s
section 指令1
取指IF : 0, 1
译码ID : 1, 2
执行EX : 2, 3
访存MEM : 3, 4
写回WB : 4, 5
section 指令2
取指IF : 1, 2
译码ID : 2, 3
执行EX : 3, 4
访存MEM : 4, 5
写回WB : 5, 6
section 指令3
取指IF : 2, 3
译码ID : 3, 4
执行EX : 4, 5
访存MEM : 5, 6
写回WB : 6, 7
```
**加速比**:
$$S = \frac{非流水线时间}{流水线时间} = \frac{n \times k}{k + (n-1)}$$
- n:指令数
- k:流水线级数
**流水线冲突**:
| 冲突类型 | 原因 | 解决方法 |
|----------|------|----------|
| **结构冲突** | 硬件资源冲突 | 资源复制 |
| **数据冲突** | 数据依赖 | 数据前递、流水线暂停 |
| **控制冲突** | 分支指令 | 分支预测、延迟分支 |
---
## 8.3 中断系统
### 8.3.1 中断的作用
> [!info] 中断定义
> 中断是指CPU暂停现行程序,转去处理中断请求,处理完毕后返回原程序继续执行。
**主要作用**:
1. **实现CPU与IO设备并行工作**
2. **处理机器故障**
3. **实现人机交互**
4. **实现多道程序**
### 8.3.2 中断系统组成
```mermaid
graph TB
subgraph "中断系统"
subgraph "中断源"
IO[I/O设备]
TIMER[定时器]
FAULT[故障]
SOFT[软件中断]
end
subgraph "中断判优"
PRIO[优先级电路]
end
subgraph "中断响应"
MASK[中断屏蔽]
INTR[中断请求]
INTA[中断响应]
end
subgraph "中断处理"
SAVE[保存现场]
SERVICE[中断服务]
RESTORE[恢复现场]
end
end
IO --> INTR
TIMER --> INTR
FAULT --> INTR
SOFT --> INTR
INTR --> PRIO
PRIO --> MASK
MASK --> INTA
INTA --> SAVE
SAVE --> SERVICE
SERVICE --> RESTORE
```
### 8.3.3 中断处理过程
```mermaid
graph TB
START[中断请求] --> CHECK{允许中断?}
CHECK -->|否| WAIT[等待]
CHECK -->|是| SAVE1[保存断点]
SAVE1 --> SAVE2[保存现场]
SAVE2 --> EI[开中断]
EI --> SERVICE[执行中断服务程序]
SERVICE --> DI[关中断]
DI --> RESTORE1[恢复现场]
RESTORE1 --> RESTORE2[恢复断点]
RESTORE2 --> RET[中断返回]
RET --> END[继续执行]
```
### 8.3.4 中断判优
**优先级原则**:
1. 硬件故障 > 软件中断
2. 高速设备 > 低速设备
3. 输入 > 输出
4. 实时设备 > 普通设备
**判优方法**:
| 方法 | 原理 | 特点 |
|------|------|------|
| 硬件判优 | 优先级电路 | 速度快 |
| 软件判优 | 程序查询 | 灵活,速度慢 |
---
## 📝 本章小结
### 核心概念
1. **CPU功能**:指令控制、操作控制、时间控制、数据加工、中断处理
2. **CPU寄存器**:PC、IR、MAR、MDR、通用寄存器、PSW
3. **指令周期**:取指周期 + 执行周期
4. **指令流水**:提高并行度,加速指令执行
5. **中断系统**:实现CPU与IO并行,处理异常
### 关键公式
- **流水线加速比**:$S = \frac{n \times k}{k + (n-1)}$
### 重点图示
> [!summary] 必须掌握的内容
> 1. CPU内部结构框图
> 2. 指令周期流程图
> 3. 指令流水线时序图
> 4. 中断处理流程图
---
## 🧪 自测练习
### 概念题
1. 说明CPU的基本功能。
2. 比较CPU中各类寄存器的作用。
3. 解释指令流水线的原理和冲突。
### 分析题
1. 画出取指周期的时序图。
2. 设计一个简单的中断处理流程。
---
## 🔗 相关链接
- [[07_指令系统]] - 上一章
- [[09_控制单元功能]] - 下一章
- [[10_控制单元设计]] - 控制单元设计
- [[05_输入输出系统]] - 中断系统
---
*本章难度:⭐⭐⭐⭐⭐ 困难*
*重要程度:⭐⭐⭐⭐⭐ 核心重点*