2016-03-14 116 views
2

ARM的aarch64具有AT(地址转换)指令,该指令通过在PAR_EL1中返回物理地址的地址转换阶段运行虚拟地址,以及指示是否存在转换的状态。请参阅ARMv8 ARM,部分C5.5。x86_64是否具有与指令中的aarch64等效的功能?

问题是:x86_64是否具有相同的功能?英特尔的系统编程指南(第3卷,第5章)讨论了指针验证,但这些方法似乎适用于段级保护,并且似乎没有任何页级保护指针验证指令。

是否有人知道x86_64的ARMv8-AT-like指令?

+0

我不完全理解'at'指令是如何实现的。它是否返回页表的物理地址或类似的东西? – Nayuki

+0

请参阅ARMv8 ARM,D7.2.70。 'AT'指令返回'PAR_EL1'中的信息(可在EL1,EL2或EL3访问)。 'PAR_EL1'具有翻译状态(是否存在翻译)以及可变性属性,可缓存性属性,安全状态和物理地址。 –

回答

2

不,x86-64指令集没有执行物理到虚拟地址转换的指令。它只有基本的说明,例如设置页面目录寄存器,使地址无效以及启用分页。

如果你想在x86-64上使用此功能,恐怕你需要进入管理员模式才能这样做。您可能会读取CR3寄存器,可能会更改几个页表映射以访问您需要的物理地址,并通过手动遍历页面目录和表来执行地址转换。

您的问题引发了一个问题:您需要了解虚拟到物理地址转换的目的是什么?寻呼应该对应用程序是透明的,并且很难有充分的理由知道对应于特定虚拟存储器地址的物理存储器地址。

+1

'at'仅在特权模式下可用,所以您的最后一段不太相关。这对于虚拟化特别有用,因为当管理程序捕获来宾的故障时(例如模拟MMIO时),它可以简单地通过阶段1(guest)翻译来运行故障VA以获得中间(虚拟化)的PA,而不必去并找到访客页面表并将它们映射到手动渲染它们。 – Notlikethat

+0

@Notlikethat感谢您的额外信息! – Nayuki

+0

我的研究让我得出了@Nayuki证实的相同结论。 Notlikethat的回应说明了使用此指令的完美理由:消除软件表行走的努力,以确定哪些硬件显然已经具有确定的机制。 –

相关问题