Zep*_*hyr 5 caching operating-system cpu-architecture cpu-cache
我无法完全掌握VIPT缓存中的同义词或别名的概念。
将地址拆分为:
在这里,假设我们有2个页面,其中不同的VA映射到相同的物理地址(或帧号)。
该VA的您做生意部分(位13-39),它们是不同的被转换到PA的PFN(位12-35)和PFN保持相同两者的VA的,因为它们被映射到相同的物理帧。
现在,两个VA的pageoffset部分(第0-13位)与它们要从特定帧访问的数据相同,没有相同。
由于两个VA的pageoffset部分相同,因此位(5-13)也将相同,因此索引或设置no相同,因此不应混叠,因为只有单个set或index no被映射到物理帧没有。
如图所示,第12位如何负责混叠?我不明白。
如果有人可以在地址的帮助下给出例子,那就太好了。
谢谢 。
页面偏移量是0-11位,而不是0-13位。看一下底部的图:页面偏移量是低12位,因此您有4k页(例如x86和其他常见体系结构)。
如果任何索引位来自页面偏移量以上,VIPT的行为将不再像PIPT那样具有对索引位的自由转换。就是这种情况。
一个进程可以将相同的物理页面(框架)映射到2个不同的虚拟页面。
您声称不同的VA(第13-39位)的分页部分被转换为PA的PFN(第12-35位),并且两个VA的PFN保持相同完全是伪造的。翻译可以更改第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(其中包括图中的问题!)。它说的是同一件事:物理标记确实解决了缓存同名问题,作为上下文切换刷新的替代方法。
但不是同义词问题。为此,您可以让OS确保每个VA的第12位=每个PA的第12位。这称为页面着色。
页面着色还可以解决同音异义字问题,而无需硬件执行重叠的标记位,因为页面着色可以使物理地址和虚拟地址之间多出1位。phys IDX =虚拟IDX。(但是,如果硬件要依赖于该不变式,则硬件将依赖于正确的软件。)
标签与索引重叠的另一个原因是收回期间的回写:
外部缓存几乎始终是PIPT,并且内存本身显然需要物理地址。因此,在将其发送到内存层次结构中时,需要该行的物理地址。
在完成对存储的TLB检查之后,写回高速缓存需要能够清除脏行(将它们发送到L2或物理RAM)。与负载不同,除非您将TLB结果存储在某个地方,否则它仍然没有浮动。 VIPT到PIPT的转换如何在L1-> L2驱逐中工作
让标签包括页面偏移量以上的所有物理地址位可以解决此问题:给定页面偏移量索引位和标签后,您可以构造完整的物理地址。
(另一种解决办法是直写式高速缓存,所以你不要总是从TLB物理地址与数据发送,即使它无法从缓存标签+指标可重构或者用于只读缓存,如指令高速缓存,则没有回写;逐出=删除。)