【发布时间】:2023-04-10 01:18:01
【问题描述】:
假设
- 虚拟机 (VM1) 正在运行并创建 IO 请求(文件读取)
- 在请求完成之前,另一个虚拟机 (VM2) 由 VMM 调度
- 现在 IO 已完成,DMA 导致中断。此中断将导致调用 VM2 的中断处理程序,这不应该是这种情况
那么它是如何工作的呢?
【问题讨论】:
标签: kernel virtual-machine interrupt virtualization interrupt-handling
假设
那么它是如何工作的呢?
【问题讨论】:
标签: kernel virtual-machine interrupt virtualization interrupt-handling
现在 IO 已完成,DMA 导致中断。这个中断会导致VM2的中断处理程序被调用,这不应该是这样
这是不正确的。虽然这取决于所使用的确切管理程序,但几乎没有人会允许这种情况发生。
通常(例如,不包括设备到 VM 的直接映射之类的东西),中断将被传递给管理程序,因为管理程序是实际执行读取请求的东西。假设是一个虚拟设备,当虚拟机发起一个读取请求时,它实际上并不与硬件对话,而是与虚拟机管理程序模拟的假设备对话。实际管理设备并因此将接收来自设备的所有中断的管理程序。当再次调度 VM 时,虚拟机管理程序将在必要时为设备模拟假装到 VM 的硬件中断。
现在,在将设备直接映射到 VM 的情况下,VM 是管理设备的对象。尽管管理程序仍然可以阻止其他虚拟机接收来自该设备的中断,因此在管理程序阻止并且不将中断传递给不应接收它们的虚拟机的意义上,情况类似。
【讨论】: