在完全虚拟化中,来宾操作系统的CPL是什么?
在并行化中,来宾操作系统的CPL为1(环1)
在完全虚拟化中是否相同?
我听说有些x86特权指令是
不易处理,因此需要“二进制重写”方法。。。
这种“二进制重写”是如何发生的??
我知道在虚拟化中,CPU不是模拟的。
那么hypervisor如何在
CPU执行它们?他们预测下一个关于记忆和
在CPU到达之前更新内存内容??
如果这是真的,我认为hypervisor代码(执行二进制重写)
每次需要在来宾操作系统的某个指令被
执行。我觉得这很荒谬。
请具体解释。
提前谢谢你。。!!

最佳答案

如果您所说的完全虚拟化是指硬件支持的虚拟化,那么来宾的CPL与它在裸机上运行的CPL是相同的。
Xen从不重写二进制文件。
这就是VMWare(据我所知)。以我的理解(但我从来没有见过VMware源代码),该方法基本上是运行运行时的代码修补,需要不同的运行-通常,这涉及到替换现有的OP代码与其他东西-或导致陷阱到管理程序,或者一组“做正确的事情”的替换代码。如果我理解这在VMWare中是如何工作的,那就是hypervisor通过单步执行一个块来“学习”代码,并应用二进制补丁或将该部分标记为“清除”(不需要更改)。下一次执行此代码时,它已经被修补或清除,因此可以“全速”运行。
在Xen中,使用半虚拟化(环压缩),然后修改操作系统中的代码以了解虚拟化环境,因此可以“信任”来理解某些内容。但是hypervisor仍然会捕获例如对页表的写入(否则有人可能会编写恶意的内核模块,修改页表以映射到另一个客户机的内存中,或者其他类似的内存中)。
HVM方法确实拦截了某些指令,但由于现代处理器中的硬件支持,如AMD中的支持向量机和Intel处理器中的VMX,其余代码以正常的全速运行。ARM在最新型号的处理器中也有类似的技术,但我不确定它的名字是什么。
我不确定我是否已经回答了你所有的问题,我是否遗漏了什么,或者还不够清楚,请随便问。。。

关于linux - Xen二进制重写方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14183029/

10-16 10:25