1

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

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

所以我的问题是,你如何在一个进程中本地执行这么多环 3 代码?考虑到大部分windows exe文件不包含重定位信息,它不能在其他地方执行,并且ring3代码中没有使用二进制翻译。

谢谢。

4

1 回答 1

2

让我们来谈谈VMX,这就是Intel VT-x设计。

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

在环 3 中运行的管理程序VMX root mode,当它决定将 CPU 控制权转移给来宾时,管理程序 lanuchVMLAUNCH指令允许转移到VMX non-root modefrom VMX root mode。然后来宾环 3 代码现在可以在VMX non-root mode. 所有这一切都由Intel VT-x. 运行来宾不需要二进制翻译或指令仿真。

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

于 2013-09-04T19:26:23.493 回答