存储器层次结构练习题
练习 1
简述存储器的层次结构及各层特点。
解题思路:
按从快到慢的顺序列出四个层次,给出每个层次的两三项特征,最后说明整个层次结构带来的性质。
详细步骤:
存储器的层次结构包括:
-
寄存器:
- 速度最快,容量最小(几十个)
- 与 CPU 集成,成本最高
- 存储当前操作的数据
-
Cache:
- 速度很快,容量较小(KB-MB)
- 存储近期访问的数据
- 利用局部性原理提高命中率
-
主存:
- 速度较快,容量较大(GB)
- 存储程序和数据
- 与 CPU 直接交换数据
-
辅存:
- 速度较慢,容量最大(TB)
- 永久存储数据
- 成本最低
各层通过层次化设计,实现速度、容量、成本的平衡,利用局部性原理提高整体性能。
最终答案:
存储体系由寄存器、Cache、主存和辅存组成。寄存器速度最快、容量最小,与 CPU 集成在一起;Cache 速度很快但容量相对较小,保存近期访问过的数据;主存速度相对较快、容量相对较大,存放程序和数据;辅存速度相对较慢但容量最大,以最低的成本永久保存数据。通过这种分层设计,各级在速度、容量和成本之间取得平衡,局部性原理则提升了系统的整体性能。
练习 2
SRAM 和 DRAM 有何区别?
解题思路:
从工作原理、速度、功耗、成本、容量和应用六个差异维度对比两种存储器,再归纳其取舍。
详细步骤:
SRAM 和 DRAM 的主要区别:
-
工作原理:
- SRAM:基于触发器电路,不需要刷新
- DRAM:基于电容存储,需要定期刷新
-
速度:
- SRAM:速度快,访问时间短
- DRAM:速度较慢,需要刷新时间
-
功耗:
- SRAM:功耗低,静态功耗小
- DRAM:功耗较高,动态功耗大
-
成本:
- SRAM:成本高,电路复杂
- DRAM:成本低,电路简单
-
容量:
- SRAM:容量小,集成度低
- DRAM:容量大,集成度高
-
应用:
- SRAM:用作 Cache、寄存器
- DRAM:用作主存储器
最终答案:
SRAM 由触发器构成,无需刷新,因此速度快、功耗低,但价格高、容量小,故用于 Cache 和寄存器。DRAM 由电容构成,需要周期性刷新,因此速度较慢、功耗较大,但价格低、容量大,故用于主存。二者的选择就是速度与单位比特成本之间的直接权衡。
练习 3
Cache 的三种映射方式分别是什么?
解题思路:
依次考察三种映射方式,对每种说明主存块的放置规则、映射关系,以及冲突率与硬件成本之间的取舍。
详细步骤:
Cache 的三种映射方式:
-
直接映射:
- 主存块映射到 Cache 的固定位置
- 映射关系:Cache 行号 = 主存块号 mod Cache 行数
- 优点:实现简单,访问速度快
- 缺点:冲突率高,命中率低
-
全相联映射:
- 主存块可以映射到 Cache 的任意位置
- 需要比较所有 Cache 行的标记
- 优点:冲突率低,命中率高
- 缺点:实现复杂,访问速度慢
-
组相联映射:
- 主存块映射到固定组内的任意行
- 结合直接映射和全相联的优点
- 优点:冲突率适中,命中率较高
- 缺点:实现复杂度适中
最终答案:
三种映射方式分别是:直接映射,每个主存块按“Cache 行号 = 主存块号 mod Cache 行数”映射到固定的 Cache 行,实现最简单、速度最快,但冲突率较高;全相联映射,一个块可以映射到任意位置,必须比较所有标记,冲突率最低、命中率最高,代价是访问速度慢;组相联映射,一个块可以映射到某个固定组内的任意 Cache 行,兼收前两者的优点,是多数 Cache 采用的方式。
练习 4
虚拟存储器的基本原理是什么?常见的页面置换算法有哪些?
解题思路:
分两部分作答:先从概念、工作机制和优点三个层面说明原理,再介绍四种页面置换算法各自的置换规则及其取舍。
详细步骤:
虚拟存储器的基本原理:
-
基本概念:
- 将外存空间扩展为主存空间
- 程序可以访问比物理内存更大的地址空间
- 实现内存管理的自动化
-
工作原理:
- 程序使用虚拟地址
- 通过地址转换得到物理地址
- 按需调入页面到内存
-
优势:
- 扩大地址空间
- 提高内存利用率
- 简化程序开发
常见的页面置换算法:
-
OPT(最优算法):
- 选择未来最长时间不使用的页面
- 理论最优,实际无法实现
-
FIFO(先进先出):
- 选择最先进入内存的页面
- 实现简单,效果一般
-
LRU(最近最少使用):
- 选择最久未被访问的页面
- 效果较好,实现复杂
-
CLOCK 算法:
- 结合 LRU 和 FIFO 的优点
- 使用引用位,循环扫描
- 实现相对简单,效果较好
最终答案:
虚拟存储器把外存扩展到主存空间,使程序可以访问超过物理存储器容量的地址空间,虚拟地址通过页表或段表转换为物理地址,页面按需调入;其结果是地址空间更大、存储器利用率更高、程序开发更简单。常用的页面置换算法有:OPT,置换最长时间不会被使用的页面,理论上最优但无法实现;FIFO,置换最先进入的页面,实现简单但效果一般;LRU,置换最长时间未被使用的页面,效果好但实现复杂;以及 CLOCK,利用访问位和循环扫描,以较低的实现代价结合 LRU 与 FIFO 的优点。
练习 5
TLB 的作用是什么?
解题思路:
分五个层面作答:TLB 加速了什么、节省了哪些访存、利用了怎样的访问模式、如何融入存储层次、节省了多少功耗,最后用一句话总结。
详细步骤:
TLB(Translation Lookaside Buffer,快表)的作用:
-
加速地址转换:
- 缓存常用的地址转换结果
- 减少页表查找次数
- 提高地址转换速度
-
减少内存访问:
- 避免每次地址转换都访问页表
- 减少内存访问延迟
- 提高系统整体性能
-
优化访问模式:
- 利用程序的空间局部性
- 缓存近期访问的地址转换
- 提高 TLB 命中率
-
支持多级缓存:
- 作为地址转换的缓存
- 与数据 Cache 配合工作
- 形成完整的内存层次结构
-
降低功耗:
- 减少页表访问次数
- 降低内存访问功耗
- 提高能效比
最终答案:
TLB(快表)是地址转换的缓存。它通过缓存常用到的转换结果来加速地址转换,减少页表查找次数和访存延迟,从而提升整体性能。它利用程序的空间局部性优化访问模式、缓存近期使用过的转换结果,因而命中率更高。它还完善了存储体系,与数据 Cache 并列成为地址转换的缓存,并通过减少页表访问次数降低功耗。
练习 6
页式虚拟存储器和段式虚拟存储器有何区别?
解题思路:
从基本单位、地址结构、管理方式、地址转换、内存分配、保护机制和应用场景七个差异维度对比两种方案。
详细步骤:
页式虚拟存储器和段式虚拟存储器的区别:
-
基本单位:
- 页式:页面,固定大小
- 段式:段,可变大小
-
地址结构:
- 页式:页号 + 页内偏移
- 段式:段号 + 段内偏移
-
管理方式:
- 页式:按页面管理,支持页面置换
- 段式:按段管理,支持段交换
-
地址转换:
- 页式:页表查找,计算物理地址
- 段式:段表查找,检查段内偏移
-
内存分配:
- 页式:按页面分配,可能产生内碎片
- 段式:按段分配,可能产生外碎片
-
保护机制:
- 页式:页面级保护
- 段式:段级保护,更灵活
-
适用场景:
- 页式:通用系统,支持多任务
- 段式:专用系统,支持模块化程序
最终答案:
在分页虚拟存储器中,管理单位是固定大小的页,地址由页号加页内偏移量构成,存储器按页管理并采用页面置换,地址转换经过页表查找,分配以页为单位、可能产生内部碎片,保护以页为单位。在分段虚拟存储器中,管理单位是长度可变的段,地址由段号加段内偏移量构成,存储器按段管理并采用段交换,地址转换经过段表查找并检查偏移量,分配以段为单位、可能产生外部碎片,保护以段为单位、更加灵活。分页适合通用多任务系统,分段适合模块化程序的专用系统。
练习 7
计算题:假设有一个 32KB 的 Cache,采用直接映射方式,每行 64 字节,计算 Cache 的行数和地址结构。
解题思路:
先由容量和行长算出 Cache 行数,再按 2 的幂把 32 位地址划分为块内偏移、行号和标记三部分,最后给出映射关系。
详细步骤:
计算过程:
-
Cache 行数:
- Cache 总容量 = 32KB = 32 × 1024 = 32768 字节
- 每行大小 = 64 字节
- Cache 行数 = 32768 ÷ 64 = 512 行
-
地址结构:
- 虚拟地址位数:假设 32 位
- 块内偏移位数:log₂64 = 6 位
- 行号位数:log₂512 = 9 位
- 标记位数:32 - 6 - 9 = 17 位
-
地址结构:
[标记位(17位)] [行号(9位)] [块内偏移(6位)] -
映射关系:
- 主存块号 = 虚拟地址 ÷ 64
- Cache 行号 = 主存块号 mod 512
最终答案:
Cache 总容量为 32KB = 32 × 1024 = 32768 字节,每行 64 字节,因此 Cache 行数 = 32768 ÷ 64 = 512 行。假定虚拟地址为 32 位,则块内偏移为 log₂64 = 6 位,行号为 log₂512 = 9 位,标记为 32 - 6 - 9 = 17 位,因此地址结构为 [标记位(17 位)][行号(9 位)][块内偏移(6 位)]。映射关系为:主存块号 = 虚拟地址 ÷ 64,Cache 行号 = 主存块号 mod 512。
练习 8
分析题:分析 Cache 的写策略对系统性能的影响。
解题思路:
依次考察四种写策略,给出每种策略的优点、缺点和性能影响,最后就如何选择与组合给出建议。
详细步骤:
Cache 写策略对系统性能的影响:
-
写直达(Write-Through):
- 优点:数据一致性好,主存始终是最新数据
- 缺点:写操作速度慢,增加总线负载
- 性能影响:降低写操作性能,但保证数据一致性
-
写回(Write-Back):
- 优点:写操作速度快,减少总线负载
- 缺点:数据一致性复杂,需要脏位管理
- 性能影响:提高写操作性能,但增加系统复杂性
-
写分配(Write-Allocate):
- 优点:提高后续访问命中率
- 缺点:增加写未命中的开销
- 性能影响:适合空间局部性好的程序
-
写不分配(Write-No-Allocate):
- 优点:减少 Cache 污染
- 缺点:可能降低命中率
- 性能影响:适合随机写访问的程序
-
性能优化建议:
- 根据程序特点选择合适的写策略
- 结合多级 Cache 优化整体性能
- 考虑硬件成本和性能需求的平衡
最终答案:
写直达策略始终保持主存内容最新,因而一致性极好,但每次写操作都要访问主存,使写入变慢并加重总线负担。写回策略只写入 Cache,把主存更新推迟到替换时进行,因此写入快、总线负担小,代价是一致性处理更复杂,必须借助脏位来管理。写分配策略在写不命中时把块调入 Cache,提高了后续访问的命中率,但增加了不命中的开销,适合空间局部性好的程序;写不分配策略则直接写入主存,使 Cache 不受污染,但可能降低命中率,适合随机写模式。因此,写策略要结合多级 Cache 根据程序特点来选择,并与硬件成本相权衡。
