Skip to content

半导体随机存取存储器

2026 大纲 三(三)半导体随机存取存储器(SRAM 存储器、DRAM 存储器、Flash 存储器)。

一个存储元用几个器件,决定了后面的一切

SRAM 与 DRAM 的差别常被当成一张要背的对照表——谁快、谁贵、谁要刷新、谁集成度高。其实这张表只有一个源头:存一位用什么器件。SRAM 用 6 个晶体管搭成一个触发器,DRAM 用 1 个晶体管加 1 个电容

从这一条往下推,每一行都是必然的:触发器只要通电就自己保持状态,所以 SRAM 不用刷新、但持续耗电;电容会漏电,所以 DRAM 必须周期性充电、但静态功耗低。6 个器件对 2 个器件,所以 SRAM 集成度低、位价高,DRAM 反之。触发器读出是电平驱动、信号强,电容读出信号微弱要经读放大,所以 SRAM 快、DRAM 慢。于是用途也就定了——SRAM 做 Cache,DRAM 做主存。

🔴 别去背这张表,记住"6 管触发器 vs 1 管 1 电容"这一句,其余每一条都能当场推出来。 判断题里出现"SRAM 需要刷新""DRAM 不需要重写"这类说法时,回到存储元就能立刻判死。

电容还带来一个不那么显然的后果:DRAM 的读出是破坏性的——读的时候电容电荷被放掉了,必须立刻写回去。这就是"存储周期大于存取时间"的来源,也是本篇第二个要分清的概念对。

先动手看一眼

加载可视化中...

一、先把"随机存取"这个词说准

本篇标题里的"随机存取"指的是访问任意存储单元的时间与该单元的物理位置无关,各单元存取时间相同。它描述的是访问方式,不是"能不能写"。所以 Flash 与各种 ROM 全都属于随机存取,而 CD-ROM 名字里带 ROM 却因为有机械寻道机构属于直接存取。四种存取方式的完整划分见 存储器的分类,这里只用到这一条。

二、SRAM 与 DRAM

特性SRAMDRAM原因
是否需要刷新电容会漏电,触发器只要通电就自持
集成度6 个器件 vs 2 个器件
位价同上
速度触发器读出是电平驱动;电容读出信号微弱,需要读放大
功耗触发器持续耗电
存取时间与存储周期几乎相等存储周期 > 存取时间电容读出是破坏性的,读后需要重写恢复
典型用途Cache主存速度与成本的取舍

最后一行那对概念要单独说清:存取时间是从发出命令到数据稳定输出的时间,存储周期是连续两次访问之间必须间隔的最小时间,两者的差就是恢复时间。DRAM 因为读后必须重写,恢复时间明显,所以存储周期显著大于存取时间;SRAM 没有这个负担,两者几乎相等。

⚠️ 刷新和重写是两回事,虽然机制相似(都是给电容充电)。 刷新是周期性的、主动的,为了对抗漏电,跟这一行有没有被访问过毫无关系;重写(恢复)是每一次读操作的固有组成部分。前者体现在"刷新开销"上,后者体现在"存储周期 > 存取时间"上。把两者混为一谈,算刷新开销时就会重复计。

顺带记一条跨章的:Cache 和 TLB 都由 SRAM 组成,不是 DRAM。它们要的是速度,而且容量都不大。

三、DRAM 的刷新

电容中的电荷会随时间泄漏,必须周期性地重新充电。三个要点先立住:刷新以"行"为单位(一次刷整行,行内所有单元一起充电);刷新周期通常是 2 ms由存储器控制器自动完成,不需要 CPU 干预,对程序完全透明。

但"不需要 CPU 干预"不等于"没有代价"——刷新会占用存储器的时间,死区之内 CPU 若发出访存请求就得等。这与"打断程序"是两回事,答题时不要说成中断。

设存储阵列有 r 行、存储周期为 tc、刷新周期为 T,三种安排方式:

方式做法死区代价
集中刷新在每个刷新周期的末尾,集中一段时间把所有行逐行刷完rtc集中且较长,这段时间存储器无法响应读写控制最简单
分散刷新把每个存储周期一分为二:前半段正常读写,后半段刷新一行无死区存储周期被延长为原来的 2 倍;且刷一遍只需 r 个存储周期,远快于必要频率,属过度刷新
异步刷新把刷新均匀分散到整个刷新周期内,每隔 T/r 刷新一行被打散成很多个单存储周期需定时器与刷新地址计数器;实际系统采用这种

