存储系统与 Cache 专题

软考 · 计算机组成原理 | 1.2.2 存储系统 | 一篇吃透:为什么 → 归属 → 公式 → 练习 → 映像 → 替换 → 磁盘 → RAID
目录(✎ = 含例题): ① 为什么需要 Cache · ② Cache 算哪一层 · ③ 命中率与平均访问时间 · ④ 公式计算器 · ⑤ 访问序列模拟 · ⑥ 练四道 ✎ · ⑥B 真题风格单选 ✎ · ⑦ 地址映像 ✎ · ⑧ 替换算法 ✎ · ⑨ 写策略 ✎ · ⑩ 多级 Cache ✎ · ⑪ 虚拟存储器 ✎ · ⑫ 磁盘 ✎ · ⑬ RAID ✎ · ⑭ SRAM/DRAM 与分类 ✎

① 为什么需要 Cache why cache

你(CPU)在办公桌上干活,数据放在身后的书架上。每次要数据都跑去书架太慢,于是把最常用的几本先摊在桌面上——这就是 Cache。

桌面 = Cache(小、快) | 书架 = 主存(大、慢)

桌面 · Cache 小 · 快 · tc=1
书架 · 主存 大 · 慢 · tm=10
CPU
办公的人
要数据
桌面 / Cache
摊开的几本
书架 / 主存
所有的书都在这(慢)
要
命中率 H = 0.90
点「访问一次」看看会发生什么
命中 → 在桌面直接拿到(快);未命中 → 得去书架拿(慢,还要搬回桌面)。

为什么这招管用?——局部性原理(程序的访问不是随机的)

局部性含义例子
时间局部性刚访问过的,很可能马上再访问循环体里的变量 i、sum
空间局部性访问了某个地址,邻居地址也快被访问数组 a[0] a[1] a[2] 连着读;顺序执行的指令
🔑 程序有局部性 → 把"当前最活跃的一小撮"放进 Cache → 绝大多数访问都能命中。

Cache 的 4 个特点(概念题必背):

维度Cache 的取值
位置位于 CPU 与主存之间
容量几千字节 ~ 几兆字节(KB~MB)
速度比主存快 5~10 倍,由快速半导体存储器构成
内容主存局部域的 副本,对程序员 透明(加 Cache 不改变程序语义)
⚠️ 最经典的一对送分/送命题:
· 设置 Cache 的目的 = 缓解 CPU 与主存的速度 差异(不是容量!)
· 设置 虚拟存储器 的目的 = 解决 主存容量 不足
🔑 搬运谁来做:Cache↔主存 全由硬件实现;主存↔辅存 由硬件和软件(操作系统)结合实现。(教材原话,原题出过)

② Cache 到底算哪一层?(主存?辅存?)

存储层次是四层,不是两层 —— Cache 卡在 CPU 和主存正中间,哪边都不完全属于:

CPU 内部寄存器最快 / 最小 / 最贵 · 纳秒级
Cache(高速缓存)比主存快 5~10 倍 · KB~MB
主存(内存)CPU 可直访 · GB 级
辅存(磁盘 / SSD / 光盘 / 磁带)最慢 / 最大 / 最便宜 · TB 级
↑ 速度递减、容量递增、单位价格递减 ↓

"主存 / 辅存"这个二分套不住它——那是按"CPU 能不能直接访问"分的:

主存(内存)辅存(硬盘)
CPU 能直接访问吗能不能,得先调入主存
例子内存条硬盘、SSD、U盘、光盘
🔑 Cache 也不属于主存——CPU 同样不能直接用指令访问它(写代码没法 读Cache[地址]),它是硬件自动管、对程序员透明的。所以它是第三种存在:CPU 与主存之间的高速缓冲。

换个分类角度,答案会变(看题干问哪个标准):

分类角度Cache 怎么归
按材料半导体存储器(SRAM 做的)
按工作方式读/写存储器(RAM)
按存取方式随机存取(与主存同类)
🔑 一句话:层次上=独立一层(CPU 与主存之间);物理上=SRAM 做的半导体随机存储器;归属上=不属于"主存/辅存"二分。

