guest虚拟机环-3代码在VM环境中运行在哪里?

时间:2013-08-24 07:14:03

标签: windows vmware virtualization

根据VMWare发布的白皮书,二进制翻译技术仅用于内核(环0代码),环3代码在CPU硬件上“直接执行”。

正如我所观察到的,无论在客户操作系统中运行了多少进程,主机操作系统中始终只有一个进程。所以我假设所有的guest ring 3代码都在单个主机进程上下文中运行。 (对于VMWare,它是vmware-vmx.exe)。

所以我的问题是,如何在一个进程中本地执行如此多的ring 3代码?考虑到大多数Windows exe文件不包含重定位信息,它不能在其他地方执行,并且在ring3代码中不使用二进制转换。

感谢。

1 个答案:

答案 0 :(得分:1)

让我们谈谈VMXIntel VT-x的设计。

Intel VT-x引入了两种新模式来解决此问题:VMX root modeVMX non-root mode,分别用于主机和来宾。两种模式都有0~3环,这意味着主机和来宾不会共享相同的响铃级别。

VMX root mode的第3环中运行的虚拟机管理程序,当它决定将CPU控制权转移给来宾时,管理程序执行VMLAUNCH指令,允许从{VMX non-root mode转移到VMX root mode 1}}。然后,guest ring 3代码现在能够在VMX non-root mode中自动执行。所有这些都得到Intel VT-x的支持。运行guest虚拟机不需要二进制转换或指令仿真。

当然VMX non-root mode的第3环具有较少的特权和权力。例如,当客户环3代码遇到无法处理的事情时,例如物理设备访问请求,CPU将自动检测到这种限制并转移回VMX root-mode中的管理程序。管理程序完成此任务后,它将再次触发VMLAUNCH以运行访客。