问题描述
我正在尝试了解英特尔 VMX/VT-x 工作原理的基础知识。在英特尔软件开发人员手册中,它是关于 VMCS 的:
VMCS 数据分为六个逻辑组:
来宾州。处理器状态保存到访客状态区
在 VM 上退出并在 VM 条目上从那里加载。
东道国区域。处理器状态从主机状态区域加载
虚拟机退出。
...
对我来说,CPU 状态在 VM 退出时保存到访客区域并在 VM 条目上加载是有意义的。从 VM 退出时的主机状态区域加载 CPU 状态也是有道理的……但是 CPU 状态何时保存在主机状态区域中?直觉上我会说它保存在 VM 条目中,但手册没有这么说......有人可以帮我澄清一下吗?
谢谢
解决方法
CPU 从不保存主机状态。
VMM(又名:管理程序)控制何时执行 vmlaunch/vmresume
,因此可以在执行之前相应地设置主机状态区域。
当 VM 条目由于 VMCS 无效而失败时,执行会转到 vmlaunch/vmresume
之后的下一条指令。
当虚拟机由于无效的来宾状态而失败时,从主机状态区中设置的 RIP
恢复执行(就像发生了虚拟机退出一样)。
如果 CPU 要设置主机状态区,则两种情况将相同。
这也是 CPU 在进入 VMX 非 root 模式(即启动 VM)之前检查主机状态区域的原因。