计算机组成原理
00:00
计算机组成原理:指令系统、CPU数据通路、控制器设计、存储体系与I/O系统
1. 计算机系统层次结构
计算机系统从底向上分为多个层次:
应用软件层
↓
系统软件层(操作系统、编译器)
↓
指令集架构层(ISA)
↓
微架构层(数据通路、控制器)
↓
数字逻辑层(逻辑门、寄存器)
↓
电路层(晶体管、连线)
指令集架构(ISA) 是软件和硬件之间的接口,定义了指令格式、寻址方式、寄存器组等。
2. 指令系统
2.1 指令格式
指令由操作码和操作数组成:
┌──────────┬──────────┬──────────┐
│ 操作码 │ 源操作数 │ 目标操作数 │
│ (opcode) │ (src) │ (dst) │
└──────────┴──────────┴──────────┘
指令字长分类:
| 类型 | 特点 | 代表 |
|---|---|---|
| 定长指令 | 所有指令长度相同 | RISC(MIPS、ARM) |
| 变长指令 | 指令长度可变 | CISC(x86) |
2.2 寻址方式
| 寻址方式 | 有效地址 | 特点 |
|---|---|---|
| 立即寻址 | 操作数在指令中 | 最快,操作数范围有限 |
| 直接寻址 | 简单,地址空间受限 | |
| 间接寻址 | 灵活,需两次访存 | |
| 寄存器寻址 | 最快,寄存器数量有限 | |
| 寄存器间接 | 灵活,一次访存 | |
| 偏移寻址 | 适合数组、结构体 | |
| 相对寻址 | 适合转移指令 |
2.3 RISC vs CISC
| 特性 | RISC | CISC |
|---|---|---|
| 指令数量 | 少(<200) | 多(>300) |
| 指令长度 | 定长 | 变长 |
| 寻址方式 | 少 | 多 |
| 执行周期 | 1个周期 | 多个周期 |
| 流水线 | 易实现 | 难实现 |
| 寄存器 | 多 | 少 |
| 代表 | MIPS、ARM、RISC-V | x86 |
3. CPU 数据通路
3.1 单周期数据通路
单周期处理器每条指令在一个时钟周期内完成:
PC → 指令存储器 → 译码 → 执行 → 数据存储器 → 写回
关键组件:
- PC(程序计数器):存储下一条指令地址
- 指令存储器:存放指令
- 寄存器文件:32个通用寄存器
- ALU:算术逻辑单元
- 数据存储器:读写数据
- 多路选择器:选择数据来源
时钟周期:取指 + 译码 + 执行 + 访存 + 写回中最慢路径的延迟。
3.2 多周期数据通路
将指令执行拆分为多个时钟周期:
| 阶段 | 操作 | 所需周期 |
|---|---|---|
| IF | 取指令 | 1 |
| ID | 指令译码/读寄存器 | 1 |
| EX | 执行/计算地址 | 1 |
| MEM | 访问存储器 | 0~2 |
| WB | 写回寄存器 | 0~1 |
优势:不同指令使用不同周期数,硬件资源可复用。
3.3 ALU 设计
ALU 支持的基本运算:
标志位:
- Z(Zero):结果为零
- N(Negative):结果为负
- C(Carry):进位
- V(Overflow):溢出
4. 控制器设计
4.1 硬布线控制器
通过组合逻辑电路直接产生控制信号:
优点:速度快 缺点:设计复杂,不易修改和扩展
4.2 微程序控制器
将控制信号编码为微指令,存储在控制存储器中:
指令操作码 → 微地址形成部件 → 控制存储器 → 微指令 → 控制信号
微指令格式:
- 水平型:每位对应一个控制信号,并行度高
- 垂直型:编码表示操作,指令短但需译码
优点:灵活,易于修改 缺点:速度较慢(需访问控制存储器)
5. 流水线技术
5.1 基本流水线
五级流水线:
IF → ID → EX → MEM → WB
IF → ID → EX → MEM → WB
IF → ID → EX → MEM → WB
理想情况下, 条指令执行时间:
其中 为流水线级数, 为时钟周期。
5.2 流水线冒险
数据冒险:后续指令需要前一条指令的结果。
解决方案:
- 数据转发(Forwarding/Bypassing)
- 插入气泡(Stall)
- 指令重排序(编译器优化)
控制冒险:分支指令改变执行流。
解决方案:
- 分支预测(静态/动态)
- 延迟分支
- 提前计算分支结果
结构冒险:多条指令同时访问同一硬件资源。
解决方案:
- 哈佛架构(指令/数据分离)
- 资源复制
5.3 分支预测
静态预测:
- 总是预测不跳转
- 总是预测跳转
- 根据方向预测(向后跳则跳转)
动态预测:
1-bit 预测器:记录上次分支结果
2-bit 预测器(饱和计数器):
强不跳转(00) → 弱不跳转(01) → 弱跳转(10) → 强跳转(11)
预测准确率:
6. 存储体系
6.1 存储层次结构
寄存器(~1ns, <1KB)
↓
L1 Cache(~1ns, 32~64KB)
↓
L2 Cache(~5ns, 256KB~1MB)
↓
L3 Cache(~10ns, 2~64MB)
↓
主存 DRAM(~50ns, 4~128GB)
↓
SSD(~100μs, 256GB~4TB)
↓
HDD(~10ms, 1~20TB)
6.2 Cache 映射方式
直接映射:
全相联映射:主存块可映射到任意 Cache 行。
组相联映射:
每组 路,称为 路组相联。
6.3 Cache 性能
命中率:
平均访问时间:
替换策略:LRU、FIFO、Random、LFU
写策略:
- 写直达(Write Through):同时写 Cache 和主存
- 写回(Write Back):只写 Cache,替换时写回主存
7. I/O 系统
7.1 I/O 控制方式
| 方式 | CPU 参与 | 数据传送 |
|---|---|---|
| 程序查询 | 全程参与 | CPU 逐字传送 |
| 中断方式 | 启动后等待中断 | CPU 逐字传送 |
| DMA | 仅初始化和结束 | DMA 控制器传送 |
| 通道方式 | 仅启动 | 通道处理器传送 |
7.2 DMA 传送
DMA(直接存储器存取)允许 I/O 设备直接与主存交换数据:
DMA 与 CPU 可能争用总线,解决方式:
- 周期窃取(Cycle Stealing)
- 交替访存
- CPU 暂停模式
7.3 中断系统
中断处理流程:
1. 中断请求 → 2. 中断判优 → 3. 中断响应
→ 4. 保存现场 → 5. 中断服务 → 6. 恢复现场 → 7. 中断返回
中断优先级通常:机器错误 > 访管 > 程序性中断 > 外部中断 > I/O 中断