谈虚拟环境中设备访问的实现方法(中)

原创 2007年09月13日 16:37:00

谈虚拟环境中设备访问的实现方法(中)

康华 :主要从事 Linux 操作系统内核、虚拟机、Linux 技术标准、计算机安全、软件测试等领域的研究与开发工作,曾就职 MII-HP 软件实验室 、瞬联软件公司/MOTOROLA,现就职于Lenovo研究院 。其所合写的Linux专栏见http://www.csdn.net/subject/linux/。 如果需要可以联系通过 kanghua151@msn.com (MSN)联系我. 

摘要 上期我们对虚拟机中各种设备访问方式进行介绍与分析归纳。在继续具体介绍虚拟机种光驱刻录实现之前,先占用一些篇幅介绍一下设备虚拟化中的一个关键问题:I/O截获。

什么是I/O截获?

VMM截获I/O操作是指:guest 系统发送的I/O访问请求被VMM拦截,而不是像native环境下那样被直接写入到物理设备中。原因是显而易见的,因为不能让guest系统直接修改硬件状态,否则有可能会造成系统故障(轻则影响其他guest运行,重则会让整个系统宕机)。所以VMM会将截获的I/O指令进行分析后模拟执行,也就是将“伪造”的数据返回给Guest系统。

       目前所有虚拟机软件的I/O虚拟化原理都如上所说,过程大同小异。不过具体的截获方式又有所差别。这里就几种典型的I/O截获方式进行介绍和分析。

 

1ISA层的虚拟化技术中的I/O截获方法

      ISA层的虚拟化技术是指采用软件模拟指令集的方式进行指令虚拟。具体的实现方式是截获客户操作系统发出的指令,并把它们翻译Host平台上的可用指令进行执行,其中所说的指令既包括处理器内部指令,也包含IO指令。因此I/O的截获和其他处理器指令截获方式一样,都是在虚拟机模拟CPU取指令过程中被发现并被进而模拟处理的。这种虚拟机的代表是BochsQEMU,都是运行在用户空间的进程虚拟机。

 

2 .  硬件抽象层的虚拟化技术的I/O截获方法

硬件抽象层的虚拟化技术是指在guest host系统ISA相同的情况下,尽可能避免翻译和模拟guest指令,而是让其直接运行;仅仅在guest系统执行特权指令(修改系统资源或执行结果受资源状态决定)时,虚拟机才会截获并接管处理,以免系统发生异常或冲突。

虚拟机为了能截获特权指令,要求执行于高特权级别,属于内核程序。这样每由用户态运行的guest系统产生trap时,就能被VMM捕获到。而I/O指令(x86 in/out等)属于典型的特权指令,在用户空间使用将产生trap

如果出现特权指令在特权级不够的情况下执行,并不能方便地产生trap的情况。对这一问题的解决方案有3种:一种是指令扫描结合动态指令修改的软件技术,有许多商业的虚拟化产品采用了这种方案。此种虚拟化技术的代表产品是VMware;另一种是对guest 系统进行修改,使得修改资源时能产生必要的trap,以便能被VMM截获。代表软件是xen(其中的modify方式)。最后一种方案是修改x86 CPU,使它支持虚拟化(即让所有敏感特权指令都能产生trap),也就是IntelVanderpool技术和AMDPacifica技术的目标,具体代表是KVM 和Xen (unmodify方式)。 

I/O截获后如何模拟?

       I/O请求或读或写在被VMM截获后都需要模拟执行。模拟即可以在VMM内部完成,也可以在host中完成。VMM内部完成的好处是速度快,缺点是需要在VMM中实现模拟设备,工作量大;且使得VMM变的臃肿,降低了VMM的可靠性。在host中完成虽然需要将I/O请求从VMM转发到host中的设备模拟进程,增加了上下文切换和调度时间。但是优点更突出:1 可以利用已存在的设备模拟代码(如qemu);2于宿主性设备模拟可以借助host系统的设备驱动。3 保持了VMM尽量精简。鉴于以上原因多数虚拟化软件都采用将设备模拟纺在host中进行。

最后,为了让大家能更清楚认识I/O虚拟化过程。我举Xen中完成I/O虚拟化的过程进行说明:

首先guest 系统执行I/O请求命令(如out xxx; 由于guest处于用户空间,I/O访问会引发trap,这时处于特权级运行的VMM会将捕获该trap, 然后VMM可能在自己内部模拟执行该I/O请求(如对中断控制器的请求或简单的pit模拟等都实现在VMM内部),或者将I/O请求向上发送给处于Domain0中运行的Qemu进程模拟I/O操作(具体是通过event channel发送模拟中断通知domain0中的qemu)。Qemu进程当监听到上发的I/O请求后,会调对应端口注册的处理函数进行I/O模拟处理,并将模拟结果送回VMM,从而返回给guest系统。

 

相关文章推荐

虚拟环境中设备访问的实现方法

  • 2011年03月30日 08:55
  • 125KB
  • 下载

MacOS Sierra 安装 爬虫Scrapy或虚拟环境扩展包virtualenvwrapper,报Uninstalling six-1.4.1的解决方法

一、问题描述 在用下列名字安装时 sudo -H pip install Scrapy sudo pip install virtualenvwrapper   出现下列...

虚拟环境大规模复杂数据

  • 2013年11月20日 10:30
  • 378KB
  • 下载

python虚拟环境安装和配置

http://blog.csdn.net/pipisorry/article/details/47008981python虚拟环境virtualenvVirtualEnv用于在一台机器上创建多个独立的...

mobile虚拟环境连接网络详细设置

  • 2011年07月27日 11:03
  • 1.44MB
  • 下载

python的IDE使用Anaconda下的虚拟环境[PyCharm]

我使用的是pycharm: 只需要更改python interpreter就行。 1.找到IDE设置中的Project Interpreter 2.找到按钮 3.点击Add Local,选择你...

UEFI 虚拟环境的建立

  • 2013年01月03日 16:59
  • 194KB
  • 下载

虚拟环境的部署与扩展

  • 2013年04月05日 12:42
  • 483KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:谈虚拟环境中设备访问的实现方法(中)
举报原因:
原因补充:

(最多只允许输入30个字)