一种平台虚拟化系统的制作方法

文档序号:6514732阅读:249来源:国知局
一种平台虚拟化系统的制作方法
【专利摘要】本发明涉及一种平台虚拟化系统,包括:CPU模拟器:首先读取X86架构代码指令,判断所述指令基本块是否已翻译;翻译过程采用二进制翻译器实现,二进制翻译器包括翻译引擎和执行引擎;其中翻译引擎把X86架构代码翻译成龙芯平台代码;执行引擎准备龙芯平台代码运行的上下文环境,然后从龙芯平台代码缓存中找到X86架构代码所对应的龙芯平台代码并执行;内存虚拟化模块:采用影子页表方法;外设虚拟化模块:针对每一个外设设备分别建立相应的设备模型,X86架构虚拟机通过设备模型与外设设备进行行交互,实现设备发现和访问使用。本发明能够使一些尚不能适配国产龙芯硬件平台的信息系统以虚拟化的方式运行在国产软硬件环境中,有助于在信息系统的自主化升级过程中实现新旧技术体制的平滑过渡。
【专利说明】一种平台虚拟化系统
【技术领域】
[0001]本发明属于虚拟计算领域,具体涉及一种基于国产软硬件环境的资源虚拟化环境平台虚拟化系统构建方法。
【背景技术】
[0002]龙芯(Loongson)是由中国科学院计算机所自主开发的采用简单指令集的通用系统处理器,可以用于服务器和个人电脑领域。目前已经发展到龙芯2F和龙芯3A多核高性能处理器。
[0003]龙芯处理器主要包括三个系列。龙芯I号处理器及其IP系列主要面向嵌入式应用,龙芯2号超标量处理器及其IP系列主要面向桌面应用,龙芯3号多核处理器系列主要面向服务器和高性能机应用。目前最新的龙芯3A处理器采用的是RISC架构,兼容MIPS指令,原生四核设计,内含两条HT PHY超传输总线,采用65nm (纳米)工艺,主频IGHz。
[0004]中标麒麟操作系统(龙芯版)是中标软件公司开发的龙芯平台操作系统。针对龙芯系列处理器硬件设计和指令集特点,从操作系统内核进行适配和优化。在应用环境之外,中标麒麟操作系统(龙芯版)还构建了基于龙芯CPU的完善应用开发环境,方便得支持基于龙芯CPU进一步应用开发和移植的工作。
[0005]由于龙芯处理器采用与通用X86系统不同的体系架构,指令集上与X86也不相兼容,同时,为了提高处理器的性能,龙芯处理器的指令集也增加了许多新的优化指令。针对龙芯硬件平台的特点,中标软件在通用桌面基础上进行移植开发、性能调优和针对性改进,系统软件包均采用龙芯2F处理器指令集进行了重新编译,并针对功能性与易用性进行了优化。
[0006]虚拟化(Virtualization)技术最早出现在20世纪60年代的IBM大型机系统,在70年代的System370系列中逐渐流行起来,这些机器通过一种叫虚拟机监控器(VirtualMachine Monitor, VMM)的程序在物理硬件之上生成许多可以运行独立操作系统软件的虚拟机(Virtual Machine)实例。随着近年多核系统、集群、网格以及云计算的广泛部署,虚拟化技术在商业应用上的优势日益体现,不仅降低了 IT成本,而且还增强了系统安全性和可靠性,虚拟化的概念也逐渐深入到人们日常的工作与生活中。
[0007]通常所说的虚拟化主要是指平台虚拟化技术,通过使用控制程序(ControlProgram,也被称为Virtual Machine Monitor或Hypervisor),隐藏特定计算平台的实际物理特性,为用户提供抽象的、统一的、模拟的计算环境(称为虚拟机)。虚拟机中运行的操作系统被称为客户机操作系统(Guest OS),运行虚拟机监控器的操作系统被称为主机操作系统(Host OS)。运行虚拟机的真实系统我们称之为主机系统。
[0008]平台虚拟化技术又可以细分为如下几个子类:
[0009](I)全虚拟化(Full Virtualization)
[0010]全虚拟化是指虚拟机模拟了完整的底层硬件,包括处理器、物理内存、时钟、外设等,使得为原始硬件设计的操作系统或其它系统软件完全不做任何修改就可以在虚拟机中运行。操作系统与真实硬件之间的交互可以看成是通过一个预先规定的硬件接口进行的。全虚拟化VMM以完整模拟硬件的方式提供全部接口(同时还必须模拟特权指令的执行过程)。全虚拟化VMM必须完整地模拟该接口执行的全过程。如果硬件不提供虚拟化的特殊支持,那么这个模拟过程将会十分复杂。
[0011](2)半虚拟化(Paravirtualization)
[0012]这是一种修改Guest OS部分访问特权状态的代码以便直接与VMM交互的技术。在半虚拟化虚拟机中,部分硬件接口以软件的形式提供给客户机操作系统,这可以通过Hypercall (VMM提供给Guest OS的直接调用,与系统调用类似)的方式来提供。这要求GuestOS必须进行修改,才能使用VMM提供的HypercalI功能,所以限制了可用的操作系统。由于不需要产生额外的异常和模拟部分硬件执行流程,半虚拟化相对全虚拟化可以大幅度提高性能,比较著名的VMM有Xen。
[0013](3)硬件辅助虚拟化(Hardware-Assisted Virtualization)
[0014]硬件辅助虚拟化是指借助硬件(主要是主机处理器)的支持来实现高效的全虚拟化。例如有了 Intel-VT技术的支持,Guest OS和VMM的执行环境自动地完全隔离开来,Guest OS有自己的“全套寄存器”,可以直接运行在最高级别。Intel-VT和AMD-V是目前x86体系结构上可用的两种硬件辅助虚拟化技术。
[0015]目前,在国产龙芯平台上使用虚拟化技术的主要技术障碍是:
[0016](I)目前龙芯平台还不支持硬件辅助虚拟化技术。
[0017](2)目前主要的应用软件都运行在Intel x86平台上,属于CISC架构,x86指令集。而龙芯平台属于RISC架构,使用MIPS指令集,软硬件与X86平台不兼容。
[0018]因此,本发明采用全虚拟化方法,在龙芯平台上模拟出X86架构的虚拟硬件,实现在龙芯平台上运行X86架构的虚拟机。

