存储系统

中优先级
存储器的概念经常在选择题中考察,需要了解常见存储器的类型和特点,在选择题中看见相关名词能够辨识选出正确答案。

存储系统的层次结构

存储系统是计算机体系结构的核心组成部分之一,用于存储程序指令和数据,以支持处理器的运算需求。为了平衡速度、容量和成本,现代计算机采用了分层存储体系结构,从最快速但容量有限的 寄存器 到容量大但速度较慢的辅助存储设备,形成了存储层次结构。

Regs
L1 cache
(SRAM)
L2 cache
(SRAM)
L3 cache
(SRAM)
Main Memory
(DRAM)
Local secondary storage
(local disks)
Remote secondary storage
(distributed file systems, web servers)
Smaller,
faster
Larger,
slower

如上图所示,越靠近金字塔上层的容量越小但速度越快,越靠近金字塔下层的容量越大但速度越慢。计算机的存储系统包含以下层次:

  1. 寄存器(Registers)
    • 寄存器是位于处理器内部的最快速存储单元。
    • 它们提供极快的数据访问速度,但其容量非常有限。
    • 典型访问延迟:约 0.2~1 ns(通常只需 1 个 CPU 时钟周期)。
  2. 一级缓存(L1 Cache)
    • L1 缓存位于处理器内部,比寄存器空间稍大,速度比 L2 和 L3 Cache 更快。
    • 它通常分为 数据缓存(用于存储数据)和 指令缓存(用于存储指令)。
    • 典型访问延迟:约 0.5~1.5 ns(约 2~5 个 CPU 时钟周期)。
  3. 二级缓存(L2 Cache)
    • L2 缓存比 L1 缓存大,并且位于处理器和主内存之间。
    • 它的速度比 L1 慢,但比主内存快。
    • 典型访问延迟:约 2~5 ns(约 10~20 个 CPU 时钟周期)。
  4. 三级缓存(L3 Cache)
    • 在某些系统中,还有 L3 缓存,这是一种更大但速度更慢的缓存。
    • 它位于 L2 缓存和主内存之间,旨在进一步减少对主内存的访问。
    • 多个 CPU 核心通常共享同一个 L3 Cache。
    • 典型访问延迟:约 10~20 ns(约 30~70 个 CPU 时钟周期)。
  5. 主存(RAM)
    • 就是我们常说的内存,比缓存慢,但比硬盘快得多,并且容量比缓存大。
    • 主存 用于存储正在运行的程序和当前使用的数据。
    • 典型访问延迟:约 50~100 ns(约 150~300 个 CPU 时钟周期)。
  6. 辅助存储(如硬盘驱动器或固态驱动器)
    • 辅助存储设备提供大量的永久存储。
    • RAM 相比,这些设备访问速度较慢,但能够存储更多的数据,并且在断电时不会丢失数据。
    • 机械硬盘(HDD)和 固态硬盘(SSD)是常见的辅助存储设备。
    • 典型访问延迟
      • NVMe SSD:约 20~100 μs(微秒)
      • SATA SSD:约 50~200 μs
      • 机械硬盘(HDD):约 5~15 ms(毫秒)

可以发现,相邻两层存储器之间通常都存在 数倍甚至数十倍 的速度差异。例如,从 L3 Cache 访问数据只需十几纳秒,而访问 主存 往往需要几十纳秒;如果数据需要从 SSDHDD 中读取,则访问时间又会增加到微秒甚至毫秒级,相比 Cache 慢了数千到数百万倍。因此,如果 CPU 每次访问数据都直接访问主存或磁盘,将会有大量时间处于等待状态,计算能力无法得到充分发挥。

存储器层次结构的主要思想是:上一层存储器作为下一层存储器的高速缓存。当 CPU 要读取某个数据时,会优先在速度最快的存储器中查找:

  • 先访问 Cache
  • 如果 Cache 中没有(发生 Cache Miss),则访问 主存
  • 如果 主存 中也没有,则访问磁盘,此时数据会先从磁盘调入 主存,再从 主存 调入 Cache,最后供 CPU 使用。

Cache—主存层 主要解决 CPU 和主存之间巨大的速度差异问题。主存和 Cache 之间的数据调动完全由 硬件自动完成,程序员通常无需关心数据何时进入或离开 Cache

主存—辅存层 主要解决存储系统容量不足的问题。主存和 辅存 之间的数据调动由 硬件和操作系统共同完成(例如虚拟内存、分页机制),对于应用程序员来说也是透明的。程序只需按照统一的地址空间访问数据,而无需关心数据当前位于主存还是磁盘中。

RAM

半导体随机存储器的英文为 Semiconductor Random-Access MemoryRAM )。

RAM · Random-Access Memory 随机存储器半导体 · 随机访问 · 易失性 · 运行时存储内存条 (DIMM) 示意DRAMDRAMDRAMDRAMDRAMDRAM⚡ 随机访问 · 恒定时延易失 · 掉电数据丢失「随机访问」是什么?0x000x010x020x030x040x050x06直接寻址对比:磁带/磁盘 顺序访问必须按顺序逐个读取RAM 的两大分类SRAMStatic RAM · 静态随机存储器• 存储单元:4-6 个晶体管 (触发器)• 速度:• 功耗:静态低• 成本高 · 集成度低 · 容量小• 无需刷新用途CPU Cache寄存器DRAMDynamic RAM · 动态随机存储器• 存储单元:1 晶体管 + 1 电容 (1T1C)• 速度:较慢• 功耗:刷新带来动态功耗• 成本低 · 集成度高 · 容量大需周期性刷新(电容漏电)用途主内存显存

首先说一下这个名词中的几个部分:

  • 半导体:这种存储器使用半导体材料(如硅)制成。晶体管是构成半导体存储器的基本组成部分。
  • 随机:随机的意思是随机访问,意味着可以以几乎恒定的时间访问存储器中的任意位置,它与其他存储技术(如磁盘或磁带)不同,后者需要按顺序访问数据。

随机存储器主要分为 SRAMDRAM 两种。

SRAM

SRAM(Static RAM,静态随机存取存储器)使用触发器(通常由 4-6 个晶体管组成)构成存储器的基本存储单元,存储每个比特的数据,如下图所示:

VDDM6M5M2M4M3M1WLBLBLQQ

只要电源持续供应,数据无需刷新即可保持稳定。

SRAM 通过将触发器组织成二维阵列构成存储器,每行连接一个字线(Word Line),控制该行所有单元的访问。
每列连接一对位线(Bit Line),用于传输数据。

SRAM 主要用于 CPU 缓存(L1/L2/L3 Cache)、寄存器、嵌入式系统中的小型高速存储。

DRAM

DRAM(Dynamic RAM,动态随机存储器)使用 1 个晶体管(Transistor)1 个电容器(Capacitor)(简称 1T1C)构成存储器的基本存储单元,每个存储单元存储 1 bit 数据。

WL
BL
T1
STORE
C

SRAM 使用触发器保存数据不同,DRAM 利用电容中的电荷表示数据。由于电容会随着时间不断漏电,因此数据不能永久保存,需要定期 刷新(Refresh) 才能恢复电荷、防止数据丢失。

DRAM 和 SRAM 在宏观上都采用 二维存储阵列 组织数据,通过 字线(Word Line)位线(Bit Line) 实现随机访问,主要区别在于它们采用的 基本存储单元 不同。

ARASCASDataR/W

DRAM 中:

  • 每个 存储单元(Cell) 存储 1 bit 数据。
  • 电容器(Capacitor) 用来存储电荷:
    • 有电荷通常表示 1
    • 无电荷通常表示 0
  • 晶体管(Transistor) 相当于一个开关,由 字线(Word Line) 控制。当字线被选中时,该单元即可与 位线(Bit Line) 相连,实现读写操作。

DRAM 以 高集成度、低成本、大容量 著称,因此主要用于计算机 主内存(RAM)、显卡显存等大容量存储设备。

行列地址复用

绝大多数 DRAM 芯片都采用 行列地址复用(Address Multiplexing) 技术,以减少芯片所需的地址引脚数量。

DRAM 内部的存储单元按照二维阵列组织:

  • 行(Row) 对应 字线(Word Line)
  • 列(Column) 对应 位线(Bit Line)

如果一次性输入完整地址,则需要:

\[ \log_2(\text{行数})+\log_2(\text{列数}) \]

根地址线。

例如,一个 64K × 4 bit 的 DRAM 芯片,如果内部组织为 256 行 × 256 列,则需要:

  • 行地址:8 位
  • 列地址:8 位

16 根地址线

但在早期 DRAM 芯片中,封装引脚数量十分有限,无法提供如此多的地址引脚,因此采用了 行列地址复用 技术。

DRAM 行列地址复用 (Address Multiplexing)同一组地址引脚分两次传送:先送行地址 (RAS),再送列地址 (CAS)CPU 地址A0 ~ A1112 根地址线分时复用① RAS:行地址② CAS:列地址时序示意RASCASADDRRowColDRAM 芯片行地址锁存器Row Address Latch列地址锁存器Column Address Latch译码器列译码器 / 灵敏放大器cell位线 (Bit Line) →字线 ↓选中行A[11:0]引脚对比不复用12 行 + 12 列= 24 根地址线复用同一组地址线分时= 12 根地址线引脚数量减半降低封装成本与面积SRAM 通常不采用行列复用:容量小、追求速度,地址一次性给出直接译码。
DRAM 行列复用实例

假设有一个 16M × 4 bit 的 DRAM 芯片:

  • 存储单元总数:\(16M \times 4 = 64M\) bit;
  • 内部组织为 4K 行 × 4K 列(\(4096 \times 4096 = 16M\))。

因此:

  • 行地址需要 12 位
  • 列地址需要 12 位

如果不采用地址复用,需要 24 根地址线;采用行列地址复用后,只需 12 根地址线 即可,大大减少了芯片引脚数量。

DRAM 外部仅提供:

\[ \log_2(\max(\text{行数},\text{列数})) \]

根地址线。

地址需要分两次送入:

  1. 首先送入 行地址,由 RAS(Row Address Strobe) 信号锁存;
  2. 然后送入 列地址,由 CAS(Column Address Strobe) 信号锁存。

相比之下,SRAM 容量通常较小,引脚数量能够满足需求,因此一般不采用行列地址复用,而是一次性输入完整地址并直接完成译码,从而获得更低的访问延迟。

刷新机制

由于 DRAM 使用 电容器 保存数据,而电容会不断漏电,因此即使 CPU 完全没有访问某个存储单元,其中保存的数据也会随着时间逐渐消失。

为了保证数据正确,内存控制器(Memory Controller) 必须在规定时间内(通常几十毫秒内)保证 每一行 至少被刷新一次。所谓 刷新(Refresh),本质上就是重新恢复存储单元中的电荷,使其能够继续保存数据。

由于 DRAM 的存储阵列按 行(Row)列(Column) 组织,而同一行上的所有存储单元共享一条 字线(Word Line),因此 刷新也是按行进行的,一次刷新会恢复整行存储单元中的电荷,而不是逐个存储单元刷新。

刷新期间,被刷新的存储体不能正常提供读写服务,因此不同的刷新策略会直接影响 DRAM 的访问性能。

刷新方式

DRAM 常见的刷新方式包括:

  • 集中刷新(Burst Refresh):暂停正常访问,在短时间内连续刷新所有行。控制简单,但刷新期间 CPU 必须等待,因此会产生较长的访问停顿。
  • 分散刷新(Distributed Refresh):将刷新操作均匀分散到整个刷新周期中,与正常访问交替进行。每次停顿时间较短,但刷新控制逻辑更加复杂。
  • 异步刷新(Asynchronous Refresh):由内存控制器根据系统状态选择合适时机触发刷新,灵活性最高,但实现也最复杂。

三种刷新方式在时间轴上的 CPU 等待窗口对比如下图所示:

DRAM 三种刷新方式 · 时间轴对比CPU 访问刷新操作CPU 等待 (无法访问)① 集中刷新所有行集中在死区刷新,CPU 长时间等待集中刷新 (CPU 死区)② 分散刷新每个存取周期 = 访问 + 一次刷新,无死区但周期翻倍③ 异步刷新每 (T_ref / N行) 时间触发一次单行刷新,CPU 等待窗口最小单行刷新时间 →

它们的特点如下:

