最近,我正在做关于虚拟化的功课。我的问题是,VMM 如何将控制权转移到来宾内核并在 Ring 1 中运行该代码?
Type-1 VMM:这是经典的陷阱和仿真 VMM。VMM 直接在硬件上运行,在 Ring 0 中充当“主机操作系统”。来宾内核和来宾应用程序在 VMM 上运行,分别在 Ring 1 和 Ring 3 中。
当来宾应用程序进行系统调用时,它将捕获到 Ring 0 VMM,(CPU 旨在执行此操作)。
然后 VMM 将检测到这是一个系统调用,然后将控制权转移到来宾内核系统处理程序并在环 1 中执行它。
完成后,来宾内核执行 syscall-return,这是一个特权调用,它将再次陷入 VMM。
VMM 然后在 ring 3 中真正返回到访客用户空间。(CPU 也被设计为这样做。)
我的问题是关于第 2 步的。VMM 如何将控制权转移到来宾内核并强制 CPU 响铃 1?这不可能是一个简单的“调用”,因为那时来宾内核代码将在环 0 中运行。它必须是某种“系统调用返回”或一些特殊的上下文切换指令。
你有什么想法吗?谢谢!