从 TLB 中逐出条目时是否更新页表?如果是这样,为什么?页表中更新了哪些信息?我认为当被驱逐的页面是干净的时不需要更新页表。
同样,当页面被缓存(引入)到 TLB 时,页表是否更新?
从 TLB 中逐出条目时是否更新页表?如果是这样,为什么?页表中更新了哪些信息?我认为当被驱逐的页面是干净的时不需要更新页表。
同样,当页面被缓存(引入)到 TLB 时,页表是否更新?
硬件页表遍历器(例如为 x86 定义的)可以在加载页表条目 (PTE) 的过程中修改访问和修改的指示符。由于 PTE 可以在非写入未命中时按需加载,因此可以在 PTE 已加载到 TLB 后更改修改后的指示符。(也可以将 PTE 预取到 TLB 中,在这种情况下,甚至可能需要在 PTE 插入 TLB 后设置访问指示符。传统的集群 TLB 条目,每个条目存储多个 PTE像常规内存缓存的子块这样的单个标签自然可以从预取与标签关联的其他页面中受益,因为它不涉及额外的存储(即,
TLB 通常使用直写策略。这具有最近使用 PTE 所在的缓存块的优点。它还可以避免在清除访问位或脏位时使用处理器间中断。由于 TLB 通常不连贯,因此使用回写会使软件强制连贯性(当操作系统清除访问或脏位时)更加复杂。
一些硬件 TLB 管理架构不支持硬件设置访问和脏指标。相反,会生成一个异常,并且软件会处理这些特殊情况。由于设置这些指标并不像更改地址转换或权限那样罕见,因此在不需要操作系统参与的情况下这样做可能会有一些优势。
(脏指示符用于允许操作系统在从内存中删除页面时避免(不必要地)写回不脏的页面。访问指示符用于支持操作系统中的(通常基于新近度的)页面替换算法。 )