页表和缓存命中率

问题描述

我写了一篇关于页表和多级页表所需寄存器数量的帖子,并指出每个页表,无论级别如何,只需要一个寄存器来访问页表的顶部。但是我的第二个问题没有得到解答。

处理器中的缓存(L1-L3)将如何影响对页表的内存引用访问?大多数人会错过还是命中?为什么会发生?有人告诉我,根据所使用的架构,这个主题可能有不同的答案,所以也许通用的答案就可以了。

我试图为此找到参考资料,但找不到。可能会说我真的是操作系统的初学者。

我上一个问题的链接Page Table Registers and Cache

编辑:由于TLB,可以减少对页表的内存引用的访问,导致它获得更多的命中。这是对的吗?请帮助:D

解决方法

基本思想(没有任何类型的缓存)是当您访问内存时 CPU:

  • 找到最高级别的页表(例如,从虚拟地址和控制寄存器中)并从 RAM 中获取最高级别​​的页表条目

  • 找到下一级页表(例如从虚拟地址和最高一级页表条目)并从RAM中取出下一级页表条目;依此类推(对每一级页表重复),直到 CPU 到达最低级页表条目。

  • 找到物理地址(例如从虚拟地址和最低级别的页表条目),并从该物理地址获取数据

这显然很慢。为了加快速度,有多个“类似缓存的东西”:

a) 缓存本身。例如。 CPU 可以从缓存中获取而不是从 RAM 中获取任何内容(包括 CPU 获取页表条目时)。请注意,通常有多个级别的缓存(例如 L1 数据缓存、L2 统一缓存等),这可能适用于某些缓存而不适用于其他缓存(例如,CPU 不会从“L1 指令缓存”中获取页表条目,但可能将从“L3统一缓存”中获取它们)。

b) TLB(翻译后备缓冲区);它主要缓存最低级别的页表条目。这允许跳过几乎所有的工作(如果有“TLB 命中”)。

c) 更高级别的翻译缓存。现代 CPU 有额外的缓存,可以缓存页表层次结构的中间级别(例如,如果有 4 个或更多级别,则可能是第 3 级页表条目,而不是最高或最低级别的条目)。这些通过允许跳过某些工作来降低“TLB 未命中”(如果存在“更高级别的翻译命中”)的成本。