三者的刷新总开销其实相同(都要刷 r 行、每行一个存储周期),差别只在于这些开销是集中出现、平摊到每个周期、还是打散成小颗粒。算题时先算总量 rtc,再按方式决定它怎么分布。

四、地址复用与行缓冲

DRAM 芯片把行地址和列地址分时复用同一组引脚,用 RAS(行地址选通)与 CAS(列地址选通)区分先后,目的是减少引脚数量、降低封装成本。因为两次分时使用的是同一组引脚,引脚数由较大的那一维决定:

地址引脚数=log2max(r, c),r×c=单元总数

由此得到两条实用判据:引脚最少 存储阵列尽量接近正方形引脚数相同时选行数少的那种分解,因为刷新按行进行、行数越少刷新开销越小。

不能一律用"总位数的一半"。设单元数为 2K=211,指数是奇数,"一半"根本说不通,这时要枚举分解方式、取 max(r,c) 最小的那种。

⚠️ 数据引脚数 = 芯片位宽,这一项最容易漏算。 问"地址引脚和数据引脚总数"时,答案是 log2max(r,c)+位宽;若问引脚总数还要再加控制引脚。

RAS 选通某一行后,该行的所有单元一次性被读入行缓冲区(通常用 SRAM 实现),随后 CAS 只是从行缓冲中挑选某一列。所以行缓冲区的位数 = 列数 × 芯片位宽。同一行内地址是连续的,连续读该行的多个数据不必重新激活行——这正是突发传送之所以快的原因,也是 DRAM 芯片与内存条 中预取技术的硬件基础。

引脚与刷新的两组走查:奇数指数时怎么枚举分解、三种刷新方式在同一片芯片上各是多少(想核对自己会不会把"一半"当通法时展开)

(一)2K=211 个单元的分解枚举。

r×cmax(r,c)地址引脚数
2×1024102410
16×1281287
32×64646
64×32646
128×161287

引脚最少即阵列最接近正方形。32×6464×32 引脚数相同时选行数少的那个——刷新按行进行,行数越少刷新开销越小。

(二)引脚总数。 4M×8 位的 DRAM 芯片:单元数 4M=222,取方阵 211×211,地址引脚 11 根;位宽 8 位,数据引脚 8 根。地址加数据共 19 根。

(三)三种刷新方式的数字对照。 某 DRAM 有 128 行,存储周期 0.5 μs,刷新周期 2 ms:

方式死区说明
集中刷新128×0.5=64 μs(连续)占刷新周期的 64/2000=3.2%,这段时间完全不能访问
分散刷新但存储周期从 0.5 变成 1 μs
异步刷新每次 0.5 μs,共 128 次刷新间隔 =2 ms/12815.6 μs

(四)一道综合的。 某 DRAM 芯片容量 16K×4 位,存储周期 0.5 μs,刷新周期 2 ms,存储阵列为方阵。

单元数 16K=214,方阵为 27×27=128×128。于是

地址引脚=log2128=7 ,数据引脚=位宽=4 集中刷新死区=128×0.5=64 μs,异步刷新间隔=2 ms128=15.625 μs

两者刷新的总时间相同(都是 64 μs),区别在于集中刷新把它压成一段连续的不可访问期,异步刷新把它拆成 128 个 0.5 μs 的碎片。

五、Flash 存储器

Flash 的存储元是浮栅 MOS 晶体管。浮栅被绝缘层完全包围,注入进去的电荷没有泄漏通路——这就是它非易失、也不需要刷新的物理原因(对照 DRAM 的电容会漏电)。代价是充放电只能靠隧穿效应,需要高电压且耗时长,所以写比读慢一个数量级,读写是不对称的。

🔴 Flash 写之前必须先擦除。 编程只能单向把 1 变成 0;要把某一位从 0 改回 1,只能整块擦除。于是修改一页时得把该块中仍然有效的页搬到新块、再擦掉旧块,实际写入量远大于逻辑写入量,这叫写放大(SSD 的磨损均衡就是为此而设)。

由此也解释了 Flash 为什么不能拿来做主存,三条理由:写速度慢(比 DRAM 慢一到两个数量级)、不能原地更新、擦写寿命有限。第三条是 Flash 独有的约束——主存的写入频率会迅速耗尽它的寿命。

操作单位要分清:读和写(编程)按页(512 B ~ 4 KB),擦除按块(若干页)。读接近 RAM 的速度,写只能单向置 0,擦除把整块恢复成全 1、很慢。

三种半导体存储器放一起对照:

