关闭

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

标签: 虚拟化虚拟机xenlinuxdomain软件测试
2314人阅读 评论(0) 收藏 举报
分类:

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

康华 :主要从事 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系统。

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:322551次
    • 积分:4002
    • 等级:
    • 排名:第8109名
    • 原创:55篇
    • 转载:1篇
    • 译文:3篇
    • 评论:164条
    最新评论
    Linux Platform for Phone