代码之家  ›  专栏  ›  技术社区  ›  Zephyr

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

  •  7
  • Zephyr  · 技术社区  · 7 年前

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

    enter image description here

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

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

    页面偏移量 两个VA的部分(位0-13)与它们想要从特定帧访问的数据相同。no is same。

    作为 两个VA的pageoffset部分相同 ,位(5-13)也将相同,因此 索引或集合编号相同 因此应该有

    如图所示,位12是如何产生混叠的?我无法理解这一点。

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

    谢谢

    1 回复  |  直到 7 年前
        1
  •  8
  •   Peter Cordes    4 年前

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

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

    一个进程可以将相同的物理页(框架)映射到两个不同的虚拟页。

    你声称 所以其中一个索引位实际上是虚拟的,而不是物理的,所以同一物理行的两个条目可以放在不同的集合中。


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


    如评论中所述:

    我最终发现 http://www.cse.unsw.edu.au/~cs9242/02/lectures/03-cache/node8.html . 它说的是同一件事:物理标记确实解决了缓存同音词问题,作为上下文切换刷新的替代方案。

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

    页面着色还可以解决同名问题,而不需要硬件进行重叠的标记位,因为它会在物理地址和虚拟地址之间多出一个相同的位。phys idx=virt idx。(但是,如果硬件想要依赖于这个不变量,那么它将依赖于软件来实现正确性。)


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

    How does the VIPT to PIPT conversion work on L1->L2 eviction

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

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