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

7
假设:
  1. 有一个虚拟机(VM1)正在运行,并且它创建了一个IO请求(文件读取)
  2. 在请求完成之前,另一个虚拟机(VM2)由VMM调度
  3. 现在IO请求已经完成,DMA引起中断。这个中断将导致VM2的中断处理程序被调用,这不应该是发生的情况
那么它是如何工作的呢?
1个回答

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

当中断发生时,VM2将在处理器中运行其代码。虚拟机监视器如何知道这个中断呢?虚拟机监视器是否会更改处理程序地址到自己的处理程序呢? - Deependra Patel
1
一种可能的方式是中断会导致虚拟机退出。虚拟化程序并不改变客户机,它只是编程硬件虚拟化扩展来强制虚拟机退出。如果需要,虚拟化程序随后可以使用硬件虚拟化扩展来模拟向客户机发出中断。 - missimer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接