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

标签 kernel virtual-machine interrupt virtualization interrupt-handling

认为

  • 虚拟机 (VM1) 正在运行并创建 IO 请求(文件读取)
  • 在请求完成之前,VMM 调度了另一个虚拟机 (VM2)
  • 现在IO完成,DMA引起中断。此中断将导致调用 VM2 的中断处理程序,本不应如此

  • 那么它是如何工作的呢?

    最佳答案

    Now the IO is finished and DMA causes interrupt. This interrupt will cause interrupt handler of VM2 called which should not be the case



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

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

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

    关于kernel - 中断在硬件虚拟化中是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32573053/

    相关文章:

    java - 如何杀死Java中的死锁线程?

    c - AVR 外部中断反弹

    c - 虚拟音频驱动程序(麦克风)

    linux - ubuntu 上的内核版本不正确

    windows - Hyper-V WMI 类的哪些属性可访问内存信息

    azure - 我们可以将加密虚拟机从一个订阅转移到另一个订阅吗

    java - Thread.interrupt() 和 Thread.interrupted() 到底是如何工作的?

    linux - 对添加到内核的系统调用的 undefined reference

    linux - 我如何知道 Linux 内核中的地址是否可读?

    azure - 创建虚拟机、对其进行镜像并删除后,可用 vCPU 配额不足