SRAMDRAMFlash
存储元6 管触发器1 管 1 电容浮栅 MOS 晶体管
易失性易失易失非易失
需要刷新
读速度最快较快
写速度最快最慢(读写不对称)
位价最高最低
擦写寿命无限无限有限
典型用途Cache主存U 盘、SSD、BIOS

Flash 属于 ROM 家族,该家族按可编程方式排列:MROM(掩模式,出厂固化不可改)→ PROM(用户可编程一次,不可擦除)→ EPROM(多次编程,紫外线整片擦除)→ EEPROM(多次编程,电擦除、字节级)→ Flash(多次编程,电擦除、级)。EEPROM 与 Flash 的关键差别就在擦除单位:字节级更灵活但速度慢、成本高;块级速度快、密度高,适合大容量存储。

考点速记

  1. SRAM 用 6 管触发器、DRAM 用 1 管 1 电容,两者的全部差异由此推出,不要背表。存储周期 = 存取时间 + 恢复时间,DRAM 因破坏性读出而两者差别明显;刷新与重写机制相似但触发原因不同
  2. 刷新以行为单位、周期通常 2 ms、由存储器控制器自动完成不需 CPU 干预(但会占用存储器时间);集中刷新有长死区、分散刷新无死区但存储周期翻倍、异步刷新间隔 =T/r,三者总开销相同,只是分布不同。
  3. 地址引脚数 =log2max(r,c)(越接近方阵越少,相同则选行数少的),数据引脚数 = 芯片位宽;行缓冲位数 = 列数 × 位宽,是突发传送的硬件基础。Flash 靠浮栅故非易失,编程只能单向把 1 变 0 因而写前必须整块擦除,由此产生写放大,且擦写寿命有限

这一节在真题里被考过的形式(下方「真题练习」逐题对应):

  • 问某芯片的地址引脚数与数据引脚数之和:地址引脚按 log2max(r,c) 取方阵算,数据引脚等于位宽,两者相加。⚠️ 漏掉数据引脚是这类题最典型的失分点。
  • rc 取什么值能使地址引脚最少且刷新开销尽量小:先让阵列接近正方形把引脚压到最少,若有两种分解引脚数相同,选行数少的那个(刷新按行)。
  • 问工作期间需要刷新的是哪种存储器:SRAM / SDRAM / ROM / Flash 里只有 SDRAM——判据是"靠电容存电荷"。
  • 挑关于闪存的错误叙述:常设的错点是"读、写速度一样快"。Flash 写前要擦除,写远慢于读;而"随机访问""非易失""半导体器件"三条都成立。
  • 给 I/II/III/IV 四条关于 RAM 与 ROM 的叙述问哪几条对:踩点在"都是随机存取"(对)、"都可用作 Cache"(错,ROM 不行)、"都需要刷新"(错,只有 DRAM)。
  • 挑关于 TLB 与 Cache 的错误叙述:常设的错点是"都由 DRAM 组成"——两者都用 SRAM。其余"命中率都与局部性有关""缺失后都需访问主存""缺失处理都可由硬件实现"都对。
  • 挑关于内存条的错误叙述:会同时踩容量换算、交叉编址、芯片地址引脚数(按 max(r,c) 复用后的位数,不是行列位数相加)和行缓冲大小(列数 × 位宽)。

易错:把刷新和重写混为一谈。刷新是周期性主动的、与访问无关;重写是每次读的固有部分。算刷新开销时只算前者。

易错:地址引脚数用"总位数的一半"。指数是奇数时这句话不成立,要枚举分解取 max(r,c) 最小。

易错:答"引脚数"时只给地址引脚。数据引脚 = 位宽,必须加上。

易错:认为刷新要 CPU 干预或会打断程序。它由存储器控制器自动完成、对程序透明,但会占用存储器时间使访存请求等待。

教材出处
  • SRAM 与 DRAM 的存储元结构及由此产生的性能差异、存取时间与存储周期的定义:袁春风《计算机组成与系统结构(第 3 版)》§7.2 主存储器
  • DRAM 芯片内部结构(图 7.11)、地址引脚复用与行缓冲对突发传送的支持:同上,印刷页 p216
  • 刷新的三种方式与刷新周期、刷新以行为单位:同上 §7.2
  • Flash 的浮栅结构、读写擦除单位与 ROM 家族的划分:同上 §7.2

相关知识

存储器的分类DRAM 芯片与内存条主存和 CPU 之间的连接多模块存储器存储器层次结构

真题练习