4.6 效率

将一个缺失的页从 swap 文件加载到内存中是一个代价昂贵的操作,操作系统需要完成大量的工作。那为什么这种机制还被证明不仅在内存使用方面效果很好而且在性能上也足够呢?主要的成功要素有下面这些:

  • 谢天谢地程序有本地性,要加载更多页的情况极少发生。最坏的情况下我们会得到非常慢的访问速度,然而这种情况极其少见。平均访问时间会保持较低的值。

    换句话说,我们很少会尝试访问一个还没有加载到内存中的页。

  • 很明显这种高效没有特殊的硬件帮助也是没有办法实现的。如果没有 TLB 对已翻译过的地址的缓存,那么我们每次寻址就都需要去使用这种翻译机制。TLB 存储了一些我们将要用到的页的起始地址。如果需要翻译的虚拟地址在这些页中,该页的起始地址将立刻从 TLB 中获取到。

    也可以说,最近没有在物理内存中进行过寻址的页,我们很少会去对其进行地址翻译。

一个程序使用的内存越少运行也就越快,因为这样的程序很少产生缺页异常(page fault)。

Question 49

什么是关联缓存?为什么 TLB 是一种关联缓存?

results matching ""

    No results matching ""