【发明内容】

[0019]本发明的目的是提供一种平台虚拟化系统,在龙芯处理器平台上运行X86架构虚拟机,并且在X86架构虚拟机中使用传统的X86操作系统,运行已有的软件。
[0020]本发明所采用的技术方案是:
[0021]一种平台虚拟化系统,在龙芯处理器平台上运行X86架构虚拟机,包括如下部分:
[0022]CPU模拟器:首先读取X86架构代码指令,判断所述指令基本块是否已翻译,若未翻译,则进行翻译并写入龙芯平台中的指令寄存块;若已翻译,则在龙芯平台上执行已翻译过的代码块并指向下一个X86架构代码指令,循环判断并执行;
[0023]上述翻译过程采用二进制翻译器实现,二进制翻译器包括翻译引擎和执行引擎;其中翻译引擎把X86架构代码翻译成龙芯平台代码;执行引擎准备龙芯平台代码运行的上下文环境,然后从龙芯平台代码缓存中找到X86架构代码所对应的龙芯平台代码并执行;
[0024]内存虚拟化模块:采用影子页表方法,使X86架构虚拟机在进行内存读写时可以直接得到龙芯平台宿主机物理地址;
[0025]外设虚拟化模块:针对每一个外设设备分别建立相应的设备模型,X86架构虚拟机通过设备模型与外设设备进行行交互,实现设备发现和访问使用。
[0026]如上所述的一种平台虚拟化系统,其中:所述二进制翻译器,实现步骤如下:[0027]首先读取X86架构指令,将该指令放入解码/分派循环;其次在解码/分派循环中,X86架构指令被解释为龙芯平台指令;最后根据龙芯平台指令执行对应的解释执行函数。
[0028]如上所述的一种平台虚拟化系统,其中:对于多条X86架构指令,逐条进行解码和执行。
[0029]如上所述的一种平台虚拟化系统,其中:所述龙芯平台上设有目标机器代码缓存,所述缓存由二进制翻译器的翻译引擎管理;由于X86架构虚拟机的不同进程间存在共享代码,与所述共享代码相对应的龙芯平台代码保存在所述目标机器代码缓存中;对于所述共享代码,直接在所述目标机器代码缓存中读取并执行。
[0030]如上所述的一种平台虚拟化系统,其中:所述影子页表方法,建立影子页表,影子页表包含X86架构虚拟机虚拟地址到龙芯平台宿主机物理地址的映射关系;X86架构虚拟机进行内存读写时,通过影子页表中的地址映射关系直接得到龙芯平台宿主机物理地址。
[0031]本发明的有益效果是:本发明充分利用包括CPU虚拟化、内存虚拟化和外设虚拟化在内的服务器虚拟化系列技术,在以龙芯3A处理器和中标麒麟服务器操作系统为主体构成的国产自主基础软硬件环境下,为基础设施资源的集约化管理以及信息系统的托管式运维提供一种技术途径。若将该发明应用到信息系统的建设过程中,一方面将促使各种异构的底层硬件设备所蕴含的计算、存储能力被集中整合,并按照业务单元的需要进行调度和分配;另一方面还将使得各类信息系统能够共享公用的基础设施,并以托管运行的方式由专业的运维人员统一管理,从而减轻业务单元的系统部署和运维压力。此外,通过构建基于龙芯3A处理器和中标麒麟服务器操作系统的虚拟化平台,能够使一些尚不能适配国产自主底层硬件和基础软件的信息系统以虚拟化的方式运行在国产自主基础软硬件环境中,有助于在信息系统的自主化升级过程中实现新旧技术体制的平滑过渡。
【专利附图】

