中断在硬件虚拟化中如何工作?

Dee*_*tel 6 virtualization kernel interrupt virtual-machine interrupt-handling

假设

  1. 虚拟机(VM1)正在运行,并创建IO请求(读取文件)
  2. 在请求完成之前,VMM安排了另一个虚拟机(VM2)
  3. 现在,IO完成,DMA导致中断。该中断将导致调用VM2的中断处理程序,而事实并非如此

那怎么运作呢?

mis*_*mer 5

现在IO完成,DMA引起中断。此中断将导致调用 VM2 的中断处理程序,这不应该是这种情况

这是不正确的。虽然这取决于所使用的确切管理程序,但几乎没有人会允许这种情况发生。

通常(例如,不包括设备到虚拟机的直接映射等),中断将传递给管理程序,因为管理程序是实际执行读取请求的东西。假设是虚拟设备,当 VM 发起读取请求时,它实际上并不与硬件通信,而是与虚拟机管理程序模拟的假设备通信。管理程序实际管理设备,因此将从设备接收所有中断。当再次调度 VM 时,如果需要进行设备模拟,虚拟机管理程序将向 VM 伪造硬件中断。

现在,在将设备直接映射到 VM 的情况下,VM 将管理设备。但是,管理程序仍然可以阻止其他 VM 从该设备接收中断,因此情况与管理程序类似,即管理程序阻止并且不将中断交付给不应接收它们的 VM。