zoukankan      html  css  js  c++  java
  • IO虚拟化简单了解

    IO虚拟化 设备对软件来说,就是一堆的寄存器(io端口)和IO内存,以及中断和DMA。而设备虚拟化的过程,就是模拟设备的这些寄存器和内存,然后截获Guest OS里面对IO端口和寄存器的访问,然后通过软件的

    方式来模拟真实的硬件。

    1)全虚拟化的IO虚拟化

    在全虚拟化,因为不修改Guest OS的内核,Guest OS保存了IO设备的原生驱动。但是VMM处理设备的方式会根据VMM位置的不同而有所不同。例如,全虚拟化最有代表性的VMware ESX和VMWare

    Workstattion,由于VMM实现模式不同,采用的设备虚拟化方式也不同。

    在VMware ESX中,VMM直接运行在物理硬件之上,直接操作硬件设备,而Guest OS看到的则是一组统一的虚拟IO设备。Guest  OS对这些虚拟设备的每一个IO操作都会陷入VMM 中,由VMM对IO指令进行解析

    并映射到实际的物理设备,然后直接控制硬件完成。

    而VMWare WorkStation采用了不同的方式。VMM实际上运行在一个传统的操作系统之上,这类VMM无法获得对硬件资源的完全控制,因此采用软件模拟的方式来模拟IO设备。Guest OS的IO操作会被VMM

    捕获,并转发给宿主机(host OS)的一个用户态进程,该进程通过对宿主机操作系统的系统调用来模拟设备的行为。

    模拟IO虚拟化方式的最大开销在于处理器模式的切换:包括从Guest OS到VMM的切换,以及从内核态的VMM到用户态的IO模拟进程之间的切换。

    2)半虚拟化的IO虚拟化

      在半虚拟化的情况下,修改Guest OS的内核,将原生的设备驱动从Guest OS移出,放到一个特殊的设备虚拟机中(对xen来说,就是Dom0了),其余虚拟机中的IO请求都由设备虚拟机处理。而在Guest

    OS内部,为每个虚拟设备安装一个特殊的驱动程序,由该驱动程序负责IO请求的传递,设备虚拟机经过VMM授权,解析收到的请求并映射到实际物理设备,最后交给设备的原生驱动来完成IO。实际上在这

    种情况下,Guest OS的驱动是消息代理的作用,把io事件转换为消息,发送给设备虚拟机处理。

  • 相关阅读:
    nginx: [emerg] the size 10485760 of shared memory zone "cache_one" conflicts with already declared size 0
    ruby 删除文件夹(包括文件夹中的文件夹和文件)
    nisi 脚本示例
    将node-expat扩展编译至node.exe中
    将odbc扩展编译至nodejs程序集中
    微信小程序数据传递基本
    Java环境配置
    Angular环境配置
    mysql中常用的数据类型
    html中a标签的4个伪类样式
  • 原文地址:https://www.cnblogs.com/zxc2man/p/3498894.html
Copyright © 2011-2022 走看看