【附图说明】
[0032]图1为CPU模拟器架构图。
[0033]图2为二进制代码翻译流程图。
[0034]图3为影子页表结构图。
【具体实施方式】
[0035]下面结合附图和实施例对本发明提供的一种平台虚拟化系统进行介绍:
[0036]如图1所示,一种平台虚拟化系统,在龙芯处理器平台上运行X86架构虚拟机,包括CPU模拟器、内存虚拟化模块、外设虚拟化模块。
[0037](一)CPU 模拟器
[0038]在龙芯平台上运行x86架构虚拟机,由于x86架构虚拟机(简称虚拟机)和龙芯平台采用不同的架构,虚拟机的指令无法直接在龙芯平台物理硬件上执行,必须经过翻译,把虚拟机的代码转换成龙芯平台物理机所用的代码。
[0039]龙芯平台上的虚拟化系统(VMM)使用全虚拟化技术。虚拟化系统对整个x86架构虚拟机(包括处理器和配套的外围设备)进行仿真。这样做的优点是,可以在一种硬件平台上运行另外一种硬件平台的操作系统和软件(例如,在X86硬件上运行ARM系统),而缺点是性能有比较大的损失。
[0040]处理器的模拟采用二进制代码翻译技术。所谓二进制代码翻译,是指把某种指令集架构的程序翻译成另一种指令集架构,可以在另外的平台上运行。这种翻译不需要获得程序的源代码作为输入,提高了程序移植的方便性。这种翻译是在程序执行的时候动态进行的。
[0041]如图1所示,CPU模拟器首先读取X86架构(原PC)代码指令,判断所述指令基本块是否已翻译,若未翻译,则进行翻译并写入龙芯平台(PC)中的指令寄存块;若已翻译,则在龙芯平台上执行已翻译过的代码块并指向下一个X86架构(原PC)代码指令,循环判断并执行。
[0042]二进制代码动态翻译系统的过程如图2所示。被翻译的虚拟机(x86架构)所运行的代码称为源机器代码,翻译(或解释)出的宿主物理机(龙芯平台)运行的代码称为目标机器代码。二进制翻译器主要包括两个模块:翻译引擎和执行引擎。其中翻译引擎负责把源机器代码(X86架构)翻译成目标机器(龙芯平台)代码;执行引擎负责准备目标机器代码运行的上下文环境,然后从目标机器代码缓存中找到源机器代码所对于的目标机器代码并执行。
[0043]二进制翻译器解释执行步骤如下:
[0044]首先读取X86架构指令,将该指令放入解码/分派循环;
[0045]在解码/分派循环中,X86架构指令被解释为龙芯平台指令;
[0046]根据龙芯平台指令执行对应的解释执行函数。
[0047]二进制翻译的过程可以分为3个阶段:解释,快速翻译和优化翻译。
[0048](I)解释执行阶段:当源机器代码被首次执行时,翻译引擎对其进行解释执行,解释执行不保存解释结果。如果该源机器代码再次被执行,它将再次被解释。只有当执行次数达到某一阈值后,翻译引擎对其进行翻译,生成目标代码并保存到目标代码缓存中。当该代码块再次被执行时,其对应的翻译代码块可以被重用,无需再次翻译。
[0049](2)快速翻译阶段:由于要翻译的代码较多,通常采用简单的翻译方法,基于模板生成目标代码。
[0050](3)优化翻译阶段:对于被频繁执行的关键代码块,当其执行次数超过某一更高的阈值时,它将再次被翻译。在优化翻译阶段,翻译引擎采用更复杂的算法对源机器代码进行优化翻译,得到更高效的翻译代码。其执行效率远远高于快速翻译时得到的代码。
[0051]二进制翻译引擎需要管理目标机器代码缓存。由于X86架构虚拟机的不同进程间会有大量的共享代码,如共享库及内核代码,所以目标机器(龙芯平台)代码应该在物理地址空间进行保存,以获得比较好的性能。
[0052](二)内存虚拟化模块
[0053]除了处理器CPU外,虚拟化系统还需要模拟内存,硬件中断和外设10。
[0054]虚拟机认为它所拥有的内存地址空间总是从O开始,但它在宿主机上执行时不可能总是拥有从O开始的地址所在的物理内存。也就是说虚拟机的物理地址并不等于宿主机上的机器物理地址。这样虚拟化系统(VMM)必须把虚拟机线性地址到虚拟机物理地址的转换修正为虚拟机线性地址到宿主机物理地址的转换。VMM为虚拟机OS的每个进程的页表构造一个影子页表,维护虚拟机虚拟地址(Guest Linear Address)到宿主机物理地址(HostPhysical Address)的映射,宿主机CR3寄存器存放这个影子页表的物理内存地址。VMM同时维护一个Guest OS全局的虚拟机物理地址(Guest Physical Address)到宿主机物理地址(Host Physical Address)的映射表。发生缺页异常的地址总是虚拟机虚拟地址(GuestLinear Address),VMM先去Guest OS中的页表检查原因,如果页表项已经建立,即对应的虚拟机物理地址(Guest Physical Address)存在,说明尚未建立到宿主机物理地址(HostPhysical Address)的映射,那么VMM分配一页物理内存,将影子页表和映射表更新;否则,VMM返回到Guest OS,由Guest OS自己处理该异常。影子页表见图3所示,影子页表包含X86架构虚拟机虚拟地址到龙芯平台宿主机物理地址的映射关系;X86架构虚拟机进行内存读写时,通过影子页表中的地址映射关系得直接到龙芯平台宿主机物理地址。
[0055](三)外设虚拟化模块
[0056]从虚拟机的角度看,外设是通过一组I/O资源(端口 I/O或内存映射I/O)来进行访问的。为了满足多个客户机操作系统的需求,龙芯平台的虚拟化系统截获虚拟机操作系统对设备的访问请求,模拟真实设备的效果。
[0057]X86虚拟机上的客户机操作系统(Guest OS)发现虚拟的目标设备后,使用目标设备的驱动程序来驱动该设备。客户机操作系统中的驱动程序会发出一些请求并等待设备的响应,这些请求被龙芯虚拟化系统拦截处理后,响应会返回给客户机操作系统,该响应与真实物理设备的响应相似。
[0058]在龙芯平台的虚拟化系统中,进行设备模拟,并处理所有设备请求与响应的逻辑模块,称为设备模型。设备模型在进行设备I/o模拟时,需要正确模拟目标设备的软件接口就可以保证X86客户机操作系统观察到的虚拟设备与目标设备一致,忽略物理硬件的硬件结构及接口。
[0059]X86虚拟机所使用的不同外设设备(例如硬盘、网卡、USB端口、光驱等),使用的软件接口包括:PCI配置空间、I/O端口、丽IO (内存映射输入输出)、DMA (直接内存访问)、中断。在虚拟化系统中,X86客户机操作系统通过以上接口与虚拟设备进行数据交换,龙芯平台虚拟化系统截获这些访问数据,将其重定向至设备模型。X86架构虚拟机通过设备模型与外设设备进行交互,实现设备发现和访问使用。
【权利要求】
1.一种平台虚拟化系统,在龙芯处理器平台上运行X86架构虚拟机,包括如下部分: CPU模拟器:首先读取X86架构代码指令,判断所述指令基本块是否已翻译,若未翻译,则进行翻译并写入龙芯平台中的指令寄存块;若已翻译,则在龙芯平台上执行已翻译过的代码块并指向下一个X86架构代码指令,循环判断并执行; 上述翻译过程采用二进制翻译器实现,二进制翻译器包括翻译引擎和执行引擎;其中翻译引擎把X86架构代码翻译成龙芯平台代码;执行引擎准备龙芯平台代码运行的上下文环境,然后从龙芯平台代码缓存中找到X86架构代码所对应的龙芯平台代码并执行; 内存虚拟化模块:采用影子页表方法; 外设虚拟化模块:针对每一个外设设备分别建立相应的设备模型,X86架构虚拟机通过设备模型与外设设备进行行交互,实现设备发现和访问使用。
2.根据权利要求1所述的一种平台虚拟化系统,其特征在于:所述二进制翻译器,实现如下步骤: 首先读取X86架构指令,将该指令放入解码/分派循环; 在解码/分派循环中,X86架构指令被解释为龙芯平台指令; 根据龙芯平台指令执行对应的解释执行函数。
3.根据权利要求1所述的一种平台虚拟化系统,其特征在于:对于多条X86架构指令,逐条进行解码和执行。
4.根据权利要求1所述的一种平台虚拟化系统,其特征在于:所述龙芯平台上设有目标机器代码缓存,所述缓存由二进制翻译器的翻译引擎管理;由于X86架构虚拟机的不同进程间存在共享代码,与所述共享代码相对应的龙芯平台代码保存在所述目标机器代码缓存中;对于所述共享代码,直接在所述目标机器代码缓存中读取并执行。
5.根据权利要求1所述的一种平台虚拟化系统,其特征在于:所述影子页表方法,建立影子页表,影子页表包含X86架构虚拟机虚拟地址到龙芯平台宿主机物理地址的映射关系;X86架构虚拟机进行内存读写时,通过影子页表中的地址映射关系得直接到龙芯平台宿主机物理地址。
【文档编号】G06F9/455GK103793260SQ201310466848
【公开日】2014年5月14日 申请日期:2013年10月9日 优先权日:2013年10月9日
【发明者】刘东红, 郭长国, 李永红, 朱燕, 刘伟华, 孙巍 申请人:中国电子设备系统工程公司研究所, 普华基础软件股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1