一种并行多处理器虚拟机系统的制作方法

文档序号:6613273阅读:155来源:国知局
专利名称:一种并行多处理器虚拟机系统的制作方法
技术领域
本发明涉及计算机系统结构,具体涉及一种并行多处理器虚拟机系统, 使虚拟的多个处理器能够并行运行于现代多处理器服务器平台上。
背景技术
操作系统在当今的个人电脑和服务器中起到了一个十分特殊的作用, 它像一座桥梁,衔接了用户应用程序和硬件平台之间的鸿沟。在过去的很 长一段时间内,在一台计算机上,只有一个操作系统能够在一段给定的时 间内运行。因此,为了能够使多个操作系统,或不同操作系统的应用程序 同时运行于同一台计算机上,科学家们发明出了许多的方法与技术。 虚拟机作为一种功能强大而且方便的技术得到了广泛的应用。 系统级虚拟机以较高的精度来模拟一个计算机系统的所有组成部分。 这样操作系统和其上的应用程序可以正确的在这个虚拟机上运行。系统级 虚拟机是作为一个应用程序运行在操作系统上。系统级虚拟机可以利用操 作系统提供的服务,同时又受到操作系统的限制,例如如果操作系统对 内存的访问提供保护,不允许应用程序直接访问内存物理地址,那么虚拟 机运行的时候,在内存管理上就会有极大的开销。这一类虚拟机具有代表 性的有Bochs, QEMU等。系统级虚拟机一般应用于系统结构的科研领域,
用来帮助研究人员衡量多处理器或存储系统的性能,或者用于操作系统的 开发领域。随着硬件日新月异的发展,特别是SMP (对称多处理器)服务器的广
泛应用以及多核技术的进步,目前的一些虚拟机技术要么不能够充分利用
多处理器资源,要么虚拟出的CPU个数受到实际物理处理器个数的限制。 以上所提到的各种虚拟机也都存在着这样或那样的不足。传统虚拟机(如:
Bochs IA-32 Emulator: http:〃bochs,sourceforge.net/)在构造具有多处理资源 的用户执行环境时,为了实现执行单元的同步,实际上是把多个处理单元 的执行内容放在一个循环中,进行串行执行,其效率是非常低的。为了在 多处理器环境下,构造通用而虚拟的执行环境,就必须首先实现执行环境 本身的并行化,同时,由于多核硬件所拥有的核的数量不断的提高,该执 行环境本身必须具有可扩展性,即系统能够不加修改地运行在具有任意多 个核的处理器机器上,并能够充分利用底层主机的处理性能。而本发明并 行多处理器虚拟机系统就有效的解决了这个问题。

发明内容
本发明的目的是提供一种并行多处理器虚拟机系统,该系统能够模拟 一个完整的计算机系统,能够模拟多个CPU,并且使虚拟CPU在同一时间内
并行执行。
本发明提供的并行多处理器虚拟机系统,其特征在于该系统包括虚 拟机和虚拟机内操作系统;
虚拟机内操作系统采用支持对称多处理器的操作系统,在虚拟机上运
行;
虚拟机为用户提供虚拟平台,它包括处理器并行模拟模块、内存管理 模块、中断控制模拟模块和外设模拟模块;
处理器并行模拟模块用于接收虚拟机内操作系统提交的指令,翻译后 予以执行;如果指令涉及内存读写,读写操作信号将传递给内存管理模块; 如果处理器并行模拟模块要处理中断,则将中断信号发送给中断控制模块;
内存管理模块负责所有内存的读写操作管理,内存管理模块将接收的 外设端口地址传送给外设模拟模块,并将内存读写操作的结果反馈给处理 器并行模拟模块;
外设模拟模块负责模拟所有的外设动作和响应端口访问消息,如果要 引发中断,则将中断信号发送给中断控制模拟模块处理;
中断控制模块负责虚拟机中的中断信号的控制和管理;它一方面接收
从外设模拟模块传来的外部中断信号,另一方面和处理器并行模拟模块协 同执行中断操作。
本发明可以既完整的提供一个计算机系统视图,又可以充分利用实际 硬件的各种处理资源。与已有的技术相比,本发明具有以下特点
a. 能够模拟一个完整的计算机系统。有很多传统的虚拟机由于性能上 的考虑或者实现方法的限制,不能够提供一个完整的计算机系统视图。它 们往往只是提供一个软件的执行环境。正因为如此,只有一些专门为这些 传统的虚拟机编写的软件才能在这些虚拟机制上运行。这样的限制使得很 多其它广泛使用的软件必须经过改写才可以应用于虚拟机上,如此势必会 无形中增加许多工作量。本发明由于提供对于完整的计算机系统的模拟, 使得当今的各种主流操作系统都可以不作任何修改直接运行。这样,所有 的应用软件都可以依赖于操作系统而无需做任何修改而直接使用。
b. 可以随时调整虚拟CPU的个数和配置各项硬件参数。由于本发明把 每个虚拟的CPU都用线程封装实现,虚拟的CPU的个数完全不受实际物理 CPU个数的限制。另外,由于本发明的所有外设都是由外设模拟模块来模 拟和管理,外设将不受实际真实设备的限制。使用者可以随意模拟各种类 型的外设,只需提供统一的读写接口就可以很方便的加入到虚拟机系统之 中。
c. 能用并行执行的方法高效利用实际服务器的多处理器计算资源。本 发明使用完全并行的方式来模拟一个计算机系统。如果本发明的虚拟机运 行在一个多处理器的硬件环境中,它将充分利用实际的计算资源。即使底 层的物理计算环境发生了改变,对于运行于本发明虚拟机内部的操作系统 及其应用软件都是透明的。
d. 本发明在并行化模拟多处理器时,利用虚拟CPU线程的同步方法 和对临界资源的访问控制保证了虚拟机在执行时的逻辑正确性。


