存储器层次结构练习题

存储器层次结构练习题

练习 1

简述存储器的层次结构及各层特点。

存储器层次Cache局部性

解题思路:

按从快到慢的顺序列出四个层次,给出每个层次的两三项特征,最后说明整个层次结构带来的性质。

详细步骤:

存储器的层次结构包括:

  1. 寄存器:

    • 速度最快,容量最小(几十个)
    • 与 CPU 集成,成本最高
    • 存储当前操作的数据
  2. Cache:

    • 速度很快,容量较小(KB-MB)
    • 存储近期访问的数据
    • 利用局部性原理提高命中率
  3. 主存:

    • 速度较快,容量较大(GB)
    • 存储程序和数据
    • 与 CPU 直接交换数据
  4. 辅存:

    • 速度较慢,容量最大(TB)
    • 永久存储数据
    • 成本最低

各层通过层次化设计,实现速度、容量、成本的平衡,利用局部性原理提高整体性能。

最终答案:

存储体系由寄存器、Cache、主存和辅存组成。寄存器速度最快、容量最小,与 CPU 集成在一起;Cache 速度很快但容量相对较小,保存近期访问过的数据;主存速度相对较快、容量相对较大,存放程序和数据;辅存速度相对较慢但容量最大,以最低的成本永久保存数据。通过这种分层设计,各级在速度、容量和成本之间取得平衡,局部性原理则提升了系统的整体性能。

练习 2

SRAM 和 DRAM 有何区别?

SRAMDRAM刷新

解题思路:

从工作原理、速度、功耗、成本、容量和应用六个差异维度对比两种存储器,再归纳其取舍。

详细步骤:

SRAM 和 DRAM 的主要区别:

  1. 工作原理:

    • SRAM:基于触发器电路,不需要刷新
    • DRAM:基于电容存储,需要定期刷新
  2. 速度:

    • SRAM:速度快,访问时间短
    • DRAM:速度较慢,需要刷新时间
  3. 功耗:

    • SRAM:功耗低,静态功耗小
    • DRAM:功耗较高,动态功耗大
  4. 成本:

    • SRAM:成本高,电路复杂
    • DRAM:成本低,电路简单
  5. 容量:

    • SRAM:容量小,集成度低
    • DRAM:容量大,集成度高
  6. 应用:

    • SRAM:用作 Cache、寄存器
    • DRAM:用作主存储器

最终答案:

SRAM 由触发器构成,无需刷新,因此速度快、功耗低,但价格高、容量小,故用于 Cache 和寄存器。DRAM 由电容构成,需要周期性刷新,因此速度较慢、功耗较大,但价格低、容量大,故用于主存。二者的选择就是速度与单位比特成本之间的直接权衡。

练习 3

Cache 的三种映射方式分别是什么?

直接映射全相联组相联

解题思路:

依次考察三种映射方式,对每种说明主存块的放置规则、映射关系,以及冲突率与硬件成本之间的取舍。

详细步骤:

Cache 的三种映射方式:

  1. 直接映射:

    • 主存块映射到 Cache 的固定位置
    • 映射关系:Cache 行号 = 主存块号 mod Cache 行数
    • 优点:实现简单,访问速度快
    • 缺点:冲突率高,命中率低
  2. 全相联映射:

    • 主存块可以映射到 Cache 的任意位置
    • 需要比较所有 Cache 行的标记
    • 优点:冲突率低,命中率高
    • 缺点:实现复杂,访问速度慢
  3. 组相联映射:

    • 主存块映射到固定组内的任意行
    • 结合直接映射和全相联的优点
    • 优点:冲突率适中,命中率较高
    • 缺点:实现复杂度适中

最终答案:

三种映射方式分别是:直接映射,每个主存块按“Cache 行号 = 主存块号 mod Cache 行数”映射到固定的 Cache 行,实现最简单、速度最快,但冲突率较高;全相联映射,一个块可以映射到任意位置,必须比较所有标记,冲突率最低、命中率最高,代价是访问速度慢;组相联映射,一个块可以映射到某个固定组内的任意 Cache 行,兼收前两者的优点,是多数 Cache 采用的方式。

