为什么以下说明必须虚拟化。如何无法虚拟化这可能会导致问题。
答案 0 :(得分:2)
当英特尔VMX模式用于虚拟化时(英特尔平台上的当前虚拟化解决方案就是这种情况),这些指令都不需要由VMM虚拟化,因为它们不会访问或更改受保护机器状态。
允许VMM(但不是必需)为sgdt,sldt,sidt和str请求VM出口。除此之外,列出的任何指令都不会导致VM退出。
处理器本身对其中两条指令执行次要虚拟化:
在访客中更改了SMSW的行为,以便访客看到 VMM想要它的价值。
在guest虚拟机中更改IRET指令的行为以清除 NMI阻止。
答案 1 :(得分:0)
显然不允许修改机器状态(段基数/限制,禁用中断等),或者客户机可能会突破VM或至少挂起它。 (例如,通过运行无限循环并禁用中断。)
pushf
/ popf
有点微妙:请记住IF
(启用中断的位cli
/ sti
翻转)是其中一位在EFLAGS。
您希望物理计算机在guest虚拟机禁用中断时启用中断。但是,您还希望guest虚拟机在运行的虚拟x86上禁用中断时查看IF=0
。因此,您需要虚拟化pushf
以及popf
。