存储器系统 - 软考备战(六十一)
存储器系统

目录
第一章:主存储器(RAM与ROM的家族树)
1.1 RAM家族(断电即忘)
SRAM(静态RAM)
只要不断电,数据就一直稳如泰山。
特点:极快、极贵、集成度低(容量小)。
★ 唯一绑定: “做 Cache(高速缓存)用”,选 SRAM。
DRAM(动态RAM)
用电容存数据,电容会漏电,所以必须每隔几毫秒“充电”一次(这叫刷新)。
特点:较慢、便宜、集成度高(容量大)。
★ 唯一绑定: “做主存(内存条)用”,选 DRAM。(你买的DDR4、DDR5内存条,本质都是DRAM的升级版)。
1.2 ROM家族(断电不丢,只读家族的“进化史”)
掩膜ROM
厂家生产时直接写死,你永远改不了。
PROM
你可以写一次,写完就变掩膜ROM了(好比一次性刻录光盘)。
EPROM
可以改多次,但改之前要拿“紫外线灯”照半天(芯片上有个透明的玻璃窗),极其麻烦。
EEPROM(E²PROM)
升级了,加电就能擦除改写,不用拿紫外线照了(常用于早期的BIOS芯片)。
★ Flash Memory(闪存)
EEPROM的终极进化版。断电不丢,读写极快,体积小。
应用:U盘、SD卡、固态硬盘(SSD)。
第二章:辅助存储器(磁盘计算与RAID阵列)
2.1 磁盘存储器
结构概念
盘片有正反两面(记录面),面上有许多同心圆(磁道),最外圈是0道。多个盘片上同一个位置的磁道组成一个“柱面”。
★ 存储容量公式
非格式化容量 = 位密度 × 最内圈周长 × 总磁道数(一般不考)
格式化容量 = 磁道数 × 扇区数 × 每扇区字节数(通常是512B) × 记录面数
注:也可以用 柱面数 × 扇区数 × 512B × 记录面数,结果一样。
★ 时间参数
寻道时间(找磁道):机械臂移动,最慢。
旋转等待时间:盘片转,等那个扇区转到磁头下面。平均等待时间 = 磁盘转一圈时间 ÷ 2。
数据传输时间:真正读数据,相对较快。
2.2 ★ RAID 磁盘阵列
RAID 0
把数据切成小块,分散存到多个盘上(条带化)。
没有冗余,没有容错。坏一块盘,全盘皆输。优点是最快。
RAID 1
两张盘存一模一样的数据(镜像)。
最安全,但容量利用率只有 50%(买100G只能用50G)。
RAID 5
也是条带化,但额外算出一份“奇偶校验数据”,分散存放在各个盘里(没有 dedicated 专用校验盘)。
特征:
至少需要 3块盘。
允许坏 1块 盘(坏了拿校验码算回来)。
利用率 = (n-1)/n。
RAID 6
类似RAID 5,但算了两份独立的校验数据。
允许同时坏 2块 盘。
RAID 10 (1+0)
先做RAID 1(镜像),再做RAID 0(条带)。
兼顾了速度和安全,但成本极高。
第三章:Cache 存储器
3.1 为什么要有 Cache?
因为 CPU 太快了,内存太慢了。
为了不让 CPU 干等内存,在 CPU 内部塞了一块极小但极快的 SRAM,这就是 Cache。
程序的局部性原理(理论基础)
时间局部性
刚刚被访问过的数据,很快还会被访问(比如 for 循环里的变量 i)。
空间局部性
被访问数据附近的数据,很快也会被访问(比如遍历数组,存的是连续地址)。
3.2 地址映射方式(主存块怎么放进Cache里)
直接映射
主存里的第 X 块,只能放在 Cache 的第 Y 块(Y = X mod Cache块数)。
规矩死,容易冲突(明明Cache有空位,但因为不是它的“专属坑位”而放不进去)。
全相联映射
主存的块,爱放哪个Cache坑位放哪个。
极其灵活,不冲突,但找起来太慢(电路复杂)。
组相联映射
折中方案。先把Cache分组,组内全相联(随便放),组间直接映射(固定死)。
“n路组相联”(把Cache分成若干组,每组里有n个坑位,这n个坑位内可以随便放)。
3.3 Cache 的替换算法
当 Cache 满了,又要放新数据进来,踢谁?
LRU(最近最少使用)
把“最久没被碰过”的数据踢出去。(比如A是10分钟前用的,B是1分钟前用的,踢A)。
FIFO(先进先出)
把“最早进来”的踢出去。简单粗暴,但可能把常用的老数据踢掉。
RAND(随机)
随便踢一个,靠运气。
3.4 Cache 的写策略(如何与主存保持数据一致)
CPU 修改了 Cache 里的数据,主存里的数据怎么办?
写命中时(要改的数据在Cache里)
全写法
改 Cache 的同时,也把主存改了。慢,但一致性好。
写回法
只改 Cache,不立刻改主存。只有当这个块要被踢出 Cache 时,才写回主存。
快,但要给每个块加一个“脏位”,标记它被改过。
写不命中时(要改的数据不在Cache里)
写分配
把主存这块数据先调到 Cache 里,再在 Cache 里改(通常配合写回法)。
非写分配
不调入 Cache,直接去主存里改完拉倒(通常配合全写法)。
3.5 Cache 命中率与平均访问时间
核心公式
命中率 h = Cache命中次数 / (Cache命中次数 + 访问主存次数)
平均访问时间 Ta = h × Tc + (1 - h) × Tm
(Tc 是 Cache 的存取时间,Tm 是主存的存取时间)
同时查找 vs 顺序查找
顺序查找(先查Cache)
用上面那个标准公式。如果没命中,浪费了查Cache的时间。
同时查找(现代计算机常用)
CPU 发出请求后,Cache和主存同时开始找!
如果是同时查找,整体时间取决于谁慢,也就是 Ta 不可能超过 Tm。
第四章:例题总结
对口绑定
主存用 DRAM,Cache 用 SRAM。
RAID特征
看到“允许坏1块,利用率(n-1)/n” ➡️ RAID 5;
看到“安全性最高,利用率50%” ➡️ RAID 1。
替换算法
替换算法不用纠结,99%的题考的都是 LRU(最近最少使用)。
写回法标志
看到题目提到“脏位”这个词 ➡️ 立刻联想到 写回法。
容量计算易错点
算磁盘容量时,别忘了乘以“记录面数”(正反两面,通常是2),但不要乘以磁头数(因为磁头数通常就等于记录面数,乘了就重复了)。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)