虚拟索引物理标记缓存同义词

Virtually indexed physically tagged cache Synonym

我无法完全理解 VIPT 缓存中同义词或别名的概念。

将地址拆分为:-

在这里,假设我们有 2 个页面,其中不同的 VA 映射到相同的物理地址(或帧号)。

VA 的 pageno 部分(第 13-39 位)被转换为 PAPFN(第 12-35 位) ) 并且 PFN 对于两个 VA 保持相同,因为它们映射到相同的物理帧。

现在两个 VA 的 pageoffset 部分(位 0-13)与他们想要从特定帧访问的数据相同,不相同。

由于两个 VA 的 pageoffset 部分相同,位 (5-13) 也相同,因此 index 或 set no 相同 因此应该 没有别名 因为只有单个集或索引号映射到物理帧号。

如图所示,第 12 位如何负责别名?我无法理解。

如果有人能在地址的帮助下举个例子就太好了。

谢谢。

页面偏移量是位 0-11,而不是 0-13。看你的底部图表:页面偏移量是低 12 位,所以你有 4k 页(如 x86 和其他常见架构)。

如果任何索引位来自页面偏移量以上,则 VIPT 不再 。就是这样。

一个进程可以将相同的物理页面(帧)映射到 2 个不同的虚拟页面。

您声称 不同的 VA 的 pageno 部分(位 13-39)被转换为 PA 的 PFN(位 12-35)并且 PFN 对于两个 VA 保持不变 完全是假的。翻译可以改变第 12 位。 所以其中一个索引位确实是虚拟的而不是物理的,因此同一物理行的两个条目可以放在不同的集合中。


I think my main confusion is regarding the page offset range. Is it the same for both PA and VA (that is 0-11) or is it 0-12 for VA and 0-11 for PA? Will they always be same?

PA 和 VA 总是一样的。页面偏移量未标记在图表的 VA 部分,仅标记用作索引的位范围。

它有任何不同是没有意义的:虚拟和物理内存都是字节可寻址的(或字可寻址的)。当然,页面框架(物理页面)与虚拟页面的大小相同。在从虚拟到物理的转换过程中向右或向左移动地址是没有意义的。


如评论中所述:

我最终找到了http://www.cse.unsw.edu.au/~cs9242/02/lectures/03-cache/node8.html(其中包括问题中的图表!)。它说的是同一件事:物理标记确实解决了缓存同名问题,作为上下文切换时刷新的替代方法。

但不是同义词问题。为此,您可以让 OS 确保每个 VA 的第 12 位 = 每个 PA 的第 12 位。 这称为页面着色。

页面着色也可以在硬件不重叠标记位的情况下解决同音异义词问题,因为它提供了物理地址和虚拟地址之间相同的多 1 位。 phys idx = virt idx。 (但是如果硬件想要依赖于这个不变量,那么硬件将依赖于软件是正确的。)


标签与索引重叠的另一个原因是在逐出期间回写:

外部缓存几乎都是PIPT,内存本身显然需要物理地址。所以当你将它发送到内存层次结构时,你需要一行的物理地址。

写回缓存需要能够在对存储的 TLB 检查完成后很长时间内清除脏行(将它们发送到 L2 或物理 RAM)。与加载不同,除非将 TLB 结果存储在某个地方,否则不会让 TLB 结果四处浮动。

让标签包含页面偏移量以上的所有物理地址位可以解决这个问题:给定页面偏移索引位和标签,您可以构建完整的物理地址。

(另一种解决方案是直写缓存,因此您 do 始终拥有来自 TLB 的物理地址与数据一起发送,即使它无法从缓存标签+索引。或者对于只读缓存,例如指令缓存,没有回写;驱逐 = 丢弃。)