【问题标题】:Type-1 VMM and Ring 1Type-1 VMM 和 Ring 1
【发布时间】:2012-10-05 16:33:05
【问题描述】:

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

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

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

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

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

  4. VMM 然后在环 3 中真正返回来宾用户空间。(CPU 也被设计为执行此操作。)

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

你有什么想法吗?谢谢!

【问题讨论】:

  • 您说的是哪个管理程序?这可能因一个 VMM 与另一个不同。
  • @hsalimi 谢谢!但实际上我没有特定的 VMM。一般来说,有多少种方法可以实现?

标签: virtualization context-switch protected-mode hypervisor


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-27
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 2018-09-08
      • 2020-06-02
      相关资源
      最近更新 更多