【问题标题】:Virtually indexed physically tagged cache Synonym虚拟索引物理标记缓存同义词
【发布时间】:2018-03-17 05:25:25
【问题描述】:

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

考虑地址拆分为:-

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

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

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

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

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

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

谢谢。

【问题讨论】:

  • 顺便说一句,此图有一个不影响问题的小错误:36 - 12 = 36 位物理地址的 24 位标签,而不是 28。MIPS64 R4x00 CPU 实际上有 40位虚拟地址、36 位物理地址和 24 位标签,根据the manual 的第 4 章和第 11 章。此图来自cse.unsw.edu.au/~cs9242/02/lectures/03-cache/node8.html,它确实将其标记为用于 MIPS R4x00。

标签: caching operating-system cpu-architecture cpu-cache


【解决方案1】:

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

如果任何索引位来自页面偏移量以上,VIPT 不再是behaves like a PIPT with free translation for the index bits。这里就是这样。

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

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


我认为我的主要困惑是关于页面偏移范围。 PA和VA是否相同(即0-11)还是VA为0-12而PA为0-11?它们会永远一样吗?

PA 和 VA 始终相同。页面偏移量未标记在图表的 VA 部分,仅标记用作索引的位范围。

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


如 cmets 中所述:

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

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

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


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

外部缓存几乎总是 PIPT,而内存本身显然需要物理地址。因此,当您将行发送到内存层次结构时,您需要该行的物理地址。

回写式缓存需要能够在 TLB 检查存储完成后很长时间才能驱逐脏行(将它们发送到 L2 或物理 RAM)。与负载不同,除非您将 TLB 结果存储在某个地方,否则您仍然不会让 TLB 结果四处浮动。 How does the VIPT to PIPT conversion work on L1->L2 eviction

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

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

【讨论】:

  • @Zephyr:PA 和 VA 也是如此。页面偏移量没有标记在图表的 VA 部分,只有索引。它没有任何不同是没有意义的:虚拟和物理内存都是字节可寻址(或字可寻址)的。
  • 感谢您耐心回复我的 cmets。最后一个问题是,PA = TAG 中的 frameno 是否始终是这些缓存,我们通常有 frameno = TAG + indexno。
  • @Zephyr:无论页面拆分在哪里或 VIVT / PIPT,您始终需要标签包含索引上方的所有位以正确检测命中。我不确定为什么这个缓存使用与索引重叠的标签。也许这可以让他们检测到某种混叠? VIPT 缓存通常具有大小和关联性,将索引的顶部放在页面拆分处(缓存大小 = 关联性 * 页面大小,例如多年来 Intel CPU 和 AMD Ryzen 中的 32kiB 8 路 L1D/L1I。x86使用 4k 页)。但如果 L1 较小,标签将包含一些页面偏移位。
  • @Zephyr:标签/索引重叠是不是导致混叠的原因!这是由于索引包含高于页面偏移量的位引起的。 (是的,我正要开始忽略更多的 cmets,因为除了告诉你索引包含一个非偏移位之外,我不知道还能说什么。很高兴你终于找到了线索并弄清楚你错过了什么。)
  • 我最终找到了cse.unsw.edu.au/~cs9242/02/lectures/03-cache/node8.html(包括问题中的图表!)。它说的是同一件事:物理标记确实解决了缓存同音异义问题,以替代在上下文切换时刷新。但不是同义词问题。为此,您可以让操作系统确保每个 VA 的第 12 位 = 每个 PA 的第 12 位。这称为页面着色。它还可以在硬件不重叠标记位的情况下解决同音异义问题,因为它在物理地址和虚拟地址之间提供了 1 个相同的位。物理 idx = v idx.
猜你喜欢
  • 2019-07-25
  • 2017-12-10
  • 2013-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
  • 2021-07-02
  • 1970-01-01
相关资源
最近更新 更多