③ 命中率与平均访问时间(核心计算)

命中(Hit) :CPU 要的数据在 Cache 里 → 直接读 Cache,快 未命中(Miss):CPU 要的数据不在 Cache 里 → 得去主存拿,慢 命中率 H = 命中次数 ÷ 总访问次数 (未命中率 = 1 − H) tc = Cache 的存取时间(命中时花的时间) tm = 主存的访问时间(未命中时要花的时间)

ta(平均访问时间)= 装上 Cache 后,CPU 每访问一次存储器平均要花的时间,单位 ns。就是一次加权平均:

命中的访问(占 H) → 花 tc(快) 未命中的访问(占 1−H)→ 花 tm(慢) t_a = H · tc + (1−H) · tm ← 教材主公式(模型A:同时启动)

教材原文(《软件设计师教程》1.2.2):

🔑 ta = H·tc + (1−H)·tm = tc + (1−H)(tm − tc) (假设 Cache 访问和主存访问同时启动)
⚠️ 模型 B(题干说"未命中才启动主存"):ta = tc + (1−H)·tm —— tc 不再乘 H 了!
两个模型就差"未命中那次要不要再重复花一遍 tc",差值 = (1−H)·tc。
💡 衍生指标:Cache 效率 e = tc / ta(越高越接近1);加速倍数 = tm / ta(相比没 Cache 快多少倍)。效率用 tc、加速用 tm,都除以 ta。

四种考法(历年就这四张皮):

考法给什么求什么
① 正用H、tc、tmta
② 反求ta、tc、tmH(H = (tm−ta)/(tm−tc))
③ 效率/加速一组时间e=tc/ta 或 tm/ta
④ 模型坑 ⚠️题干说"未命中才启动主存"换 ta=tc+(1−H)tm

④ 自己调参数,看平均访问时间怎么变

命中率 H = 0.98 tc(ns) tm(ns)
🔑 拖滑条玩几下,记住这个直觉:H 越高,ta 越往下掉,但永远 ≥ tc(命中那一下的钱省不掉)。
H=100% → ta=tc;H=0% → ta=tm。

⑤ 动手玩:命中率不是算的,是数出来的

按当前 H 随机模拟真实访问,访问次数越多,实测命中率越贴近 H:

(概率用上面④的 H)

⑥ 练四道(手算完再点开)

题1(正用 · 求 ta):H=0.9,tc=1ns,tm=10ns,Cache 与主存同时启动。求 ta。
点击看答案
ta = 0.9×1 + 0.1×10 = 0.9 + 1.0 = 1.9 ns
(没 Cache 时每次 10ns,快了约 5.3 倍。检查合理性:ta 必落在 tc~tm 之间,偏向命中率高的一侧。)
题2(反求 · 求 H):tc=2ns,tm=20ns,要求 ta 不超过 4ns,命中率至少多少?
点击看答案
H = (tm−ta)/(tm−tc) = (20−4)/(20−2) = 16/18 = 8/9 ≈ 0.889(88.9%)
验算:0.889×2 + 0.111×20 = 1.778 + 2.222 = 4ns ✓
题3(效率/加速):tc=5ns,tm=50ns,H=0.8。求 ① ta ② 效率 e ③ 加速倍数。
点击看答案
① ta = 0.8×5 + 0.2×50 = 4 + 10 = 14 ns
② e = tc/ta = 5/14 ≈ 0.357
③ 加速 = tm/ta = 50/14 ≈ 3.57 倍
⚠️ 别把分子搞反:效率用 tc、加速用 tm,都除以 ta。
题4(模型坑 ⚠️):H=0.98,tc=2ns,tm=20ns,题干说"Cache 未命中时才启动主存"。求 ta。(对比模型A差多少?)
点击看答案
模型B:ta = tc + (1−H)·tm = 2 + 0.02×20 = 2.4 ns
模型A(同时启动):0.98×2 + 0.02×20 = 1.96 + 0.4 = 2.36ns
差 = (1−H)·tc = 0.02×2 = 0.04 ns(就是未命中那 2% 白花的一遍 tc)
🔑 没提"同时"→ 默认模型A;提了"未命中才启动主存"→ 模型B。

