第三章存储器层次结构¶
| 题号 | 年份-题号 | 正确答案 | 题号 | 年份-题号 | 正确答案 | 题号 | 年份-题号 | 正确答案 |
|---|---|---|---|---|---|---|---|---|
| 1 | 2017-14 | A | 14 | 2021-15 | C | 27 | 2021-16 | A |
| 2 | 2010-16 | A | 15 | 2022-17 | C | 28 | 2022-16 | A |
| 3 | 2011-14 | B | 16 | 2023-15 | C | 29 | 2010-17 | D |
| 4 | 2014-15 | A | 17 | 2013-20 | B | 30 | 2013-16 | A |
| 5 | 2015-17 | B | 18 | 2013-21 | B | 31 | 2015-16 | B |
| 6 | 2018-17 | C | 19 | 2015-20 | B | 32 | 2019-14 | D |
| 7 | 2012-16 | A | 20 | 2019-20 | C | 33 | 2020-15 | D |
| 8 | 2009-15 | D | 21 | 2009-21 | D | 34 | 2022-15 | C |
| 9 | 2010-15 | D | 22 | 2014-16 | D | 35 | 2024-16 | D |
| 10 | 2011-15 | D | 23 | 2009-14 | C | 36 | 2024-17 | C |
| 11 | 2015-18 | D | 24 | 2012-17 | B | 37 | 2024-18 | B |
| 12 | 2016-16 | C | 25 | 2015-15 | C | |||
| 13 | 2017-13 | C | 26 | 2016-15 | C |
(一)存储器的分类¶
(二)层次化存储器的基本结构¶
- 【2017-14】某C语言程序段如下:
下列关于数组a的访问局部性的描述中,正确的是( )。
A. 时间局部性和空间局部性皆有
B. 无时间局部性,有空间局部性
C. 有时间局部性,无空间局部性
D. 时间局部性和空间局部性皆无
解析
本题选A。
分析数组 a 的访问:
- 空间局部性:内层循环顺序访问
a[0], a[1], ..., a[i],步长为1,与存放顺序一致 → 空间局部性好 - 时间局部性:
a[0]在每次外层循环都被访问(共10次),a[1]被访问9次……靠前的元素被反复重复访问 → 时间局部性好
(三)半导体随机存取存储器¶
SRAM存储器¶
- 【2010-16】下列有关RAM和ROM的叙述中,正确的是( )。
Ⅰ. RAM是易失性存储器,ROM是非易失性存储器
Ⅱ. RAM和ROM都采用随机存取方式进行信息访问
Ⅲ. RAM和ROM都可用作Cache
Ⅳ. RAM和ROM都需要进行刷新
A. 仅Ⅰ和Ⅱ
B. 仅Ⅱ和Ⅲ
C. 仅Ⅰ、Ⅱ和Ⅳ
D. 仅Ⅱ、Ⅲ和Ⅳ
解析
答案选 A
解答:
I正确,II正确,不再解释。
在实际应用中,通常使用高速RAM作为Cache,而不使用ROM。III错误。
RAM需要定期进行刷新,以防止数据丢失。这是由于RAM采用了电容来存储数据,而电容会逐渐失去电荷,需要定期重新充电。ROM不需要刷新,因为它使用了固化的存储技术,数据是永久保存的。IV错误。
综上,I和II正确。
本题选A。
- 【2011-14】下列各类存储器中,不采用随机存取方式的是( )。
A. EPROM
B. CDROM
C. DRAM
D. SRAM
解析
答案选 B
CDROM 采用直接存取方式,注意 CD-ROM 不是 ROM,ROM 特指只读属性的半导体存储器,CDROM 属于光存储器。
DRAM存储器¶
- 【2014-15】某容量为256MB的存储器由若干4M×8位的DRAM芯片构成,该DRAM芯片的地址引脚和数据引脚总数是( )。
A. 19
B. 22
C. 30
D. 36
解析
答案:A. 19
已知条件:
- 存储器总容量:256MB
- 单个DRAM芯片规格:4M × 8位
关键知识点:DRAM采用地址引脚复用技术
DRAM为了减少芯片引脚数,将地址分两次传送(先送行地址,再送列地址),共用同一组地址引脚。
计算地址引脚数:
完整地址需要 22位,但由于地址复用:
行地址11位 + 列地址11位,分时复用同一组11个引脚。
计算数据引脚数:芯片为 ×8位(每次读写8位数据),所以:
总数:
注意:题目问的是芯片的引脚数,与总容量256MB无关(256MB只决定需要多少片芯片进行字扩展,不影响单芯片引脚数)。
- 【2015-17】下列存储器中,在工作期间需要刷新的是( )。
A. SRAM
B. SDRAM
C. ROM
D. FLASH
解析
答案:B. SDRAM

