当前位置: > 虚拟化 Virtualization > Xen >

XEN3.0 虚拟化架构

时间:2016-05-29 22:45来源:linux.it.net.cn 作者:IT

在xen系统中,存在一个轻量级的软件层,向运行在它之上的虚拟机提供虚拟硬件资源,同时分配和管理这些资源,并保证虚拟机直间相互隔离,这样的软件层一般称为虚拟机监视器(VMM),在xen中被称为hypervisor,简称xen,虚拟机被称为domain。hypervisor位于操作系统和硬件之间,为其之上运行的操作系统提供虚拟化的硬件环境,xen采用混合模式,因此在xen中存在一个domain来辅助xen管理其他domain,这个特权的domian称为dom0,而其他被管理的domian称为domU,简单的如下图所示:

 

    xen向domain提供一个抽象层,提供各种api接口,其中dom0含有原生设备驱动也就是真实的设备驱动,可以直接访问物理硬件,dom0通过xen提供的api来进行交互,通过控制接口管理其他domU。在xen中,xen向domain提供了基本的虚拟硬件和事件通道,同时向dom0提供了虚拟域管理api接口,使dom0能够利用在用户空间的管理工具管理其他domU,对于domU对设备的访问,xen提供了相应的硬件接口,以保证设备访问安全进行。

    xen的控制接口只能被dom0使用,使dom0管理其他domU,dom0可以通过控制接口创建、销毁domU等,还能实现各种cpu调度、内存分配等。xen的安全硬件接口则要完成CPU、MMU之外所有的硬件虚拟工作,安全硬件接口只能被拥有原生驱动的dom使用(dom0、IDD),向其他domU仅提供虚拟硬件服务。这个过程是建立在拥有原生驱动的dom和其他dom之间的设备通道完成的。设备通道是由事件通道和共享内存实现的。其他domU通过设备通道向拥有原生驱动的dom提交异步IO请求,再由拥有原生驱动的dom通过安全硬件接口完成IO请求。

     为了使domU中的应用程序能够正常执行,xen为每个dom建了vcpu结构,用来接受domU传递的指令,其中大部分指令都被vcpu直接交给物理cpu执行,而对于特权指令和临界指令则需要经过确认后由xen代为执行。而虚拟MMU用来帮助domU完成地址转化,即由虚拟地址到机器地址的转换。事件通道用于dom和xen之间、dom和dom之间的一种异步事件通知机制,用于处理domU的虚拟中断、物理中断以及dom之间的通讯。设备管理器也是存在于dom0中,负责在dom启动时加载特定的设备驱动、建立通道等。控制面板在dom0中同xen中的控制接口交互,完成对整个xen系统的管理工作。原生驱动是指原来操作系统系统使用的真实的设备驱动,在xen中只有经过授权的dom才能使用原生驱动访问真实的硬件设备。位于其他dom中的前端驱动将IO请求发送给位于dom0中的后端驱动,后端驱动接受IO请求,然后提交原生驱动进行处理。

整个架构体系如下图:
 
 

    xen3.0 引入了硬件虚拟化技术,使xen可以支持不修改内核的domU,运行未修改内核的虚拟机称为硬件虚拟机(HVM),因此xen上的域有四种:特权域dom0、独立设备驱动域IDD、硬件虚拟域HVM、非特权域domU。

    Dom0在xen中是独一无二的,dom0中含有原生驱动,可以直接访问硬件设备,并通过控制接口来完成对其他域的管理工作,dom0还可以对其他dom进行设备访问的授权,这些经过授权的dom能够访问原生驱动所能访问的部分真实硬件设备。

    IDD,在xen只有一个特权域dom0,所有硬件设备都被dom0运行的系统控制,但这有很大的问题,如果dom0的系统中某个驱动包含漏洞,那就可能对整个dom0内核引入隐患,从而导致整个系统崩溃,因此,将设备驱动由dom0中迁移到另一个域中,一方面降低dom0的负载,另一方面也可以降到系统的风险。这些经过dom0授权的,可以使用特定设备驱动的虚拟域称为IDD,IDD除了提供设备驱动外不做其他事情。

    HVM,xen3支持运行未修改内核的OS,这需要cpu支持,例如:VT-X和AMD-V技术。由于HVM没有修改内核,所以guest OS不能支持xen在半虚拟化下采用的分离设备驱动模型。xen必须模拟出guest OS能够支持的环境,另外一般domU中的guest OS通过使用内存中的管理程序提供的一段引导信息,在保护模式下引导,而在HVM中guest OS则是从实模式引导,并从模式的BISO中读取配置信息。

    DomU,严格来说除了dom0之外的所有域都是domU,但是IDD经过授权后能够直接使用物理设备驱动,因而IDD也属于特权域。无论是HVM还是domU都不能直接访问物理设备,必须借助dom0或者IDD才能完成。