⑥B 真题风格 · 单选(考场就是这种) exam-style

⚠️ 下面 4 道是按历年考场形态整理的「真题风格」题,练的是套路不是背原卷。每道限时 90 秒,先在心里选完再点开答案。
【真题原文 · 已验证 ✅|指令 Cache vs 数据 Cache】设某流水线计算机主存的读/写时间为 100ns,有一个指令和数据合一的 Cache,已知该 Cache 的读/写时间为 10ns,取指令的命中率为 98%,取数的命中率为 95%。在执行某类程序时,约有 1/5 指令需要存/取一个操作数。假设指令流水线在任何时候都不阻塞,则设置 Cache 后,每条指令的平均访存时间约为(  )
A. 12ns  B. 15ns  C. 18ns  D. 120ns
点击看答案 + 完整计算
B(约 14.7 ns → 选 15ns)。
① 取指:tif = 0.98×10 + 0.02×100 = 9.8 + 2 = 11.8 ns
② 取数:td = 0.95×10 + 0.05×100 = 9.5 + 5 = 14.5 ns
③ 加权:平均 = 11.8 + (1/5)×14.5 = 11.8 + 2.9 = 14.7 ns
🔑 算门:指令必然取指 1 次(100%),但只有 1/5 指令要取数(20%)——这个"发生频率"不给,就永远算不出唯一值。
🔑 为什么两个命中率不一样:取指是顺序流(PC→PC+1,局部性极强,98%);取数是随机跳(地址乱,局部性弱,95%)。这就是现代 CPU 把 L1 拆成 I-Cache / D-Cache 的原因。
举一反三(哈佛结构变体 · 已核实):设"分开的指令 Cache 和数据 Cache",取指命中率 98%、取数命中率 95%,仍约 1/5 指令要存取一个操作数,问"与无 Cache 比,运算速度可提高多少倍"。
  ① 无 Cache:每次访存都直奔主存(100ns)。每条指令 = 取指 1 次 + 取数 0.2 次 = 1.2 次访存 → 1×100 + 0.2×100 = 120ns。
  ② 有 Cache:仍 1.2 次访存,只是单次成本变了 → 1×11.8 + 0.2×14.5 = 14.7ns。
  ③ 提速倍数 = 无 Cache 时间 ÷ 有 Cache 时间 = 120 / 14.7 ≈ 8.16 ≈ 8 倍。