核心原理:
凡是 DRAM(动态随机存取存储器) 都需要刷新。SDRAM(Synchronous DRAM)只是加了同步时钟控制,其存储元仍然是电容,电荷会随时间泄漏,因此必须周期性刷新(通常每64ms刷新一次)。
- 【2018-17】假定DRAM芯片中存储阵列的行数为r、列数为c,对于一个2K×1位的DRAM芯片,为保证其地址引脚数最少,并尽量减少刷新开销,则r、c的取值分别是( )。
A. 2048、1
B. 64、32
C. 32、64
D. 1、2048
解析
答案:C. 32、64
已知条件: 2K × 1位 = 2048 × 1位的DRAM芯片
约束条件:
- 地址引脚数最少
- 刷新开销尽量小
第一步:使地址引脚数最少
DRAM地址复用,地址引脚数 = max(行地址位数, 列地址位数)

B和C的地址引脚数都是6,满足"最少"条件。排除A、D。
第二步:使刷新开销尽量小
关键:DRAM刷新是按"行"进行的!
- 刷新一次 = 选中一行,对该行所有存储元进行读出再写入(恢复电荷)
- 行数 r 越少 → 需要刷新的行数越少 → 刷新开销越小

最终答案:r = 32,c = 64,选C。
Flash存储器¶
- 【2012-16】下列关于闪存(Flash Memory)的叙述中,错误的是( )。
A. 信息可读可写,并且读、写速度一样快
B. 存储元由MOS管组成,是一种半导体存储器
C. 掉电后信息不丢失,是一种非易失性存储器
D. 采用随机访问方式,可替代计算机外部存储器
解析
答案:A
A. 信息可读可写,并且读、写速度一样快 (错误选项)
这是本题的错误叙述。Flash的读操作和写操作速度差异巨大:
- 读:直接感应浮栅MOS管的导通/截止状态,速度很快(ns级)
- 写:需要先擦除(以块为单位,施加高压使电子隧穿),再编程(注入电子),速度很慢(μs~ms级)
- 写速度通常比读速度慢几个数量级
B. Flash的存储元是浮栅MOS管(Floating Gate MOSFET),通过浮栅上是否存储电荷来表示0/1,属于半导体存储器。
C. 浮栅被SiO₂绝缘层包围,电荷无法自行泄漏,掉电后信息可保存10年以上,是非易失性存储器。
D. Flash支持随机访问(可直接寻址任意单元),因此可以替代磁盘等外存,如:
- U盘(NAND Flash)
- SSD固态硬盘(NAND Flash)
- 手机存储(eMMC/UFS)
(四)主存储器¶
DRAM芯片和内存条¶
多模块存储器¶
主存和CPU之间的连接¶
- 【2009-15】某计算机主存容量为64KB,其中ROM区为4KB,其余为RAM区,按字节编址。现要用2K×8位的ROM芯片和4K×4位的RAM芯片来设计该存储器,则需要上述规格的ROM芯片数和RAM芯片数分别是( )。
A. 1、15
B. 2、15
C. 1、30
D. 2、30
解析
答案:D
ROM芯片数:
- 需求:4KB;芯片规格:2K×8位(每片2KB,位宽已满足8位)
- 片数 = 4KB ÷ 2KB = 2片
RAM芯片数:
- RAM区 = 64KB - 4KB = 60KB
- 芯片规格:4K×4位,位宽只有4位,需位扩展:2片组成4K×8位(一组)
- 字扩展:60KB ÷ 4KB = 15组
- 总片数 = 15组 × 2片/组 = 30片
- 【2010-15】假定用若干个2K×4位的芯片组成一个8K×8位的存储器,则地址0B1FH所在芯片的最小地址是( )。
A. 0000H
B. 0600H
C. 0700H
D. 0800H
解析
答案:D
组织方式分析:
- 2K×4位 → 位扩展:2片组成 2K×8位
- 字扩展:4组 2K×8位 → 8K×8位

各组地址分配:

