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