🔑 关键:两边访存"结构"完全一样(都是 1 + 0.2 次),差别只在单次访存是 100ns 还是 11.8/14.5ns。抓住"次数 × 单次成本"这个乘法骨架,无 Cache / 有 Cache / 合一 / 分开,全是一家人。
来源(公开渠道收录的原始题干):信管网 · 百度教育 · 知了爱学 · 希赛网 · 腾讯云开发者社区 · 上学吧 · 51test 无忧考网。
【真题风格·1|算 ta】某系统 Cache 的存取时间为 10ns,主存存取时间为 100ns,Cache 命中率为 95%,Cache 与主存同时启动。则该 Cache-主存系统的平均存取时间和加速比分别约为(  )
A. 14.5ns,6.9  B. 15ns,6.7  C. 14.5ns,10  D. 5.5ns,6.9
点击看答案
A。ta = H·tc + (1−H)·tm = 0.95×10 + 0.05×100 = 9.5 + 5 = 14.5 ns
加速比(相对全访主存)= tm/ta = 100/14.5 ≈ 6.9
❌ C 是把 "tm/tc=10" 当成了加速比(那是理想全命中的上限);❌ B、D 数字拼错。
🔑 万变不离其宗:给 tc/tm/H → 直套模型A。
【真题风格·2|反求 H,带模型B坑 ⚠️】某 Cache 的存取周期 tc=10ns,主存存取周期 tm=100ns,题干说明"Cache 访问失败后 CPU 才开始访问主存"。若要求系统的平均存取时间不超过 15ns,则 Cache 命中率至少为(  )
A. 94.4%  B. 95%  C. 99%  D. 90%
点击看答案
B。题干"失败后才访存"= 模型B:ta = tc + (1−H)·tm ≤ 15
→ (1−H)×100 ≤ 5 → 1−H ≤ 0.05 → H ≥ 95%。
⚠️ 陷阱:❌ A(94.4%) 是用模型A反解出来的 H=(100−15)/(100−10)=85/90≈94.4%,题目一说"失败才访存"就不能用 A。
🔑 反求别死记公式,看清题干到底是模型 A 还是 B。
【真题风格·3|纯概念辨析】以下关于 Cache 的叙述中,正确的是(  )
A. Cache 的命中率随其容量增大而线性提高
B. Cache 一般由 DRAM 组成,需要定时刷新
C. Cache 位于 CPU 与主存之间,对应用程序员透明
D. Cache 的主要作用是扩大主存容量
点击看答案
C。
❌ A:命中率随容量增大而提高,但不是线性(教材图 1-12 那条曲线先陡后平)
❌ B:Cache 用 SRAM(快、不需刷新);DRAM 才需定时刷新,做主存
❌ D:Cache 治的是速度(CPU↔主存速度差);治容量的是虚拟存储器
🔑 概念题就背俩词:CPU与主存之间、对用户透明、SRAM 做的。
【真题风格·4|磁盘】若磁盘的转速提高一倍,则(  )
A. 平均存取时间减半  B. 平均寻道时间减半
C. 平均旋转延迟时间减半  D. 数据传输率不变
点击看答案
C。平均旋转延迟 = 旋转半圈时间 = 60/(2×转速),转速翻倍它就减半。
❌ A:平均存取时间 = 寻道 + 旋转延迟 + 传输,只有后两项随转速变,寻道时间跟转速无关,所以整体不会减半(这是最坑的干扰项)
❌ B:寻道时间取决于磁臂移动,与转速无关
❌ D:转速翻倍,单位时间扫过的扇区增多,传输率是变大不是不变
🔑 记口诀:转速只管"转"的那部分(旋转延迟 + 传输),管不了磁臂(寻道)。
考点典型题干例题位置
算 ta + 加速比给 tc/tm/H 求平均存取时间⑥ 题1/题3 · ⑥B 真题
反求 H(模型B坑)给 ta 门槛求 H,"访问失败后才访存"⑥ 题2 · ⑥B 风格2
纯概念判断"以下关于 Cache 叙述正确的是"② 归属 · ⑭ SRAM/DRAM
地址映像划分给主存位数/行数/块大小,求 标记|行号|块内⑦ 例题
替换算法比较给访问序列,算 FIFO/LRU 命中次数⑧ 例题
写策略辨析写直达 vs 写回、脏位⑨ 例题
多级 CacheL1/L2/L3 谁大谁快、引入目的⑩ 例题
虚拟存储器目的 / Belady 异常 / 缺页中断类型⑪ 例题
磁盘转速平均旋转延迟计算、转速翻倍谁变⑫ 例题 · ⑥B 风格4
RAID 判别级别与特征对应、允许坏几块⑬ 例题
SRAM / DRAM谁做 Cache / 谁要刷新⑭ 例题
🔑 结论:这块年年考、题型雷同。①~⑭ 每节都配了对应例题,考前把"计算两类 + 概念几句"过一遍,上午能稳拿 1~2 分。

⑦ 地址映像(主存地址怎么映射到 Cache)

