Type-1 VMM和Ring 1

时间:2012-10-15 16:37:48

标签: virtualization context-switch protected-mode hypervisor

最近,我正在做关于虚拟化的作业。我的问题是,VMM如何将控制转移到来宾内核并在Ring 1中运行该代码?

Type-1 VMM:这是传统的陷阱和模拟VMM。 VMM直接在硬件上运行,充当"主机操作系统"在环0中,来宾内核和来宾应用程序分别在环1和环3中的VMM上运行。

  1. 当Guest应用程序进行系统调用时,它将陷入Ring 0 VMM,(CPU旨在执行此操作)。

  2. VMM将检测到这是一个系统调用,然后将控制转移到来宾内核syscal处理程序并在环1中执行。

  3. 完成后,guest虚拟机内核执行syscall-return,这是一个特权调用,它将再次陷入VMM。

  4. VMM然后真正返回到环3中的来宾用户空间。(CPU也是为此而设计的。)

  5. 我的问题是关于第2步。 VMM如何将控制转移到来宾内核并强制CPU响1?它不是一个简单的"来电&#34 ;从那时起,来宾内核代码将在第0环中运行。它必须是某种类型的"系统调用返回"或一些特殊的上下文切换指令。

    你知道吗?谢谢!

2 个答案:

答案 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)超级调用。有关详细信息,请参阅:

http://www.linuxjournal.com/article/8909