虚拟机介绍(二)

三、虚拟化技术

虚拟化技术是虚拟机得以实现的根本,服务器虚拟化技术逐渐成为人们关注的热点技术。

1、不同途径的虚拟化技术

根据两种常见的软件仿真虚拟化途径,可将虚拟化技术分为以下两种:完全虚拟化FVFull-Vritralization)和半虚拟化PVPara-Vritralization),这两种虚拟化技术主要以guest OS的硬件仿真程度做区分。

1)、完全虚拟化

FV是一般较常看到的作法,所有的guest OS完全不会看到实际的硬件为何,只能使用由Supervisor所提供的所有虚拟硬件

FV的安装上,因为FV模式是以完全仿真的方式进行,所以CPU必须要特别将此功能加入到CPU的核心中,因此,CPU是有特殊需求的。在IntelAMD中针对Virtual Machine所加入的功能名称不同,分别为Intel VTAMD-V

2)、半虚拟化

通过局部仿真的方式,让操作系统可以直接使用到硬件中的CPU、内存等,而不需要通过其他任何虚拟技术软件做仿真的操作虚拟机操作的时候,直接使用到底层的硬件,而不是每个OS都要通过

Hypervisor的接口,通过这种,性能上就可大为提高。

PV的安装,对CPU来说,没有特殊的要求,基本上都可以使用。

2、不同层次的虚拟化技术

根据不同层次的虚拟化方式,其中有ISA层次、硬件抽象层、操作系统层、Library API层,以及编程语言层的虚拟化技术。

1)、ISA层的虚拟化技术

该技术通常采用软件模拟指令集的方式实现。一个典型的计算机系统由处理器、内存、总线、硬盘控制器、时钟、各种I/O设备组成。ISA层的虚拟化软件的实现方式是截获客户操作系统发出的指令,并把它们翻译Host平台上的可用指令进行执行(包括处理器内部指令和IO指令)。由于这种指令的模拟方式,ISA层的虚拟化技术可以完全模拟一台真实机器所能做的一切。这种实现方式的好处在于,分离了操作系统和硬件平台的紧绑定关系。

这种虚拟化技术存在一定的性能问题,很难有广泛的应用,但它也在某些方面有着重要的应用,如在非x86平台上运行Windows系统,进行新开发的操作系统的debug工作,进行老式x86系统的兼容性测试等。

这种技术的代表性系统有:BochsQEMU

2)、硬件抽象层的虚拟化技术

这种技术利用客户系统环境和Host平台的相似性来减少理解客户系统指令的延迟。虚拟化软件进行从虚拟资源到物理资源的映射,并利用本地物理平台进行实际的计算。当虚拟系统访问关键的系统资源时,虚拟化软件接管其请求,并进行相应的处理。为了使这种机制能够有效地工作,虚拟机必须能够trap每条特权指令,并使得VMMVirtual Machine Monitor)接管进行相关的处理。这是因为,在同一个物理平台上有多个客户系统存在,这些客户系统发出特权指令希望CPU进行处理。这时把这些指令trapVMM进行处理,以免系统发生异常或冲突。此时,VMM模拟特权指令的执行,并返回处理结果给指定的客户虚拟系统,保证了各个客户虚拟系统的有效隔离。然而,x86平台并不是完全支持虚拟化的,因为某些x86特权指令在特权级不够的情况下执行,并不能方便地产生trap。对这一问题的解决方案有:一种是指令扫描结合动态指令修改的软件技术,有许多商业的虚拟化产品采用了这种方案;另一种方案是修改x86 CPU,使它支持虚拟化,也就是IntelVanderpool技术和AMDPacifica技术的目标。

硬件抽象层的虚拟化技术有着高度的客户虚拟系统的隔离性(包括客户虚拟系统之间,客户虚拟系统和Host系统之间)。这种隔离性使得在同一个物理平台上,可以同时运行不同类型的操作系统,而且它们的重启等操作不会互相影响。在用户看来,隔离性使得物理平台被划分成不同虚拟机器。由于

用户面对的是虚拟机器,用户需要更多的系统安装和配置工作。如果用户希望客户虚拟系统有和Host相同的操作系统,并只是想把多个应用系统进行分离,那么可以考虑采用操作系统层的虚拟化技术。

目前,大多数的商业服务器虚拟化产品,都是通过使用这种技术来实现高效、实用的虚拟化系统。此种虚拟化技术的代表产品是EMC公司的VMware,其他比较有影响力的产品还有:MicrosoftVirtual Server系列产品、由剑桥大学计算机实验室发起的开源虚拟机项目Xen、开源项目UMLUser Mode Linux)等。

