基于处理器虚拟化技术的虚拟机系统及其实现方法

文档序号:6573546阅读:296来源:国知局

专利名称::基于处理器虚拟化技术的虚拟机系统及其实现方法
技术领域
:本发明涉及一种虚拟机系统,尤其涉及一种基于处理器虚拟化技术的虚拟机系统及其软硬件环境配置和模块实现。
背景技术
:虚拟化技术是指计算元件在虚拟而不是真实的基础上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。处理器虚拟化技术可以单处理器模拟多处理器并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。虚拟化技术是一个巨大的技术进步,具体表现在减少软件虚拟机相关开销和支持更广泛的操作系统方面。虚拟化技术可以提高计算机物理资源的利用率和共享率。虚拟化技术广泛的实用性使得虚拟化在服务器、客户端和嵌入式系统中有了几乎全新的应用,并且为提高系统的可靠性、操作性、安全性和实时服务质量提供了新的途径。当前主流的虚拟化技术都是软件虚拟化技术,主要存在两种类型全虚拟化和半虚拟化。全虚拟化以VMware为代表,模拟出一整套硬件设备,其上运行的客户操作系统不必修改源代码,但是运行效率较低。半虚拟化以Xen和Denali为代表,让客户操作系统知道它们正工作在一个虚拟的环境中,通过修改它们以使之工作得更好,因此操作系统需针对这种方法进行修改和调整,但是效率较高。因为原有IA-32架构的设计原因,在其上实现软件虚拟化存在很多困难和问题,这也大大增加了虚拟机监控器的设计难度。其中,最根本的原因就是特权级混淆。特权级混淆指的是软件运行的特权级并不是当初设计时所要运行的特权级。操作系统为了能控制处理器,其某些组件必须运行在特权级0上。但是虚拟机监控器不能允许客户操作系统有这种控制力,所以客户操作系统不能运行在特权级0上。因此,虚拟机监控器必须使用一种叫环路特权解除(ringdeprivileging)的技术,它可以使所有的客户软件都在大于特权级0上运行。客户操作系统可以通过两种方式来实现特权解除它可以运行在特权级1上(0/1/3模型)或者运行在特权级3上(0/3/3模型)。但是两种模型都会带来例如特权级压缩,特权指令无效,地址空间压缩等一系列问题。为了从根本上解决传统软件虚拟化技术的缺点,两大处理器厂商都推出了基于硬件的虚拟化技术一Intel的VT技术(包括VT-x和VT-i,其中VT-x针对IA-32架构,VT-i针对Itanium架构)和AMD的Pacifica技术。其中,IntelVT-x技术的一个重要的设计目标就是消除半虚拟化和二进制转化技术,简化虚拟机监控器的实现,可以支持更大范围的、不需修改的操作系统,并且保持高性能。具有VT-x技术的处理器有两种运行模式虚拟机扩展(virtualmachineextensions)模式和非虚拟机扩展模式。非虚拟机扩展模式和不具备VT-x技术的处理器运行方式完全相同;虚拟机扩展模式就是VT-x技术实际发生功效的模式。在虚拟机扩展模式中,又分为两种新的处理器操作模式虚拟机扩展根操作模式和虚拟机扩展非根操作模式。虚拟机扩展根操作模式是提供给虚拟机监控器使用的,它的功能与没有VT-x技术的IA-32非常相似(主要区别就是可以使用虚拟机扩展指令)。虚拟机扩展非根操作模式提供了一个选择性的IA-32环境,该环境被虚拟机监控器控制,被设计用来支持虚拟机。两种操作模式都支持所有的4个特权级,允许客户软件在其所期望的特权级上运行,也提供了虚拟机监控器使用多个特权级的权利。VT-x技术定义了两种新的转换从虚拟机扩展根操作模式到虚拟机扩展非根操作模式的转换叫做“虚拟机进入操作”,从虚拟机扩展非根操作模式到虚拟机扩展根操作模式的转换叫做“虚拟机退出操作”。这两种转换被叫做虚拟机控制结构的一个新数据结构控制。虚拟机控制结构包括一组客户机状态(guest-statearea)和一组主机状态(host-statearea),两种状态都对应着处理器不同组件的值。虚拟机进入操作转换把客户机状态装入到处理器的各个寄存器等相关状态中。虚拟机退出操作转换把处理器各个寄存器状态保存到客户机状态,然后将主机状态装入到处理器中。VT-x技术允许客户软件运行在其所期望的特权级上。客户软件的限制,不是来自特权级,而是来自它运行在虚拟机扩展非根操作模式上。这个本质使得基于VT-x技术的虚拟机监控器可以解决上述提到的传统软件虚拟化中遇到的困难。在虚拟机扩展非根操作模式中,处理器操作有个很大的改变。最重要的改变就是很多指令和事件会导致虚拟机退出操作。一些指令(例如INVD)会无条件的导致虚拟机退出操作,因此永远不能在虚拟机扩展非根操作模式下执行。其他指令(例如INVLPG)和所有的事件可以通过配置虚拟机控制结构中的虚拟机执行控制域来实现有条件的导致虚拟机退出操作。
发明内容本发明基于具有虚拟化技术的处理器,提供了一种与之配套的虚拟机监控软件,进而从软件、硬件两个方面构建了一个完整的虚拟机系统。一种基于处理器虚拟化技术的虚拟机系统,包括具有虚拟化技术的处理器、除处理器以外的其它底层硬件、运行于虚拟机扩展根操作模式(VMXBoot)的虚拟机监控器(virtualmachinemonitor,简称VMM)、运行于非虚拟机扩展根操作模式(VMXNon-Boot)的若干虚拟操作系统(GuestOS),虚拟机监控器一端通过其虚拟硬件平台接口接入各虚拟操作系统,另一端连接除处理器以外的其它底层硬件设备,各虚拟操作系统直接连接处理器。所述的虚拟机监控器包括设备虚拟模块、内存虚拟模块、虚拟硬件平台接口、中断描述符表(interruptdescriptortable)、虚拟机控制结构(virtual-machinecontrolstructure,简称VMCS)和全局描述符表,虚拟机控制结构用于控制内存虚拟模块、设备虚拟模块和虚拟硬件平台接口的运行。系统运行过程中处理器的设置包括如下步骤在非虚拟机扩展模式下,对虚拟机监控器的中断描述符表进行设置,为每个虚拟机监控器需要处理的中断设置中断处理函数,并根据中断向量号将中断处理函数的入口地址保存到中断描述符表的相应位置;进入虚拟机扩展模式,进行虚拟机控制结构配置,对每个虚拟机控制结构配置需要的域,通过该域的索引码,使用VMWRITE指令写入相应的值;进入虚拟机扩展非根操作模式,运行虚拟操作系统,第一次进入虚拟操作系统运行时进行实模式模拟。所述的中断描述符表用于将每一个中断向量和一个描述符对应起来。所述的全局描述符表用于提供段式存储机制,对段的起始地址、界限、属性进行详细定义。本发明还提供了上述虚拟机系统的实现方法。一种基于处理器虚拟化技术的虚拟机系统实现方法,包括以下步骤基于具有虚拟化技术的处理器,设置一运行于虚拟机扩展根操作模式的虚拟机监控器,和若干个运行于非虚拟机扩展根操作模式的虚拟操作系统,由虚拟机监控器为各虚拟操作系统虚拟出除处理器以外的其它硬件设备,各虚拟操作系统对其它硬件设备的操作经虚拟机监控器截取,由虚拟机监控器根据一定的规则分配给真实硬件完成操作,及,由虚拟机监控器处理各虚拟操作系统运行过程中出现的所有硬件中断。虚拟机监控器运行于虚拟机扩展根操作模式的特权级0上,客户操作系统运行在虚拟机扩展非根操作模式、其所设计希望运行的特权级上(一般为特权级0和3)。得益于VT-x技术的独有优势,客户操作系统无需修改源代码,其上运行的应用程序也不需要修改源代码。客户操作系统所能直接使用的硬件就只有是支持VT-x技术的处理器,其它硬件设备都由虚拟机监控器的设备虚拟模块虚拟出来,客户操作系统对其他硬件设备的操作会被设备虚拟模块截取,由设备虚拟模块根据一定的规则分配给真实硬件来完成相应操作。在客户操作系统运行过程中,若出现异常、外部中断、某些特权指令的运行、输入/输出端口的访问、内存访问等就有可能会导致虚拟机退出操作,从而暂停客户操作系统的运行,将控制权交给虚拟机监控器来对上述特殊情况进行合适的处理。虚拟硬件平台接口提供了虚拟机监控器和其上虚拟的客户操作系统之间联系的渠道,所负责的工作包括两点每次虚拟机进入操作前,为保证客户操作系统的正常运行进行的准备;每次虚拟机退出操作后,对导致虚拟机退出操作的各种原因或者情况进行后续的处理。本发明虚拟机系统的运行流程如下开机时,处理器处于非虚拟机扩展模式,进行基本的初始化工作,其中最重要的是对虚拟机监控器的中断描述符表进行设置;初始化完成后进入到虚拟机扩展模式,进行整个流程中最关键的虚拟机控制结构配置;然后可通过虚拟机进入操作进入虚拟机扩展非根操作模式,使客户操作系统运行;其中,第一次进入客户操作系统运行还需要进行实模式的模拟;在客户操作系统运行过程中,如遇到异常、中断、某些指令的运行或者资源访问等情况就有可能导致虚拟机退出操作,虚拟机监控器将对各种情况进行相应的处理后再返回到客户操作系统运行;其中,内存虚拟和设备虚拟是对各个情况进行处理的重要方法,此外还可能会进行某些特权指令的模拟;最后,如果虚拟机停止运行,可以关闭虚拟机扩展模式。下面对整个流程中的几个关键步骤进行详细描述。1.中断设置a、异常根据虚拟机监控器中虚拟机控制结构的配置,和内存有关的异常都会导致虚拟机退出操作,其他异常则交给客户操作系统自身的中断描述符表处理。所以,虚拟机监控器的中断描述符表中32个异常大部分不用设置异常处理函数,只有那些对应着内存有关的异常需要设置,并且它们的异常处理函数都很简单,就是把该异常向量号发给内存虚拟模块,让该模块完成相应的处理。b、外部中断在客户操作系统中,只处理两种外部中断外部时钟中断和外部键盘中断。外部中断与处理器的关系是通过可编程中断控制器8259A建立起来的。在我们的架构中,8259A是由虚拟机监控器初始化的。客户操作系统根据虚拟机控制结构的配置,所有的外部中断都会导致虚拟机退出操作,所以虚拟机监控器的中断描述符表必须为这两种外部中断设置中断外部函数。c、软件中断客户操作系统使用INT指令来实现软件中断或者系统调用,该指令不会导致虚拟机退出操作。所以客户操作系统软件中断的实现与虚拟机监控器无关,当然虚拟机监控器也不会进行任何的处理。2.虚拟机控制结构配置在第一次虚拟机进入操作进入到客户操作系统之前,应该按照想搭建的、为客户操作系统运行的虚拟环境对虚拟机控制结构进行相应的配置或者初始化,它们共同组成了一套控制虚拟机如何运行的规则。不同的配置会导致截然不同的客户操作系统运行行为,事实上,基于VT-x技术开发的虚拟机监控器具有不同特征的根本原因就在于各自对虚拟机控制结构的配置不同。虚拟机监控器的设计基于IntelIA-3232-bit架构。如果有多个客户操作系统共同运行,则每个客户操作系统对应着一个虚拟机控制结构并受其控制,所以必须为每个虚拟机控制结构分别初始化。如果处理器为多核,则每个核心运行一份虚拟机监控器代码拷贝,再根据每个核心所虚拟的客户操作系统数设置相同数目的虚拟机控制结构,并保证临界区数据在同一时刻只能被一个内核所修改。a、客户状态域客户寄存器状态该域的值在第一次通过虚拟机进入操作进入到客户操作系统之前需要进行初始化,目的就是当虚拟机进入操作完成后,创建出一个系统启动后的初时环境,以配合客户操作系统的启动。所以里面所有值都是根据IA-32在加电之后的各个初时状态配置的。客户非寄存器状态设置逻辑处理器处在正常的运行执行状态、没有事件被阻塞、没有设置断点。处理器的某些状态是不对应任何寄存器的,但是不同的逻辑处理器的状态可能不同,所以同样需要相应的域来保存。在第一次虚拟机进入操作之前也需要初始化。b、宿主状态域宿主寄存器状态设置每次虚拟机退出操作后,通过导入宿主状态域值进入到相同的处理环境中来对导致虚拟机退出操作的各种原因进行处理。c、虚拟机执行控制域针形虚拟机执行控制设置外部的中断将会导致虚拟机退出操作。设置不可屏蔽中断不会导致虚拟机退出操作,发送给客户操作系统的中断描述符表处理。基于处理器的虚拟机运行控制设置当EFLAGS.IF被置为1时,不会导致虚拟机退出操作。设置RDPMC指令、HLT指令、MWAIT指令、RDTSC指令、MONITOR指令、PAUSE指令、MOVDR的操作不会导致虚拟机退出操作。设置当执行RDTSC指令时,读取的数值会加上一个TSC的偏移值(有符号数,在虚拟机控制结构其他域中被赋值),通过加上该偏移值,可以校正客户操作系统被虚拟机监控器剥夺运行所造成的时间差。设置INVLPG指令会导致虚拟机退出操作。设置使用输入/输出位图来控制客户操作系统对输入/输出端口的访问。设置使用模块细节寄存器位图来控制客户操作系统对模块细节寄存器的访问。异常位图当中断发生时,中断向量号作为索引读取位图中的相应位。如果该位为1,则导致虚拟机退出操作,如果为0,则将该中断发给客户操作系统的中断描述符表。设置把所有和内存有关的异常,例如缺页、段错误等通过虚拟机退出操作交给虚拟机监控器处理,其他异常让客户操作系统自己的中断描述符表处理。输入输出位图地址输入/输出位图的每一位对应着从0h到ffffh的输入/输出端口,如果相应位是1,则对该输入/输出端口的读写会导致虚拟机退出操作。设置成对所有输入/输出端口的读写都会导致虚拟机退出操作,再由虚拟机监控器发送给相应的虚拟设备模块来完成输入/输出操作。CR0客户/宿主掩码设置保护CR0中的PG位、NE位和PE位不能被客户操作系统更改。CR0的读影子寄存器设置客户操作系统对CR0中PG位、NE位和PE位的读取返回1。CR4客户/宿主掩码设置CR4中的VMXE位不能被客户操作系统更改。CR4的读影子寄存器设置客户操作系统对CR4中VMXE位的读取返回0,使得客户操作系统不知道自己处于虚拟机中。CR3目标计数器设置MOVtoCR3会导致虚拟机退出操作。模块细节寄存器位图地址模块细节寄存器位图分为4个子位图,分别对应着低地址模块细节寄存器的读、写权限和高地址模块细节寄存器的读、写权限。设置成对所有模块细节寄存器的读取都可以正常执行,但对所有模块细节寄存器的写都会导致虚拟机退出操作。d、虚拟机退出操作控制域虚拟机退出操作控制设置虚拟机退出操作后,处理器处在32位运行模式下。并且在虚拟机退出操作时,如果有外部中断产生,会将该中断信息保存在虚拟机退出操作中断信息域中。虚拟机退出操作时模块细节寄存器保存计数器设置在虚拟机退出操作时,没有保存模块细节寄存器的操作。虚拟机退出操作时模块细节寄存器导入计数器设置在虚拟机退出操作时,没有导入模块细节寄存器的操作。e、虚拟机进入操作控制域虚拟机进入操作控制设置虚拟机进入操作后,处理器处在IA-3232位运行模式而不是系统控制模式下,并且系统控制中断无效。虚拟机进入操作时模块细节寄存器导入计数器设置在虚拟机进入操作时,没有导入模块细节寄存器的操作。3.虚拟机退出操作后虚拟机监控器的处理每次虚拟机退出操作之后,虚拟机监控器都进入到一个相同的出口环境中执行后续代码,因此,要将这个出口环境的各个状态保存到虚拟机控制结构中的宿主状态域中。每次虚拟机退出操作结束进入到的出口环境后,其代码的最主要功能是,根据虚拟机退出操作信息域中的信息进行处理,可能是模拟某条指令,可能是进行内存操作,也可能会将某中断发回给客户操作系统,然后通过虚拟机进入操作继续客户操作系统的运行。在虚拟机退出操作之后,首先读取退出原因域以确定导致虚拟机退出操作的原因。根据不同原因进行下步工作,对于有些原因,更详细的信息保存在退出条件域中。导致虚拟机退出操作的各种情况在虚拟机控制结构中进行了具体配置。虚拟机扩展指令的运行包括VMCALL、VMCLEAR、VMLAUNCH、VMPTRLD、VMPTRST、VMREAD、VMRESUME、VMWRITE、VMXOFF、VMXON,所有的这些虚拟机扩展指令都会无条件的导致虚拟机退出操作。虚拟机监控器将该指令在客户操作系统中跳过不执行,处理步骤如下读取虚拟机退出操作指令长度域值;修改客户状态域中的EIP,加上虚拟机退出指令长度域值,这样就相当于使得客户操作系统跳过该条指令的执行。处理器ID指令的运行处理器ID指令的运行会无条件的导致虚拟机退出操作。虚拟机监控器在虚拟机扩展根操作模式下模拟该指令的执行,处理步骤如下读取客户状态中的EAX;执行处理器ID指令;将执行结果写入到客户状态域中的EAX,EBX,ECX,EDX中去。INVD指令的运行INVD指令的运行会无条件的导致虚拟机退出操作。虚拟机监控器不允许客户操作系统具有清空高速缓存的能力,所以虚拟机监控器处理与对虚拟机扩展指令的处理方式相同。MOVfromCR3指令的运行MOVfromCR3指令的运行会无条件的导致虚拟机退出操作。客户操作系统对页表信息读取的操作,虚拟机监控器发送给内存虚拟模块处理。输入/输出指令的运行根据虚拟机控制结构中输入/输出位图的设置,对所有输入/输出端口的读写都会导致虚拟机退出操作。虚拟机监控器读取退出条件域获取端口号,通过对端口号的查询,确定客户操作系统是对哪个虚拟设备进行操作,然后发送给相应的虚拟设备模块来完成操作,最后将运行结果返回给客户操作系统。INLVPG指令的运行虚拟机监控器不允许客户操作系统直接具有清空TLB的能力。所有和内存有关的操作都交给内存虚拟模块处理,所以该指令的请求也将发给该模块处理。WRMSR指令的运行根据虚拟机控制结构中模块细节寄存器位图的设置,对所有模块细节寄存器的写操作都会导致虚拟机退出操作。处于系统安全考虑,虚拟机监控器不允许客户操作系统更改任何模块细节寄存器。虚拟机监控器会使WRMSR指令无效,处理方式与对虚拟机扩展指令的处理相同。外部中断根据虚拟机控制结构配置,所有的外部中断都会导致虚拟机退出操作。虚拟机监控器判断中断向量号并做出两种处理方式直接发回给客户操作系统处理,例如键盘中断,具体步骤是,将虚拟机退出操作中断信息域中的信息拷贝到虚拟机进入操作中断信息域中,然后通过“注入”发送虚拟中断给客户操作系统;第二种处理方式是,虚拟机监控器先自身进行处理,例如时钟中断,再发回给客户操作系统。异常根据虚拟机控制结构中异常位图的设置,所有和内存有关的异常都会导致虚拟机退出操作。虚拟机监控器将这些异常都发送给内存虚拟模块处理。其中,对于缺页异常,在退出条件域中保存着导致缺页的线性地址。对控制寄存器的存取通过读取退出条件域的信息,可以分为三种情况MOVtoCR0指令的运行;MOVtoCR3指令的运行;MOVtoCR4指令的运行。分别处理如下a、MOVtoCR0指令的运行根据虚拟机控制结构的配置,只有试图对CR0中的PG位、PE位和NE位进行清除操作才会导致虚拟机退出操作。但是虚拟机扩展操作必须要求上述3个位的值为1,所以客户操作系统的上述操作虚拟机监控器无法完成,会导致异常。b、MOVtoCR3指令的运行根据虚拟机控制结构的配置,MOVtoCR3指令总是导致虚拟机退出操作。对客户操作系统切换页表的操作,虚拟机监控器发送给内存虚拟模块处理。c、MOVtoCR4指令的运行根据虚拟机控制结构的配置,只有试图对CR4中的VMXE位进行置位操作才会导致虚拟机退出操作。实际上CR4该位实际值为1,不过客户操作系统读取的是影子CR4的值,显示为0。这样的目的是使得客户操作系统不知道自己运行在虚拟机上。不过现在客户操作系统显式的将该位置为1,所以虚拟机监控器需要改变影子CR4的域值成2000h。4.内存虚拟虚拟机监控器必须为各个虚拟机合理的分配和隔离各自的物理内存,同时实现客户操作系统所使用的物理地址和实际硬件物理地址之间的映射关系。内存虚拟模块的设计基于以下两个原则虚拟机监控器掌握对物理内存的控制;支持客户操作系统内存地址转换的功能。为了使虚拟机监控器对物理内存的完全控制,虚拟机监控器就必须掌握处理器的地址转换机制。所以,只有虚拟机监控器可以存取CR3(保存着页目录表的基地址)和执行INVLPG(唯一可以直接操作TLB的指令)。同时,客户操作系统自身也希望可以实现对内存地址转换的控制,它也会存取CR3,也会执行INVLPG。虚拟机监控器必须允许并且支持这些操作。客户操作系统页表结构的功能就是“欺骗”客户操作系统,使其认为掌握了对内存地址转换的控制。事实上,客户操作系统页表结构并不直接或者间接的控制内存地址转换。内存地址转换被处理器的TLB和虚拟机监控器页表结构所控制(TLB中的映射关系是从虚拟机监控器页表结构中导入的)。我们允许客户操作系统自由修改其自身的页表结构而不用导致虚拟机退出操作,所以可能会导致客户操作系统的页表层次与虚拟机监控器的页表层次不一致。这种不一致分为两种情况,各自处理方式如下a、客户操作系统页表层次中比虚拟机监控器页表层次中有效信息多例如,有个线性地址到物理地址的内存转换关系在客户操作系统页表结构中存在,但在虚拟机监控器页表结构中不存在。这会导致缺页异常,虚拟机监控器会更新其页表结构加入这个映射关系。b、客户操作系统页表层次中比虚拟机监控器页表层次中有效信息少这种情况只会发生在客户操作系统将其页表结构中某映射关系删除(例如,标记某页不存在)。客户操作系统在将某映射关系删除后,如果其程序设计正确,势必会执行INVLPG指令使得在TLB中的该映射关系失效。在虚拟机监控器设计中,指令INVLPG的执行会导致虚拟机退出操作,虚拟机监控器就可以取得控制来完成其页表结构的相应更新。此外,当处理器访问TLB时,也会更新虚拟机监控器页表结构中的访问位和脏位。为了保持虚拟机监控器页表结构和客户操作系统页表结构的一致性,虚拟机监控器必须也更新客户操作系统页表结构相应页目录表项或者页表项的相应位。有4种情况是要交给内存虚拟模块处理的,具体的处理方式如下MOVtoCR3对CR3进行写操作隐含着TLB的刷新和页表的转换,处理步骤如下更新客户状态域中的CR3;虚拟机监控器分配一个新的空页目录表;更新处理器CR3指向新目录表。MOVfromCR3VT技术规定该指令一定会导致虚拟机退出操作,但是虚拟机监控器又要支持客户操作系统对自身页表的存取,所以虚拟机监控器在虚拟机扩展根操作模式下模拟该指令的运行将客户状态域中的CR3值拷贝到目的寄存器或者内存地址中。INVLPG指令的执行标记虚拟机监控器页表结构中页目录表项和页表项的相应项为不存在。缺页异常如果缺页异常是因为客户操作系统页表层次与虚拟机监控器页表层次不一致引起的,则通过更新虚拟机监控器页表层次并重新执行导致异常的指令;如果客户操作系统页表层次与虚拟机监控器页表层次已经一致,则交给客户操作系统处理该异常。5.设备虚拟设备虚拟模块为每个客户操作系统提供了一个抽象的PC硬件平台。每个客户操作系统看到的PC平台包括键盘,鼠标,实时时钟,8259可编程中断控制器,8254可编程计时器,CMOS,IDE磁盘,软盘,光驱和显示设备。为了减少设计的复杂度,虚拟机监控器重利用了QEMU(一个开源的虚拟机项目)的设备模拟模块。为每个客户操作系统运行一个“设备模块系列”来模拟上述设备的实例。设备虚拟模块的主要功能就是等待客户操作系统的输入/输出事件,然后将其分派到相应的设备模拟模块去处理。当完成了输入/输出请求之后,向客户操作系统返回结果。通过之前对虚拟机控制结构中输入/输出位图的设置,客户操作系统对所有输入/输出端口的存取都会导致虚拟机退出操作。在每次虚拟机退出操作时,在退出条件域中都会收集一些关于退出条件的信息,例如端口号,存取大小,方向,是否为串,有无REP前缀等,虚拟机监控器将这些信息打包成一个输入/输出请求包并发给相应的设备模拟模块。对客户操作系统的一个输入/输出请求的处理过程如下输入/输出存取导致虚拟机退出操作;通过读取退出原因域和退出条件域来对指令解码;创建一个描述该事件的输入/输出请求包;将请求包发给相应的设备模拟模块处理;等待来自设备模拟模块相关输入/输出端口的回复或者内存映射输入/输出操作;通过虚拟机进入操作使得客户操作系统继续运行。大多数设备需要通过内存映射输入/输出来存取设备寄存器。关键的中断控制器,例如输入/输出高级可编程中断控制器,也需要内存映射输入/输出存取。我们截取这些内存映射输入/输出存取作为缺页操作。当每次因为缺页导致虚拟机退出操作时,进行如下操作检查PTE来确定所缺的页是否属于内存映射输入/输出的范围;如果是,对该指令解码,并发送输入/输出请求包给相应的设备模拟模块;如果不是,则将该缺页异常事件将给内存虚拟模块处理。本发明采用硬件虚拟化技术,比软件虚拟化技术具有先天性的优势;无需改变客户操作系统的源代码;虚拟机监控器较好的实现了上层模块和底层硬件的隔离性和安全性,且结构简单,复杂度低;考虑到虚拟机监控器在多核和64位模式上的扩展;VT-x技术为提高处理器的虚拟化性能提供了硬件上的支持。基于VT-x技术设计的虚拟机监控器必须能够很好的使用这些硬件支持。在整个过程中,我们通过3个方法来尽可能的减少虚拟机退出操作的次数,使得整个虚拟机保持较高的效率。1、对控制寄存器读操作的管理有研究表明,通过对操作系统运行的模拟发现,在操作系统运行过程中,对控制寄存器特别是CR0会进行非常频繁的读操作。在我们的架构中,对CR0和CR4的读操作不会导致虚拟机退出操作,并且,我们通过CR0读影子寄存器和CR4读影子寄存器返回我们期望客户操作系统读到的值。2、对控制寄存器写操作的管理需要对CR0和CR4的某些位进行保护,某些位则允许客户操作系统自由修改。通过CR0宿主/客户掩码和CR4宿主/客户掩码实现这个目的。这样,绝大部分对控制寄存器的写操作不会导致虚拟机退出操作,只有对那些被保护的位进行非保护值的更改才会导致虚拟机退出操作。事实上,这种情况很少发生。3、内存管理在内存虚拟模块中,我们强调要支持客户操作系统内存地址转换的功能。我们允许客户操作系统自由修改其自身的页表结构,客户操作系统对内存的大部分操作都不会导致虚拟机退出操作,只有那些会造成客户操作系统的页表层次与虚拟机监控器的页表层次不一致的操作才会导致虚拟机退出操作。图1为本发明的总体架构示意框图;图2为本发明的运行流程图;图3为本发明的内存虚拟的流程图;图4为虚拟机监控器同时虚拟化运行Linux和Vxworks的状态示意图;图5为半虚拟化与硬件虚拟化的性能对比示意图表。具体实施例方式如图1所示,一种基于处理器虚拟化技术的虚拟机系统,包括具有虚拟化技术的处理器、除处理器以外的其它底层硬件、运行于虚拟机扩展根操作模式的虚拟机监控器、运行于非虚拟机扩展根操作模式的若干虚拟操作系统,虚拟机监控器一端通过其虚拟硬件平台接口接入各虚拟操作系统,另一端连接除处理器以外的其它底层硬件设备,各虚拟操作系统直接连接处理器。虚拟机监控器包括设备虚拟模块、内存虚拟模块、虚拟硬件平台接口、中断描述符表、虚拟机控制结构和全局描述符表,虚拟机控制结构用于控制内存虚拟模块、设备虚拟模块和虚拟硬件平台接口的运行。中断描述符表用于将每一个中断向量和一个描述符对应起来。全局描述符表用于提供段式存储机制,对段的起始地址、界限、属性进行详细定义。系统的运行过程如图2所示,刚开机时,处理器处于非虚拟机扩展模式,进行基本的初始化工作,其中最重要的是对虚拟机监控器的中断描述符表进行设置,初始化完成后进入到虚拟机扩展模式,进行整个流程中最关键的虚拟机控制结构配置,然后可通过虚拟机进入操作进入虚拟机扩展非根操作模式,使客户操作系统运行。其中,第一次进入客户操作系统运行还需要进行实模式的模拟。在客户操作系统运行过程中,如遇到异常、中断、某些指令的运行或者资源访问等情况就有可能导致虚拟机退出操作,虚拟机监控器将对各种情况进行相应的处理后再返回到客户操作系统运行。其中,内存虚拟和设备虚拟是对各个情况进行处理的重要方法,此外还可能会进行某些特权指令的模拟。最后,如果虚拟机停止运行,可以关闭虚拟机扩展模式。如图3所示,虽然页表结构定义了线性地址到物理地址的转换,它并不直接控制内存访问的地址转换。地址转换实际上是被TLB控制的,处理器会把页表结构中的地址转换填充到TLB中。客户操作系统页表结构的功能就是“欺骗”客户操作系统,使其认为掌握了对内存地址转换的控制。事实上,客户操作系统页表结构并不直接或者间接的控制内存地址转换。内存地址转换被处理器的TLB和虚拟机监控器页表结构所控制(TLB中的映射关系是从虚拟机监控器页表结构中导入的)。如图4所示,我们开发了虚拟机监控器并在之上实现了对Linux和Vxworks的同时虚拟。图中左侧是Linux的运行界面,右侧是Vxworks的运行界面。这个虚拟方案兼顾了通用性、实时性和安全性。通用的应用软件运行在Linux上,实时任务、有较好可靠性要求的任务运行在Vxworks上,同时虚拟机监控器保证了两个操作系统很好的隔离。性能方面,与当前性能较好的软件虚拟化方案Xen进行对比。我们使用同一硬件平台,通过分别在虚拟机监控器上、在Xen上、直接在硬件平台上三种方式运行同一版本的Linux,然后使用相同的测试数据,测试结果如图-5所示,可以发现,虽然某几项测试得分比Xen低,但虚拟机监控器的总体性能比Xen提高了约10%,这也体现了硬件虚拟化固有的优势,符合我们当初的设计目标。权利要求1.一种基于处理器虚拟化技术的虚拟机系统,其特征在于包括具有虚拟化技术的处理器、除处理器以外的其它底层硬件、运行于虚拟机扩展根操作模式的虚拟机监控器、运行于虚拟机扩展非根操作模式的若干虚拟操作系统,虚拟机监控器一端通过其虚拟硬件平台接口接入各虚拟操作系统,另一端连接除处理器以外的其它底层硬件设备,各虚拟操作系统直接连接处理器。2.如权利要求1所述的虚拟机系统,其特征在于所述的虚拟机监控器包括设备虚拟模块、内存虚拟模块、虚拟硬件平台接口、中断描述符表、虚拟机控制结构和全局描述符表,虚拟机控制结构用于控制内存虚拟模块、设备虚拟模块和虚拟硬件平台接口的运行。3.如权利要求1所述的虚拟机系统,其特征在于系统运行过程中处理器的设置包括如下步骤在非虚拟机扩展模式下,对虚拟机监控器的中断描述符表进行设置,为每个虚拟机监控器需要处理的中断设置中断处理函数,并根据中断向量号将中断处理函数的入口地址保存到中断描述符表的相应位置;进入虚拟机扩展模式,进行虚拟机控制结构配置,对每个虚拟机控制结构配置需要的域,通过该域的索引码,使用VMWRITE指令写入相应的值;进入虚拟机扩展非根操作模式,运行虚拟操作系统,第一次进入虚拟操作系统运行时进行实模式模拟。4.如权利要求1所述的虚拟机系统,其特征在于所述的中断描述符表用于将每一个中断向量和一个描述符对应起来。5.如权利要求1所述的虚拟机系统,其特征在于所述的全局描述符表用于提供段式存储机制,对段的起始地址、界限、属性进行详细定义。6.一种基于处理器虚拟化技术的虚拟机系统实现方法,其特征在于包括以下步骤基于具有虚拟化技术的处理器,设置一运行于虚拟机扩展根操作模式的虚拟机监控器,和若干个运行于非虚拟机扩展根操作模式的虚拟操作系统,由虚拟机监控器为各虚拟操作系统虚拟出除处理器以外的其它硬件设备,各虚拟操作系统对其它硬件设备的操作经虚拟机监控器截取,由虚拟机监控器根据一定的规则分配给真实硬件完成操作,及,由虚拟机监控器处理各虚拟操作系统运行过程中出现的所有硬件中断。全文摘要本发明公开了一种基于处理器虚拟化技术的虚拟机系统,包括具有虚拟化技术的处理器、除处理器以外的其它底层硬件、运行于虚拟机扩展根操作模式的虚拟机监控器、运行于非虚拟机扩展根操作模式的若干虚拟操作系统,虚拟机监控器一端通过其虚拟硬件平台接口接入各虚拟操作系统,另一端连接除处理器以外的其它底层硬件设备,各虚拟操作系统直接连接处理器。本发明采用硬件虚拟化技术,比软件虚拟化技术具有先天性的优势;无需改变客户操作系统的源代码;虚拟机监控器较好的实现了上层模块和底层硬件的隔离性和安全性,且结构简单,复杂度低。文档编号G06F9/455GK101093449SQ20071006965公开日2007年12月26日申请日期2007年6月22日优先权日2007年6月22日发明者陈文智申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1