如何以及何时将主机 CPU 状态保存在 VMCS 主机状态区域中?

问题描述

我正在尝试了解英特尔 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)之前检查主机状态区域的原因。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...