xen是目前流行的一种虚拟机解决方案,它最初由剑桥大学的研究人员研制开发。它采用完全虚拟(full virtualization)和半虚拟化(para-virtualization)技术,虚拟机管理器为上层虚拟机给出与底层硬件设备略微不同的抽象层。具体来说,xen提供了hypercall机制,所有运行在xen虚拟机管理器上的虚拟机必须使用这些hypercall来完成相关的特权操作(比如,也表的建立),xen虚拟机管理器向上层虚拟机提供一步的通知机制和基于共享内存IO传输通道。xen虚拟机管理器向上层虚拟机提供异步的通知机制和基于共享内存IO传输通道,。xen要求操作系统必须按照这些规则修改代码并一直到XEN的体系结构上。虽然需要操作系统级别的修改,但是,xen对操作系统的上层调用并没有修改,可以保持对应用程序的透明。
欲行在x86平台上的xen借助IA32的4个优先级。原先,只有操作系统运行在最高优先级,普通的应用程序都运行在ring3,ring1和ring2都没有使用。在xen体系结构中,通过修改操作系统内核,系统从xen虚拟管理器启动,使xen虚拟机管理器处在最高优先级,它占据了ring0,而用户域和特权与的操作系统运行在ring1,运行在这些客户操作系统上的应用程序运行在ring3。
图一给出了虚拟机的体系结构图。其中xen虚拟机管理器处在最底层。在管理程序的上层是xen的域(xen使用“域”,即“domain”来指代通常说的虚拟机)。客户操作系统运行在用户域中(DomU, Domain User)。在系统启动时,xen虚拟机管理程序自动创建一个称为Domain0的特殊域,只有这个域有访问底层硬件设备的权限,同时Dom0和虚拟机管理程序交互,完成对用户域的管理操作(创建,删除,启动,关闭)。
在xen体系架构中,域之间的信息交互是通过共享页面和消息通道来实现的。本质上这是一种异步消息通知体系。控制信息和数据传输时分开处理的,当一个域要获取另一个域的数据时,一方首先通过消息通道向另一方发出请求,该请求在目标域中产生一个虚拟中断。目标域建立授权表以允许请求方通过共享页面的形式来获取这些数据。(这里不太明白,难道域之间可以互相知道对方的存在而且可以进行自主通信?)
设备请求处理是虚拟机管理器要重点考虑的问题。客户操作系统中的大多数设备驱动程序认定自己对相关设备具有完全的控制权力,所以,他们不具备同时接受和分发多路请求的能力。为了保证管理方便和设备安全访问。自xen2.0之后,引入了新的分离设备驱动模式。该模式在每个用户域中建立前端(front end)设备,在特权域(Dom0)中建立后端(back end)设备。所有的用户域操作系统像使用普通设备一样向前端设备发送请求,而前段设备通过IO请求描述符(IO descripror ring)和设备通道(device channel)将这些请求以及用户域的身份信息发送到处于特权域中的后端设备。和前面提到的一部通知机制和共享页面机制类似,这种体系也是将控制信息传递和数据传递分开处理的。在xen体系结构设计中,后端设别运行的特权域被赋予一个特有的名字---隔离设备域(Isolation Device Domain, IDD),而在实际设计中,IDD就处在Dom0中。所有的真实硬件访问都由特权域的后端设备调用本地设备驱动(native device drive)发起,保证了设备访问的安全性,也有效地处理了多用户域对同一设备发起请求的情况。在分离设备驱动模式中,前段设备的设计十分简单,只需要完成数据的转发操作,由于它们不是真实的设备驱动程序,所以也不用进行请求调度操作。而运行在IDD中的后端设备,可以利用linux的现有设备驱动来完成硬件访问,需要增加的只是IO请求的bridging功能---能完成任务的分发和回送。为了提升IO操作的性能,xen曹勇零拷贝的策略处理数据传递。当数据从用户域送出时,用户域允许IDD域中的设备驱动程序将包含数据的页面映射到IDD得地址空间并用于DMA传输,从而避免了从用户域到IDD,从IDD再到设备的多次拷贝。当IDD域将数据送往用户域时,xen通过页面交换重映射操作,将IDD域中的数据页面和用户域提供的一个空白页进行也表交换。交换之后,空白页面进入到设备域中,而数据页面进入到用户域中,该技术也称为page-flipping方法。xen正是通过该方法实现了零拷贝的数据传输操作,大大提高了系统性能。
阅读(1434) | 评论(0) | 转发(1) |