┌─────────────────────────────────────────┐
│ CPU寄存器 (Register) │ ← 速度最快、容量最小、成本最高
├─────────────────────────────────────────┤
│ Cache (高速缓存) │
├─────────────────────────────────────────┤
│ 主存储器 (主存/内存) │
├─────────────────────────────────────────┤
│ 辅助存储器 (磁盘、光盘等) │ ← 速度最慢、容量最大、成本最低
└─────────────────────────────────────────┘
三级存储体系:Cache - 主存 - 外存
程序局部性原理:
| 局部性类型 | 说明 | 例子 |
|---|---|---|
| 时间局部性 | 最近访问的项可能很快再次访问 | 循环中的变量 |
| 空间局部性 | 访问某个地址后,可能访问附近地址 | 顺序执行的指令、数组元素 |
| 指标 | 说明 | 单位 |
|---|---|---|
| 存储容量 | 能存储的数据总量 | B, KB, MB, GB |
| 访问时间 | 从发出访问请求到数据可用 | ns |
| 带宽 | 单位时间内数据传输量 | MB/s |
| 每位成本 | 成本/容量 | 越高层越高 |
存储原理:双稳态触发器
特点: - 存储稳定,无需刷新 - 访问速度快(1-2ns) - 集成度低,功耗大,成本高 - 常用作Cache
存储原理:电容存储电荷(电容充放电)
特点: - 需周期性刷新(每几ms刷新一次) - 访问速度较慢(50-100ns) - 集成度高,功耗低,成本低 - 常用作主存
| 方式 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 集中刷新 | 集中一段时间刷新所有行 | 无死区 | 可能产生长等待 |
| 分散刷新 | 分散到每个周期刷新一行 | 无死区 | 频繁刷新 |
| 异步刷新 | 分散刷新,但周期更长 | 综合 | 控制复杂 |
| 特性 | SRAM | DRAM |
|---|---|---|
| 存储原理 | 双稳态触发器 | 电容 |
| 刷新 | 不需要 | 需要 |
| 速度 | 快 | 慢 |
| 集成度 | 低 | 高 |
| 功耗 | 大 | 小 |
| 成本 | 高 | 低 |
| 用途 | Cache | 主存 |
容量 = 地址线条数 × 数据线条数 / 8
单位换算:
- 1KB = 2^10 B
- 1MB = 2^20 B
- 1GB = 2^30 B
例题:
某存储器有20根地址线,8根数据线,求容量。
容量 = 2^20 × 8 bit = 8M bit = 1MB
例:用8K×8位芯片组成8K×32位存储器
需要4片芯片
每片提供8位,共同组成32位数据总线
地址线共用,数据线分别接
例:用8K×8位芯片组成32K×8位存储器
需要4片芯片
数据线共用,地址线分时复用(A0-A12共用,A13-A14选择芯片)
片选信号区分不同芯片
为什么需要Cache? - CPU速度 >> 内存速度 - 利用局部性原理,将常用数据缓存到高速Cache
命中率(Hit Rate) = 命中次数 / 总访问次数
缺失率(Miss Rate) = 1 - 命中率
平均访问时间 = 命中时间 + 缺失率 × 缺失惩罚
例题:
Cache访问时间1ns,主存访问时间100ns,命中率95%,求平均访问时间。
平均访问时间 = 1ns + 0.05 × 100ns = 6ns
原理:主存块只能放到Cache的特定位置
Cache块号 = 主存块号 mod Cache总块数
特点: - 简单,成本低 - 冲突率高,命中率低
原理:主存块可以放到Cache的任意位置
特点: - 灵活,冲突率低 - 比较器复杂,成本高
原理:先分组,组内全相联
Cache组号 = 主存块号 mod Cache总组数
组内任何位置都可以放
特点: - 综合直接映像和全相联的优点 - 现代Cache常用(如2路、4路组相联)
| 方式 | 特点 | 优点 | 缺点 |
|---|---|---|---|
| 直接映像 | 主存块→固定Cache位置 | 简单 | 冲突率高 |
| 全相联 | 主存块→任意位置 | 灵活 | 比较器复杂 |
| 组相联 | 组内全相联 | 折中 | 实现较复杂 |
当Cache满时,需要替换某个块:
| 算法 | 说明 | 特点 |
|---|---|---|
| FIFO | 先进先出 | 简单,可能命中率不高 |
| LRU | 最近最少使用 ⭐ | 命中率高,常用 |
| LFU | 最不经常使用 | 可能换出常用块 |
| 随机 | 随机选择 | 最简单 |
| 策略 | 说明 | 优点 | 缺点 |
|---|---|---|---|
| Write Through | 同时写Cache和主存 | 一致性好 | 慢 |
| Write Back | 只写Cache,被替换时写回主存 | 快 | 需维护脏位 |
| 策略 | 说明 |
|---|---|
| Write Allocate | 先调入Cache,再写 |
| No-Write Allocate | 直接写主存,不调入Cache |
主存地址 = [Tag | Index | Offset]
- Tag:主存块标签(用于比较)
- Index:Cache索引(选择Cache块)
- Offset:块内偏移(选择字节)
例题:
直接映像Cache,容量16KB,块大小16B,32位主存地址
1. 块内偏移位数 = log2(16B) = 4位
2. Cache块数 = 16KB / 16B = 1024 = 2^10
3. Index位数 = 10位
4. Tag位数 = 32 - 10 - 4 = 18位
地址格式:[Tag(18位) | Index(10位) | Offset(4位)]
| 概念 | 说明 |
|---|---|
| 虚拟地址 | 程序使用的逻辑地址 |
| 物理地址 | 实际内存的物理地址 |
| 虚拟地址空间 | 程序能使用的逻辑地址范围 |
| 物理地址空间 | 实际内存的地址范围 |
原理:将虚拟空间和物理空间划分为固定大小的页
| 概念 | 说明 |
|---|---|
| 页 | 虚拟空间的固定大小的块 |
| 页框(Page Frame) | 物理空间的固定大小的块 |
| 页表 | 记录虚拟页到物理页框的映射 |
地址转换:
虚拟地址 = 虚拟页号(VPN) + 页内偏移(Offset)
物理地址 = 物理页框号(PPN) + 页内偏移(Offset)
例题1:
页大小4KB,逻辑地址空间4GB,问页表项数?
虚拟地址位数 = log2(4GB) = 32位
页内偏移位数 = log2(4KB) = 12位
虚拟页号位数 = 32 - 12 = 20位
页表项数 = 2^20 项
若每项4字节,页表大小 = 4MB
例题2:
页大小4KB,虚拟地址0x0035A028,物理页框号0x12345,求物理地址
页内偏移 = 0x0A028
虚拟页号 = 0x0035A
物理地址 = 0x12345000 + 0x0A028 = 0x1234FA028
TLB(Translation Lookaside Buffer): - Cache中的页表 - 存放最近使用的页表项 - 采用全相联映像 - 使用LRU替换算法
| 算法 | 说明 | 特点 |
|---|---|---|
| FIFO | 最早进入的页先换出 | 简单,可能抖动 |
| LRU | 最近最少使用的页先换出 ⭐ | 性能好,需硬件支持 |
| OPT | 最佳置换(未来最久不使用) | 理想化,无法实现 |
| Clock | 改进的FIFO | 综合 |
下列存储器中,需要周期性刷新的是( ) A. SRAM B. DRAM C. Cache D. ROM
直接映像Cache的特点是( ) A. 灵活度高 B. 冲突率低 C. 简单但冲突率高 D. 比较器复杂
Cache的写策略中,同时写Cache和主存的是( ) A. Write Back B. Write Through C. Write Allocate D. No-Write Allocate
虚拟存储器的主要功能是( ) A. 扩大地址空间 B. 提高运算速度 C. 降低成本 D. 简化结构
在页式管理中,将虚拟地址转换物理地址的是( ) A. TLB B. 页表 C. Cache D. 快表
程序局部性包括时间局部性和______。
SRAM和DRAM中,速度快但成本高的是______。
Cache的三种映像方式中,最灵活但实现最复杂的是______。
在页式管理中,用于记录虚拟页和物理页框映射关系的是______。
TLB的中文名称是______。
主存地址32位,Tag、Index、Offset各多少位?
页大小为4KB,页表项为4字节,求:
若采用两级页表,每级页表占用多少?
某系统Cache访问时间1ns,主存访问时间100ns,Cache命中率为97%,求平均访问时间。
简述SRAM和DRAM的区别。
说明Cache的三种映像方式及其优缺点。
解释Cache的LRU替换算法。
简述虚拟存储器的工作原理。
说明TLB的作用和工作原理。
第1题:
Cache块数 = 8KB / 32B = 256 = 2^8
块内偏移位数 = log2(32B) = 5位
Index位数 = log2(256) = 8位
Tag位数 = 32 - 8 - 5 = 19位
第2题:
虚拟页数 = 4GB / 4KB = 2^20 项
页表大小 = 2^20 × 4B = 4MB
两级页表:
每级页表可寻址 4KB / 4B = 2^10 项
需要 2^20 / 2^10 = 2^10 = 1024 个二级页表
每个一级页表项 = 4B
一级页表大小 = 2^10 × 4B = 4KB
第3题:
平均访问时间 = 1ns + (1 - 0.97) × 100ns
= 1ns + 0.03 × 100ns
= 1ns + 3ns
= 4ns