某一个SRAM芯片容量为1024×8位,该芯片地址引脚和数据引脚总数至少为多少?莱储存容量为32k,乘以16位,则地址线为多少根?数据线又有多少根?
答案先给出来:
SRAM 芯片容量为 1024 × 8 位,地址引脚和数据引脚总数至少为:
10 + 8 = 18 根
若存储容量为 32K × 16 位,则:
地址线为 15 根,数据线为 16 根。
这类题的核心看法
存储芯片容量通常写成:
存储单元个数 × 每个存储单元的位数
也就是:
字数 × 字长
例如:
1024 × 8 位
表示这个 SRAM 芯片内部有 1024 个存储单元,每个存储单元存放 8 bit 数据。
所以它不是总共有 1024 位,而是总容量为:
1024 × 8 bit = 8192 bit = 8 Kbit
但在求地址线和数据线时,不需要先算总 bit 数,直接看两个部分即可。
地址线怎么求
地址线的作用是“选中哪一个存储单元”。
如果芯片有 N 个存储单元,那么需要满足:
2 的地址线根数 ≥ N
也就是:
地址线根数 = log₂N
在 1024 × 8 位 中,存储单元个数是 1024。
因为:
1024 = 2¹⁰
所以地址线需要:
10 根
这 10 根地址线可以表示:
0000000000 ~ 1111111111
一共 2¹⁰ = 1024 个地址,刚好选中 1024 个存储单元。
数据线怎么求
数据线的作用是“一次读出或写入多少位数据”。
芯片容量写成 1024 × 8 位,后面的 8 位 表示每个存储单元宽度为 8 bit。
所以一次访问一个地址,可以读出或写入 8 位数据。
因此数据线需要:
8 根
所以这道题问“地址引脚和数据引脚总数至少为多少”,就是:
地址线 10 根 + 数据线 8 根 = 18 根
注意题目说“至少”,一般是因为一个实际 SRAM 芯片还可能有片选线 CS、读写控制线 WE/OE 等控制引脚,但题目只让算地址引脚和数据引脚,所以最少只算这两类。
32K × 16 位怎么做
对于:
32K × 16 位
含义是:
共有 32K 个存储单元,每个存储单元 16 位
在计算机组成原理中:
1K = 1024 = 2¹⁰
所以:
32K = 32 × 1024
= 2⁵ × 2¹⁰
= 2¹⁵
因此它有 2¹⁵ 个存储单元。
地址线数量为:
15 根
因为 15 根地址线可以表示:
2¹⁵ = 32768 = 32K
后面的 16 位 表示每个存储单元宽度为 16 bit,所以数据线数量为:
16 根
所以:
32K × 16 位
地址线:15 根
数据线:16 根
如果也问地址引脚和数据引脚总数,则为:
15 + 16 = 31 根
快速套公式
这种题直接套:
若芯片容量为 2ⁿ × m 位
地址线 = n 根
数据线 = m 根
地址线 + 数据线 = n + m 根
例如:
1024 × 8 位
1024 = 2¹⁰
地址线 = 10
数据线 = 8
总数 = 18
再比如:
32K × 16 位
32K = 2¹⁵
地址线 = 15
数据线 = 16
总数 = 31
考研中最容易错的地方
第一,容易把总容量拿去求地址线。
比如 1024 × 8 位,有人会先算:
1024 × 8 = 8192 = 2¹³
然后误以为地址线是 13 根。
这是错的。
因为地址线不是用来寻址“每一个 bit”的,而是用来寻址“每一个存储单元”的。每个地址对应一个 8 位存储单元,而不是对应一个 bit。
所以:
地址线看前面:1024
数据线看后面:8 位
第二,容易把 K 当成 1000。
在计组存储器题中:
1K = 1024 = 2¹⁰
所以:
32K = 32 × 1024 = 2⁵ × 2¹⁰ = 2¹⁵
不能按十进制的 32000 去算。
第三,容易混淆“存储容量”和“芯片组织形式”。
1024 × 8 位 是芯片组织形式,也可以理解为:
1024 个字,每个字 8 位
它的总容量是:
8192 bit = 8 Kbit = 1 KB
但求地址线和数据线时,重点不是总容量,而是“有多少个地址”和“一次输出多少位”。
一句话记忆
看到 A × B 位:
A 决定地址线,B 决定数据线。
更具体地说:
A = 2ⁿ,则地址线 n 根;
B 位,则数据线 B 根。
所以:
1024 × 8 位 → 地址线 10 根,数据线 8 根,总数 18 根
32K × 16 位 → 地址线 15 根,数据线 16 根,总数 31 根
一、先抓住这章的主线:SRAM 快,DRAM 大
计算机存储器这一块,最容易被各种名词绕乱:SRAM、DRAM、SDRAM、刷新、行列地址、突发传送、Cache、Bank、阵列优化……但从考研 408 的角度看,主线其实很清楚:
存储器首先要解决的是“一个二进制位 0/1 怎么保存”;然后要解决“很多个存储位怎么组成一个芯片”;接着要解决“芯片容量很大时,怎样减少引脚、降低成本、提高访问速度”;最后再看 SRAM 和 DRAM 在存储体系中的分工。
最核心的一句话是:
SRAM 用触发器保存信息,速度快、成本高、集成度低,常用于 Cache;DRAM 用电容电荷保存信息,速度较慢、成本低、集成度高,但需要刷新,常用于主存。
这句话基本就是 SRAM 与 DRAM 比较题的总纲。
二、SRAM 的工作原理:用触发器“稳稳地记住 0/1”
SRAM 全称是 Static RAM,静态随机存储器。这里的“静态”不是说它不需要供电,而是说只要不断电,存储单元里的信息就能一直保持,不需要像 DRAM 那样周期性刷新。
SRAM 的一个存储位通常由双稳态触发器构成,典型结构是 6 个 MOS 管,也就是常说的 6T SRAM 单元。它本质上是两个反相器交叉耦合,形成两个稳定状态:
一个稳定状态表示 1,另一个稳定状态表示 0。
因为它是靠触发器状态保存数据,所以读出时一般不会破坏原来的信息,不需要读后恢复,也不需要周期性刷新。这就是 SRAM 快的根本原因。
在访问 SRAM 时,大致流程是:地址线送入地址译码器,选中某一行或某一存储单元;读操作时,存储单元通过位线把数据送到读出放大器,再送到数据线;写操作时,外部数据通过数据线和写控制信号写入被选中的单元。
从做题角度看,SRAM 常考三个点:
第一,SRAM 不需要刷新。
第二,SRAM 速度快,常用作 Cache。
第三,SRAM 每位存储单元晶体管数多,所以成本高、集成度低、容量不容易做得很大。
三、DRAM 的工作原理:用电容“临时存住电荷”
DRAM 全称是 Dynamic RAM,动态随机存储器。这里的“动态”指的是它保存的信息会随时间逐渐丢失,必须周期性刷新。
DRAM 的一个基本存储单元通常由 1 个晶体管和 1 个电容组成,即 1T1C 结构。电容中有电荷,可以表示 1;电荷少或没有电荷,可以表示 0。晶体管相当于一个开关,用来控制这个存储单元是否与位线连通。
因此,DRAM 的本质是:
用电容是否带电来表示二进制信息。
但是电容会漏电。即使不访问,电荷也会慢慢消失,所以 DRAM 必须刷新。并且 DRAM 读操作往往具有破坏性,因为读出过程会改变电容上的电荷状态,所以读出后还需要恢复原来的信息。
这就是 DRAM 比 SRAM 麻烦的地方。
DRAM 的读过程可以粗略理解为:先选中某一行,存储单元中的微弱电荷影响位线电压;由于这个电压变化很小,需要灵敏放大器检测并放大;读出的同时,原单元电荷被扰动,因此还要把信息重新写回去。
所以 DRAM 常见表述是:
DRAM 读出是破坏性读出,读后需要恢复;DRAM 还必须周期性刷新。
这句话在选择题里很常见。
四、存储芯片的基本组成:存储阵列 + 译码 + 控制 + I/O
不管是 SRAM 还是 DRAM,一个存储芯片都不是只有存储单元。它通常包括以下几个部分:
存储阵列是主体,用来真正保存二进制信息。阵列通常按行、列组织,每个交叉位置附近对应一个或多个存储位。
地址译码器根据外部输入的地址选择具体的存储单元、字线或列线。存储容量越大,地址译码越复杂。
读写控制电路根据读信号、写信号、片选信号等决定当前是读操作还是写操作。
I/O 电路负责数据输入输出,包括数据缓冲器、三态门、读出放大器等。
对于 DRAM,还会有更明显的行地址锁存、列地址锁存、刷新控制、灵敏放大器等结构。
可以把存储芯片理解为:
外部给地址,芯片内部译码找到位置;外部给读写控制,芯片决定读出还是写入;数据通过数据引脚输入或输出。
408 中常见的容量题,比如“1024 × 8 位 SRAM 芯片需要多少地址引脚和数据引脚”,本质就是从这个结构来的。
如果芯片容量是 1024 × 8 位,表示有 1024 个存储单元,每个单元 8 位。地址线数量由单元个数决定:
1024 = 210
所以地址线需要 10 根。每次读写一个 8 位字,所以数据线需要 8 根。地址引脚和数据引脚总数至少是:
10 + 8 = 18 根
这里不要把总容量 1024 × 8 = 8192 位直接拿去求地址线。地址线管的是“有多少个可寻址单元”,数据线管的是“每个单元一次输出多少位”。
五、DRAM 为什么要用行列地址:为了减少地址引脚
DRAM 容量通常很大。如果直接把完整地址一次性送入芯片,需要很多地址引脚。为了减少芯片引脚数,DRAM 常采用行列地址复用。
也就是说,一个完整地址被拆成行地址和列地址,先送行地址,再送列地址。它们复用同一组地址引脚。
例如一个 DRAM 芯片内部有 220 个地址位置,如果直接传入完整地址,需要 20 根地址线。但如果把地址分为 10 位行地址和 10 位列地址,那么外部只需要 10 根地址引脚,先传行地址,再传列地址。
这就是 DRAM 中常见的 RAS 和 CAS:
RAS:行地址选通信号,用来锁存行地址。
CAS:列地址选通信号,用来锁存列地址。
所以 DRAM 的典型访问过程可以理解为:
先送行地址,用 RAS 锁存;再送列地址,用 CAS 锁存;行列共同确定具体存储单元。
这也是 DRAM 比 SRAM 控制复杂的一个原因。SRAM 通常可以直接给完整地址,访问过程更简单。
考题里如果问“DRAM 采用地址复用的目的”,优先答:
减少地址引脚数,降低芯片封装成本。
不要答成“提高存储容量”。地址复用不是让同样的存储单元变多,而是让同样容量的芯片所需地址引脚减少。
六、DRAM 的刷新机制:刷新本质是“重新充电”
DRAM 中电容会漏电,所以必须在数据丢失之前把信息重新读出并写回,这个过程叫刷新。刷新不是改写新数据,而是保持原数据。
刷新有几个关键特点。
第一,刷新按行进行。因为 DRAM 的存储阵列按行列组织,刷新时通常一次刷新一整行,而不是一个一个单元刷新。
第二,刷新期间不能正常访问被刷新的存储阵列,因此刷新会占用一定存储器时间。
第三,刷新与 CPU 是否访问该单元无关。即使 CPU 完全不读写主存,DRAM 也必须刷新。
第四,刷新通常由存储器控制器完成,不需要程序员手动控制。
常见刷新方式有三类。
集中刷新是指在一个刷新周期内,集中拿出一段时间连续刷新所有行。它的优点是控制简单,缺点是这段时间内存储器不能正常访问,会产生较长的“死区”。
分散刷新是指把刷新操作分散到每个存储周期中,比如每次正常读写后顺带刷新一行。它的优点是没有明显死区,缺点是每个存储周期都被拉长。
异步刷新,也常叫分布式刷新,是在规定刷新周期内,把各行刷新均匀分散到不同时间点。它综合了集中刷新和分散刷新的特点,是考题中经常认为较合理的一种方式。
可以用一个典型计算来理解。假设 DRAM 有 8192 行,要求 64 ms 内全部刷新一遍,那么平均每隔多久刷新一行?
计算为:
64 ms / 8192 = 7.8125 μs
也就是说,平均大约每 7.8 μs 刷新一行。
这类题的模板是:
每行刷新间隔 = 最大刷新周期 / 行数
注意这里除的是“行数”,不是存储单元总数,也不是总容量位数。
七、DRAM 的阵列设计优化:核心是“大容量下尽量快、尽量省引脚”
DRAM 容量大,如果按最直观的方式设计,地址线多、译码复杂、访问慢。因此 DRAM 会采用一系列阵列设计优化。
最基础的是二维阵列结构。把存储单元排成行和列,可以通过行译码器和列译码器共同选中一个位置。这样比一维线性译码更适合大容量芯片。
其次是行列地址复用。前面已经说过,它的主要目的是减少地址引脚数。这是 DRAM 芯片很重要的硬件特征。
再次是灵敏放大器和行缓冲区。DRAM 单元中的电容很小,读出信号非常弱,必须靠灵敏放大器放大。并且当某一行被激活后,整行数据会进入行缓冲区。之后如果连续访问同一行中的不同列,就可以直接从行缓冲区中取数据,速度会更快。
这一点可以理解为 DRAM 内部存在一种“行缓存”机制。它不是 CPU Cache,但思想类似:利用局部性,尽量让后续访问命中已经打开的行。
再往后就是多 Bank 设计。DRAM 可以划分成多个 Bank,不同 Bank 可以交错工作。一个 Bank 正在预充电或等待时,另一个 Bank 可以进行访问,从而提高整体吞吐率。
所以 DRAM 优化的思路不是把单个电容变得像 SRAM 一样快,而是通过阵列结构、行缓冲、多 Bank、流水化、突发传送等方式提高连续访问效率。
八、DRAM 的访问过程:激活、读写、预充电
理解 SDRAM、DDR 和突发传送之前,最好先理解现代 DRAM 的基本访问动作。
第一步是激活,也就是 Activate。存储器控制器选中某个 Bank 的某一行,把这一整行打开,并送入行缓冲区。
第二步是读或写。此时再根据列地址访问行缓冲区中的某一列或连续若干列。
第三步是预充电,也就是 Precharge。访问结束后,需要关闭当前行,为下一次打开其他行做准备。
所以 DRAM 访问并不是简单地“给一个地址,马上得到数据”。它往往涉及:
打开行 → 访问列 → 关闭行
如果下一次访问仍然在已经打开的同一行,就比较快,这叫行命中。若下一次访问在别的行,就可能要先关闭当前行,再打开新行,延迟更大。
这也是为什么连续地址访问在 DRAM 中更有优势。
九、缓存机制:这里要区分 CPU Cache 和 DRAM 行缓冲
“缓存机制”这个词在这一章里容易混淆,至少有两个层面的含义。
第一个是 CPU Cache。CPU Cache 通常由 SRAM 构成,位于 CPU 和主存 DRAM 之间。它利用程序访问的时间局部性和空间局部性,把主存中最近使用或相邻的数据块复制到 Cache 中。CPU 先访问 Cache,命中则快速得到数据,未命中才访问主存。
所以 SRAM 和 DRAM 在存储层次中的经典分工是:
SRAM 用于 Cache,DRAM 用于主存。
第二个是 DRAM 内部的行缓冲。DRAM 激活某一行后,会把整行送入灵敏放大器/行缓冲区。如果接下来访问同一行的其他列,就不必重新打开行,速度更快。这种机制也利用了空间局部性,但它属于 DRAM 芯片内部访问优化,不等同于 CPU Cache。
考研题如果问“Cache 一般由什么组成”,通常答 SRAM。
如果问“DRAM 中访问同一行连续列为什么快”,则要想到行缓冲和突发传送。
十、突发传送机制:一次给首地址,连续传多个数据
突发传送,也叫 Burst Transfer,核心思想是:不必每传一个数据都重新给完整地址,而是给出一个起始地址后,连续传送一串相邻数据。
这和 Cache 的工作方式密切相关。CPU Cache 和主存之间不是一个字节一个字节地搬,而通常以块为单位搬运。比如 Cache 未命中时,主存会把包含目标地址的一整块数据送入 Cache。这个块常被称为 Cache 块或 Cache line。
因为程序通常具有空间局部性:访问某个地址后,很可能马上访问附近地址。所以一次性连续传输多个相邻数据是划算的。
在 DRAM 中,突发传送尤其适合已经打开某一行之后连续访问多个列地址。SDRAM/DDR SDRAM 都支持突发长度设置,比如连续传 4 个、8 个数据等。
突发传送提高的不是第一个数据的初始访问延迟,而是提高连续数据传输的带宽。换句话说,第一个数据可能仍然要经历行激活、列访问等延迟,但后面的数据可以连续快速输出。
所以考题中如果问突发传送的优势,可以答:
利用空间局部性,减少连续访问时的地址和控制开销,提高存储器带宽,适合 Cache 块传送。
十一、SDRAM:用系统时钟统一控制 DRAM 操作
SDRAM 是 Synchronous DRAM,同步动态随机存储器。它和早期异步 DRAM 的重要区别是:SDRAM 的操作与系统时钟同步,命令、地址、数据都按照时钟节拍组织。
普通 DRAM 更偏向异步控制,通过 RAS、CAS 等信号配合完成访问;SDRAM 则在时钟控制下接收命令,如激活、读、写、预充电、刷新等。
SDRAM 的优点是更适合流水化和高速总线传输。它可以在一个操作等待时安排另一个 Bank 的操作,也可以通过突发传送连续输出数据。
需要注意:SDRAM 仍然是 DRAM,仍然靠电容保存信息,仍然需要刷新。它的“同步”只是控制方式同步,不是说它变成了 SRAM,也不是说不需要刷新。
DDR SDRAM 是 SDRAM 的进一步发展。DDR 的意思是 Double Data Rate,双倍数据率。它可以在时钟上升沿和下降沿都传输数据,因此在同样时钟频率下,理论数据传输率更高。
考研一般不要求深入 DDR 的工程细节,但要知道:
SDRAM 是同步 DRAM;DDR SDRAM 在时钟上升沿和下降沿都传输数据;它们本质上仍属于 DRAM,需要刷新。
十二、SRAM 和 DRAM 的系统比较
SRAM 和 DRAM 的比较是这部分最常考的内容,可以整理成一张表。
| 比较项目 | SRAM | DRAM |
|---|---|---|
| 存储原理 | 触发器保存状态 | 电容电荷保存信息 |
| 单元结构 | 通常 6T | 通常 1T1C |
| 是否需要刷新 | 不需要刷新 | 需要周期性刷新 |
| 读出是否破坏 | 一般非破坏性读出 | 常为破坏性读出,读后需恢复 |
| 速度 | 快 | 较慢 |
| 集成度 | 低 | 高 |
| 成本 | 高 | 低 |
| 功耗特点 | 单元复杂,静态功耗相对明显 | 单元简单,但刷新带来额外开销 |
| 常见用途 | Cache、高速缓冲 | 主存 |
| 控制复杂度 | 较简单 | 较复杂,需要刷新、行列控制等 |
最稳定的记忆方式是从存储单元出发:
SRAM 一个 bit 用触发器,结构复杂,所以快但贵。
DRAM 一个 bit 用电容,结构简单,所以便宜容量大,但电容漏电,所以要刷新。
十三、这部分常见考法
第一类是概念判断题。比如问 SRAM 是否需要刷新,DRAM 读出是否破坏,Cache 通常由什么构成,主存通常由什么构成。这类题直接套结论。
SRAM 不刷新,DRAM 刷新。Cache 多用 SRAM,主存多用 DRAM。DRAM 读出通常是破坏性读出,读后需要恢复。
第二类是容量、地址线、数据线计算题。比如芯片容量为 32K × 16 位,求地址线和数据线。
32K 表示 32 × 1024 = 32768 = 215 个可寻址单元,所以地址线为 15 根。每个单元 16 位,所以数据线为 16 根。
这类题要抓住:
地址线看“有多少个地址单元”,数据线看“每个地址单元多少位”。
第三类是 DRAM 刷新计算题。比如给出总行数和刷新周期,求刷新间隔;或者给出每次刷新时间,求刷新开销。
基本公式是:
每行刷新间隔 = 最大刷新周期 / 行数
刷新总时间 = 行数 × 每行刷新所需时间
刷新开销比例 = 刷新总时间 / 最大刷新周期
这类题容易错在把“总存储单元数”当成“行数”。
第四类是 DRAM 地址复用题。问为什么 DRAM 要把地址分成行地址和列地址,答案通常是减少地址引脚数。若问行地址和列地址如何确定,则根据阵列规模判断。
比如某 DRAM 有 210 行、210 列,那么完整地址共 20 位,但如果行列地址复用,地址引脚只需 10 根,而不是 20 根。
第五类是突发传送和 Cache 块传输题。看到“连续地址”“块传送”“Cache line”“空间局部性”“带宽”这些关键词,就要想到突发传送。
突发传送适合连续数据,不一定降低第一个数据的访问延迟,但能提高连续数据的传输效率。
十四、最容易混淆的地方
第一,不要把“静态 RAM”理解成“不用供电”。SRAM 只是不需要刷新,只要断电,信息同样会丢失。
第二,不要把“DRAM 动态”理解成“访问速度快”。动态指的是电容电荷会变化,需要刷新,不是说它比 SRAM 更灵活或更快。
第三,不要把 DRAM 的刷新理解成 CPU 执行程序刷新。刷新通常由硬件控制器完成,和程序正常执行不是一个层面的概念。
第四,不要把地址线和数据线混在一起。芯片容量写成 M × W 时,M 决定地址线,W 决定数据线。总位数 M × W 不能直接拿来求地址线。
第五,不要把 SDRAM 当成 SRAM。SDRAM 名字里有 SRAM 的字母组合,但它是 Synchronous DRAM,本质仍然是 DRAM。
第六,不要把 CPU Cache 和 DRAM 行缓冲混为一谈。CPU Cache 是存储层次中的高速缓存,通常由 SRAM 实现;DRAM 行缓冲是 DRAM 芯片内部为了提高行命中访问效率而设计的结构。
十五、这一块可以形成一条复习链
这部分复习时,建议按下面这条逻辑串起来:
先理解存储位:SRAM 用触发器,DRAM 用电容。
再理解存储芯片:大量存储单元组成阵列,通过地址译码和读写控制实现访问。
再理解 DRAM 的特殊问题:电容漏电,所以要刷新;读出扰动电荷,所以读后恢复;容量大,所以行列地址复用。
再理解 DRAM 的优化:二维阵列、行缓冲、多 Bank、同步控制、突发传送。
最后回到存储体系:SRAM 快但贵,用作 Cache;DRAM 慢但容量大,用作主存;Cache 和突发传送共同利用局部性提高访问效率。
这一章真正的考点不在于背很多名词,而在于能从“存储单元结构”推出后面的性质。只要抓住“SRAM = 触发器,DRAM = 电容”这个根,速度、刷新、成本、集成度、用途这些结论基本都能顺着推出来。
一、非易失性存储器先解决什么问题?
在计算机组成原理的存储系统中,存储器可以按是否断电丢失信息分为两大类:
易失性存储器:断电后信息丢失,例如 SRAM、DRAM。
非易失性存储器:断电后信息仍能保持,例如 ROM、Flash、磁盘、固态硬盘等。
这里要先纠正一个容易混淆的点:非易失性存储器不等于“只能读不能写”。“非易失性”强调的是断电后信息是否保留;“只读存储器 ROM”强调的是传统意义上写入不方便、主要用于读出。后来出现的 EEPROM、Flash 都属于非易失性存储器,但它们是可以擦写的,只是写入方式、擦除单位、速度和寿命与 RAM 不同。
在 408 语境下,这一块常考的主线是:
ROM 用于保存固定程序或系统启动程序;Flash 是可电擦写的非易失性半导体存储器;SSD 用 Flash 芯片作为存储介质,通过控制器管理擦写、磨损均衡和地址映射。
二、ROM 的基本特点
ROM 是 Read Only Memory,即只读存储器。传统 ROM 的特点是信息一旦写入后,正常使用过程中主要用于读取,不像 RAM 那样频繁随机读写。
ROM 的核心特点可以概括为以下几个方面。
第一,ROM 是非易失性的。断电后,存储内容不会丢失。这一点是 ROM 与 SRAM、DRAM 的最重要区别。
第二,ROM 读出方便,写入不方便。传统 ROM 在制造时或专门编程时写入数据,普通运行过程中主要读出。因此它适合保存固定不变或很少改变的内容。
第三,ROM 通常用于存放固化程序。比如计算机启动时最早执行的 BIOS/UEFI 固件、嵌入式系统中的启动代码、设备控制程序等,都适合放在 ROM 或类 ROM 的非易失性存储器中。
第四,ROM 随机访问能力通常较强。这里的“ROM”在组成原理中一般是半导体存储器,可以按地址访问,不要把它和光盘 CD-ROM 混在一起。CD-ROM 也是只读介质,但它属于外部存储设备,不是这里讨论的半导体 ROM 芯片主线。
考题中如果问 ROM 的用途,标准表达通常是:
ROM 主要用于存放固定程序、系统引导程序、微程序、固件等,断电后内容不丢失。
三、ROM 的几种类型:从不可改到可电擦写
ROM 不是单一类型,而是一类非易失性半导体存储器。按写入和擦除方式,可以分成几种常见形式。
1. 掩模式 ROM:MROM
MROM 是 Mask ROM,掩模式 ROM。它在芯片制造过程中就把信息写死,出厂后用户不能修改。
它的优点是成本低、可靠性高,适合大批量生产固定内容。缺点是灵活性差,一旦内容设计错误或需要升级,就无法修改。
可以理解为:
MROM = 制造时写入,出厂后不可修改。
这种 ROM 在考研中常作为“真正意义上的只读存储器”出现。
2. PROM:一次可编程 ROM
PROM 是 Programmable ROM,可编程 ROM。它出厂时是空白的,用户可以使用专门设备写入一次。写入后就不能再改。
PROM 的特点是:
可以由用户写一次,但只能写一次。
它比 MROM 灵活,因为不需要在制造芯片时就确定内容;但它仍然不支持反复修改。
3. EPROM:紫外线擦除 ROM
EPROM 是 Erasable Programmable ROM,可擦除可编程 ROM。它可以用紫外线照射来擦除内容,然后再重新写入。
EPROM 的特点是:
可以多次擦写,但擦除需要紫外线,通常要整片擦除,操作不方便。
早期 EPROM 芯片上常有一个透明窗口,用来让紫外线照射芯片内部。
4. EEPROM:电擦除 ROM
EEPROM 是 Electrically Erasable Programmable ROM,电可擦除可编程 ROM。它可以用电信号进行擦除和重写,不需要紫外线。
EEPROM 的特点是:
可以电擦写,通常可按字节或较小单位擦写,灵活性更高,但写入速度较慢,成本相对较高。
它适合保存一些容量不大、需要偶尔修改的配置数据,比如设备参数、固件配置等。
5. Flash:闪存
Flash Memory,闪存,本质上可以看作 EEPROM 的一种发展形式。它也是电可擦写的非易失性半导体存储器,但它通常按块擦除,而不是像普通 EEPROM 那样方便地按字节擦除。
Flash 的特点是:
非易失、可电擦写、擦除通常以块为单位、读速度较快、写入和擦除相对较慢、擦写次数有限。
这也是后面 SSD 的基础。
四、ROM 类型比较表
| 类型 | 是否可由用户写入 | 是否可擦除 | 擦除方式 | 典型特点 |
|---|---|---|---|---|
| MROM | 否 | 否 | 制造时固定 | 成本低,适合大批量固定内容 |
| PROM | 可以写一次 | 否 | 熔丝/反熔丝等方式 | 用户一次编程 |
| EPROM | 可以多次写入 | 可以 | 紫外线擦除 | 可重写但不方便 |
| EEPROM | 可以多次写入 | 可以 | 电擦除 | 可按较小单位改写 |
| Flash | 可以多次写入 | 可以 | 电擦除,通常按块擦除 | 容量大,适合 U 盘、SSD、存储卡 |
这张表是选择题和判断题的高频内容。尤其要注意:
PROM 只能写一次。
EPROM 用紫外线擦除。
EEPROM 用电擦除。
Flash 也是电擦除,但通常按块擦除,容量更大,适合做大容量存储。
五、Flash 存储器的基本原理与特点
Flash 存储器属于非易失性半导体存储器。它的存储单元一般通过浮栅晶体管或类似结构保存电荷。有没有电荷、或者电荷多少,会影响晶体管的阈值电压,从而表示不同的数据状态。
从考研角度,不必深究器件物理结构,只要抓住几个性质。
第一,Flash 断电后数据不丢失,所以属于非易失性存储器。
第二,Flash 可以电擦写,不需要紫外线。
第三,Flash 读取速度较快,但写入和擦除速度比读取慢。
第四,Flash 擦除通常以块为单位,写入通常以页为单位。
第五,Flash 有擦写寿命限制。每个存储块不能无限次擦除重写,达到一定次数后可靠性会下降。
第六,Flash 写入前通常需要先擦除。也就是说,不能像 SRAM、DRAM 那样简单地直接覆盖某个位置。Flash 中某些位从一种状态变成另一种状态可能可以通过写入完成,但反向变化往往需要先擦除整个块。
因此 Flash 的关键矛盾是:
读很方便,写和擦除比较麻烦;容量可以很大,但擦写寿命有限。
这就解释了为什么 SSD 需要复杂控制器来管理 Flash。
六、NOR Flash 与 NAND Flash
Flash 常见有两大类:NOR Flash 和 NAND Flash。
NOR Flash 的特点是支持较快的随机读取,适合存放启动代码、固件程序等。CPU 可以较方便地从 NOR Flash 中读取指令,因此它常用于嵌入式系统中的程序存储。
NAND Flash 的特点是容量大、成本低、适合顺序读写和块设备存储,但随机访问粒度和控制复杂度不如 NOR Flash。U 盘、存储卡、SSD 大多使用 NAND Flash。
从考研做题角度,可以这样记:
NOR Flash 更适合代码存储和随机读。
NAND Flash 更适合大容量数据存储,如 U 盘、SSD。
如果题目问“SSD 通常采用哪类 Flash”,优先答 NAND Flash。
七、Flash 与 RAM 的区别
Flash 和 RAM 都是半导体存储器,但性质差别很大。
RAM 主要指 SRAM 和 DRAM,特点是可快速随机读写,但断电丢失。Flash 是非易失性存储器,断电保存,但写入和擦除比 RAM 慢,且擦写次数有限。
所以不能因为 Flash 是半导体存储器,就把它当成内存使用。它更常作为外存介质,而不是主存直接替代品。
| 比较项目 | SRAM/DRAM | Flash |
|---|---|---|
| 是否易失 | 易失 | 非易失 |
| 读写速度 | 快 | 读较快,写/擦较慢 |
| 是否适合频繁随机写 | 适合 | 不适合频繁小粒度随机写 |
| 写入寿命 | 通常不按擦写次数限制理解 | 擦写次数有限 |
| 典型用途 | Cache、主存 | U 盘、SSD、存储卡、固件 |
这类比较题容易出判断:“Flash 可以取代 DRAM 作为主存吗?”一般不能简单说可以。Flash 虽然非易失、容量大,但写入速度、擦除机制、寿命、访问延迟等都不适合直接完全替代 DRAM 作为传统主存。
八、固态硬盘 SSD 的基本概念
SSD 是 Solid State Drive,固态硬盘。它是一种外部存储设备,通常使用 NAND Flash 作为主要存储介质。
SSD 之所以叫“固态”,是因为它没有机械运动部件。传统机械硬盘 HDD 依靠磁盘旋转和磁头移动来读写数据;SSD 内部主要由 Flash 芯片和控制器组成,不需要磁头寻道和盘片旋转。
SSD 的基本组成包括:
Flash 存储芯片:真正保存数据。
SSD 控制器:负责地址映射、读写调度、磨损均衡、坏块管理、垃圾回收、纠错等。
缓存:有些 SSD 使用 DRAM 或 SRAM 作为缓存,用来保存映射表或加速数据访问。
接口:如 SATA、PCIe、NVMe 等,用于和主机通信。
在组成原理中,重点不是背接口参数,而是理解:
SSD 是以 Flash 为介质的外存,它比机械硬盘随机访问快,因为没有机械寻道和旋转延迟。
九、SSD 为什么需要控制器?
如果 Flash 像普通 RAM 一样可以随便覆盖写入,那么 SSD 控制器就不需要那么复杂。但 Flash 有几个麻烦特性:
第一,写入前通常要先擦除。
第二,擦除单位是块,写入单位是页,二者粒度不同。
第三,每个块的擦写寿命有限。
第四,Flash 芯片可能存在坏块,使用过程中也可能产生新坏块。
第五,小粒度随机写会带来额外搬移和擦除开销。
因此 SSD 不能直接把“逻辑地址”简单固定对应到某个物理 Flash 单元。它需要控制器在中间做管理。
这就引出几个常见技术:FTL、磨损均衡、垃圾回收、TRIM、坏块管理、纠错码。
十、FTL:把逻辑地址映射到物理 Flash 地址
FTL 是 Flash Translation Layer,闪存转换层。它负责把主机看到的逻辑块地址映射到 SSD 内部真实的 Flash 物理位置。
操作系统以为自己在写某个逻辑地址,比如 LBA 1000。但 SSD 内部可能并不是直接覆盖原来的物理位置,而是把新数据写到另一个空闲页,并把映射表更新为:
LBA 1000 → 新物理页
原来的旧物理页则标记为无效页,等待以后垃圾回收。
这叫异地更新,也可以理解为“写新位置,改映射,不原地覆盖”。
这样做的原因是 Flash 不能像 RAM 那样方便地原地覆盖写入。
十一、磨损均衡:避免某些块被写坏
Flash 块有擦写寿命限制。如果总是反复擦写某几个物理块,这些块会很快损坏,而其他块却很少使用。
磨损均衡,Wear Leveling,就是让擦写操作尽量均匀分布到不同物理块上,避免局部块过早达到寿命上限。
磨损均衡可以分为动态磨损均衡和静态磨损均衡。
动态磨损均衡主要在新写入数据时选择擦写次数较少的块。
静态磨损均衡还会考虑那些长期不变的冷数据,把冷数据适当搬移,让原来占着低磨损块的冷数据腾出空间,从而让所有块磨损更均匀。
考研一般不要求展开到这么细,但需要知道:
SSD 需要磨损均衡,是因为 Flash 的擦写次数有限。
十二、垃圾回收:整理无效页,腾出可用块
由于 SSD 常采用异地更新,旧数据不会马上被覆盖,而是变成无效页。随着写入次数增加,一个块中可能同时有有效页和无效页。
但是 Flash 擦除必须按块进行,不能只擦除某几个无效页。所以 SSD 控制器会执行垃圾回收:
先把某个块中的有效页搬到其他位置,再擦除整个块,使这个块重新变为空闲块。
垃圾回收会带来额外写入,这叫写放大。也就是说,主机写入一份数据,SSD 内部可能需要搬移更多数据,实际写入量大于主机写入量。
所以 SSD 的性能和寿命不仅取决于 Flash 芯片本身,也取决于控制器算法。
十三、TRIM:告诉 SSD 哪些数据已经无效
操作系统删除文件时,传统上只是修改文件系统元数据,标记这些空间可重用,并不一定马上把数据真正清除。对于机械硬盘,这通常问题不大。
但对 SSD 来说,如果 SSD 不知道哪些逻辑块已经无效,就可能在垃圾回收时把已经删除的数据也当作有效数据搬来搬去,降低效率。
TRIM 命令的作用就是:
操作系统通知 SSD:这些逻辑块已经不再使用,可以在内部回收时当作无效数据处理。
TRIM 可以减少不必要的数据搬移,提高垃圾回收效率,降低写放大,有助于维持 SSD 性能和寿命。
十四、SSD 与机械硬盘 HDD 的比较
SSD 和 HDD 都是外存,但底层原理差别很大。
HDD 是磁表面存储器,依靠磁头寻道、盘片旋转和扇区读写。它有机械部件,所以访问时间中包含寻道时间和旋转等待时间。随机访问性能受机械运动限制明显。
SSD 使用 Flash 芯片,没有机械运动部件,因此随机访问延迟远小于 HDD,抗震性也更好,噪声更低,功耗通常也较低。
但是 SSD 也有自己的问题,比如写入前擦除、擦写寿命限制、垃圾回收导致性能波动、数据恢复难度较高、成本相对较高等。
| 比较项目 | HDD | SSD |
|---|---|---|
| 存储介质 | 磁盘盘片 | NAND Flash |
| 是否有机械部件 | 有 | 无 |
| 随机访问性能 | 较差 | 较好 |
| 顺序读写性能 | 依型号而定 | 通常较好 |
| 抗震性 | 较弱 | 较强 |
| 噪声 | 有机械噪声 | 基本无噪声 |
| 写入寿命问题 | 不按擦写次数理解 | Flash 擦写次数有限 |
| 主要管理问题 | 寻道、旋转调度等 | FTL、磨损均衡、垃圾回收、坏块管理 |
408 中如果问 SSD 为什么随机访问性能好,答案不要写成“转速快”。SSD 没有盘片旋转,也没有磁头寻道,这是关键。
十五、非易失性存储器在存储层次中的位置
在计算机存储系统中,可以粗略形成这样的层次:
寄存器:最快,容量最小,位于 CPU 内部。
Cache:通常由 SRAM 构成,速度快,容量较小。
主存:通常由 DRAM 构成,容量较大,断电丢失。
辅助存储器:如 SSD、HDD,容量更大,非易失,速度低于主存。
ROM/Flash 固件存储:用于保存启动程序、固件、配置等,非易失。
这里要注意,ROM 和 SSD 都是非易失性的,但它们在系统中的角色不同。
ROM 更强调固化程序、启动代码、固件。
SSD 更强调大容量外部存储,用于保存操作系统、应用程序、文件数据等。
Flash 既可以用作固件存储,也可以作为 SSD、U 盘、存储卡的介质。
十六、常见考点与易错点
第一,ROM 是非易失性的,RAM 通常是易失性的。这里的 RAM 包括 SRAM 和 DRAM。不要因为 SRAM 有“静态”二字,就认为它断电不丢失。SRAM 断电同样丢失。
第二,PROM 只能写一次。EPROM 可以擦除后重写,但擦除方式是紫外线。EEPROM 和 Flash 都可以电擦除。
第三,Flash 不是普通 RAM。它虽然可以读写,但写入和擦除机制复杂,不能像 DRAM 一样直接随机覆盖写入。
第四,Flash 擦除通常按块进行,写入通常按页进行。这个粒度差异是 SSD 控制器复杂的根源之一。
第五,SSD 用的是 Flash,不是 SRAM,也不是 DRAM。SSD 中可能有 DRAM 缓存,但它的主要存储介质是 NAND Flash。
第六,SSD 随机访问快的原因是没有机械寻道和旋转等待,而不是因为它完全没有访问延迟。
第七,SSD 也需要管理寿命。磨损均衡的原因是 Flash 擦写次数有限;垃圾回收的原因是异地更新和块擦除机制;TRIM 的作用是通知 SSD 哪些逻辑块已经无效。
十七、这一块可以这样记
这部分最适合按演化关系记忆:
最早的 ROM:内容固定,主要读出,断电不丢失。
PROM:用户可以写一次。
EPROM:可以擦除重写,但要紫外线。
EEPROM:可以电擦除重写。
Flash:电擦除,容量大,通常按块擦除,适合做 U 盘、SSD、存储卡。
SSD:用 NAND Flash 做介质,再加控制器,把复杂的 Flash 擦写管理封装成操作系统看到的块设备。
最后形成一句总复习结论:
ROM/Flash/SSD 都属于非易失性存储相关内容;ROM 偏固化程序,Flash 是可电擦写的大容量非易失半导体存储器,SSD 则是在 NAND Flash 基础上通过控制器实现的大容量高速外存。
一、先理解“多模块存储器”为什么要出现
在计算机组成原理中,主存并不一定只由一个存储模块构成。为了扩大容量、提高带宽,主存常被划分成多个存储模块,也叫多个存储体、多个 Bank。
假设有 4 个存储模块 M0、M1、M2、M3,每个模块都能独立完成一次读写。如果只用一个模块,那么连续读多个地址时,只能一个一个等;如果能让多个模块轮流工作,就可以在一个模块还没完成访问时,让另一个模块开始访问,从而提高连续访问速度。
因此,多模块存储器的核心问题就是:
地址如何分配到不同模块中?
这就引出两种典型方式:
连续编址方式,也叫顺序编址方式、高位交叉编址方式。
交叉编址方式,通常指低位交叉编址方式。
这两个名字容易混,但本质区别很简单:
连续编址:相邻地址大多放在同一个模块中。
交叉编址:相邻地址依次分布到不同模块中。
二、连续编址方式:一个模块装一整段连续地址
连续编址方式的思想是:先把一个模块的地址范围填满,再使用下一个模块。
假设有 4 个模块,每个模块有 8 个存储单元,总容量为 32 个存储单元,地址范围为 0~31。
采用连续编址时,地址分配如下:
| 地址范围 | 所在模块 |
|---|---|
| 0~7 | M0 |
| 8~15 | M1 |
| 16~23 | M2 |
| 24~31 | M3 |
也就是说,M0 存放最前面一段连续地址,M1 存放下一段连续地址,M2 再存放下一段,依此类推。
如果 CPU 连续访问地址 0、1、2、3,那么它们都在 M0 中。这样虽然地址分配很直观,但连续访问时无法充分利用多个模块的并行性,因为这些地址集中在同一个模块里。
所以连续编址方式的特点是:
地址组织简单,扩容直观,但连续访问时并行性较差。
三、连续编址方式的地址划分
假设主存总地址有 n 位,共有 m 个模块,且 m = 2k。那么需要 k 位来表示模块号,剩下 n – k 位表示模块内地址。
在连续编址方式中:
高位地址表示模块号,低位地址表示模块内地址。
例如总共有 32 个地址,需要 5 位地址,写作 A4 A3 A2 A1 A0。现在有 4 个模块,4 = 22,所以需要 2 位表示模块号,每个模块有 8 个单元,需要 3 位表示模块内地址。
连续编址时:
地址格式:模块号 + 模块内地址
A4 A3 | A2 A1 A0
模块号 | 模块内地址
例如地址 13:
13 的二进制是 01101。
按连续编址划分:
01 | 101
高 2 位 01 表示模块 M1,低 3 位 101 表示模块内地址 5。
所以地址 13 在 M1 的第 5 个单元中。
从公式看:
模块号 = 地址 / 每个模块的容量
模块内地址 = 地址 % 每个模块的容量
对于上面的例子,每个模块容量为 8:
地址 13:
模块号 = 13 / 8 = 1
模块内地址 = 13 % 8 = 5
所以地址 13 位于 M1,模块内地址为 5。
四、交叉编址方式:相邻地址分散到不同模块
交叉编址方式的思想是:把连续地址轮流分配给不同模块。
仍然假设有 4 个模块 M0、M1、M2、M3,总地址范围为 0~31。采用交叉编址时,地址分配如下:
| 地址 | 所在模块 |
|---|---|
| 0 | M0 |
| 1 | M1 |
| 2 | M2 |
| 3 | M3 |
| 4 | M0 |
| 5 | M1 |
| 6 | M2 |
| 7 | M3 |
| 8 | M0 |
| 9 | M1 |
| … | … |
可以看到,相邻地址被分散到了不同模块中。
如果 CPU 连续访问地址 0、1、2、3,那么访问顺序是:
0 → M0
1 → M1
2 → M2
3 → M3
这样四个模块可以交替工作。M0 正在访问地址 0 时,M1 可以开始准备访问地址 1,M2 可以准备访问地址 2,M3 可以准备访问地址 3。只要安排得当,就能提高连续读写的吞吐率。
所以交叉编址方式的核心优势是:
适合连续地址访问,可以提高存储器带宽。
五、交叉编址方式的地址划分
在交叉编址方式中:
低位地址表示模块号,高位地址表示模块内地址。
仍然使用 32 个地址、4 个模块的例子。总地址 5 位,4 个模块需要 2 位模块号,每个模块 8 个单元,需要 3 位模块内地址。
交叉编址时:
地址格式:模块内地址 + 模块号
A4 A3 A2 | A1 A0
模块内地址 | 模块号
例如地址 13:
13 的二进制是 01101。
按交叉编址划分:
011 | 01
低 2 位 01 表示模块 M1,高 3 位 011 表示模块内地址 3。
所以地址 13 在 M1 的第 3 个单元中。
从公式看:
模块号 = 地址 % 模块数
模块内地址 = 地址 / 模块数
对于 4 个模块:
地址 13:
模块号 = 13 % 4 = 1
模块内地址 = 13 / 4 = 3
所以地址 13 位于 M1,模块内地址为 3。
这和连续编址的结果不同。连续编址下,地址 13 在 M1 的第 5 个单元;交叉编址下,地址 13 在 M1 的第 3 个单元。
六、连续编址与交叉编址的直观对比
还是用 4 个模块、每个模块 8 个单元来对比。
连续编址:
| 模块 | 存放的地址 |
|---|---|
| M0 | 0, 1, 2, 3, 4, 5, 6, 7 |
| M1 | 8, 9, 10, 11, 12, 13, 14, 15 |
| M2 | 16, 17, 18, 19, 20, 21, 22, 23 |
| M3 | 24, 25, 26, 27, 28, 29, 30, 31 |
交叉编址:
| 模块 | 存放的地址 |
|---|---|
| M0 | 0, 4, 8, 12, 16, 20, 24, 28 |
| M1 | 1, 5, 9, 13, 17, 21, 25, 29 |
| M2 | 2, 6, 10, 14, 18, 22, 26, 30 |
| M3 | 3, 7, 11, 15, 19, 23, 27, 31 |
这个表非常重要。看懂这个表,基本就不会混了。
连续编址是“一段地址归一个模块”。
交叉编址是“相邻地址轮流归不同模块”。
七、为什么交叉编址能提高速度?
存储器访问有一个重要概念:存储周期。一个模块完成一次完整读写需要一定时间。在这个时间内,这个模块不能立即再访问下一次。
假设某个存储模块的存储周期是 T,数据总线每隔 τ 可以传送一个字。若只用一个模块,连续访问多个字时,必须等同一个模块恢复好才能继续访问。
但如果有多个模块,并且连续地址分布在不同模块中,就可以流水式访问。
例如有 4 个模块,连续访问地址 0、1、2、3、4、5、6、7:
地址 0 → M0
地址 1 → M1
地址 2 → M2
地址 3 → M3
地址 4 → M0
地址 5 → M1
地址 6 → M2
地址 7 → M3
当 M0 访问地址 0 后,需要等待一个存储周期才能再次访问。但在 M0 恢复期间,M1、M2、M3 可以分别访问地址 1、2、3。等轮回到地址 4 时,M0 可能已经恢复,可以继续访问。
所以交叉编址不是让单个模块变快,而是让多个模块交替工作,提高连续访问的吞吐率。
考研中常见表述是:
低位交叉编址可以实现多模块流水并行访问,提高存储器带宽。
八、连续编址为什么不利于连续访问?
连续编址下,连续地址大多在同一个模块中。
例如连续访问地址 0、1、2、3,它们都在 M0 中:
地址 0 → M0
地址 1 → M0
地址 2 → M0
地址 3 → M0
这就导致 M0 被连续请求,而 M1、M2、M3 空闲。由于同一个模块不能无限连续访问,所以多个模块的并行性没有发挥出来。
只有当访问跨越模块边界时,比如从地址 7 访问到地址 8,才从 M0 变到 M1。但这种切换太少,不适合提高连续访问带宽。
因此连续编址更像是容量扩展方式,交叉编址更像是带宽优化方式。
九、连续编址与交叉编址的本质区别:看模块号来自高位还是低位
这类题最有效的判断方法是看“模块号由地址的哪几位决定”。
如果模块号由高位地址决定,就是连续编址,也叫高位交叉编址。
如果模块号由低位地址决定,就是交叉编址,也叫低位交叉编址。
可以这样记:
高位决定模块号 → 连续编址 → 相邻地址在同一模块 → 并行性差
低位决定模块号 → 交叉编址 → 相邻地址在不同模块 → 并行性好
为什么低位决定模块号时,相邻地址会落到不同模块?
因为连续地址每加 1,最低位变化最频繁。若低位作为模块号,那么地址每加 1,模块号就跟着变化,于是相邻地址会轮流进入不同模块。
为什么高位决定模块号时,相邻地址会留在同一模块?
因为高位变化慢。只有当低位全部变化完,地址跨过一大段范围时,高位模块号才改变。所以一个模块会保存一整段连续地址。
十、常见计算题怎么做?
这类题通常给出模块数、每个模块容量、地址,然后问该地址位于哪个模块、模块内地址是多少。
做题时先判断编址方式。
例 1:连续编址
有 4 个模块,每个模块 8 个字,按连续编址。问地址 22 位于哪个模块,模块内地址是多少?
连续编址公式:
模块号 = 地址 / 每模块容量
模块内地址 = 地址 % 每模块容量
代入:
模块号 = 22 / 8 = 2
模块内地址 = 22 % 8 = 6
所以地址 22 位于 M2,模块内地址为 6。
也可以看地址范围:
M0:0~7
M1:8~15
M2:16~23
M3:24~31
地址 22 在 16~23 之间,所以属于 M2,偏移为 22 – 16 = 6。
例 2:交叉编址
有 4 个模块,每个模块 8 个字,按交叉编址。问地址 22 位于哪个模块,模块内地址是多少?
交叉编址公式:
模块号 = 地址 % 模块数
模块内地址 = 地址 / 模块数
代入:
模块号 = 22 % 4 = 2
模块内地址 = 22 / 4 = 5
所以地址 22 位于 M2,模块内地址为 5。
注意这里的除法取整数商。
十一、与“高位交叉、低位交叉”的对应关系
有些教材或题目不说“连续编址”和“交叉编址”,而说“高位交叉编址”和“低位交叉编址”。
它们的对应关系一般是:
| 说法一 | 说法二 | 模块号由谁决定 | 地址分布特点 |
|---|---|---|---|
| 连续编址 | 高位交叉编址 | 高位地址 | 一个模块存一段连续地址 |
| 交叉编址 | 低位交叉编址 | 低位地址 | 连续地址分布在不同模块 |
严格说,“高位交叉”这个名字容易让人误以为也有很强的交叉效果。但从地址分布上看,它就是顺序方式、连续编址方式。408 做题时更重要的是掌握实际地址分布,而不是纠结名称。
十二、这部分最常见的易错点
第一,容易把“模块数”和“每个模块容量”混在一起。连续编址时,要用“每个模块容量”去除地址;交叉编址时,要用“模块数”去模地址。
第二,容易把高位和低位记反。连续编址是高位作为模块号;交叉编址是低位作为模块号。
第三,容易以为交叉编址能减少单个存储模块的访问时间。它并不能让单个模块变快,而是让多个模块并行交替工作,提高连续访问吞吐率。
第四,容易以为交叉编址对所有访问模式都一定有效。它主要适合连续地址访问。如果访问地址本身随机,或者频繁落入同一个模块,效果就会下降。
第五,容易忘记交叉编址和 Cache 块传送、指令顺序取指有关系。程序常常顺序取指、顺序访问数组,这些都是连续地址访问,所以低位交叉编址能发挥作用。
十三、快速记忆方法
这部分可以用一句话记:
连续编址看“段”,交叉编址看“轮”。
连续编址是:
M0 放一段,M1 放一段,M2 放一段……
交叉编址是:
M0、M1、M2、M3 轮流放连续地址……
再配合两个公式:
连续编址:
模块号 = 地址 / 每模块容量
模块内地址 = 地址 % 每模块容量
交叉编址:
模块号 = 地址 % 模块数
模块内地址 = 地址 / 模块数
最后再记住考点结论:
连续编址结构简单,便于容量扩展,但连续访问并行性差。
交叉编址适合连续访问,可以让多个模块交替工作,提高存储器带宽,是多体并行存储器提高速度的常用方式。



