1

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

Type-1 VMM:这是经典的陷阱和仿真 VMM。VMM 直接在硬件上运行,在 Ring 0 中充当“主机操作系统”。来宾内核和来宾应用程序在 VMM 上运行,分别在 Ring 1 和 Ring 3 中。

  1. 当来宾应用程序进行系统调用时,它将捕获到 Ring 0 VMM,(CPU 旨在执行此操作)。

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

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

  4. VMM 然后在 ring 3 中真正返回到访客用户空间。(CPU 也被设计为这样做。)

我的问题是关于第 2 步的。VMM 如何将控制权转移到来宾内核并强制 CPU 响铃 1?这不可能是一个简单的“调用”,因为那时来宾内核代码将在环 0 中运行。它必须是某种“系统调用返回”或一些特殊的上下文切换指令。

你有什么想法吗?谢谢!

4

2 回答 2

1

只需使用 RPL=1 的 CS 选择器运行来宾操作系统(尽管在 x86 上)。从更高特权的环返回到更低的环通常使用 iret 完成。

于 2013-10-01T16:48:32.170 回答
0

Xen 是在 ring 1 中运行客户操作系统的 VMM 之一。在 Xen 中,诸如 HLT 指令(客户操作系统运行在 ring 1 中的指令)之类的指令被超级调用取代。在这种情况下,调用 xen_idle() 方法而不是调用 HLT 指令(最终在 Linux 内核中完成)。它执行一个超级调用,即管理特权环切换的 HYPERVISOR_sched_op(SCHEDOP_block, 0) 超级调用。有关更多信息,请参阅:

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

于 2012-10-29T16:24:45.143 回答