0B1FH 介于 0800H ~ 0FFFH 之间,属于块1,最小地址为 0800H。
或者将0B1F 转换为二进制 0000 1011 0001 1111,属于第二组,该地址所在芯片的最小地址即为0000 1000 0000 0000=0800H
- 【2011-15】某计算机存储器按字节编址,主存地址空间大小为64MB,现用4M×8位的RAM芯片组成32MB的主存储器,则存储器地址寄存器MAR的位数至少是( )。
A. 22位
B. 23位
C. 25位
D. 26位
解析
答案:D(26位)
MAR 的位数取决于主存地址空间大小,与实际安装容量无关。
注意:题目说"主存地址空间大小为64MB",这决定了MAR位数;实际安装32MB只影响芯片数量计算,与MAR无关。
- 【2015-18】某计算机使用4体交叉编址存储器,假定在存储器总线上出现的主存地址(十进制)序列为8005,8006,8007,8008,8001,8002,8003,8004,8000,则可能发生访存冲突的地址对是( )。
A. 8004和8008
B. 8002和8007
C. 8001和8008
D. 8000和8004
解析
答案:D(8000和8004)
4体交叉编址:体号 = 地址 mod 4
8005 mod 4 = 1, 8006 mod 4 = 2,以此类推。由于如果两次连续访问的地址在同一个体,且时间间隔小于存储周期 T(即访问步数差 < m),则发生冲突。这里我们假设存储周期 T=4τ(总线传输周期),每隔一个 τ 的时间启动一个体,按照题目中的访问序列可以还出如下示意图,

冲突条件: 两次访问同一体,间隔步数 < 4(体未完成存取就再次被访问)
- 8004(位置8,体0)→ 8000(位置9,体0):间隔 = 1 < 4,发生冲突!
逐项验证选项:
- A. 8004(体0) 和 8008(体0):序列间隔 = 4,不冲突
- B. 8002(体2) 和 8007(体3):不同体,不冲突
- C. 8001(体1) 和 8008(体0):不同体,不冲突
- D. 8000(体0) 和 8004(体0):相邻访问,同体,冲突 ✓
- 【2016-16】某存储器容量为64KB,按字节编址,地址4000H~5FFFH为ROM区,其余为RAM区。若采用8K×4位的SRAM芯片进行设计,则需要该芯片的数量是( )。
A. 7
B. 8
C. 14
D. 16
解析
答案:C

ROM区: 4000H ~ 5FFFH = 8KB
RAM区: 64KB - 8KB = 56KB
使用 8K×4位 SRAM 芯片:
- 位扩展: 4位 → 8位,需 2片/组
- 字扩展: 56KB ÷ 8KB = 7组
- 总片数 = 7 × 2 = 14片
- 【2017-13】某计算机主存按字节编址,由4个64M×8位的DRAM芯片采用交叉编址方式构成,并与宽度为32位的存储器总线相连,主存每次最多读写32位数据。若double型变量x的主存地址为804001AH,则读取x需要的存储周期数是( )。
A. 1
B. 2
C. 3
D. 4
解析
答案:C
基本信息:
- 4体交叉编址,体号 = 地址低2位;
- 存储器总线为32位,每个模块占8位,4个模块正好占32位,因此符合同时启动的条件,每次读操作并行启动 4 个体;
- double 型 = 8字节,起始地址 804001AH,低2位10,对应体号为 2,因此这 8 个字节的 数据 X 在存储体中的分布示意图如下

如图,读取 X 需要三次读取操作,因此需要 3 个存储周期。
- 【2021-15】某计算机的存储器总线中有24位地址线和32位数据线,按字编址,字长为32位。若000000H~3FFFFFH为RAM区,则需要512K×8位的RAM芯片数为( )。
A. 8
B. 16
C. 32
D. 64
解析
答案:C(32片)
RAM区容量计算:
- 地址范围:000000H ~ 3FFFFFH
- 字数 = 3FFFFFH + 1 = 400000H =
字
- 每字 32位 = 4字节
- 总容量 =
× 4B = 16MB
所需芯片数:
- 512K×8位芯片 = 512KB
- 片数 = 16MB ÷ 512KB = 32片
(也可分解:位扩展 32÷8 = 4片/组,字扩展 16MB÷2MB = 8组,共32片)
- 【2022-17】某内存条包含8个8192×8192×8位的DRAM芯片,按字节编址,支持突发传送方式,对应存储器总线宽度为64位,每个DRAM芯片内有一个行缓冲区。下列关于该内存条的叙述中,不正确的是( )。
A. 内存条的容量为512MB
B. 采用多模块交叉编址方式
C. 芯片的地址引脚为26位
D. 芯片内行缓冲有8192×8位
解析
答案:C(不正确的叙述)
每芯片参数: 8192×8192×8位 = 位
- A. 单芯片 =
位 =
字节 = 64MB;8片共 512MB ✓ 正确
- B. 存储器按字节编址,总线宽度为64位,而每个芯片一次只能传输8位,因此需要使用8体多模块交叉编址方式的同时启动才能实现。
- C. DRAM 采用行列地址复用,内部有
行、
列,地址引脚只需 13位(分时传行地址/列地址),而非26位 ✗ 不正确
- D. 每行有8192个存储单元,每单元8位,行缓冲 = 8192×8位 ✓ 正确(需要注意题目问的是芯片内的行缓冲大小还是整个内存条的行缓冲大小)
- 【2023-15】某计算机的 CPU 有 30 根地址线,按字节编址,CPU 和主存芯片连接时,要求主存芯片占满所有可能存储地址空间,并且 RAM 区和 ROM 区所分配的空间大小比为 3:1,若 RAM 在连续低地址区,ROM 在连续高地址区,则 ROM 的地址范围( )。
A. 00000000H~0FFFFFFFH
B. 10000000H~2FFFFFFFH
C. 30000000H~3FFFFFFFH
D. 40000000H~4FFFFFFFH
解析
答案:C
地址空间总大小:
按 RAM:ROM = 3:1 分配:
- RAM =
× 1GB = 768MB(低地址区)
- ROM =
× 1GB = 256MB(高地址区)