3)、操作系统层虚拟化技术

典型的应用程序环境包括:操作系统、用户函数库、文件系统、环境设置等。如果应用系统的这些周边环境保持不变,应用程序自身是无法区分是运行在物理系统内,还是运行在虚拟系统外。操作系统层的虚拟化技术的主要思想在于,在Host操作系统上动态复制操作系统环境,以此来创建虚拟系统环境。

4)、API层虚拟化技术

API层虚拟机的典型代表是开源项目Wine,它构造了一个Windows用户态应用程序和其它操作系统之间的适配层(Adapter Layer),当这些应用程序需要在其他操作系统下调用一个Win32 API函数时,Wine将把该调用转换成相应操作系统下对该函数的模拟实现。

Wine系统在整个运行环境中起到的作用可以从三个角度理解。

a、从Windows应用程序的角度看,Wine为其提供了Windows软件运行环境的模拟,不过这并不是对处理器指令的模拟,而是对Win32 API函数的模拟。

b、从Linux及其内核的角度看,Wine形成Linux内核与Windows应用程序之间的一个中间层。它一方面为Windows应用程序提供了一套完整的动态链接库(Dynamic Link LibraryDLL),一方面将应用程序和动态链接库中对Windows的系统调用转换成具有相似语义的Linux的系统调用。

c、从Windows的动态连接库和服务进程的角度来看,WineWindows关键组件以模拟方式在Linux上实现的移植。

5)、编程语言级别的虚拟化技术

对于这个技术,我们最熟悉的就是Java虚拟机——JVMJava程序被编译成由JVM可以识别的指令形式,称为Java Bytes Code。当代码被执行时,由JVM进行解释或利用Just-In-TimeJIT)编译器在本地机器上执行。类似的编程语言级别的虚拟化技术还有Microsoft .NET CLIPerl 6Parrot

虽然有着多种层次的虚拟化技术,但目前各企业和厂商最为关注的是硬件抽象层的虚拟化技术,它也是目前最有应用潜力的虚拟化技术。

3、服务器虚拟化的硬件支持

2006年初,英特尔宣布了其初步完成的Vanderpool技术外部架构规范(EAS),并称该技术可以帮助改进未来的虚拟化解决方案。英特尔表示,将在今年把Vanderpool应用于安腾架构平台,同时还计划在台式机处理器和芯片组产品中采用该技术。

Vanderpool的核心思想是给x86 CPU的各种特权指令的执行,都增加可以进行trap的可能。Vanderpool技术使得CPU运行在两种不同的模式下,即VMX-rootVMX-non-root。这两种模式都支持0-34个特权级。客户虚拟系统运行在VMX-non-root模式,VMM运行在VMX-root模式。Vanderpool新定义了从VMX-rootVMX-non-rootVMentry和从VMX-non-root返回VMX-rootVMexit的操作。VMentryVMexit都会重新load CR3,以便VMMGuest OS有不同的地址空间。CPUVMX-non-root下执行,而执行CPUIDmov CR3RDMSRWDMSR等指令会无条件地触发VMexit;而其他的指令、中断和异常是否触发Vmexit,则根据VMCS的内容进行判断。

VMentry会先加载客户系统状态区域的VMCS,然后进入VMX-non-root,并且立即引发中断。这样,VMM就可以通过对IDT的修改,在系统进入VMX-non-root的第一时间触发事件,以便模拟事件的传递。

VMexit会保存CPU状态到客户系统状态区域,并且加载Host状态区域的信息,然后返回VMM。所有的VMexit使用公共的进入VMMEntry Point,并且每次VMexit都会提供引发VMexit的详细原因,以便VMM进行相应的处理。

AMD在虚拟化技术方面的Pacifica技术规范,是AMD计划用于其64位产品中的虚拟化技术。该技术将用于基于x86架构的服务器、台式机和笔记本电脑等系列产品。AMD表示,通过将Pacifica技术预先展示给虚拟化ISV和分析师团队,并通过持续的协作,最终可以在托管基于系统管理程序(hypervisor)的虚拟解决方案方面,向Pacifica用户提供更丰富的功能集和更高性能模型。

从技术角度看,不论是Vanderpool技术外部架构规范,还是Pacifica技术规范,它们强调的核心功能都是RISC处理器早就实现了分区功能,即基于该技术平台实现在独立分区中高效运行多个操作系统和应用程序,使一个计算机系统像多个虚拟系统一样运行。

猜你喜欢

转载自lucid820.iteye.com/blog/787374