Assembly 为什么至少要叫一次INVLPG

Assembly 为什么至少要叫一次INVLPG,assembly,x86,paging,intel,tlb,Assembly,X86,Paging,Intel,Tlb,我正在阅读《英特尔系统开发人员手册》第3卷第4-43页。为了冲洗TLB,建议执行失效。建议的失效之一是: 如果软件修改引用另一个页面的页面结构条目 在分页结构中,它可以使用以下方法之一,具体取决于 根据修改后的 条目: -对每个页码的线性地址执行INVLPG 具有将使用该条目的翻译。但是,如果没有页面 使用该条目的数字有翻译(例如,因为 在由引用的分页结构中的所有条目中,P标志均为0 修改的条目),仍然需要至少执行一次INVPG 我不明白的是粗体部分。如果使用该条目的页码都没有翻译,我们为什么要

我正在阅读《英特尔系统开发人员手册》第3卷第4-43页。为了冲洗TLB,建议执行失效。建议的失效之一是:

如果软件修改引用另一个页面的页面结构条目 在分页结构中,它可以使用以下方法之一,具体取决于 根据修改后的 条目:

-对每个页码的线性地址执行INVLPG 具有将使用该条目的翻译。但是,如果没有页面 使用该条目的数字有翻译(例如,因为 在由引用的分页结构中的所有条目中,P标志均为0 修改的条目),仍然需要至少执行一次INVPG

我不明白的是粗体部分。如果使用该条目的页码都没有翻译,我们为什么要打一次INVLPG?(TLB中不应存在与该条目对应的任何条目)

即使我们叫它,它的操作数是什么

提前谢谢

如果使用该条目的页码都没有翻译,为什么 我们要不要打一次电话?(TLB中不应有任何条目 对应于该条目)

没有一个新条目具有翻译,但是可能会缓存
p
was
1
的旧条目。按照我的理解,如果旧版本没有
P=1
,那么就不需要使用
INVLPG

即使我们叫它,它的操作数是什么


选择引用修改后结构的任何地址。

IA32e分页结构由硬件遍历,它们以内部格式缓存。您需要告诉硬件,以前未映射的页面现在可能已映射
invlpg
并不真正访问内存,它只需要一个地址,即使没有映射。将该地址视为仅在页面结构中指定索引的一种方式。来自x86标记wiki的此链接可能会让您考虑页面漫游和页面表修改之间需要发生的一致性。它们可能只是覆盖了推测性TLB加载的基础,但这只有在旧映射或新映射可能具有活动TLB条目时才有意义。