第五章 存储器层次结构

5.1 存储器的层次结构

5.1.1 层次划分

┌─────────────────────────────────────────┐
│           CPU寄存器 (Register)          │ ← 速度最快、容量最小、成本最高
├─────────────────────────────────────────┤
│            Cache (高速缓存)              │
├─────────────────────────────────────────┤
│         主存储器 (主存/内存)             │
├─────────────────────────────────────────┤
│        辅助存储器 (磁盘、光盘等)          │ ← 速度最慢、容量最大、成本最低
└─────────────────────────────────────────┘

三级存储体系:Cache - 主存 - 外存

5.1.2 层次结构的原因

程序局部性原理

局部性类型 说明 例子
时间局部性 最近访问的项可能很快再次访问 循环中的变量
空间局部性 访问某个地址后,可能访问附近地址 顺序执行的指令、数组元素

5.1.3 存储器性能指标

指标 说明 单位
存储容量 能存储的数据总量 B, KB, MB, GB
访问时间 从发出访问请求到数据可用 ns
带宽 单位时间内数据传输量 MB/s
每位成本 成本/容量 越高层越高

5.2 SRAM和DRAM ⭐

5.2.1 SRAM(静态随机存取存储器)

存储原理:双稳态触发器

特点: - 存储稳定,无需刷新 - 访问速度快(1-2ns) - 集成度低,功耗大,成本高 - 常用作Cache

5.2.2 DRAM(动态随机存取存储器)

存储原理:电容存储电荷(电容充放电)

特点: - 需周期性刷新(每几ms刷新一次) - 访问速度较慢(50-100ns) - 集成度高,功耗低,成本低 - 常用作主存

5.2.3 刷新方式

方式 原理 优点 缺点
集中刷新 集中一段时间刷新所有行 无死区 可能产生长等待
分散刷新 分散到每个周期刷新一行 无死区 频繁刷新
异步刷新 分散刷新,但周期更长 综合 控制复杂

5.2.4 SRAM vs DRAM对比 ⭐

特性 SRAM DRAM
存储原理 双稳态触发器 电容
刷新 不需要 需要
速度
集成度
功耗
成本
用途 Cache 主存

5.3 主存与CPU的连接 ⭐

5.3.1 主存容量计算

容量 = 地址线条数 × 数据线条数 / 8

单位换算:
- 1KB = 2^10 B
- 1MB = 2^20 B
- 1GB = 2^30 B

例题

某存储器有20根地址线,8根数据线,求容量。

容量 = 2^20 × 8 bit = 8M bit = 1MB

5.3.2 存储芯片的扩展

位扩展(增加数据宽度)

例:用8K×8位芯片组成8K×32位存储器

需要4片芯片
每片提供8位,共同组成32位数据总线
地址线共用,数据线分别接

地址扩展(增加存储容量)

例:用8K×8位芯片组成32K×8位存储器

需要4片芯片
数据线共用,地址线分时复用(A0-A12共用,A13-A14选择芯片)
片选信号区分不同芯片

5.4 Cache存储器 ⭐⭐

5.4.1 Cache的基本概念

为什么需要Cache? - CPU速度 >> 内存速度 - 利用局部性原理,将常用数据缓存到高速Cache

5.4.2 Cache命中率

命中率(Hit Rate) = 命中次数 / 总访问次数
缺失率(Miss Rate) = 1 - 命中率

平均访问时间 = 命中时间 + 缺失率 × 缺失惩罚

例题

Cache访问时间1ns,主存访问时间100ns,命中率95%,求平均访问时间。

平均访问时间 = 1ns + 0.05 × 100ns = 6ns

5.4.3 Cache的映像方式 ⭐⭐

1. 直接映像(Direct Mapping)

原理:主存块只能放到Cache的特定位置

Cache块号 = 主存块号 mod Cache总块数

特点: - 简单,成本低 - 冲突率高,命中率低

2. 全相联映像(Fully Associative)

原理:主存块可以放到Cache的任意位置

特点: - 灵活,冲突率低 - 比较器复杂,成本高

3. 组相联映像(Set Associative)

原理:先分组,组内全相联

Cache组号 = 主存块号 mod Cache总组数
组内任何位置都可以放

特点: - 综合直接映像和全相联的优点 - 现代Cache常用(如2路、4路组相联)

5.4.4 三种映像方式对比 ⭐