方式规则优点 / 缺点
直接映像主存的块只能放到 Cache 中相同块号的位置(一对一)地址变换最简单 / 灵活性差(冲突多)
全相联映像主存任一块可放到 Cache 任意一块最灵活、命中率高 / 变换复杂、比较慢
组相联映像组用直接映像、组内块用全相联(前两者折中)性能与成本折中,现代 CPU 常用
🔑 记法:直接=只能回自己家;全相联=随便住;组相联=先定小区,小区里随便挑。
【例题 · 直接映像地址划分】某机主存地址 20 位,Cache 共 64 行,每块 4 字节,采用直接映像。则主存地址应划分为(  )
A. 标记 14 位 | 行号 4 位 | 块内 2 位   B. 标记 12 位 | 行号 6 位 | 块内 2 位
C. 标记 10 位 | 行号 8 位 | 块内 2 位   D. 标记 12 位 | 行号 4 位 | 块内 4 位
点击看答案
B。
① 块内地址 = log₂(4) = 2 位(由块大小决定)
② 行号 = log₂(64) = 6 位(由 Cache 行数决定)
③ 标记 = 20 − 6 − 2 = 12 位(剩下的全是标记)
🔑 三步口诀:块内看块大小、行号看 Cache 行数、剩下全是标记。全相联没有"行号"(块可去任意行,只有标记+块内);组相联把"行号"换成"组号"。

⑧ 替换算法(Cache 满了,踢谁出去)

算法踢谁备注
随机替换随机挑一个简单,效果一般
先进先出 FIFO最先进入的—
近期最少使用 LRU最近最久没用的效果好,命中率通常最高(常用)
优化替换先跑一遍程序统计后的最优选择需要先验信息,理论最优
💡 替换算法与"虚拟存储器缺页置换"用同一套名(OPT/LRU/FIFO),见⑪。
【例题 · LRU vs FIFO】Cache 只能放 2 个页面,访问序列为 1,2,1,3,1,2(初始为空)。用 FIFO 和 LRU 分别命中几次(  )
A. FIFO 0 次、LRU 2 次   B. FIFO 2 次、LRU 2 次
C. FIFO 2 次、LRU 0 次   D. FIFO 3 次、LRU 3 次
点击看答案
A(FIFO 0 命中;LRU 2 命中)。两步画一下命中/未命中:
FIFO(踢最早进来的):1✗ → 2✗ → 1✗(踢1) → 3✗(踢2) → 1✗(踢3) → 2✗(踢1) → 命中 0(序列刚好"转圈"把要用的挤走,抖动)
LRU(踢最久没用的):1✗ → 2✗ → 1✓命中 → 3✗(踢2) → 1✓命中 → 2✗(踢3) → 命中 2
🔑 同一序列 LRU 通常不输 FIFO;LRU 更接近 OPT,是常用算法。记死:FIFO 只看"谁先进来",LRU 看"谁最久没用"。

⑨ 写策略(改了 Cache 里的数据怎么办)

策略做法特点
写直达 Write Through同时写 Cache 和主存简单、一致性好 / 写操作慢
写回 Write Back只写 Cache,被替换出去时才写回主存快 / 需要额外的"脏位",一致性复杂
【例题 · 写策略辨析】关于 Cache 的写策略,下列叙述正确的是(  )
A. 写直达(Write Through)只写 Cache 不写主存,速度最快
B. 写回(Write Back)每次写都同时更新主存,保证一致
C. 写回策略需为每块设置脏位,只在被替换时才写回主存
D. 写直达策略只写 Cache,主存内容会长期与 Cache 不一致
点击看答案
C。
❌ A、D 把两者说反了:写直达 = 同时写 Cache + 主存(一致性好,但写操作慢)
❌ B 是写直达的特征:写回 = 只写 Cache,靠"脏位"标记,被换出时才写回主存(快,但一致性复杂)
🔑 一句话:写直达图省心(时时同步、慢);写回图省事(走时再补、快)。

⑩ 多级 Cache

