Files
obsidian/计算机组成原理/学习笔记/08_CPU结构与功能.md

423 lines
9.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第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<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
```
### 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_输入输出系统]] - 中断系统
---
*本章难度:⭐⭐⭐⭐⭐ 困难*
*重要程度:⭐⭐⭐⭐⭐ 核心重点*