方式 特点 优点 缺点
直接映像 主存块→固定Cache位置 简单 冲突率高
全相联 主存块→任意位置 灵活 比较器复杂
组相联 组内全相联 折中 实现较复杂

5.4.5 Cache的替换算法 ⭐

当Cache满时,需要替换某个块:

算法 说明 特点
FIFO 先进先出 简单,可能命中率不高
LRU 最近最少使用 ⭐ 命中率高,常用
LFU 最不经常使用 可能换出常用块
随机 随机选择 最简单

5.4.6 Cache的写策略 ⭐

写命中时

策略 说明 优点 缺点
Write Through 同时写Cache和主存 一致性好
Write Back 只写Cache,被替换时写回主存 需维护脏位

写不命中时

策略 说明
Write Allocate 先调入Cache,再写
No-Write Allocate 直接写主存,不调入Cache

5.4.7 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位)]

5.5 虚拟存储器 ⭐⭐

5.5.1 基本概念

概念 说明
虚拟地址 程序使用的逻辑地址
物理地址 实际内存的物理地址
虚拟地址空间 程序能使用的逻辑地址范围
物理地址空间 实际内存的地址范围

5.5.2 虚拟存储器的作用

  1. 扩大地址空间:程序可使用比物理内存更大的空间
  2. 内存保护:不同进程的地址空间隔离
  3. 简化内存管理:统一的地址空间

5.5.3 页式管理 ⭐⭐

原理:将虚拟空间和物理空间划分为固定大小的页

概念 说明
虚拟空间的固定大小的块
页框(Page Frame) 物理空间的固定大小的块
页表 记录虚拟页到物理页框的映射

地址转换

虚拟地址 = 虚拟页号(VPN) + 页内偏移(Offset)
物理地址 = 物理页框号(PPN) + 页内偏移(Offset)

5.5.4 页式管理例题 ⭐

例题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

5.5.5 快表(TLB)⭐

TLB(Translation Lookaside Buffer): - Cache中的页表 - 存放最近使用的页表项 - 采用全相联映像 - 使用LRU替换算法

5.5.6 页面置换算法

算法 说明 特点
FIFO 最早进入的页先换出 简单,可能抖动
LRU 最近最少使用的页先换出 ⭐ 性能好,需硬件支持
OPT 最佳置换(未来最久不使用) 理想化,无法实现
Clock 改进的FIFO 综合

章节练习题

一、选择题

  1. 下列存储器中,需要周期性刷新的是( ) A. SRAM B. DRAM C. Cache D. ROM

  2. 直接映像Cache的特点是( ) A. 灵活度高 B. 冲突率低 C. 简单但冲突率高 D. 比较器复杂

  3. Cache的写策略中,同时写Cache和主存的是( ) A. Write Back B. Write Through C. Write Allocate D. No-Write Allocate

  4. 虚拟存储器的主要功能是( ) A. 扩大地址空间 B. 提高运算速度 C. 降低成本 D. 简化结构

  5. 在页式管理中,将虚拟地址转换物理地址的是( ) A. TLB B. 页表 C. Cache D. 快表

二、填空题

  1. 程序局部性包括时间局部性和______。

  2. SRAM和DRAM中,速度快但成本高的是______。

  3. Cache的三种映像方式中,最灵活但实现最复杂的是______。

  4. 在页式管理中,用于记录虚拟页和物理页框映射关系的是______。

  5. TLB的中文名称是______。

三、计算题

  1. 某Cache容量为8KB,块大小为32B,采用直接映像,问:
  2. Cache有多少个块?
  3. 主存地址32位,Tag、Index、Offset各多少位?

  4. 页大小为4KB,页表项为4字节,求:

  5. 逻辑地址空间为4GB时,页表占多大空间?
  6. 若采用两级页表,每级页表占用多少?

  7. 某系统Cache访问时间1ns,主存访问时间100ns,Cache命中率为97%,求平均访问时间。

四、简答题

  1. 简述SRAM和DRAM的区别。

  2. 说明Cache的三种映像方式及其优缺点。

  3. 解释Cache的LRU替换算法。

  4. 简述虚拟存储器的工作原理。

  5. 说明TLB的作用和工作原理。


参考答案

选择题

  1. B 2. C 3. B 4. A 5. B

填空题

  1. 空间局部性
  2. SRAM
  3. 全相联映像
  4. 页表
  5. 快表(Translation Lookaside Buffer)

计算题

第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