图1为本发明提供的并行多处理器虚拟机系统的层次结构示意图2为图1中处理器并行模拟模块的结构示意图; 图3为图1中内存管理模块的结构示意图4为本发明提供的并行多处理器虚拟机系统当虚拟的CPU个数小于 实际处理器个数时线程分配示意图5为本发明提供的并行多处理器虚拟机系统当虚拟的CPU个数大于 实际处理器个数时线程分配示意图6为本发明提供的并行多处理器虚拟机系统中并行虚拟CPU线程的 同步方法示意图7为本发明提供的并行多处理器虚拟机系统的服务流程图。
具体实施例方式
下面结合附图和实例对本发明做进一步详细的说明。 如图1所示,从体系结构的层次上来看,本发明所应用的计算机系统 从上至下包括并行多处理器虚拟机系统3、本地操作系统层4和本地服务器
本地操作系统4可以使用任何当今的主流支持SMP的操作系统(如 Windows, Linux)。本地服务器5是本发明的物理基础,它包括p个处理器 51、 52、 ......、 5p,其中2《p《16。
并行多处理器虚拟机系统3包括虚拟机1和虚拟机内操作系统2,虚拟 机内操作系统2运行在虚拟机1之上。虚拟机内操作系统2为支持SMP(对 称多处理器)的操作系统,它具备支持并行处理的能力。如果使用Windows, 则Windows能够直接支持SMP。如果使用Linux,则需要重新编译Linux 的内核,添加其对SMP的支持选项。
虚拟机1为用户提供虚拟平台,它包括处理器并行模拟模块11、内存 管理模块12、中断控制模拟模块13和外设模拟模块14。
处理器并行模拟模块11用于接收虚拟机内操作系统2提交的指令,翻 译后予以执行。如果指令涉及内存读写,读写操作信号将传递给内存管理 模块12。如果处理器并行模拟模块11要处理中断,则将中断信号发送给中 断控制模块13。
内存管理模块12负责所有内存的读写操作管理。内存管理模块主要将
接收的外设端口地址传送给外设模拟模块14,将对内存读写操作的结果反 馈给处理器并行模拟模块11。
中断控制模块13负责虚拟机1中的中断信号的控制和管理;它一方面 接收从外设模拟模块14传来的外部中断信号,另一方面和处理器并行模拟 模块11协同执行中断操作。
外设模拟模块14负责模拟所有的外设动作和响应端口访问消息,如果 要引发中断,则将中断信号发送给中断控制模拟模块13处理。
下面举例说明处理器并行模拟模块11和内存管理模块12的具体结构, 本领域一般技术人员可以根据本发明公开的内容,以其它多种具体实现方 法实施本发明的技术方案,本发明的保护范围并不局限于下述实例的内容。
如图2所示,处理器并行模拟模块11包括指令功能函数表111,同步 控制模块112和虚拟CPU线程模块113。
虚拟CPU线程模块113动态构建n个虚拟CPU线程T,、 T2、……、 Tn (3《n《17),每个虚拟CPU线程对应一个物理CPU。虚拟CPU线程T,、 T2、……、Tn (以下简称虚拟CPU线程)都负责模拟一个虚拟CPU的行为, 主要功能为指令的翻译和指令功能的执行。
虚拟CPU线程模块113中的所有虚拟CPU线程都可以通过内存管理模 块12获得当前虚拟CPU将要执行的指令的二进制代码,该二进制代码经 由虚拟CPU线程翻译成对应的指令号。虚拟CPU线程取得翻译过后的指令 号后,查询指令功能函数表111得到当前指令对应的功能函数的入口。然 后,虚拟CPU线程执行指令对应的功能函数完成当前指令规定的动作。
如果当前指令涉及软中断或异常,虚拟CPU线程将会把中断号发送给 中断控制模拟模块13。中断控制模拟模块13接收到中断号后,根据中断号 实现对应的中断功能,同时切换这条指令对应虚拟CPU线程的上下文,使 其能转入对中断或异常的处理。
如果当前指令的功能仅仅是改变虚拟CPU的自身状态,那么相应动作 执行后由上面提到的同样的方法进入下一条指令的执行过程。如果当前指 令的功能涉及到对内存的物理地址的读写,那么读写的操作将被传递给内
存管理模块12。
同步控制模块112协同虚拟CPU线程模块113协调所有虚拟CPU线程 的同步执行。
如图3所示,内存管理模块12包括地址判断模块121和访存操作模块 122。地址判断模块121接收虚拟CPU线程1发送来的读写操作后,判断 读写操作所涉及的物理地址。如果是普通内存地址那么就直接交给访存操 作模块122执行访存的动作;如果是外设映射的端口地址,则把映射端口 地址传给外设模拟模块14,外设模拟模块14获取对应的端口号后,检索到 端口响应的外设执行读写操作。
如果外设模拟模块14模拟的外设中有中断请求,外设模拟模块14将 会把中断请求发送给中断控制模拟模块13。中断控制模拟模块13执行相应 处理后将中断号放入中断模拟模块13的中断请求队列中,同时,中断控制 模拟模块13将设置虚拟CPU线程1的上下文,交由虚拟CPU线程1进行 处理。
下面结合图4、图5说明本发明虚拟CPU线程Tp T2、……、Tn并行 化执行的原理。
虚拟CPU线程T,、 T2、……、Tn的并行化执行是本发明的核心组成部 分。现有的传统系统级虚拟机系统一般用数组标示每个CPU,然后用循环 来调配各个虚拟的CPU分时在一个单独的物理CPU上运行。而在本发明中, 每个虚拟的CPU都用一个线程来实现,从而可以同时并行的运行在多处理 器服务器上。
虚拟CPU线程T,、 T2、……、T。就是线程化的CPU模拟。进一步说, 就是每个虚拟CPU都用一个线程来封装,每个线程都可以访问公共的内存 管理模块12,从而实现虚拟SMP体系结构。更进一步如图4所示,假设真 实的物理CPU的个数为p,虚拟CPU线程Ti、 T2、……、Tn的数目小于或 等于实际物理的CPU个数,虚拟CPU进程会与物理的CPU作一对一的映 射。这样,可以减少线程在不同CPU之间切换所造成的cache命中率低下 的弊端。如果虚拟的CPU的数目大于实际物理CPU的个数,本地操作系统 4会尽量保证每个虚拟CPU线程T,、 T2、……、Tn都能在以前曾经运行过
的物理CPU上调度运行。
如图5所示,假设真实的物理CPU的个数为p,用户虚拟的CPU个数 是a+p+b (其中a, b, p都是正整数,b<p)。本地操作系统4会把第1, p+l, 2p+l, , a*p+l个创建虚拟CPU线程分配到1号物理CPU上运
行。同理第2, p+2, 2p+2, , a*p+2号虚拟CPU线程分配到2号物
理CPU上运行。如此,虚拟CPU线程将被分为p组,每组有a或a+l个虚 拟CPU线程运行于一个物理CPU之上。但是,值得注意的是如果出现以 下情况,用户程序进程或线程数目的总和不及虚拟CPU的个数,例如,当 前有4个真实物理CPU,用户创建了 8个虚拟CPU线程,这样每个真实 CPU上就有2个虚拟CPU线程在运行。这时,如果恰好只有2个用户线程 在虚拟机上运行,并且都集中运行在同一个虚拟CPU线程上。本地操作系 统4也不会重新调度虚拟CPU线程。这是因为,虚拟的CPU线程上如果没 有任务运行时,都会有一个空闲进程在其上运行。本地操作系统4根本不 可能知道虚拟CPU线程是否空闲。因此,操作系统不会根据虚拟机的负载 情况调度虚拟的CPU线程。也就是说, 一旦虚拟的CPU线程被创建,它基 本上确定在同一个CPU上运行,如此可以提高cache的命中率,减少本地 服务器CPU之间的cache同步开销,以及内存同步开销,提高系统的运行 速度和效率。
为了保证本发明的虚拟机能够在并行执行的情况下正确运行,本发明 提出了控制其并行执行的方法。包括并行虚拟CPU的同步方法和临界资 源的访问控制方法。
进一步对于并行虚拟CPU的同步方法(如图6),本发明为每一个虚拟 CPU线程Tp T2、……、Tn都设置了一对消息通信的发送和等待操作;同 时在所有的虚拟CPU线程外部设置了一个同步控制模块112。当每个虚拟 CPU线程执行完规定的条数的指令后,便向同步控制模块发送通知消息。 随后自己进入消息等待操作。当所有的CPU线程的通知消息都发送至同步 控制模块112之后,同步控制模块112便向所有的虚拟CPU线程T,、 T2、……、Tn分别发送继续执行消息。虚拟CPU线程T,、 T2、……、Tn 便退出等待,继续执行下一批指令,如此周而复始,循环运作。本发明的
同步方法使得所有的虚拟CPU线程都能够保持相对的执行的指令数误差在 一定的可控的范围之内。这样保证了整个虚拟机逻辑上的正确性。
在对于临界资源的访问控制方法中,本发明所需管理的临界资源包括 对外设端口的读写以两次访存指令的原子性操作。 ,
更进一步,关于对外设端口的读写,当本发明的虚拟机中的某一个虚 拟CPU线程1在对某个外设端口映射的内存地址进行读写操作时,如果有
另一个虚拟CPU线程(如虚拟CPU线程2)也在这个时候对相同的端口发 出读写的操作,那么这两个操作的冲突将导致数据的错误设置,从而使虚 拟CPU线程1对外设的操作信号发生紊乱,读到或写出非法的数据,甚至 根本读取不到想要的数据。因此,本虚拟机在并行执行,模拟多个同时运 行的虚拟CPU线程T" T2、……、Tn的时候,如果一个虚拟CPU线程将 要发送对I/O端口操作的指令,它首先必须检测是否有其它的虚拟CPU线 程正在进行I/O读写操作。进一步说就是检测虚拟I/O总线上读写操作的函 数是否被其它虚拟CPU线程上锁,如果有则等待其释放对该锁的所有权, 如果没有或其它虚拟CPU线程已经释放该锁,那么这个虚拟CPU线程就对 该锁执行加锁操作。继而执行读写操作。操作完毕后释放这个锁。如此这 样既保证了每次的I/O读写操作都能够成为一次原子操作而不被其它的操 作打断,又可以使每个虚拟CPU线程通过竞争来获得I/0的读写权。保证
了一定的公平性。
关于两次访存的指令的原子性操作,本发明采用判断后对内存读写加 锁来实现。进一步具体地说,两次访存的指令是指某些指令的操作中涉及
到两次对内存的读写。如INC指令,如果要对某一内存地址的数据进行INC 操作,该操作将会首先将该内存中的内容读入CPU的寄存器中,随后将寄 存器中的数值加一,最后把新的数据重新写入原来的内存地址。在这类涉 及两次访存的指令执行时如果其它的虚拟CPU线程上运行的指令也对该内 存地址进行了读写的操作那么要么读到脏数据,要么写丢失。
为了防止读脏数据和写丢失的发生,本发明采取的具体做法是首先 判断虚拟CPU线程上将要执行的下一条指令是否是这类两次访存的指令, 如果是则对内存读写加锁,操作完毕后对该锁解除封锁。对于其它不涉及两次访问内存的指令,如果它们需要读写内存,首先要检测是否内存读写 已经被加锁。如果没有,表示此时没有涉及两次访问内存的指令执行,可 以执行。如果发现内存读写已经被加锁,表示此时正好有一条设计两次访 存的指令在执行,于是它将在原地循环检测等待,直到内存的读写锁被解 除,涉及两次访存的指令执行完为止,然后继续正常的执行。本发明采用 了以上的方法来避免涉及两次访存的指令的原子执行被打断,保证了此类 指令的操作都能够正确无误的实现。
本发明利用以上提到的方法有效的控制了虚拟CPU线程并行执行时在
临界资源访问上可能产生的冲突。结合前面提到的并行虚拟CPU的同步方
法,本发明保证了虚拟机在并行化后逻辑上的正确执行。
本发明的整个系统服务流程如图7所示。如用户需要使用本发明所提 供的并行多处理机虚拟机。如果是第一次使用,首先应该编辑本系统提供 的配置脚本,指定所需模拟的处理器的型号、个数,内存大小,磁盘大小 及规格、虚拟网络的地址等信息。然后为虚拟机安装满足用户需求的支持 SMP的操作系统。然后用户直接启动本发明的虚拟机,等虚拟机内的操作 系统启动后便可以像使用任何一台真实的计算机一样使用本并行虚拟机系 统。
如果不是第一次使用,用户可以直接启动本发明的虚拟机,等虚拟机 内的操作系统启动后便可以像使用任何一台真实的计算机一样试用本并行 虚拟机系统。
如果用户对第一次使用时的虚拟硬件配置不满意,用户可以首先停止 本发明的虚拟机的执行,修改本系统提供的配置脚本直到各项配置都符合 用户的需求,重新启动本虚拟机即可继续使用。
本发明中的虚拟机将会自动将用户分配给虚拟CPU的任务以虚拟的 CPU为单位在真实的硬件服务器上并行执行,从而高效地利用现有硬件上
多处理器的计算资源,为用户提供高性能的服务。
权利要求
1、一种并行多处理器虚拟机系统,其特征在于该系统包括虚拟机(1)和虚拟机内操作系统(2);虚拟机内操作系统(2)采用支持对称多处理器的操作系统,在虚拟机(1)上运行;虚拟机(1)为用户提供虚拟平台,它包括处理器并行模拟模块(11)、内存管理模块(12)、中断控制模拟模块(13)和外设模拟模块(14);处理器并行模拟模块(11)用于接收虚拟机内操作系统(2)提交的指令,翻译后予以执行;如果指令涉及内存读写,读写操作信号将传递给内存管理模块(12);如果处理器并行模拟模块(11)要处理中断,则将中断信号发送给中断控制模块(13);内存管理模块(12)负责所有内存的读写操作管理,内存管理模块将接收的外设端口地址传送给外设模拟模块(14),并将内存读写操作的结果反馈给处理器并行模拟模块(11);外设模拟模块(14)负责模拟所有的外设动作和响应端口访问消息,如果要引发中断,则将中断信号发送给中断控制模拟模块(13)处理;中断控制模块(13)负责虚拟机(1)中的中断信号的控制和管理;它一方面接收从外设模拟模块(14)传来的外部中断信号,另一方面和处理器并行模拟模块(11)协同执行中断操作。
2、 根据权利要求1所述的系统,其特征在于处理器并行模拟模块(ll) 包括指令功能函数表(111),同步控制模块(112)和虚拟CPU线程模块(113)。虚拟CPU线程模块(113)用于模拟CPU的行为,构建n个虚拟CPU 线程T,、 T2、……、Tn,其中,l《n《17,每个虚拟CPU线程对应一个物 理CPU;査询指令功能函数表(111)用于存储指令与功能函数的对应表; 同步控制模块(112)协同虚拟CPU线程模块(113)协调所有虚拟CPU 线程的同步执行。
3、根据权利要求1或2所述的系统,其特征在于内存管理模块(12) 包括地址判断模块(121)和访存操作模块(122);其中,地址判断模块(121)接收虚拟CPU线程(1)发送来的读写操作后, 判断读写操作所涉及的物理地址;如果是普通内存地址那么就直接交给访 存操作模块(122)执行访存的动作;如果是外设映射的端口地址,则把映 射端口地址传给外设模拟模块(14),外设模拟模块(14)获取对应的端口 号后,检索到端口响应的外设执行读写操作;访存操作模块(122)处理虚拟CPU线程的读写请求,保证两次访存 指令的原子性。
全文摘要
本发明公开了一种支持CPU同时执行的并行多处理器虚拟机系统,包括一个虚拟机和运行在虚拟机之上的操作系统。该虚拟机系统能够模拟至少一个虚拟处理器,它包括一个处理器并行模拟模块,一个内存管理模块,一个中断控制模拟模块以及外设模拟模块;操作系统的机器指令通过虚拟机的内存管理模块传递给处理器模拟模块,处理器模拟模块能够模拟多个虚拟处理器用于执行指令翻译模块翻译过来的操作系统指令,并且使之并行执行,同时出本发明提出了并行执行过程中的同步和访问控制算法;中断控制模拟模块负责协调外设模拟模块和处理器模拟模块。本发明特别适合于在一台SMP服务器或多核服务器上虚拟一个完整模拟硬件的并行化执行环境。
文档编号G06F9/455GK101183315SQ200710168720
公开日2008年5月21日 申请日期2007年12月10日 优先权日2007年12月10日
发明者昆 方, 识 罗, 邵志远, 海 金, 陈华才 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1