【问题标题】:Does x86_64 have an equivalent to the aarch64 at instruction?x86_64 是否与 aarch64 at 指令等效?
【发布时间】:2016-06-29 01:13:10
【问题描述】:

ARM 的 aarch64 有一条 AT(地址转换)指令,该指令通过地址转换阶段运行虚拟地址,返回 PAR_EL1 中的物理地址,以及指示转换是否存在的状态。请参阅 ARMv8 ARM,第 C5.5 节。

问题是:x86_64 是否有等价物? Intel 的系统编程指南(第 3 卷,第 5 章)谈到了指针验证,但这些方法似乎适用于段级保护,并且似乎没有任何页级保护指针验证指令。

有人知道 x86_64 的类似 ARMv8-AT 的指令吗?

【问题讨论】:

  • 我不完全理解at 指令的作用。它是否返回页表的物理地址或类似的东西?
  • 参见 ARMv8 ARM,D7.2.70。 AT 指令返回PAR_EL1 中的信息(可在EL1、EL2 或EL3 访问)。 PAR_EL1 具有翻译状态(无论翻译是否存在),以及可共享性属性、可缓存性属性、安全状态和物理地址。

标签: x86-64 arm64 page-tables


【解决方案1】:

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

如果您想在 x86-64 上使用此功能,恐怕您需要处于超级用户模式才能执行此操作。您将读取 CR3 寄存器,可能更改一些页表映射以访问您需要的物理地址,并通过手动遍历页目录和表来执行地址转换。

您的问题提出了一个问题作为回应:您出于什么目的需要了解虚拟地址到物理地址的转换?分页应该对应用程序是透明的,很少有充分的理由知道特定虚拟内存地址对应的物理内存地址。

【讨论】:

  • at 仅在特权模式下可用,因此您的最后一段不太相关。它对虚拟化特别有用,因为当管理程序捕获来宾的故障时(例如,在模拟 MMIO 时),它可以简单地通过阶段 1(来宾)转换运行有故障的 VA,以获得中间(虚拟化)PA,而不必去并找到来宾页表并将它们映射到手动设置它们。
  • @Notlikethat 感谢您提供更多信息!
  • 我的研究使我得出与@Nayuki 确认的相同结论。 Notlikethat 的响应说明了使用此指令的一个完美理由:消除软件表遍历以确定哪些硬件显然已经具有确定机制的工作。
猜你喜欢
  • 1970-01-01
  • 2017-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多