当条目被从 TLB 驱逐时更新页表

ami*_*far 5 operating-system cpu-architecture virtual-memory tlb page-tables

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

类似地,在 TLB 中缓存(引入)页面时是否更新了页表?

Pau*_*ton 6

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

TLB 通常使用直写策略。这具有最近使用 PTE 所在的缓存块的优点。它还可以避免在清除访问位或脏位时使用处理器间中断的需要。因为 TLB 通常是不连贯的,所以使用回写会使软件强制连贯性(当操作系统清除访问或脏位时)更加复杂。

一些硬件 TLB 管理架构不支持硬件设置访问和脏指标。相反,会生成异常,软件会处理这些特殊情况。由于设置这些指标并不像更改地址转换或权限那样罕见,因此在不需要操作系统参与的情况下这样做可能会有一些优势。

(脏指示符用于允许操作系统避免(不必要地)在将页面从内存中删除时回写不脏的页面。访问的指示符用于支持操作系统中的(通常基于新近度的)页面替换算法。 )

  • @aminfar 一般来说,TLB 是直写式的,因此当 PTE 从 TLB 中被逐出时,内存不会更新。写回 TLB 理论上是可能的,在这种情况下,如果 PTE 被更改,则会在从 TLB 驱逐时更新内存中的 PTE。 (2认同)