XEN 支持 ARM,也可以在没有随 ARMV8.1-A 扩展引入的 VHE(虚拟硬件扩展)上限的 cpu 上运行它。据我了解,来宾 vm 的 linux 内核通过 HVC 调用与 xen 管理程序进行通信。HVC 呼叫是一项硬件功能,我认为仅在支持 VHE 的系统中可用。但是,如果没有 VHE,它是如何工作的呢?也有 HVC,但作为某种软件调用?如果我的理解有误,请纠正我。
XEN 支持 ARM,也可以在没有随 ARMV8.1-A 扩展引入的 VHE(虚拟硬件扩展)上限的 cpu 上运行它。据我了解,来宾 vm 的 linux 内核通过 HVC 调用与 xen 管理程序进行通信。HVC 呼叫是一项硬件功能,我认为仅在支持 VHE 的系统中可用。但是,如果没有 VHE,它是如何工作的呢?也有 HVC,但作为某种软件调用?如果我的理解有误,请纠正我。
Xen on Arm通常使用自 2010 年左右以来高端 ARMv7 芯片上出现的虚拟化扩展, 并且是 ARMv8 的非可选部分。Arm 虚拟化增加了一个额外的特权级别,hypervisor,它有自己的内存虚拟化。系统和管理程序之间的关系与用户和系统之间的关系非常相似:MMU 执行从用户虚拟地址 (VA)(使用每个用户分区的内存映射)到系统地址(IPA —“中间物理地址”)的转换,然后是从系统地址到物理地址 (PA) 的另一个转换(使用每个系统分区的内存映射)。用户模式代码调用SVC指令进入系统模式,系统模式代码调用HVC指令进入管理程序模式。
当内核包含管理程序时,管理程序本身以管理程序模式运行。内核的其余部分可以在管理程序模式或系统模式下运行,具体取决于该内核的设计。据我所知,Xen 在系统模式下运行 Linux,在管理程序模式下运行 Xen 特定的部分。
v8.1-A虚拟化主机扩展通过允许几乎未修改的内核以管理程序特权运行,简化了像 Xen 这样的内核加管理程序的设计。内核部分(由 SVC 指令或系统级中断调用)不需要进行 HVC 调用来执行管理程序操作。这有助于提高性能,因为 HVC 调用需要额外的上下文切换,这需要一些缓存失效、寄存器保存和额外的 TLB 条目,因为每个级别都有自己的内存映射。
(还有一个早期版本的 Xen ARM没有使用虚拟化扩展。虽然那个项目被称为“Secure Xen on ARM”,但据我所知,它只能运行半虚拟化的来宾内核并且没有安全性来宾内核和主机之间的边界。)