最近,我正在做关于虚拟化的作业。我的问题是,VMM如何将控制转移到来宾内核并在Ring 1中运行该代码?
Type-1 VMM:这是传统的陷阱和模拟VMM。 VMM直接在硬件上运行,充当"主机操作系统"在环0中,来宾内核和来宾应用程序分别在环1和环3中的VMM上运行。
当Guest应用程序进行系统调用时,它将陷入Ring 0 VMM,(CPU旨在执行此操作)。
VMM将检测到这是一个系统调用,然后将控制转移到来宾内核syscal处理程序并在环1中执行。
完成后,guest虚拟机内核执行syscall-return,这是一个特权调用,它将再次陷入VMM。
VMM然后真正返回到环3中的来宾用户空间。(CPU也是为此而设计的。)
我的问题是关于第2步。 VMM如何将控制转移到来宾内核并强制CPU响1?它不是一个简单的"来电&#34 ;从那时起,来宾内核代码将在第0环中运行。它必须是某种类型的"系统调用返回"或一些特殊的上下文切换指令。
你知道吗?谢谢!答案 0 :(得分:1)
只需使用RPL = 1的CS选择器运行客户操作系统(虽然在x86上)。从更多特权戒指返回到较低特权戒指通常是使用iret完成的。
答案 1 :(得分:0)
Xen是在环1中运行客户操作系统的VMM之一。在Xen中,诸如HLT指令之类的指令(客户操作系统运行的环1中的指令)被超级调用替换。在这种情况下,不是像最终在Linux内核中那样调用HLT指令,而是调用xen_idle()方法。它执行超级调用,即管理特权环切换的HYPERVISOR_sched_op(SCHEDOP_block,0)超级调用。有关详细信息,请参阅: