0

是否可以在长模式下以直接方式向 x86-64 架构上的 TLB 提供给定虚拟地址的物理地址?

例如,假设我在 PML4E 中设置了零,因此会触发页面错误异常,因为会找到无效地址,在异常期间 CPU 可以通过使用一些指令告诉 TLB 该虚拟地址位于 X 物理页框?

我想这样做是因为通过代码我可以很容易地知道物理地址在哪里,这样可以避免昂贵的页面遍历。

4

1 回答 1

0

不,您需要将页面放入 TLB。准确地说,您需要创建/更新适当的 PTE(如果需要,使用 PDE 和 PDPE)。围绕 MMU 管理的一切都以某种方式基于页表和 TLB。甚至用户/管理员保护模式也是作为映射页面的特殊标志来完成的。

为什么你认为“page walk”是昂贵的操作?它一点也不贵。要确定必须更新的 PTE,您只需取消引用 4 个指针:PML4E -> PDPE -> PDE -> PTE。这些条目只是相关表中的索引。要获得 PML4E,您需要使用在页面错误处理期间获取的 39-47 位地址,并将该值用作 PML4 表中的索引。要获得 PDPE,您需要 30-39 位地址作为 PDE 表中的索引,依此类推。这不是可以减慢系统速度的东西。我认为分配物理页面需要更多时间。

于 2011-11-04T03:04:42.820 回答