特征集中刷新分散刷新异步刷新
刷新方式连续刷新所有行将刷新均匀分散由控制器选择刷新时机
CPU 等待等待时间长,但次数少每次等待时间短,但次数多根据系统状态动态调整
对性能影响刷新期间无法访问 DRAM对正常访问影响较小一般影响最小
控制复杂度
灵活性
SRAM 和 DRAM 对比
特性DRAMSRAM
存储单元1 个晶体管 + 1 个电容器(1T1C)4~6 个晶体管(触发器)
数据保持方式电容存储电荷触发器保持状态
是否需要刷新需要定期刷新无需刷新
访问速度较慢更快
集成度较低
成本
容量
典型应用主存、显存CPU Cache、寄存器

Flash 存储

Flash 存储器是一种 非易失性 的电子存储设备,它利用半导体技术来存储数据。通常用于长期数据存储,如 USB 闪存驱动器、固态硬盘(SSD)和移动设备的内部存储。它在读取速度上比 RAM 慢,但优于传统的硬盘驱动器(HDD)。

Flash 存储器 · Floating-Gate 浮栅晶体管非易失性 · 电擦写 · 用于 SSD / U盘 / 手机存储浮栅晶体管 (Floating Gate MOSFET)CGControl Gate · 控制栅Floating Gate · 浮栅e⁻e⁻e⁻e⁻隧穿氧化层Source源极 (S)Drain漏极 (D)P-Substrate (硅衬底)隧穿e⁻有电荷表示 逻辑 0无电荷表示 逻辑 1三种基本操作读 Read检测阈值电压速度快⚡ 单元级写 Program注入电子到浮栅1 → 0页级写入擦 Erase抽走电子,全置 10 → 1块级擦除两大类型NAND Flash串联结构 · 密度高顺序读快 · 容量大SSD · U盘 · SD卡NOR Flash并联结构 · 可随机读支持就地执行 (XIP)BIOS · 嵌入式固件速度 / 性能定位RAM最快Flash中等(比 HDD 快得多)HDD最慢优势:非易失 · 无机械结构 · 抗震 · 低功耗 · 体积小 · 速度远超机械硬盘

Flash 存储器使用电子方式来擦写和重新编程存储单元。这意味着可以通过电信号快速擦除和写入数据。数据存储在小型存储单元中,每个单元由浮动门晶体管组成。这些晶体管可以保持其充电状态,从而代表不同的数据位。

ROM

ROM(Read-Only Memory)是一种 非易失性 存储设备,主要用于永久性地存储数据。

ROM · Read-Only Memory 只读存储器非易失性 · 主要用于读取 · 存放固件与启动程序ROMBIOS / Firmware非易失性以读为主断电后数据保留断电数据仍在写入受限/不可ROM vs RAMROMRAM易失性否(持久)是(掉电丢失)读写主要只读可随机读写典型用途固件 / BIOS运行时数据容量较小较大ROM 家族 (Evolution)MMROM掩膜式出厂固化PPROM一次可编程熔丝烧写EEPROM紫外线擦除可重复编程EEEEPROM电擦写字节级可改FFlash块擦写SSD / U盘典型场景 · 开机加电后CPU 加电从 ROM 读取 BIOS硬件自检 / 引导加载操作系统至 RAM

ROM 主要用于读取操作。虽然早期的 ROM 在制造过程中就已经被编程,不能修改,但现代的 ROM(如 EPROM 和 Flash 存储器)可以被重新编程。

ROM 常用于存储固件,这是一种软件程序,直接嵌入在硬件设备中,用于控制设备的基本操作。例如,BIOS(基本输入输出系统)通常存储在 ROM 中。

注意一下 ROMRAM 的对比如下:

特征RAM(随机存取存储器)ROM(只读存储器)
易失性是(断电时数据丧失)否(数据在断电时不丧失)
读写能力可以被随机读取和写入通常只读,只读数据不能随机写入
用途用于存储正在运行的程序、操作系统和数据用于存储固定程序代码、固件、启动程序等
存储容量通常较大,以支持多个程序同时运行通常较小,主要用于存储核心系统和固件
数据持续性不持久,数据在断电时丧失持久,数据在断电时不丧失
修改权限可以随机修改和写入数据通常只读,只读数据无法被修改

ROM 的类型主要了解 EPROMCDMROM 这两种:

EPROM

EPROM 可以通过紫外线照射来擦除数据,然后重新写入数据。写入数据和擦除数据都较为繁琐,且需要物理操作。常用作电脑的 BIOS 芯片,支持随机存取。

CDROM

CDROM 是一种光盘存储设备,数据在生产时一次性写入,不能被修改(只能读取)。