练习 4

虚拟存储器的基本原理是什么?常见的页面置换算法有哪些?

虚拟存储器页面置换OPT FIFO LRU

解题思路:

分两部分作答:先从概念、工作机制和优点三个层面说明原理,再介绍四种页面置换算法各自的置换规则及其取舍。

详细步骤:

虚拟存储器的基本原理:

  1. 基本概念:

    • 将外存空间扩展为主存空间
    • 程序可以访问比物理内存更大的地址空间
    • 实现内存管理的自动化
  2. 工作原理:

    • 程序使用虚拟地址
    • 通过地址转换得到物理地址
    • 按需调入页面到内存
  3. 优势:

    • 扩大地址空间
    • 提高内存利用率
    • 简化程序开发

常见的页面置换算法:

  1. OPT(最优算法):

    • 选择未来最长时间不使用的页面
    • 理论最优,实际无法实现
  2. FIFO(先进先出):

    • 选择最先进入内存的页面
    • 实现简单,效果一般
  3. LRU(最近最少使用):

    • 选择最久未被访问的页面
    • 效果较好,实现复杂
  4. CLOCK 算法:

    • 结合 LRU 和 FIFO 的优点
    • 使用引用位,循环扫描
    • 实现相对简单,效果较好

最终答案:

虚拟存储器把外存扩展到主存空间,使程序可以访问超过物理存储器容量的地址空间,虚拟地址通过页表或段表转换为物理地址,页面按需调入;其结果是地址空间更大、存储器利用率更高、程序开发更简单。常用的页面置换算法有:OPT,置换最长时间不会被使用的页面,理论上最优但无法实现;FIFO,置换最先进入的页面,实现简单但效果一般;LRU,置换最长时间未被使用的页面,效果好但实现复杂;以及 CLOCK,利用访问位和循环扫描,以较低的实现代价结合 LRU 与 FIFO 的优点。

练习 5

TLB 的作用是什么?

TLB地址转换页表

解题思路:

分五个层面作答:TLB 加速了什么、节省了哪些访存、利用了怎样的访问模式、如何融入存储层次、节省了多少功耗,最后用一句话总结。

详细步骤:

TLB(Translation Lookaside Buffer,快表)的作用:

  1. 加速地址转换:

    • 缓存常用的地址转换结果
    • 减少页表查找次数
    • 提高地址转换速度
  2. 减少内存访问:

    • 避免每次地址转换都访问页表
    • 减少内存访问延迟
    • 提高系统整体性能
  3. 优化访问模式:

    • 利用程序的空间局部性
    • 缓存近期访问的地址转换
    • 提高 TLB 命中率
  4. 支持多级缓存:

    • 作为地址转换的缓存
    • 与数据 Cache 配合工作
    • 形成完整的内存层次结构
  5. 降低功耗:

    • 减少页表访问次数
    • 降低内存访问功耗
    • 提高能效比

最终答案:

TLB(快表)是地址转换的缓存。它通过缓存常用到的转换结果来加速地址转换,减少页表查找次数和访存延迟,从而提升整体性能。它利用程序的空间局部性优化访问模式、缓存近期使用过的转换结果,因而命中率更高。它还完善了存储体系,与数据 Cache 并列成为地址转换的缓存,并通过减少页表访问次数降低功耗。

练习 6

页式虚拟存储器和段式虚拟存储器有何区别?

页式存储段式存储碎片

解题思路:

从基本单位、地址结构、管理方式、地址转换、内存分配、保护机制和应用场景七个差异维度对比两种方案。

详细步骤:

