【发布时间】:2016-06-02 20:19:38
【问题描述】:
我正在阅读英特尔系统开发人员手册 Vol3A 第 4-43 页。它讨论了建议执行的失效以刷新 TLB。建议的失效方法之一是:
如果软件修改了引用另一个分页结构的条目 分页结构,它可以使用以下方法之一,具体取决于 根据修改后的翻译类型和数量 条目:
— 对每个页码的线性地址执行 INVLPG 带有将使用该条目的翻译。但是,如果没有页面 将使用该条目的数字具有翻译(例如,因为 P 标志在由 修改条目),仍然需要至少执行一次 INVLPG
我不明白的是粗体部分。如果使用该条目的页码都没有翻译,为什么我们应该调用一次 INVLPG? (TLB中不应该有与该条目对应的任何条目)。
即使我们调用它,它的操作数会是什么?
提前致谢
【问题讨论】:
-
IA32e 分页结构由硬件遍历,它们以内部格式缓存。您需要告诉硬件,以前未映射的页面现在可能已被映射。
invlpg并不真正访问内存,它只需要一个地址,即使没有映射。将该地址视为仅在页面结构中指定索引的一种方式。 -
这个来自 x86 标签 wiki 的链接可能会让您思考页面遍历和页表修改之间需要发生的一致性类型。 blog.stuffedcow.net/2015/08/pagewalk-coherence。他们可能只是覆盖了推测性 TLB 加载的基础,但这只有在旧映射或新映射可能具有活动 TLB 条目时才有意义。
标签: assembly x86 paging intel tlb