管理程序如何知道VM内发生了特权指令?

时间:2013-04-13 00:00:42

标签: virtualization hypervisor

我开始阅读关于VMM的内容,并且自己想知道虚拟机管理程序如何知道在VM内发生的特权指令(例如,cpuid)而不是真正的操作系统?

假设我已经执行了 cpuid ,会发生陷阱并且会发生VMEXIT,该怎么办? 会知道指令发生在我的常规操作系统内或VM内吗?

2 个答案:

答案 0 :(得分:4)

首先,您使用的是错误的术语。当操作系统在虚拟机管理程序之上运行时, 操作系统将成为虚拟机(虚拟机) 虚拟机管理程序是VMM(=虚拟机)机器监视器) VM 也可以称为“ 来宾 ”。因此:虚拟机管理程序之上的操作系统= VM =来宾(这些表达式意味着相同的事情)。

其次,从执行 VMLAUNCH VMRESUME <的那一刻起,您告诉 CPU 在VM内执行 / strong>,假设您正在阅读有关英特尔VMX的信息。当由于某种原因VM导致管理程序陷阱时,我们说“ VM退出 ”并且CPU知道它不再在VM内执行。因此:

  • VMLAUNCH / VMRESUME 执行和 VM-exits 之间,我们位于 VM CPUID将陷阱 (导致 VM退出
  • VM-exits VMLAUNCH / VMRESUME 执行之间,我们位于 VMM (= hypervisor)和 CPUID不会陷阱 ,因为我们已经在虚拟机管理程序中

答案 1 :(得分:0)

特权指令在用户模式中执行时会生成异常。例外通常是未定义指令异常。 hypervisor 挂钩此异常,检查正在执行的指令,然后将控制权返回给 VM 。当主机 OS调用相同的指令时,它处于主管或提升的权限中,并且在执行指令时通常不会生成异常。通常,这些问题由 CPU 处理。

但是,如果处理器上没有指令(例如浮点仿真),则虚拟机管理程序可以模拟 VM 如果没有,则到OS处理程序。可能甚至允许 OS 处理 OS VM 用户任务的仿真。< / p>

一般来说,这个问题对于通用CPU来说是无法回答的。这取决于在 VM 中如何模拟指令。但是,最好的情况是 hypervisor 不会模拟任何 OS 指令。仿真不仅会降低虚拟机的速度,还会影响整个 CPU ,包括主机 OS 中的用户进程

相关问题