(五)外部存储器¶
1.磁盘存储器¶
- 【2013-20】下列选项中,用于提高RAID可靠性的措施有
I. 磁盘镜像
Ⅱ. 条带化
Ⅲ. 奇偶校验
Ⅳ. 增加Cache机制
A. 仅I、Ⅱ
B. 仅I、Ⅲ
C. 仅I、Ⅲ和Ⅳ
D. 仅Ⅱ、Ⅲ和Ⅳ
解析
答案:B.仅 I、Ⅲ
RAID(独立磁盘冗余阵列)通过多个磁盘协同工作,提高存储系统的性能、可靠性或两者兼顾。
I.磁盘镜像:磁盘镜像是将相同数据同时写入两个或多个磁盘。当其中一个磁盘损坏时,可以从其他镜像磁盘中读取数据,因此能够提高可靠性。例如 RAID 1 就采用磁盘镜像。
Ⅱ.条带化:条带化是将数据分割后,分别存储到多个磁盘中。它可以使多个磁盘并行读写,提高系统的存取速度,但本身不提供冗余。例如 RAID 0 只采用条带化,没有任何冗余,一个磁盘损坏就可能导致整个阵列数据丢失,因此不能提高可靠性。
Ⅲ.奇偶校验:奇偶校验信息可以用于检测和恢复部分磁盘故障造成的数据丢失。例如 RAID 5 使用分布式奇偶校验,当一个磁盘损坏时,可以利用其他磁盘中的数据和奇偶校验信息恢复数据,因此能够提高可靠性。
Ⅳ.增加 Cache 机制:Cache 主要用于减少磁盘访问次数、提高读写性能。Cache 中的数据通常是临时保存的,增加 Cache 并不能提供磁盘故障后的数据冗余,甚至写缓存掉电还可能造成数据丢失,因此不能作为提高 RAID 可靠性的主要措施。
故选 B。
- 【2013-21】某磁盘的转速为10000rpm,平均寻道时间是6ms,磁盘传输速率是20MB/s,磁盘控制器延时为0.2ms,读取一个4KB的扇区所需的平均时间约为( )。
A. 9ms
B. 9.4ms
C. 12ms
D. 12.4ms
解析
正确答案:B.9.4ms
磁盘读取时间通常由以下几部分组成:平均存取时间= 平均寻道时间+ 平均旋转延迟+ 数据传输时间+ 磁盘控制器延迟
1.计算平均旋转延迟:磁盘转速为 10000rpm,即每分钟旋转 10000 圈。一圈所需时间为:60s ÷ 10000 = 0.006s = 6ms;由于要读取的扇区平均需要等待半圈,所以平均旋转延迟为:6ms ÷ 2 = 3ms
2.计算数据传输时间:磁盘传输速率为 20MB/s,读取数据量为 4KB。
近似计算:4KB ÷ 20MB/s ≈ 0.2ms
如果严格按 4096B 和 20×10⁶B/s 计算,结果约为 0.205ms,仍可近似为 0.2ms。
3.计算总时间:平均时间= 6ms + 3ms + 0.2ms + 0.2ms= 9.4ms
其中:
- 6ms:平均寻道时间
- 3ms:平均旋转延迟
- 0.2ms:数据传输时间
- 0.2ms:控制器延迟
故选 B。
- 【2015-20】若磁盘转速为7200rpm,平均寻道时间为8ms,每个磁道包含1000个扇区,则访问一个扇区的平均存取时间大约是( )。
A. 8.1ms
B. 12.2ms
C. 16.3ms
D. 20.5ms
解析
答案:B.12.2ms
1.计算平均旋转延迟
磁盘转速为 7200rpm。
一圈所需时间为:60s ÷ 7200 = 0.008333s = 8.333ms
平均旋转延迟为半圈时间:8.333ms ÷ 2 ≈ 4.167ms
2.计算一个扇区的传输时间
一个磁道包含 1000 个扇区,因此读取一个扇区所需的传输时间约为一圈时间的千分之一:8.333ms ÷ 1000 ≈ 0.0083ms
这个时间非常小,可以近似忽略。
3.计算平均存取时间
平均存取时间= 平均寻道时间+ 平均旋转延迟+ 扇区传输时间= 8ms + 4.167ms + 0.0083ms≈ 12.175ms≈ 12.2ms
故选 B。
- 【2019-20】下列关于磁盘存储器的叙述中,错误的是( )。
A. 磁盘的格式化容量比非格式化容量小
B. 扇区中包含数据、地址和校验等信息
C. 磁盘存储器的最小读写单位为一字节
D. 磁盘存储器由磁盘控制器、磁盘驱动器和盘片组成
解析
答案:C.磁盘存储器的最小读写单位为一字节
A.磁盘的格式化容量比非格式化容量小。该说法正确。磁盘格式化后,需要划分磁道和扇区,并为每个扇区增加地址信息、校验信息、同步信息以及扇区间间隔等,这些内容会占用一部分磁盘空间。
因此:格式化容量 < 非格式化容量
B.扇区中包含数据、地址和校验等信息。该说法正确。一个扇区除了用户实际存储的数据外,通常还包含:
- 扇区地址或标识信息
- 同步信息
- 错误检测或纠正信息
- 数据区
因此扇区并不只保存用户数据。
C.磁盘存储器的最小读写单位为一字节。该说法错误。磁盘不能像内存那样以单个字节作为基本读写单位。磁盘的基本读写单位是扇区。传统磁盘的一个扇区通常为 512B,现代磁盘常采用 4KB 扇区。因此,即使只需要读取一个字节,磁盘通常也要读取包含该字节的整个扇区。
D.磁盘存储器由磁盘控制器、磁盘驱动器和盘片组成。该说法正确。磁盘存储器通常包括:
- 盘片:实际记录数据的介质
- 磁盘驱动器:负责盘片旋转、磁头移动和数据读写
- 磁盘控制器:负责向驱动器发送控制命令,并完成数据传输、校验等工作
所以错误的是 C,故选 C。
2.固态硬盘(SSD)¶
(六)高速缓冲存储器(Cache)¶
Cache的基本原理¶
- 【2009-21】假设某计算机的存储系统由Cache和主存组成。某程序执行过程中访存1000次,其中访问Cache缺失(未命中)50次,则Cache的命中率是( )。
A. 5%
B. 9.5%
C. 50%
D. 95%
解析
答案:D
Cache命中率公式为:
总访存1000次,缺失50次,命中次数=1000-50=950次,因此命中率=950/1000=95%。
- 【2014-16】采用指令Cache与数据Cache分离的主要目的是( )。
A. 降低Cache的缺失损失
B. 提高Cache的命中率
C. 降低CPU平均访存时间
D. 减少指令流水线资源冲突
解析
答案:D
在指令流水线中,IF(取指)阶段访问指令 Cache,MEM(访存)阶段访问数据 Cache。若两者共用同一个 Cache,IF 和 MEM 阶段将产生结构冒险(资源冲突),无法并行执行。分离后,IF 和 MEM 可在同一时钟周期内同时访问各自的 Cache,消除结构冲突。
选项 A/B/C 不是主要目的,命中率和平均访存时间不一定因分离而明显改善。
Cache和主存之间的映射方式¶
Cache中主存块的替换算法¶
Cache写策略¶
- 【2009-14】某计算机的Cache共有16块,采用2路组相联映射方式(即每组2块)。每个主存块大小为32字节,按字节编址。主存129号单元所在主存块应装入到的Cache组号是( )。
A. 0
B. 2
C. 4
D. 6
解析
答案:C
组相联映射核心公式:
- 计算主存块号:主存块大小32字节,按字节编址,129号单元所在主存块号=⌊129/32⌋=4;
- 计算Cache组数:Cache共16块,2路组相联,每组2行,组数=16/2=8组;
- 计算组号:4 mod 8=4。
或者这样,
- Cache 共 16 块,2 路组相联 → 组数 = 16 / 2 = 8 组
- 块大小 = 32 字节 → 块内偏移位数 = log₂(32) = 5 位
- 组索引位数 = log₂(8) = 3 位 因此可知
主存地址 129 转为二进制为 100 00001,其中 00001 为块内地址,100 为组号,因此组号为 4.
- 【2012-17】假设某计算机按字编址,Cache有4个行,Cache和主存之间交换的块大小为1个字。若Cache的内容初始为空,采用2路组相联映射方式和LRU替换策略。访问的主存地址依次为 0,4,8,2,0,6,8,6,4,8 时,命中Cache的次数是( )。
A. 1
B. 2
C. 3
D. 4
解析
本题与 408 现在的映射规则不同,因此跳过不做
- 【2015-15】假定主存地址位数为32位,按字节编址,主存和Cache之间采用直接映射方式,主存块大小为4个字,每字32位,写操作时采用回写 (Write Back) 方式,则能存放4K字数据的Cache的总容量的位数至少是( )。
A. 146K
B. 147K
C. 148K
D. 158K
解析
答案:C
- 数据容量 = 4K 字 × 32 位/字 = 4K × 4B = 16KB
- 主存块大小 = 4 字 × 4B = 16B
- Cache 行数 = 16KB / 16B = 1024 行
- 地址位分配(32位,直接映射):
- 块内偏移 = log₂(16) = 4 位
- 行索引 = log₂(1024) = 10 位
- 标记(Tag)= 32 − 4 − 10 = 18 位
- 每行位数 = 标记(18) + 有效位(1) + 脏位(1,回写需要) + 数据(16B×8=128) = 148 位
- Cache 总容量 = 1024 × 148 = 148K 位
- 【2016-15】有如下 C 语言程序段:
若数组 a 以及变量 k 均为 int 型,int 型数据占 4B,数据 Cache 采用直接映射方式,数据区大小是 1KB,块大小是 16B,该程序段执行前 Cache 为空,则该程序段执行过程中,访问数组 a 的 Cache 的缺失率是( )。
A. 1.25%
B. 2.5%
C. 12.5%
D. 25%
解析
答案:C
- int = 4B,块大小 = 16B → 每块含 16B / 4B = 4 个 int
- 每次迭代对 a[k] 进行 1 次读 + 1 次写 = 2 次访问
- 总访问次数 = 2 × 1000 = 2000 次
- 每 4 个元素(一个块)的第 1 次读为冷缺失,随后的读/写均命中:
- 缺失次数 = 1000 / 4 = 250 次
- 缺失率 = 250 / 2000 = 12.5%
- 【2021-16】若计算机主存地址为32位,按字节编址,Cache数据区大小为32KB,主存块大小为32B,采用直接映射方式和回写(Write Back)策略,则Cache行的位数至少是( )。
A. 275
B. 274
C. 258
D. 257
解析
答案:A
解析:
- 数据区 = 32KB,块大小 = 32B,直接映射
- Cache 行数 = 32KB / 32B = 1024 行
- 地址分配(32 位):
- 块内偏移 = log₂(32) = 5 位
- 行索引 = log₂(1024) = 10 位
- 标记 = 32 − 5 − 10 = 17 位
- 每行位数 = 有效位(1) + 脏位(1,回写) + 标记(17) + 数据(32B×8=256) = 1 + 1 + 17 + 256 = 275 位
- 【2022-16】某计算机主存地址为32位,按字节编址,某Cache的数据区容量为32KB,主存块大小为64B,采用8路组相联映射方式,该Cache中比较器的个数和位数分别为( )。
A. 8,20
B. 8,23
C. 64,20
D. 64,23
解析
答案:A
- 数据区 = 32KB,块大小 = 64B,8 路组相联
- 组数 = (32KB / 64B) / 8 = 512 / 8 = 64 组
- 地址分配(32 位):
- 块内偏移 = log₂(64) = 6 位
- 组索引 = log₂(64) = 6 位
- 标记 = 32 − 6 − 6 = 20 位
- 访问时,用组索引选定一组,将输入标记与该组 8 路的标记同时比较:
- 比较器个数 = 8 个(每路一个,并行比较)
- 每个比较器宽度 = 标记位数 = 20 位
(七)虚拟存储器¶
Tip
- 虚拟存储器的基本概念
- 页式虚拟存储器:基本原理,页表,地址转换,TLB(快表)
- 段式虚拟存储器的基本原理
- 段页式虚拟存储器的基本原理
- 【2010-17】下列命中组合情况中,一次访存过程中不可能发生的是( )。
A. TLB未命中,Cache未命中,Page未命中
B. TLB未命中,Cache命中,Page命中
C. TLB命中,Cache未命中,Page命中
D. TLB命中,Cache命中,Page未命中
解析
答案:D
TLB(快表)本质上是页表(Page Table)在CPU内部的一个高速缓存。如果 TLB命中,说明该虚拟页对应的页表项已经缓存在了TLB中,而只有当一个页面已经被装入主存(即 Page命中)时,它的物理映射信息才可能是有效的并被缓存到TLB中。因此,只要TLB命中,必定意味着Page也是命中的。所以“TLB命中,Page未命中”的情况在一次访存过程中是不可能发生的。
- 【2013-16】某计算机主存地址空间大小为256MB,按字节编址。虚拟地址空间大小为4GB,采用页式存储管理,页面大小为4KB,TLB(快表)采用全相联映射,有4个页表项,内容如下表所示。
\(\begin{array}{cccc}\text{有效位}&\text{标记}&\text{页框号}&\text{...}\\\hline 0&\text{FF180H}&\text{0002H}&\text{...}\\ 1&\text{3FFF1H}&\text{00352H}&\text{...}\\ 0&\text{02FF3H}&\text{0351H}&\text{...}\\ 1&\text{03FFFH}&\text{0153H}&\text{...}\\ \end{array}\)
则对虚拟地址03FFF180H进行虚实地址变换的结果是( )。
A. 0153180H
B. 0035180H
C. TLB缺失
D. 缺页
解析
答案:A
- 拆分虚拟地址: 按字节编址,页面大小为 4KB(即
),因此虚拟地址的低12位为页内偏移量。虚拟地址总长32位(4GB),高20位为虚拟页号(VPN)。
- 虚拟地址
,查找TLB中03FFFH对应的页表项,有效位为1,页框号为0153H,物理地址为
。
- 【2015-16】假定编译器将赋值语句“x=x+3;”转换为指令“add xaddr, 3”,其中xaddr是x对应的存储单元地址。若执行该指令的计算机采用页式虚拟存储管理方式,并配有相应的TLB,且Cache使用直写 (Write Trough)方式,则完成该指令功能需要访问主存的次数至少是( )。
A. 0
B. 1
C. 2
D. 3
解析
答案:B
指令 add xaddr, 3 的完整执行周期(包括取指、取数、执行写回)访存情况如下:
- 取指令: 题目假设配有相应的TLB,若取指时TLB命中且Cache命中,则访问主存 0次。
- 取操作数: 题目求“至少”的情况,我们假设最乐观的状态,即访问
xaddr时TLB命中且Cache也命中,从Cache中取数,访问主存 0次。 - 写回操作数: CPU将加3后的结果写回
xaddr。虽然此时Cache依然命中,但题目明确指出 Cache采用直写(Write Through)方式。直写策略要求在向Cache写入数据的同时,必须同步将数据写入主存。因此这一步不可避免地需要访问主存 1次。 综合以上步骤,完成该指令至少需要访问主存1次。
- 【2019-14】下列关于缺页处理的叙述中,错误的是( )。
A. 缺页是在地址转换时CPU检测到的一种异常
B. 缺页处理由操作系统提供的缺页处理程序来完成
C. 缺页处理程序根据页故障地址从外存读入所缺失的页
D. 缺页处理完成后回到发生缺页的指令的下一条指令执行
解析
答案:D
缺页异常属于内部异常中的故障(Fault)。当CPU在进行地址转换检测到缺页时,当前正在执行的指令会被迫中止。操作系统介入并从外存调入缺失的页后,CPU会返回到发生缺页异常的那条指令重新执行(因为该指令刚才并没有执行成功),而不是回到下一条指令执行。因此选项D的叙述是错误的。
- 【2020-15】下列关于TLB和Cache的叙述中,错误的是( )。
A. 命中率都与程序局部性有关
B. 缺失后都需要去访问主存
C. 缺失处理都可以由硬件实现
D. 都由DRAM存储器组成
解析
答案:D
A正确:Cache利用数据的空间/时间局部性,TLB利用页表访问的局部性。
B正确:Cache缺失需访问主存读取数据块,TLB缺失需访问主存读取多级页表。
C正确:Cache缺失全由硬件处理;TLB缺失既可以由硬件实现(如X86),也可以由软件处理(如MIPS),所以“可以由硬件实现”表述无误。
D错误:Cache和TLB为了追求与CPU匹配的极高访问速度,通常都由 SRAM(静态随机存取存储器)或 CAM(相联存储器)组成,只有主存才通常由 DRAM(动态随机存取存储器)组成。
- 【2022-15】某计算机主存地址为24位,采用分页虚拟存储管理方式,虚拟地址空间大小为4GB,页大小为4KB,按字节编址。某进程的页表部分内容如下表所示。当CPU访问虚拟地址00082840H,虚-实地址转换的结果是( )。
\(\begin{array} {|c|c|c|}\hline \text{虚页号}&\text{实页号(页框号)}&\text{存在位}\\\hline \text{82}&\text{024H}&0\\\hline \dots&\dots&\dots\\\hline \text{129}&\text{180H}&1\\\hline \text{130}&\text{018H}&1\\\hline \end{array}\)
A. 得到主存地址02 4840H
B. 得到主存地址18 0840H
C. 得到主存地址01 8840H
D. 检测到缺页异常
解析
答案:C
页面大小 4KB( B),页内偏移量占12位。对虚拟地址
0008 2840H 进行拆分,低12位 840H 是页内偏移,高20位 00082H 是虚拟页号,00082H=8×16+2=130,查该进程页表得,虚页号130对应的存在位为1,实页号为018H,主存地址为24位,实页号占高24-12=12位,查表得到的实页号正好12位,高位不需要去0或者补0,拼接得到主存地址 。
- 【2024-16】对于页式虚拟存储管理系统,下列关于存储器层次结构的叙述中,错误的是
A. Cache-主存层次的交换单位为主存块,主存-外存层次交换单位为页
B. Cache-主存层次替换算法由硬件实现,主存-外存层次替换算法由软件实现
C. Cache-主存层次可采用回写法写策略,主存-外存层次通常采用回写法写策略
D. Cache-主存层次可采用直接映射方式,主存-外存层次通常采用直接映射方式
解析
答案:D
- D 选项错误。 Cache-主存层次确实可以采用直接映射方式(也可以是全相联或组相联),但是主存-外存层次(虚拟存储系统)通常采用的是全相联映射方式,而不是直接映射方式。因为外存(磁盘)的读取速度极慢,发生缺页的代价极其惨重,为了尽最大可能消除“冲突缺失”、提高命中率,系统允许将外存中的任何一页调入主存中的任何一个空闲页框内(即全相联)。
其他选项分析(均为正确叙述):
- A 选项正确: Cache 与主存之间的数据交换是以“块(Block)”为单位的(通常几十字节);而主存与外存之间的数据交换是以“页(Page)”为单位的(通常几KB到几十KB)。
- B 选项正确: Cache 为了追求极致的速度,其映射、替换等所有操作均由硬件逻辑直接实现;而主存-外存层次的缺页处理、页面替换等操作,是由操作系统的存储管理模块(软件)结合页表来实现的。
- C 选项正确: Cache-主存层次的写策略可以是直写(Write-through)或回写(Write-back);但在主存-外存层次,由于每次访问磁盘的开销巨大,系统绝不可能在每次修改主存时都同步去写磁盘(直写),因此必然采用回写策略,即只在页面被替换出主存时才将其写回磁盘。
- 【2024-17】某计算机按字节编址,采用页式虚拟存储管理方式,虚拟地址为32位,主存地址为30位,页大小为1 KB。若TLB共有32个表项,采用4路组相联映射方式,则 TLB 表项在标记字段的位数至少是
A. 17
B. 18
C. 19
D. 20
解析
答案:C
- 求虚拟页号(VPN)位数: 页大小为 1KB(
B),因此虚拟地址(32位)的低10位为页内偏移。高位即为虚拟页号,位数为 32 - 10 = 22 位。
- 划分TLB结构: TLB通过虚拟页号进行查找,VPN在TLB中被划分为
[TLB标记 (Tag)]和[TLB组索引 (Index)]两部分。 - 求组索引位数: TLB共有32个表项,采用4路组相联映射,因此总组数为
= 8 组。要对8个组进行寻址,组索引需要
= 3 位。
- 求标记字段位数: TLB标记的位数 = 虚拟页号总位数 - 组索引位数 = 22 - 3 = 19 位。因此TLB表项在标记字段至少需要19位。
- 【2024-18】下列事件,不是在 MMU 地址转换过程中检测的是
A. 访问越权
B. Cache 缺失
C. 页面缺失
D. TLB缺失
解析
答案:B
MMU 负责将虚拟地址转化为物理地址,所以会检测以下事件:访问越权、页面缺失、TLB 缺失。Cache 缺失不是在 MMU 地址转换过程中检测的,而是在 CPU 访问主存数据检测的,访问主存的前提是有物理地址,所以该过程是在 MMU 完成地址翻译之后。