9.7 KiB
9.7 KiB
第8章 CPU的结构和功能
📖 本章介绍CPU的功能、内部结构和指令执行过程。 🎯 重点理解CPU组成和指令周期
📋 本章目录
8.1 CPU的结构
8.1.1 CPU的功能
[!info] 核心功能 CPU负责协调并控制计算机各部件执行程序的指令序列。
基本功能:
| 功能 | 说明 |
|---|---|
| 指令控制 | 控制程序的顺序执行 |
| 操作控制 | 产生完成每条指令所需的控制命令 |
| 时间控制 | 对各种操作加以时间上的控制 |
| 数据加工 | 对数据进行算术运算和逻辑运算 |
| 中断处理 | 处理异常情况和特殊请求 |
8.1.2 CPU结构框图
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 数据通路
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] 定义 指令周期是取出一条指令并执行这条指令的时间。
组成:
graph LR
A[指令周期] --> B[取指周期]
A --> C[执行周期]
B --> B1[取指令]
B --> B2[分析指令]
C --> C1[执行指令]
8.2.2 指令周期流程
graph TB
START[开始] --> FETCH[取指周期]
FETCH --> DECODE[分析指令]
DECODE --> EXEC[执行周期]
EXEC --> CHECK{中断?}
CHECK -->|是| INT[中断处理]
CHECK -->|否| NEXT[取下一条指令]
INT --> NEXT
NEXT --> FETCH
8.2.3 取指周期
操作序列:
- PC → MAR(地址送MAR)
- MAR → 地址总线 → 主存(地址送主存)
- CU发读命令(控制信号)
- 主存 → 数据总线 → MDR(指令送MDR)
- MDR → IR(指令送IR)
- PC + 1 → PC(程序计数器加1)
- OP(IR) → CU(操作码送CU译码)
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 指令周期的时序
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] 概念 将指令执行过程分解为多个阶段,各阶段并行执行。
流水线阶段:
graph LR
subgraph "指令流水线"
IF[取指IF] --> ID[译码ID] --> EX[执行EX] --> MEM[访存MEM] --> WB[写回WB]
end
流水线时序:
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暂停现行程序,转去处理中断请求,处理完毕后返回原程序继续执行。
主要作用:
- 实现CPU与IO设备并行工作
- 处理机器故障
- 实现人机交互
- 实现多道程序
8.3.2 中断系统组成
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 中断处理过程
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 中断判优
优先级原则:
- 硬件故障 > 软件中断
- 高速设备 > 低速设备
- 输入 > 输出
- 实时设备 > 普通设备
判优方法:
| 方法 | 原理 | 特点 |
|---|---|---|
| 硬件判优 | 优先级电路 | 速度快 |
| 软件判优 | 程序查询 | 灵活,速度慢 |
📝 本章小结
核心概念
- CPU功能:指令控制、操作控制、时间控制、数据加工、中断处理
- CPU寄存器:PC、IR、MAR、MDR、通用寄存器、PSW
- 指令周期:取指周期 + 执行周期
- 指令流水:提高并行度,加速指令执行
- 中断系统:实现CPU与IO并行,处理异常
关键公式
- 流水线加速比:
S = \frac{n \times k}{k + (n-1)}
重点图示
[!summary] 必须掌握的内容
- CPU内部结构框图
- 指令周期流程图
- 指令流水线时序图
- 中断处理流程图
🧪 自测练习
概念题
- 说明CPU的基本功能。
- 比较CPU中各类寄存器的作用。
- 解释指令流水线的原理和冲突。
分析题
- 画出取指周期的时序图。
- 设计一个简单的中断处理流程。
🔗 相关链接
本章难度:⭐⭐⭐⭐⭐ 困难 重要程度:⭐⭐⭐⭐⭐ 核心重点