假设: 有一个虚拟机(VM1)正在运行,并且它创建了一个IO请求(文件读取) 在请求完成之前,另一个虚拟机(VM2)由VMM调度 现在IO请求已经完成,DMA引起中断。这个中断将导致VM2的中断处理程序被调用,这不应该是发生的情况 那么它是如何工作的呢?
现在IO已经完成了,DMA引起了中断。这个中断将导致VM2的中断处理程序被调用,但这不应该发生。这是不正确的。虽然它取决于使用的确切虚拟化平台,但几乎没有一个会允许这种情况发生。通常情况下(例如,排除设备直接映射到VM的情况),中断将传递给虚拟化平台,因为虚拟化平台是实际执行读取请求的东西。假设有一个虚拟设备,当VM启动读取请求时,它并不会实际与硬件通信,而是与由虚拟化平台模拟的虚拟设备通信。虚拟化平台实际管理设备,并因此接收来自设备的所有中断。如果需要对设备仿真进行虚拟化,当VM再次被调度时,虚拟化平台将为VM伪造一个硬件中断。现在,在将设备直接映射到VM的情况下,VM将管理设备。然而,虚拟化平台仍然可以防止其他VM从该设备接收中断,因此情况类似于虚拟化平台防止将中断传递给不应该接收它们的VM。