存储系统与 Cache 专题
软考 · 计算机组成原理 | 1.2.2 存储系统 | 一篇吃透:为什么 → 归属 → 公式 → 练习 → 映像 → 替换 → 磁盘 → RAID
① 为什么需要 Cache why cache
你(CPU)在办公桌上干活,数据放在身后的书架 上。每次要数据都跑去书架太慢,于是把最常用的几本先摊在桌面上 ——这就是 Cache 。
桌面 = Cache(小、快) | 书架 = 主存(大、慢)
桌面 · Cache 小 · 快 · tc=1
书架 · 主存 大 · 慢 · tm=10
要
命中率 H = 0.90
▶ 访问一次(慢动作)
⚡ 快速模拟 100 次
↺ 清空
点「访问一次」看看会发生什么
命中 → 在桌面直接拿到(快);未命中 → 得去书架拿(慢,还要搬回桌面)。
为什么这招管用?——局部性原理(程序的访问不是随机的)
局部性 含义 例子
时间局部性 刚访问过的,很可能马上再访问 循环体里的变量 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、tm ta
② 反求 ta、tc、tm H (H = (tm−ta)/(tm−tc))
③ 效率/加速 一组时间 e=tc/ta 或 tm/ta
④ 模型坑 ⚠️ 题干说"未命中才启动主存" 换 ta=tc+(1−H)tm
④ 自己调参数,看平均访问时间怎么变
🔑 拖滑条玩几下,记住这个直觉:H 越高,ta 越往下掉,但永远 ≥ tc (命中那一下的钱省不掉)。
H=100% → ta =tc ;H=0% → ta =tm 。
⑤ 动手玩:命中率不是算的,是数出来的
按当前 H 随机模拟真实访问,访问次数越多,实测命中率越贴近 H:
模拟 1 次访问
连访问 10 次
清零
(概率用上面④的 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 写回、脏位 ⑨ 例题
多级 Cache L1/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 常用;写策略:写直达 / 写回。
↑