不完全相同,因此被称之为“准虚拟化”(//paravirtualization:或者翻译为半虚拟化?后面译文沿用准虚
拟化)方法。这种方法虽然需要对 guest OS 进行一些改动,但是它能够改善性能。还有特别重要的一点
需要说明:准虚拟化方法不会对应用二进制接口(ABI)进行修改,因此用户也就不用修改那些在 guest
OS 上执行的应用程序。
我们进行的关于准虚拟化方法的讨论要遵循以下一些规则:
a.最基本的是要支持那些不经改动的应用二进制文件的执行,即用户不用对应用程序做针对 Xen 的
转换。因此我们必须虚拟化现有的标准 ABI 所需的全部体系结构特征。
b.很重要的一点是要支持完整的多应用操作系统。这就需要将在单个 guest OS 实例中的复杂的服
务器配置虚拟化(//例如,如果 guest OS 上配置了 ftp 服务,那么虚拟硬件就要打开相应端口)。
c.准虚拟化务必要有很高的性能。另外针对那些不协作(//uncooperative:这里的不协作是指硬件
架构不支持共享,所以才需要资源隔离)的机器架构,如 x86 架构,准虚拟化还需要能够提供很强的资
源隔离能力。
d.在协作(cooperative)的机器架构上,准虚拟化方法要能够完全地隐藏资源虚拟化带来的影响,
减少 guest OS 在正确性和性能上面临的风险。
请注意,我们在这里提出的准虚拟化的 x86 抽象的方法是与最近在 Denali 项目中提出的方法有很
大差异的。Denali 是为了支持数以千计的运行着网络服务的虚拟机而设计的。这些网络服务中绝大部分
是小规模的,不流行(//应用的不流行也就说明了运行该应用的环境比较少,所以只要针对这些相应的特
定环境作专门的虚拟化即可)的应用。与之相反的是,Xen 的设计最终要支持近 100 个运行着业界标准
应用和服务的虚拟机。由于设计目标的极大差异,我们不妨将 Denali 的设计选择和我们自己的设计规则
做一个有益的讨论。
首先,Denali 不需要关注现有的 ABI,因此他们的 VM 接口忽略掉了相关的架构特 征。例如,
Denali 并不完全支持 x86 的分段机制,但是这一点却是在 NetBSD,Linux 和 Windows XP 等操作系统
的 ABI 中都有提出并且被广泛使用。例如,线程库中经常会使用分段机制来寻址线程局部数据。
其次,Denali 的实现没有解决在单个 guest OS 中支持多个应用(application multiplexing)的
问题,也没有解决多地址空间的问题。应用被显式地链接到 Ilwaco guest OS 实例上,这么做在某种意
义上类似于之前在 Exokernel 中的 libOS[23]。因此每个虚拟机只能操控一个单用户单应用的没有保护
措施的所谓的“操作系统”。在 Xen 中,与之相反,每个虚拟机上能够操控一个真正的操作系统。这个操作
系统上能够安全地执行数以千计个不经改动的用户级进程。虽然 Denali 号称开发了一个虚拟 MMU 原型
能够对其在该领域有所帮助,但是我们没有看到公开的技术细节和评估报告。
再次,在 Denali 体系结构中,是由 VMM 执行全部的内存与磁盘间的页面调度的。这可能是与虚拟
层缺乏存储管理支持有关。由 VMM 完成页面调度是与我们的性能隔离目标相违背的:那些“有恶意”的虚
拟机可能会故意产生抖动行为,导致其它虚拟机的 CPU 时间和磁盘带宽被不公平地剥夺(//VMM 监控很
多 VM,各个 VM 上再跑操作系统,所以如果很多事情都放在 VMM 中做必然会影响到各个 VM;所以要
把一些事情放在上面的操作系统做来达到隔离性)。在 Xen 中,我们希望每个 guest OS 在其自己分配
到的内存空间和磁盘区域内执行它自己的页面调度(此前已经有 self-paging 的方法被提出)。
最后,Denali 为机器的全部资源虚拟了“名字空间”。这样的话,如果一个 VM 不能够“叫出”另一个
VM 下辖的资源的名字,那么该 VM 就不能够访问这些资源(例如,Denali 中的 VM 并不知道硬件地址,
它们只看得到 Denali 创建的虚拟地址)。与此相对,我们认为 hypervisor 中的安全访问控制已经足以
确保安全性;此外,就像之前讨论过的,当前在 guest OS 是否应该能够直接看到物理资源这一点上存在
着很热烈的关于正确性和性能的争论。
在后续的章节里,我们将描述 Xen 提出的虚拟机抽象,然后将讨论如何将一个 guest OS 作必要的
改动以适应 Xen。在这篇文章里我们定义了一些术语要提醒大家注意。例如,术语 guest OS 是指 Xen
能够操控的操作系统之一;术语 domain 是指一个运行中的虚拟机,在其上有一个 guest OS 在执行。
program 和 process 之间的区别和传统系统中的区别类似。我们称 Xen 本身为 hypervisor,因为它运
评论0
最新资源