当条目从 TLB 中逐出时更新页面 table

Updating page table when an entry is evicted from TLB

当条目从 TLB 中逐出时,页面 table 是否更新?如果是这样,为什么?页面 table 更新了哪些信息?我认为当被逐出的页面是干净的时,不需要更新页面 table。

同样,当页面缓存(引入)到 TLB 中时,页面 table 是否更新?

硬件页面 table walker(例如为 x86 定义的)可以修改访问和修改的指示器作为加载页面 table 条目 (PTE) 的一部分。由于 PTE 可以在非写入未命中时按需加载,因此在 PTE 加载到 TLB 后修改的指示符可能会发生变化。 (也有可能将 PTE 预取到 TLB 中,在这种情况下,甚至可能需要在 PTE 插入 TLB 后设置访问指示符。传统的集群 TLB 条目,每个条目存储多个 PTE像常规内存缓存的子块这样的单个标签,自然可以从预取与标签关联的其他页面中获益,因为它不涉及额外的存储(即,这种预取不会产生缓存污染影响)并且相邻的 PTE 存储在一个已经从内存中获取的对齐块(对于典型的多级页面 tables)。)

TLB 通常使用直写策略。这样做的好处是 PTE 所在的缓存块最近被使用过。它还可以避免在清除访问位或脏位时使用处理器间中断的需要。由于 TLB 通常不一致,使用回写会使软件强制一致性(当 OS 清除访问或脏位时)更加复杂。

一些硬件TLB管理架构不支持硬件设置accessed和dirty indicators。相反,会生成一个异常,软件会处理这些特殊情况。由于设置这些指示器并不像更改地址转换或权限那样罕见,因此无需 OS 参与就可以有一些优势。

(脏指示器用于允许 OS 避免(不必要地)在页面从内存中删除时写回不脏的页面。访问指示器用于支持(通常是新近度-基于)page replacement algorithm 在 OS.)