实际上索引物理标记的缓存同义词

时间:2017-10-05 14:30:54

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

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

将地址拆分为: -

enter image description here

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

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

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

由于两个VA的页面偏移部分相同,位(5-13)也是相同的,所以索引或设置no是相同的因此应该有 no aliasing ,因为只有单个集合或索引no映射到物理帧号。

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

如果有人可以借助地址提供一个例子,那就太好了。

谢谢。

1 个答案:

答案 0 :(得分:6)

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

如果任何索引位来自页面偏移量之上,则VIPT不再像PIPT那样具有索引位的自由转换。这就是这种情况。

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

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

  

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

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

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

如评论中所述:

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

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

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

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

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

写回缓存需要能够在完成对存储的TLB检查后很长时间才能驱逐脏线(将它们发送到L2或物理RAM)。与负载不同,除非将其存储在某处,否则您仍然无法使用TLB结果。 How does the VIPT to PIPT conversion work on L1->L2 eviction

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

(另一个解决方案是直写缓存,所以你总是有TLB的物理地址与数据一起发送,即使它不能从缓存中重建对于只读缓存,例如指令缓存,没有回写; eviction = drop。)