页式虚拟存储器和段式虚拟存储器的区别:

  1. 基本单位:

    • 页式:页面,固定大小
    • 段式:段,可变大小
  2. 地址结构:

    • 页式:页号 + 页内偏移
    • 段式:段号 + 段内偏移
  3. 管理方式:

    • 页式:按页面管理,支持页面置换
    • 段式:按段管理,支持段交换
  4. 地址转换:

    • 页式:页表查找,计算物理地址
    • 段式:段表查找,检查段内偏移
  5. 内存分配:

    • 页式:按页面分配,可能产生内碎片
    • 段式:按段分配,可能产生外碎片
  6. 保护机制:

    • 页式:页面级保护
    • 段式:段级保护,更灵活
  7. 适用场景:

    • 页式:通用系统,支持多任务
    • 段式:专用系统,支持模块化程序

最终答案:

在分页虚拟存储器中,管理单位是固定大小的页,地址由页号加页内偏移量构成,存储器按页管理并采用页面置换,地址转换经过页表查找,分配以页为单位、可能产生内部碎片,保护以页为单位。在分段虚拟存储器中,管理单位是长度可变的段,地址由段号加段内偏移量构成,存储器按段管理并采用段交换,地址转换经过段表查找并检查偏移量,分配以段为单位、可能产生外部碎片,保护以段为单位、更加灵活。分页适合通用多任务系统,分段适合模块化程序的专用系统。

练习 7

计算题:假设有一个 32KB 的 Cache,采用直接映射方式,每行 64 字节,计算 Cache 的行数和地址结构。

Cache 地址格式直接映射计算

解题思路:

先由容量和行长算出 Cache 行数,再按 2 的幂把 32 位地址划分为块内偏移、行号和标记三部分,最后给出映射关系。

详细步骤:

计算过程:

  1. Cache 行数:

    • Cache 总容量 = 32KB = 32 × 1024 = 32768 字节
    • 每行大小 = 64 字节
    • Cache 行数 = 32768 ÷ 64 = 512 行
  2. 地址结构:

    • 虚拟地址位数:假设 32 位
    • 块内偏移位数:log₂64 = 6 位
    • 行号位数:log₂512 = 9 位
    • 标记位数:32 - 6 - 9 = 17 位
  3. 地址结构:

    [标记位(17位)] [行号(9位)] [块内偏移(6位)]
  4. 映射关系:

    • 主存块号 = 虚拟地址 ÷ 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 写策略对系统性能的影响:

  1. 写直达(Write-Through):

    • 优点:数据一致性好,主存始终是最新数据
    • 缺点:写操作速度慢,增加总线负载
    • 性能影响:降低写操作性能,但保证数据一致性
  2. 写回(Write-Back):

    • 优点:写操作速度快,减少总线负载
    • 缺点:数据一致性复杂,需要脏位管理
    • 性能影响:提高写操作性能,但增加系统复杂性
  3. 写分配(Write-Allocate):

    • 优点:提高后续访问命中率
    • 缺点:增加写未命中的开销
    • 性能影响:适合空间局部性好的程序
  4. 写不分配(Write-No-Allocate):

    • 优点:减少 Cache 污染
    • 缺点:可能降低命中率
    • 性能影响:适合随机写访问的程序
  5. 性能优化建议:

    • 根据程序特点选择合适的写策略
    • 结合多级 Cache 优化整体性能
    • 考虑硬件成本和性能需求的平衡

最终答案:

写直达策略始终保持主存内容最新,因而一致性极好,但每次写操作都要访问主存,使写入变慢并加重总线负担。写回策略只写入 Cache,把主存更新推迟到替换时进行,因此写入快、总线负担小,代价是一致性处理更复杂,必须借助脏位来管理。写分配策略在写不命中时把块调入 Cache,提高了后续访问的命中率,但增加了不命中的开销,适合空间局部性好的程序;写不分配策略则直接写入主存,使 Cache 不受污染,但可能降低命中率,适合随机写模式。因此,写策略要结合多级 Cache 根据程序特点来选择,并与硬件成本相权衡。

发现内容有问题?

告诉我们哪里需要改进。