907 字
5 分钟
3.7第三章总结
3.7 本章小结
本章开头提出的问题的参考答案如下。
- 存储器系统为何要分这些层次?计算机如何管理这些层次?
存储系统采用多级层次结构,旨在兼顾存储速度、存储容量与单位成本:Cache-主存层主要用于加速CPU访存,使平均访问速度接近Cache,而寻址空间和单位价格接近主存;主存-辅存层主要用于扩展可用存储容量,使程序员看到的地址空间和单位价格接近辅存,而访问速度接近主存。
Cache与主存之间的信息调度由硬件自动完成,对程序员透明;而主存与辅存之间的信息调度通过虚拟存储技术实现,该技术结合软件与硬件。程序员使用远大于物理内存的虚拟地址空间编程;程序运行时,由硬件和操作系统协同完成虚拟地址到物理地址的转换。
- 影响 Cache性能的因素有哪些?
Cache系统的访存效率主要由命中率决定,而命中率受多种因素影响:
- 映射方式:全相联映射命中率最高,直接映射最低,组相联介于两者之间。
- Cache容量:容量越大,可缓存的数据越多,命中率通常越高。
- 块大小(Cache行大小):块过小难以利用空间局部性,过大则可能降低有效容量并增加缺失损失,因此需取适中值。
此外,Cache级数(单级或多级)、指令/数据Cache是否分离、以及主存-总线-Cache-CPU的架构等,也会显著影响 Cache的总体性能。
- 虚拟存储系统的页面是设置得大一些好还是设置得小一些好?
页面大小应适中,过大或过小均会带来问题。页面过小:页表项数量剧增,导致页表庞大;同时难以有效利用空间局部性,降低命中率。页面过大:虽可减小页表规模,但会增加页内碎片,浪费内存空间,且页面调入/调出时传输开销更大,延长缺页处理时间。因此,实际系统通常选择4KB~几MB的页面大小,在页表开销、局部性利用与I/O效率之间取得平衡。
3.8 常见问题和易混淆知识点
- Cache行的大小和命中率之间有什么关系?
当Cache行较大时,能更好利用空间局部性,将更多的相邻数据一次性调入Cache,从而提高命中率。但行长不宜过大,主要原因有两个:
- 行长过大会增加缺失损失,即未命中时需从主存读取更多数据,传输时间更长。
- 在 Cache 总容量固定的情况下,行长增大会导致行数减少,降低地址映射的灵活性,反而可能降低命中率。
反之,行长过小虽使缺失代价较小,但难以有效利用空间局部性,命中率通常偏低。
- 发生取指令Cache缺失的处理过程是什么?
当发生取指令Cache缺失时,系统按以下步骤处理:
- 保持程序计数器不变,确保缺失处理完成后能重新获取同一条指令。
- 根据PC指向的地址,从主存读取该指令。
- 将该指令所在主存块调入Cache,并更新对应Cache行的有效位和标记位。
- 重新从Cache中取指并继续执行。
