跳转至

存储器层次结构

概述

存储器层次结构是计算机系统为了解决存储器速度、容量和成本之间的矛盾而采用的一种组织方式。通过将不同性能的存储器按层次组织,形成Cache-主存-辅存的三级结构。

存储器层次结构的基本原理

程序局部性原理

存储器层次结构有效的基础是程序局部性原理。

时间局部性

时间局部性: 如果一个存储单元被访问,那么不久后它可能再次被访问。

示例:

  • 循环体中的指令
  • 循环计数器
  • 累加变量

空间局部性

空间局部性: 如果一个存储单元被访问,那么它附近的单元也可能被访问。

示例:

  • 数组元素
  • 顺序执行的指令
  • 结构体字段

三级存储器结构

graph TB
    A[CPU] --> B[Cache<br/>高速缓冲存储器]
    B --> C[主存储器<br/>RAM]
    C --> D[辅助存储器<br/>磁盘/SSD]
    
    style A fill:#ff9999
    style B fill:#99ff99
    style C fill:#9999ff
    style D fill:#ffff99

各级存储器的特点

存储器 速度 容量 成本 介质
Cache 最快 最小 最高 SRAM
主存 中等 中等 中等 DRAM
辅存 最慢 最大 最低 磁盘/SSD

Cache存储器

Cache的基本原理

Cache的作用

Cache是位于CPU和主存之间的高速小容量存储器,用于存放当前最活跃的程序和数据。

工作原理:

  1. CPU访问存储器时,先访问Cache
  2. 如果命中,直接从Cache读取
  3. 如果未命中,从主存读取,并调入Cache

Cache的映射方式

1. 直接映射

直接映射: 每个主存块只能映射到Cache的一个特定行。

映射公式:

Text Only
Cache行号 = 主存块号 mod Cache行数

优点:

  • 硬件实现简单
  • 成本低

缺点:

  • 灵活性差
  • 冲突率高

2. 全相联映射

全相联映射: 每个主存块可以映射到Cache的任意一行。

优点:

  • 灵活性好
  • 冲突率低

缺点:

  • 硬件复杂
  • 成本高

3. 组相联映射

组相联映射: 每个主存块可以映射到Cache的一个特定组中的任意一行。

映射公式:

Text Only
Cache组号 = 主存块号 mod Cache组数

优点:

  • 兼顾灵活性和成本
  • 应用最广泛

Cache的替换算法

替换算法

当Cache满时,需要替换已有的块。

1. 随机替换 (RAND)

  • 随机选择一行替换
  • 实现简单
  • 性能不稳定

2. 先进先出 (FIFO)

  • 替换最早进入的块
  • 实现简单
  • 不考虑使用情况

3. 最近最少使用 (LRU)

LRU算法: 替换最近最少使用的块,性能最好。

实现方法:

  • 计数器法
  • 堆栈法
  • 对位矩阵法

4. 最不经常使用 (LFU)

  • 替换使用次数最少的块
  • 需要计数器
  • 考虑长期使用情况

Cache的写策略

1. 写回法 (Write Back)

写回法: 只写Cache,替换时才写回主存。

特点:

  • 写速度快
  • 需要修改位
  • 一致性问题

2. 写直达法 (Write Through)

写直达法: 同时写Cache和主存。

特点:

  • 一致性好
  • 写速度慢
  • 实现简单

Cache的性能指标

1. 命中率 (Hit Rate)

Text Only
命中率 = Cache命中次数 / 总访问次数

2. 平均访问时间

Text Only
平均访问时间 = 命中率 × Cache访问时间 + (1 - 命中率) × 主存访问时间

虚拟存储器

虚拟存储器的概念

虚拟存储器

虚拟存储器是主存和辅存的结合,为用户提供一个比实际主存大得多的存储空间。

特点:

  • 逻辑地址空间 > 物理地址空间
  • 按需调入
  • 对用户透明

虚拟存储器的实现方式

1. 页式虚拟存储器

页式管理: 将程序和主存划分为大小相等的页。

地址结构:

Text Only
逻辑地址 = 页号 + 页内地址
物理地址 = 页框号 + 页内地址

页表:

  • 页号 → 页框号
  • 有效位、修改位、访问位等

2. 段式虚拟存储器

段式管理: 按程序的逻辑结构分段。

特点:

  • 段长可变
  • 便于共享和保护
  • 产生碎片

3. 段页式虚拟存储器

段页式管理: 先分段,再分页。

特点:

  • 兼顾段式和页式的优点
  • 地址变换复杂
  • 应用广泛

页面置换算法

页面置换

当缺页时,如果主存已满,需要置换页面。

1. 最佳置换 (OPT)

  • 置换将来最长时间不用的页面
  • 理论最优,无法实现
  • 用于性能评估

2. 先进先出 (FIFO)

  • 置换最早进入的页面
  • 实现简单
  • 可能出现Belady异常

3. 最近最少使用 (LRU)

LRU算法: 置换最近最少使用的页面,性能接近OPT。

实现方法:

  • 计数器法
  • 堆栈法
  • 近似LRU

4. 时钟置换 (Clock)

  • 循环检查各页的访问位
  • 访问位为0则置换
  • 实现简单,性能较好

参考资料