CPU 访存顺序:L1 Cache → L2 Cache → L3 Cache → 主存 · L1:离 CPU 最近、容量最小、速度最快(常常再分 指令 Cache / 数据 Cache) · L2 / L3:容量更大、速度稍慢,用来提高整体命中率 · 等级越高越靠近 CPU、越小越快 —— 别记反
【例题 · 多级 Cache】关于多级 Cache,下列叙述正确的是(  )
A. L1 Cache 容量最大、离 CPU 最远
B. L1 Cache 离 CPU 最近,容量最小、速度最快
C. 引入 L2/L3 Cache 会降低整体命中率
D. 越靠近 CPU 的 Cache 等级越高、容量越大
点击看答案
B。
❌ A、D:越靠近 CPU → 等级越低(L1)、容量越小、速度越快;越往外(L2/L3)越大越慢
❌ C:多级 Cache 的目的就是提高整体命中率(L1 没命中还有 L2/L3 兜底)
🔑 口诀:越靠 CPU 越小越快,越往外越大越慢;L1 常拆成指令 Cache / 数据 Cache(呼应 ⑥B 那道真题)。

⑪ 虚拟存储器(考"目的"和"置换算法")

目的:解决主存容量不足,给程序员一个"无限大内存"的假象 原理:CPU 给虚拟地址 → MMU 地址变换 → 物理地址 → 访问主存 实现方式:页式 / 段式 / 段页式(软考默认页式) 快表 TLB:用相联存储器存页表项的副本,减少查页表的访存次数
页面置换算法规则要点
OPT 最优淘汰以后最久不会被访问的页理论最优,无法实现(作基准)
LRU 最近最少使用淘汰最久没被访问的页性能接近 OPT(OPT > LRU > FIFO)
FIFO 先进先出淘汰最早进来的页可能"加内存反而缺页更多" → Belady 异常(FIFO 独有)
⚠️ 缺页属于 程序性中断(内部异常),不是外部中断;缺页时由操作系统把该页从辅存调入主存。
【例题 · 虚拟存储器】关于虚拟存储器,下列叙述不正确的是(  )
A. 设置虚拟存储器的主要目的是解决主存容量不足
B. 缺页中断属于程序性中断(内部异常)
C. 页面置换算法中,OPT 最优但无法实现,常作性能基准
D. FIFO 不会出现"增加内存反而缺页增多"的现象
点击看答案
D(叙述错误,即选 D)。
❌ D 说反了:FIFO 恰恰是唯一会出现 Belady 异常(加内存反缺页更多)的算法
A ✓ 虚拟存储治的是容量(Cache 治的是速度,别混)
B ✓ 缺页由操作系统处理,属程序性中断/内部异常,不是外部中断
C ✓ OPT 理论最优、无法实现,作基准;三者关系 OPT > LRU > FIFO
🔑 记死:Belady 异常 = FIFO 专属。

⑫ 磁盘:容量与存取时间(大题小题都考)

容量: 格式化容量 = 面数 × (磁道数/面) × (扇区数/道) × (字节数/扇区) ← 只会用这个 非格式化容量 = 面数 × (磁道数/面) × 内圆周长 × 最大位密度 ← 教材版,偏难 存取时间: 存取时间 = 寻道时间(search) + 旋转延迟(rotational) + 数据传输时间(transfer) 平均旋转延迟 = 旋转半圈时间 = 60 / (2 × 转速rpm) 秒
例:7200 rpm 的硬盘,平均旋转延迟 = ? 转一圈 = 60/7200 s = 8.33 ms 平均(半圈)= 8.33/2 ≈ 4.17 ms 若每磁道 500 扇区、每扇区 512B,读 1 个扇区要多转? 读数 1 个扇区 ≈ 1/500 圈 = 8.33ms / 500 ≈ 0.0167 ms
🔑 磁盘排一大半时间花在 寻道(磁臂移动)上;所以文件尽量存在同一柱面上、扇区错开排列(交替编号)都是为了少等一圈。
练(磁盘):某硬盘转速 6000 rpm,平均寻道时间 8ms,每磁道 400 个扇区、每扇区 512B。求读 1 个扇区的平均存取时间。
点击看答案
① 转一圈 = 60/6000 s = 10ms;平均旋转延迟 = 10/2 = 5ms
② 传输一个扇区 = 10ms / 400 = 0.025ms
③ 平均存取时间 = 8 + 5 + 0.025 ≈ 13.03ms(寻道占大头)
【例题 · 平均旋转延迟】某硬盘转速 7200 rpm,则其平均旋转延迟约为(  )
A. 8.33ms  B. 4.17ms  C. 2.08ms  D. 0.83ms
点击看答案
B。转一圈 = 60/7200 s = 8.33ms;平均旋转延迟 = 转半圈 = 8.33/2 ≈ 4.17ms。
⚠️ 陷阱 A:8.33ms 是一整圈的时间,不是平均值——平均要按半圈算。
🔑 公式:平均旋转延迟 = 60/(2×转速rpm) = 30/转速。

