最终得到的架构是hypervisor只是提供那些最基本的控制操作。这些操作经由一个可访问的接口从经过授权的domain传来;而那些复杂的策略决策,比如许可控制(//不知道这个许可控制是否和第1部分里提到的是一回事儿),都最好由运行在guest OS上的管理软件执行,而并非在有特权的hypervisor代码中(//Xen只是提供机制,不负责策略)。
整个系统架构中有一个domain是在引导(boot)时创建的。这个domain被允许使用控制接口。这个初始的domain,术语称为Domain 0,它负责操控应用级的管理软件。控制接口具有创建和终止其它domain的能力,还能控制它们相关的调度参数、物理存储分配以及它们对给定的物理磁盘和网络设备的访问。
除了处理器和存储资源,控制接口还支持虚拟网络接口(VIF)和块设备(VBD:虚拟块设备)的创建和删除。这些虚拟I/O设备具有一些和访问控制相关的信息。这些信息决定了哪个domain能够访问它们,以及访问时有哪些约束(例如,一个只读的VBD可以被创建,一个VIF可以过滤IP包以防止源地址欺骗)。
这个控制接口,结合对系统当前状态进行的剖析统计,其结果能够被输出到一套运行在Domain 0上的应用级管理软件上。该管理软件作为管理工具的补充,能够对整个服务器进行方便地管理:例如,能够创建和破坏domain,设定网络过滤器和路由规则,在数据包和数据流两个粒度上监视每个domain的网络活动,创建和删除虚拟网络接口和虚拟块设备。我们期待开发出高级的工具来进一步将管理策略的应用程序自动化(//这里的管理策略和前面讲的“机制与策略分开”中的策略不是一回事儿吧?)。
ccid_page/>
3. DETAILED DESIGN — 细节设计
在这一部分,我们介绍构成基于Xen的服务器的各个主要子部分的设计细节。在各个设计中,我们对Xen和guest OS的功能作了清楚的说明。当前的关于guest OS的讨论主要集中于XenoLinux,这主要是因为这个guest OS是目前发展最成熟的;但是我们对于当前正在进行中的对Windows XP和NetBSD的移植工作也是很有信心的。我们相信Xen可以支持多种多样的guest OS。
3.1 控制传递:hypercalls和事件
有两种机制用于Xen和其上的domain之间进行控制的交互:使用hypercall产生从domain到Xen的同步调用;使用异步事件机制完成从Xen到domain的通告递交。
hypercall接口允许domain通过执行一个同步软陷阱陷入到hypervisor执行一个特权操作,这类似于在传统的操作系统中对系统调用的使用。举一个使用hypercall的例子:一组页表更新的请求,要经过Xen确认并且完成相应的更新操作(//更新是要由Xen确认并完成的,需要特权操作,所以这时要利用hypercall陷入到hypervisor中),在更新完成后再由Xen将控制返回给产生本次调用的domain。
从Xen到domain的通信是由一个异步事件机制提供的。这个机制取代了常用的利用设备中断的递交机制,它允许那些重要事件(如domain-termination request)采用轻量级的通告形式。和传统的Unix信号类似,这些重要事件的个数比较少,但每一个都用作针对某一特定类型事件的标记。例如,用于在网络上指出新的数据已经被接收到的事件,或者表示一个虚拟磁盘请求已经完成的事件。
那些未决的事件存放在每个domain的bitmask(//一个专门的数据结构)中。bitmask的更新要由Xen在调用一个和guest OS相应的事件调用返回句柄之前完成(//Xen针对某类事件要向上发通告,如果Xen调用了guest OS相应的事件调用返回句柄,就说明该事件完成了,下面要把控制交回给domain,所以必然要在调用事件调用返回句柄之前由Xen将bitmask更新)。调用返回句柄负责重新设置未决事件集合(//调用返回句柄仍旧是由Xen操作,更新bitmask),同时以相应的行为和通告相呼应。一个domain可以通过设置一个Xen可读的软件标记来显式地推迟对事件操作:这一点是与在真实的处理器中禁止中断的过程类似的。
最新相关文章
发表评论