下面是xen中domU的发包过程
 

CPU虚拟化

CPU虚拟化又分为半虚拟化和硬件虚拟化两种:

   1 半虚拟化

   在xen中,xen处于硬件和操作系统之间,为其之上的dom提供虚拟化的硬件环境,这意味着xen在系统中拥有最高的特权等级,且xen和dom不能处于相同的等级中,所以dom就被迫迁移到较低的等级中,x86架构下,cpu提供四个特权级ring0~ring3,0级别最高,同时cpu支持分段和分页的内存保护机制,分段保护机制支持四个特权等级,而分页保护机制只支持两个特权等级,即用户模式和管理模式,用户模式相当于ring3,ring0-2则被划分到管理模式中。但是目前的大多数操作系统只用到了两个ring0和ring3,系统运行在0,应用程序运行在3。

   虚拟化中存在两种不同的特权解除方式:0/1/3和0/3模型,对比如下图:

   0/1/3和0/3各有各的特点,0/3无法在操作系统和应用程序之间利用分页或者分段机制进行保护,0/1/3无法在操作系统和VMM直接利用分页机制进行保护,只能采用分段机制。xen采用的是0/3模型,这就需要xen将操作系统和用户空间隔离开来。

   无论采用哪种模型,xen都替代了原有的内核,运行在最高特权级别,dom的cpu可以执行一些普通的cpu指令,对于一些危险的特权指令需要xen通过超级调用向dom提供执行这些特权指令的接口。在原有的架构下,操作系统的启动都是由实模式启动进入保护模式的,而在xen中实模式到保护模式的转换是在xen中完成的,所以dom的内核启动时就已经处于保护模式下。

   2 硬件虚拟化

   在大部分只有两个特权级的结构中,为了避免采用0/3模型而导致操作系统和应用程序位于同一特权级下,这些系统都支持某种形式的硬件虚拟化技术。系统通过硬件虚拟出一个比0 ring更高级的特权级 -1 ring,VMM则运行在-1 ring,而操作系统仍旧运行在0 ring中,这样可以保持VMM运行在最高特权级中,又可以防止操作系统内核同用户程序在同一个空间中。VT-X和AMD-V采用的基本思想是引入新的指令和处理器运行模式,guest OS只能运行在受控模式下,当需要VMM进行监控和模拟时,由硬件支持模式切换,这样的好处是不再需要修改guest OS的内核,而是通过硬件方式来完成由原来软件完成的指令捕获。
 
 

内存虚拟化

   x86同时支持分段和分页机制,在半虚拟化下,内存的分段保护机制,使xen和guest OS共存于同一个内存地址空间中,简化了xen对dom内存的分配管理过程,利用分页机制,xen能够保护各个dom在内存上有效隔离,xen必须确保任何的非特权domU不会访问到同一个内存区域,因此,每一页的更新都必须经过xen 的确认,以保证每个domU只能控制自己的页表。在物理内存管理中,xen采用了气球驱动来调节分配给各个domU的内存,气球驱动运行在guest OS中,guest OS通过气球驱动可以和xen通讯,当domU需要内存时,通过气球驱动和xen通讯申请内存,xen把未分配的内存通过气球驱动分配给提交请求的domU。xen为了回收内存,就会使气球驱动“膨胀”,guest OS为了给气球分配足够的空间就会回收页面释放内存,然后气球驱动再将页面传递给xen。
 
 

IO虚拟化

    在半虚拟化下,xen采用分离设备驱动模型来实现IO虚拟化。将设备驱动分为:前端驱动、后端驱动、原生驱动。前端驱动在domU中,后端驱动和原生驱动在dom0和IDD中。前端驱动负责将domU的IO请求传递给dom0中的后端驱动,后端驱动解析收到的IO请求并映射到实际物理设备,最后交给他的设备驱动程序来控制硬件完成IO请求。为了实现大量DMA数据在domU和dom0之间高效传递,xen采用授权表机制,通过直接替换页面映射关系来避免不必要的内存拷贝。



(责任编辑:IT)
------分隔线----------------------------