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

Kernel 中断在硬件虚拟化中是如何工作的?,kernel,virtual-machine,interrupt,virtualization,interrupt-handling,Kernel,Virtual Machine,Interrupt,Virtualization,Interrupt Handling,假设 虚拟机(VM1)正在运行并创建IO请求(文件读取) 在请求完成之前,VMM会安排另一个虚拟机(VM2) 现在IO完成,DMA导致中断。此中断将导致调用VM2的中断处理程序,但实际情况并非如此 那么它是如何工作的呢 现在IO完成,DMA导致中断。此中断将导致调用VM2的中断处理程序,但实际情况并非如此 这是不正确的。尽管这取决于所使用的虚拟机监控程序,但几乎没有人会允许这种情况发生 通常(例如,不包括设备到虚拟机的直接映射),中断将被传递到虚拟机监控程序,因为虚拟机监控程序实际执行读取请求。

假设

  • 虚拟机(VM1)正在运行并创建IO请求(文件读取)
  • 在请求完成之前,VMM会安排另一个虚拟机(VM2)
  • 现在IO完成,DMA导致中断。此中断将导致调用VM2的中断处理程序,但实际情况并非如此
  • 那么它是如何工作的呢

    现在IO完成,DMA导致中断。此中断将导致调用VM2的中断处理程序,但实际情况并非如此

    这是不正确的。尽管这取决于所使用的虚拟机监控程序,但几乎没有人会允许这种情况发生

    通常(例如,不包括设备到虚拟机的直接映射),中断将被传递到虚拟机监控程序,因为虚拟机监控程序实际执行读取请求。假设是一个虚拟设备,当VM启动读取请求时,它实际上不会与硬件通信,而是与虚拟机监控程序模拟的假设备通信。虚拟机监控程序实际管理设备,因此将从设备接收所有中断。当虚拟机再次调度时,如果设备仿真需要,虚拟机管理程序将向虚拟机伪造硬件中断


    现在,在将设备直接映射到VM的情况下,VM将管理设备。尽管如此,虚拟机监控程序仍然可以阻止其他虚拟机接收来自该设备的中断,因此这种情况类似于虚拟机监控程序阻止和不传递中断给不应该接收中断的虚拟机。

    当中断发生时,VM2将在处理器中运行其代码。虚拟机监控程序如何知道中断?虚拟机监控程序是否将处理程序地址更改为自己的处理程序?一种可能的方法是,中断将导致VM退出。虚拟机监控程序不会更改客户机,它只是对硬件虚拟化扩展进行编程,以强制VM退出。如果需要,虚拟机监控程序可以稍后使用硬件虚拟化扩展来模拟对来宾的中断。