黄海鑫*_*黄海鑫 4 cpu-architecture cpu-cache mmu page-tables
据我所知,CPU的一次内存访问涉及到CPU缓存和MMU。CPU 将尝试在缓存中找到它的目标,如果发生缓存未命中,CPU 将转向 MMU。在 MMU 访问期间,对应页表项的访问/脏位将由硬件设置。
然而,据我所知,除非出现缓存未命中,否则大多数 CPU 设计都不会触发 MMU,这里我的问题是,是否仍会在缓存命中时设置页表条目的访问/脏位?还是跟架构有关?
我认为您可以假设这些位缓存在 TLB 中,如果与 TLB 中的值和内核完成的访问有任何不一致,将采用微码辅助并更新这些位。例如,如果 A 1或 D 位为零并且发生访问或存储,则将检测到这种情况并设置适当的位。
您还可以假设 TLB 命中的快速路径无法进入内存并查看缓存的 TLB 位是否与 RAM 中的 PTE 一致。此外,在 x86 上,对 PTE 的更改不会通过硬件推送到 TLB,缓存无效样式;也就是说,TLB是不相干的。
这意味着如果位在某些方面不同步,它们可能不会被正确更新。例如,如果 A (resp. D) 位在 TLB 中设置,并且发生访问(相应的存储),则不会发生任何事情,即使 A (resp. D) 位在 PTE 中实际上未设置。对位进行更改的实体负责刷新 TLB,以便将来正确更新位。
1有一个 TLB 条目A == 0很奇怪:您希望该条目作为访问的结果存在,因此A从一开始就设置了该位。也许在某些情况下可能会发生这种情况,例如由推测访问或预取引入的页面。
小智 2
大多数缓存都经过虚拟索引和物理标记,以便更快地访问。因此CPU发出虚拟地址,并且该地址的索引位用于定位条目。在此期间,地址被发送到TLB以获取物理地址。当缓存找到条目时,TLB 将返回物理地址,然后将其用于 TAG 比较。现在可能会发生两件事。
1的情况下,需要访问页表项(PTE)才能得到正确的物理地址。
对于2的情况,如果TLB返回了有效的映射,则只需获取它即可。如果TLB也有未命中(即1和2),那么就需要从PTE中获取物理地址并取出数据。
所以要回答你的问题,如果是HIT,PTE不需要知道这一切。
| 归档时间: |
|
| 查看次数: |
2748 次 |
| 最近记录: |