⑬ RAID(概念选择)

级别做法一句话
RAID-0条带化,无冗余最快、容量 100% / 无容错(坏一块全完)
RAID-1镜像(两块写一样的数据)可靠性最高 / 容量利用率 50%
RAID-5数据 + 分布式校验,无专用校验盘权衡之选,允许坏 1 块
RAID-6两级冗余/双重校验允许同时坏 2 块
【例题 · RAID 判别】下列 RAID 级别与其特征对应,错误的是(  )
A. RAID-0:条带化、无冗余,速度快但无容错
B. RAID-1:镜像,可靠性高,磁盘利用率 50%
C. RAID-5:带分布式校验、无专用校验盘,允许坏 1 块
D. RAID-6:只允许同时坏 1 块磁盘
点击看答案
D(错误,即选 D)。RAID-6 是双重校验,允许同时坏 2 块磁盘。
A/B/C 均正确。🔑 速记:0 无冗余 · 1 镜像(50%) · 5 分布式校验坏 1 块 · 6 双校验坏 2 块。

⑭ 存储器分类 & SRAM / DRAM(爱考"谁做 Cache")

分类角度类别
按位置内存(主存)/ 外存(辅存)
按材料磁存储器(磁盘、磁带)/ 半导体存储器 / 光存储器(光盘)
按工作方式读/写存储器 RAM / 只读存储器 ROM
按存取方式随机存取 RAM / 顺序存取(磁带)/ 直接存取(磁盘)/ 相联存取
对比SRAM 静态DRAM 动态
是否需要刷新不需要需要(电容会漏电 → 定时刷新)
速度快慢一些
集成度 / 价格低 / 贵高 / 便宜
用途Cache主存
🔑 只记一句:SRAM 做 Cache(快而贵),DRAM 做主存(便宜要刷新)。ROM 家族:固定 ROM → PROM(可编程一次)→ EPROM(紫外擦)→ EEPROM/Flash(电擦)。
【例题 · SRAM/DRAM】下列关于 Cache 与主存的叙述,正确的是(  )
A. Cache 由 DRAM 构成,需要定时刷新
B. 主存由 SRAM 构成,速度快、成本高
C. Cache 由 SRAM 构成,速度快、不需要刷新
D. 主存由 DRAM 构成,速度比 Cache 快
点击看答案
C。
❌ A:Cache 用 SRAM(不需刷新);需要刷新的是 DRAM
❌ B、D:主存用 DRAM(便宜、要刷新、比 Cache 慢)
🔑 只背一句:SRAM 做 Cache(快而贵,不刷新);DRAM 做主存(便宜、要刷新)。
本专题总收:
① Cache 治的是速度(CPU↔主存速度差),虚拟存储治的是容量;
② Cache 是独立一层(CPU 与主存之间),SRAM 做的,对程序员透明;
③ 核心公式 ta = H·tc + (1−H)·tm,注意"未命中才启动主存"的模型B;
④ 效率 e=tc/ta,加速比=tm/ta(别搞反分子);
⑤ 映像:直接 / 全相联 / 组相联;替换:LRU 常用;写策略:写直达 / 写回。