在Intel VMX操作中,首先需要调用VMXON(VMXON_REGION)
在CPU中启用VMX,然后调用VMPTRLD(VMCS_REGION)
等。
这是我的问题。
如果两个托管的虚拟机管理程序在一个X86主机中同时运行,该怎么办?
第一个VMXON运行良好,但第二个VMXON将失败
并且2个虚拟机管理程序可能会调用VMPTRLD(VMCS_REGION_a)
和VMPTRLD(VMCS_REGION_b)
,CPU中的当前VMCS会发生变化,是否会导致其他虚拟机管理程序崩溃,或者它们可以相互共存?
从我的SDM阅读中,我不认为它们可以共存,也许我再次错过了一些重要的东西。
请帮助澄清这一点。
答案 0 :(得分:1)
您说得对,英特尔VT-x的当前状态不允许并行操作两个独立的虚拟机监视器(VMM)。它们将产生系统资源冲突,导致未定义的行为,包括虚拟机(VM)崩溃,挂起或重新启动,可能是数据损坏。
例如,同时为不同的可视化解决方案加载内核驱动程序是不安全的,甚至不能启动VM。我在遇到问题时遇到了问题。 KVM和Virtualbox或KVM和Simics VMP一起加载。
一个VMM不可能安全地阻止另一个VMM的加载或操作。 一个VMM可靠地检测其他VMM的存在甚至是有问题的,因为VMXON / VMXOFF可以在操作系统(OS)操作期间动态完成,并且没有可以充当互斥对象或虚拟化锁的硬件资源。资源。
与现代硬件配合使用的唯一方法是主机操作系统提供API以调解对底层虚拟化资源(VMXON / VMXOFF,VMPTRLD,VMLAUNCH / VMRESUME等)的请求,并让所有VMM同意使用此API。 Apple Mac OS X和最近的Microsoft Windows系统都有这样的功能。但是,有人可能会说这些API在某种程度上限制了VMM作者。