根据VMWare发布的白皮书,二进制翻译技术只在内核中使用(ring 0代码),ring 3代码在cpu硬件上“直接执行”。
正如我所观察到的,无论来宾操作系统中运行了多少进程,宿主操作系统中总是只有一个进程。因此,我假设所有的来宾环3代码都在单个主机进程上下文中运行。(对于VMWare,它是vmware-vmx.exe)。
所以我的问题是,如何在单个进程中本机执行如此多的环3代码?考虑到大多数windows exe文件不包含重定位信息,它不能在其他地方执行,并且在ring3代码中不使用二进制转换。
谢谢。
发布于 2013-09-05 03:26:23
让我们谈谈Intel VT-x的设计-- VMX。
Intel VT-x引入了两种新的模式来解决这一问题:VMX root mode和VMX non-root mode,分别用于主机和访客。这两种模式都有环0~3,这意味着主机和访客不会共享相同的环级别。
在VMX root mode的环3中运行的一种管理程序,当它决定将CPU控制权转移给访客时,管理程序执行VMLAUNCH指令,该指令允许从VMX root mode转移到VMX non-root mode。那么guest Ring3代码现在可以在VMX non-root mode中自动执行了。所有这些都得到了Intel VT-x的支持。运行guest不需要二进制转换或指令仿真。
当然,VMX non-root mode的环3的特权和功能较少。例如,当来宾环3代码遇到一些它无法处理的事情时,例如物理设备访问请求,CPU会自动检测到这种限制,并将其传输回VMX root-mode中的虚拟机管理程序。在虚拟机管理程序完成此任务后,它将再次触发VMLAUNCH,以便运行来宾操作系统。
https://stackoverflow.com/questions/18416049
复制相似问题