在各个域间实现数据共享的虚拟化计算机系统和方法转让专利

申请号 : CN200710120868.5

文献号 : CN101377745B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张玉昆

申请人 : 张玉昆

摘要 :

一种在各个域间实现数据共享的虚拟化计算机系统,包括计算机硬件装置和在该计算机硬件装置上运行的软件单元,软件单元包括主域、客域、在主域与客域之间的域间通道。其中主域的内核有文件系统模块和共享数据服务器模块,客域的内核有共享数据客户端模块,域间通道用于实现共享数据客户端模块和共享数据服务器模块之间的数据交互。本发明共享数据的方法是在共享数据服务器模块和共享数据客户端模块之间,藉由它们之间的域间通道,通过基于半虚拟化的内存页面重映射机制实现文件访问过程。本发明解决了现有技术不同域之间不能有效共享数据的问题,实现了存储数据的统一管理,减低维护成本,性能好,效率高,适用范围广。

权利要求 :

1.一种在各个域间实现数据共享的虚拟化计算机系统,该系统包括:一个计算机硬件装置,该计算机硬件装置设有:一个或一组支持两个或两个以上运行特权级的中央处理器、设定容量的内存和包括存储设备在内的输入输出设备,所述存储设备是包括硬盘、软盘、闪存盘或光盘的直连式存储设备或网络存储设备;其特征在于:该系统还包括在所述计算机硬件装置上运行的软件单元,所述软件单元包括:一个主域部件、一个或多个客域部件、以及在主域部件与客域部件之间的域间通道部件,其中:主域部件,直接运行在计算机硬件装置上,用于提供支撑虚拟机运行的虚拟机监控器;主域部件的内核包括:文件系统模块和共享数据服务器模块,其中文件系统模块用于管理计算机的存储设备及其中存储的数据,并完成对存储设备上的文件访问;共享数据服务器模块用于与客域部件的共享数据客户端模块进行交互,利用文件系统模块的文件访问功能,完成客域部件中的共享数据客户端模块对主域部件直接管理的存储设备及其中存储的数据的访问;

客域部件,运行在主域部件的虚拟机监视器所支撑的虚拟机上;客域部件的内核包括:共享数据客户端模块,该模块用做客域操作系统的文件系统重定向器,以响应来自该客域部件中的应用和其他内核子系统模块对存储设备上的文件访问请求,并通过域间通道与主域部件的共享数据服务器模块进行交互,利用主域部件的共享数据服务器模块和文件系统模块的文件访问功能,完成客域部件对主域部件直接管理的存储设备及其中存储的数据的间接访问;

主域部件与客域部件之间的域间通道部件,该部件是基于半虚拟化的内存页面重映射机制实现的域间通信通道,用于完成客域部件的共享数据客户端模块和主域部件的共享数据服务器模块之间的数据交互。

2.根据权利要求1所述的虚拟化计算机系统,其特征在于:所述主域部件的共享数据服务器模块和文件系统模块都运行在该主域部件的操作系统的内核态;其中共享数据服务器模块按照文件系统向上提供的接口规范与文件系统模块交互,并通过文件系统模块管理存储设备和其中存储的数据;该共享数据服务器模块的文件访问例程经文件系统模块通过执行典型的打开、读、写、关闭文件的操作系统文件访问过程完成对文件的访问。

3.根据权利要求1所述的虚拟化计算机系统,其特征在于:所述文件系统模块还包括对各个文件系统进行抽象的虚拟文件系统VFS模块。

4.根据权利要求1所述的虚拟化计算机系统,其特征在于:所述客域部件的操作系统是通用的操作系统,所述每个客域部件都有一个运行在该客域操作系统的内核态的共享数据客户端模块;该共享数据客户端模块在客域提供本地文件系统的功能,向客域部件中的应用和其他内核子系统模块提供本地文件系统的服务接口,通过域间通道部件与主域部件中的共享数据服务器模块进行交互。

5.根据权利要求1所述的虚拟化计算机系统,其特征在于:当所述虚拟化计算机系统中有多个客域部件时,所述主域部件和该多个客域部件之间建立的域间通道部件呈一对多的星形拓扑结构,且其中每个客域部件的共享数据客户端模块与主域部件的共享数据服务器模块之间的交互是彼此独立的。

6.根据权利要求1或5所述的虚拟化计算机系统,其特征在于:所述共享数据服务器模块应保证每个客域部件对主域部件直接管理的存储设备和其中存储的数据的访问不能干涉其它客域部件对主域部件直接管理的存储设备和其中存储的数据的访问,以及某个客域部件的非法操作不能对主域部件和其他客域部件产生不利影响。

7.根据权利要求1所述的虚拟化计算机系统,其特征在于:所述主域部件的内核数据访问栈的结构由最底层向上的排列顺序包括:存储设备驱动程序模块,存储卷管理模块,文件系统模块,共享数据服务器模块;内核数据访问栈的另一种结构包括文件系统模块和共享数据服务器模块,此时的文件系统模块是基于网络的文件系统模块或虚文件系统模块。

8.根据权利要求1所述的虚拟化计算机系统,其特征在于:所述共享数据服务器模块设有两类数据结构:文件访问表和文件访问实例,前者是分别为与该共享数据服务器模块进行交互的各个共享数据客户端模块单独、对应地建立的,该文件访问表由多个节点组成,每个节点对应着所述共享数据客户端模块与该共享数据服务器模块之间的一个文件访问过程;后者用于记录每一个文件访问过程中的文件访问信息,对应于某个文件访问过程的文件访问表的节点直接含有或由指针间接指向对应于同一个文件访问过程的文件访问实例;所述文件访问表的节点和文件访问实例是在该共享数据客户端模块请求共享数据服务器模块打开文件时,由共享数据服务器模块建立;并在该共享数据客户端模块请求共享数据服务器模块关闭文件时,由共享数据服务器模块拆除。

9.根据权利要求8所述的虚拟化计算机系统,其特征在于:当共享数据服务器模块响应某个共享数据客户端模块请求而打开文件、建立对应本次文件访问过程的文件访问表节点时产生一个标识符一检索索引号,用于标识该文件访问过程的文件访问表节点,并回复给该共享数据客户端模块;共享数据服务器模块用该检索索引号可以获得对应的文件访问实例,从而获得这次文件访问过程的文件访问信息;且在本次文件访问过程中,在共享数据服务器模块响应该共享数据客户端模块的请求关闭文件,并拆除对应这次文件访问过程中的文件访问表节点和文件访问实例之前,标识本次文件访问过程的检索索引号始终有效、且是唯一的。

10.一种在权利要求1所述的在各个域间实现数据共享的虚拟化计算机系统中共享数据的方法,其特征在于:在主域部件的共享数据服务器模块和客域部件的共享数据客户端模块之间,藉由主域部件与客域部件之间的域间通道部件,通过基于半虚拟化的内存页面重映射机制实现文件访问过程,所述方法在某个共享数据客户端模块和共享数据服务器模块之间完成的一个文件访问过程包括下列操作步骤:步骤1、共享数据客户端模块给共享数据服务器模块发送打开文件的请求;

步骤2、共享数据服务器模块收到该打开文件的请求后,通过主域部件的文件系统模块打开文件,并在对应该共享数据客户端模块的文件访问表中建立一个对应本次文件访问过程的节点和一个文件访问实例,再将该节点的检索索引号回复给该共享数据客户端模块;

步骤3、该共享数据客户端模块给共享数据服务器模块发送访问文件的请求,该请求中含有本次文件访问过程中共享数据服务器模块回复的检索索引号;

步骤4、共享数据服务器模块收到该共享数据客户端模块发送的访问文件的请求,获悉该访问文件请求的操作类型;

步骤5、共享数据服务器模块先判断该访问文件的操作请求是否为关闭文件,若不是,顺序执行后续步骤;若是,则跳转执行步骤7;

步骤6、共享数据服务器模块通过主域部件的文件系统模块执行文件访问操作,并将对应该共享数据客户端模块的文件访问表中对应本次文件访问过程的文件访问实例的文件访问信息进行更新,再把含有本次文件访问过程的检索索引号的文件访问结果回复给该共享数据客户端模块,然后返回步骤3;

步骤7、共享数据服务器模块通过主域部件的文件系统模块关闭文件,并在对应该共享数据客户端模块的文件访问表中拆除对应本次文件访问过程的文件访问表节点和文件访问实例,结束本次文件访问过程。

11.根据权利要求10所述的虚拟化计算机系统中共享数据的方法,其特征在于:所述方法在某个共享数据客户端模块与共享数据服务器模块之间可以同时并发运行多个访问文件的操作,即每个共享数据客户端模块与共享数据服务器模块之间可以并行地运行多个文件访问过程。

12.根据权利要求10或11所述的虚拟化计算机系统中共享数据的方法,其特征在于:所述方法在每个文件访问过程中,共享数据客户端模块通过循环执行步骤3~步骤6的操作,对共享数据服务器模块所打开的文件进行多次访问。

13.根据权利要求10所述的虚拟化计算机系统中共享数据的方法,其特征在于:所述方法在每个文件访问过程中,每个操作步骤都是基于当前状态的,共享数据服务器模块维护的对应所述文件访问过程的数据结构-文件访问实例中,含有对应该文件访问过程的状态信息。

14.根据权利要求10所述的虚拟化计算机系统中共享数据的方法,其特征在于:所述方法在共享数据客户端模块和共享数据服务器模块之间实现文件访问过程之前和之后分别包括下列两个操作步骤:步骤0、在共享数据客户端模块与共享数据服务器模块之间建立连接:共享数据客户端模块给共享数据服务器模块发送建立连接的请求,共享数据服务器模块收到该建立连接的请求,建立一个对应该共享数据客户端模块的文件访问表;

步骤8、拆除该共享数据客户端与共享数据服务器之间的连接:该共享数据客户端模块给共享数据服务器模块发送拆除连接的请求,共享数据服务器收到该拆除连接的请求,拆除对应该共享数据客户端模块的文件访问表。

说明书 :

技术领域

本发明涉及一种计算机数据的共享访问技术,确切地说,涉及一种在各个域间实现数据共享的虚拟化计算机系统和方法,属于计算机虚拟化技术领域。

背景技术

计算机硬件(Hardware)和操作系统(Operating System)是计算机系统两个密不可分的部分。通常,业界广泛应用的现代计算机硬件主要是由中央处理器(CPU,Central Processing Unit)、内存(Main Memory)和输入输出设备(I/ODevice)组成。中央处理器至少有两个运行特权级(Prvilege Level):在高运行特权级上,中央处理器可以运行所有的指令,控制和管理所有的计算机硬件资源;而低运行特权级是受限的运行态,不能直接运行某些特权指令。输入输出设备通常至少包括外部存储设备(如硬盘、软盘、闪存盘,或者网络存储等),其特点是在没有电源供应的情况下存储的数据不会丢失。计算机操作系统则与计算机硬件配合设计,其中操作系统内核(Kernel)运行在中央处理器的高运行特权级,管理着包括中央处理器、内存和输入输出设备在内的所有物理资源。应用(Application)运行在低运行特权级,通过操作系统内核提供的调用接口对物理资源进行访问。在数据管理方面,操作系统内核通过文件系统管理着存储设备上的数据。文件系统模型一般提供打开文件、读写文件、控制文件和关闭文件等调用接口,应用通过这些调用接口对文件系统进行操作访问存取数据。例如在Unix或类Unix操作系统中,应用通过open、read、write、ioctl、close等调用接口与文件系统交互访问数据。
计算机虚拟化技术的出现打破了计算机硬件和操作系统之间的强耦合关系。计算机虚拟化技术把多个操作系统复用到一个物理计算机上同时运行,可以大幅度提高计算机的使用效率和节省硬件支出。被称为虚拟机监视器(VMM,Virtual Machine Monitor)的软件可以将物理计算机(包括中央处理器、内存和输入输出设备)虚拟为多个独立的虚拟机(VM,Virtual Machine),每个虚拟机都有自己的逻辑中央处理器、内存和输入输出设备,可以支持一个操作系统实例,这种运行在虚拟机监视器上的操作系统被称为客操作系统(GOS,GuestOperating System)。
计算机虚拟化技术最初出现和应用于在大型主机上,现在,虚拟机监视器技术已经发展了多种实现模型。就本发明相关联的存储资源和数据共享访问的技术范畴,可以按客操作系统实现输入输出的模型分为三类。下面分别简要说明之:
参见图1,第一种是基于主操作系统(HOS,Host Operating System)的模型,计算机硬件上已配备有一个操作系统,它被称为主操作系统。虚拟机监视器运行在主操作系统上,并支撑着一个或多个虚拟机(图示的结构只有一个虚拟机)。虚拟机上运行的操作系统被称为客操作系统。在图示的模型中,虚拟机监视器分配主操作系统下的存储卷或主操作系统文件系统下的文件作为虚拟存储设备提供给客操作系统使用。客操作系统对虚拟存储设备的输入输出操作是通过虚拟机监视器转化为主操作系统对存储卷或文件的访问操作来完成的。
参见图2,第二种模型不依赖于一个主操作系统,而是虚拟机监视器直接运行在计算机硬件上,并通常配备有外部存储设备的驱动程序、甚至文件系统,这样的虚拟机监视器又称为超级监视器(Hypervisor)。因为超级监视器直接运行在硬件上,所以也可称之为操作系统。在这个模型中,虚拟机监视器分配存储卷或文件系统下的文件作为虚拟存储设备提供给客操作系统使用。客操作系统对虚拟存储设备的输入输出操作是通过虚拟机监视器直接对其存储卷或文件的访问操作来完成的。这种基于超级监视器实现的虚拟化计算机系统可以获得比第一种基于主操作系统实现的虚拟化计算机系统更好的性能,但是因为超级监视器包含外部存储设备驱动程序,实现过程比较复杂。因此,后来又研制了能够较好地解决这个问题的第三种模型-混合模型。
参见图3,介绍第三种混合模型的组成结构:虚拟机监视器直接运行在计算机硬件上,负责虚拟机的监控和管理,并指派具有存储卷/文件系统和设备驱动程序的特权客操作系统对外部存储设备进行管理,这样可以简化虚拟机监视器的设计。在这个模型中,虚拟机监视器和特权客操作系统分配特权客操作系统管理下的存储卷或文件作为虚拟存储设备提供给非特权客操作系统使用。非特权客操作系统对虚拟存储设备的输入输出操作则通过虚拟机监视器转化为特权客操作系统对存储卷或文件的访问操作来完成。
虽然上述三种模型在结构组成和实现方式上有很大的不同,但是,在本发明技术范畴内,并不关心这些差异;而是将这三种模型的虚拟化计算机系统中的软件部分抽象为两种部件:主域和客域。在第一种基于主操作系统的模型里,主操作系统和虚拟机监视器控制着计算机硬件,管理着存储设备,提供虚拟机以支撑运行客操作系统,把存储卷或文件系统管理下的文件作为虚拟机的虚拟存储设备分配给客操作系统,本发明称主操作系统和虚拟机监视器为主域部件,而客操作系统依赖于主域的输入输出实现对存储数据的访问,本发明称客操作系统为客域部件。同样地,在第二种基于超级监视器的虚拟化环境中,超级监视器是主域部件,客操作系统是客域部件。在第三种混合模型中,虚拟机监视器和特权客操作系统组合在一起作为主域部件(以下本段落简称为主域),非特权客操作系统为客域部件(以下本段落简称为客域)。在图1、图2和3中,粗虚线的方框分别划定了上述三种虚拟化计算机系统模型中主域的结构组成范围。
在三种虚拟化计算机模型的分类之外,计算机虚拟化技术还有全虚拟化(Full-virtualization)和半虚拟化(Para-virtualization)之分。在传统的虚拟化技术中,客操作系统不需要修改就可以直接运行在虚拟机监视器上,或者说,客操作系统并不知道自己正运行在虚拟机监视器上,这样的虚拟化实现称为全虚拟化。与之对应的是半虚拟化:在半虚拟化中客操作系统和虚拟机监视器通过定义好的接口主动交互:客操作系统可以调用超级调用(Hypercall)陷入到虚拟机监视器,请求虚拟机监视器完成相应的服务操作;虚拟机监视器也可以给客操作系统发送异步消息,触发客操作系统的操作。通过客操作系统与虚拟机监视器的主动配合,半虚拟化可以获得比全虚拟化更好的性能。半虚拟化的一个重要应用是内存页面重映射(Page-remapping)。在半虚拟化中,虚拟机监视器可以根据虚拟机监视器本身需要或应客操作系统超级调用的请求,把物理内存页面映射到虚拟机监视器或某个客操作系统的地址空间上。比如客操作系统A要向另一个客操作系统B发送一个消息,客操作系统A先在自己的地址空间上的内存页面上准备数据,调用超级调用陷入到虚拟机监视器,要求虚拟机监视器把该内存页面重映射到客操作系统B,虚拟机监视器响应这一要求把该内存页面映射到客操作系统B的地址空间,并通知客操作系统B,客操作系统B就可以通过访问自己地址空间中的内存页面访问客操作系统A发送过来的数据了。因为基于半虚拟化的内存页面重映射机制而实现的域间通信通道能够有效地避免了数据在内存中的拷贝,这样不仅大大减少域间数据传送的数据拷贝开销,还可以获得非常高的域间通信速度,节省中央处理器的运算资源。
虚拟化技术的传统用途是计算机集成化(Consolidation),多个客操作系统实例和应用复用在一台物理计算机上同时运行,可以提高计算机硬件使用率;而且,各个客域之间以及客域与主域之间的数据是相互隔离的。然而,目前在各个域间数据共享的需求正在变得越来越强烈。在数据中心,实现各个域间对物理存储资源的共享访问,可以提高存储资源的灵活使用,减少数据重复,并实现数据的统一管理。此外,更广泛的需求来自个人计算机,个人计算机上的虚拟化主要是提高计算机的可管理性和安全性。通常整个个人计算机为同一组用户甚至一个用户所使用,个人计算机用户需要的是各个域间的配合和对数据的共享访问。
在基于主操作系统模型下使用共享目录(Shared folder)功能可以实现简单的客域对主域中数据的共享访问。通过客域调用预先定义的某个特殊指令(例如对虚拟机某特定的输入输出端口的操作)由虚拟机监视器捕获并响应的方式,建立起的主域-客域间的通信通道提供了主域和客域之间交互的基础,客域内核的文件重定向器通过这个通信通道向主域内运行的虚拟机监视器发送文件访问请求,虚拟机监视器应用响应这些请求,并通过主操作系统执行对本域内文件的访问操作,并把访问结果通过主域-客域间的通信通道回复给客域的文件重定向器。在这种方式中,主域中的虚拟机监视器应用实现的是客域对主域内文件访问的代理的功能,因为作为代理的虚拟机监视器应用运行在主域的用户态,数据的传递需要通过内核空间与用户空间的数据拷贝,性能比较差。
众所周知,在计算机虚拟化技术中,通常主域为每个客域配置独立的虚拟存储设备,而客域则独占式地访问该属于自己的独立的虚拟存储设备;这样各个域之间的数据相互独立。这种彼此独立的域间数据存在的缺点是:首先主域在创建虚拟机时,给客域分配的虚拟存储设备容量很难根据客域对存储的需求变化而对虚拟存储设备做相应的动态变化。再者,多个域之间很难实现对存储数据的共享访问。如果两个域运行的是不同的操作系统,异构的文件系统之间根本无法互操作,那么一个域就不能对另一个域的(虚拟)存储设备上的数据直接进行访问。即使两个域运行的是文件系统兼容的操作系统,因为主流的文件系统(如Windows NTFS、Linux Ext2/Ext3等)都是按照对存储设备进行独占式访问设计的,在虚拟化的计算机系统中仍然很难实现多个域对同一个(虚拟)存储设备的并发操作或对该存储设备中的数据实现共享访问。因此,许多业内科技人员就开始关注如何解决这个技术问题。

发明内容

有鉴于此,本发明的目的是提供一种在各个域间实现数据共享的虚拟化计算机系统和在该虚拟化计算机系统中实现数据共享的方法,本发明能够较好地解决现有技术中存在的不同域之间不能有效共享数据的问题,本发明系统中的主域管理着存储资源和数据,客域通过域间通道在文件系统层次上和主域进行交互,对主域管理下的数据实现共享访问。而且,本发明实现各个域间高效共享数据的虚拟化计算机系统和方法能够适用于上述基于主操作系统的虚拟化、基于超级监视器的虚拟化和基于混合模型的虚拟化的三种模型,适用范围广。
为了达到上述目的,本发明提供了一种在各个域间实现数据共享的虚拟化计算机系统,该系统包括:一个计算机硬件装置,该计算机硬件装置设有:一个或一组支持两个或两个以上运行特权级的中央处理器、设定容量的内存和包括存储设备在内的输入输出设备,所述存储设备是包括硬盘、软盘、闪存盘或光盘的直连式存储设备或网络存储设备;其特征在于:该系统还包括在所述计算机硬件装置上运行的软件单元,所述软件单元包括:一个主域部件、一个或多个客域部件、以及在主域部件与客域部件之间的域间通道部件,其中:
主域部件,直接运行在计算机硬件装置上,用于提供支撑虚拟机运行的虚拟机监控器;主域部件的内核包括:文件系统模块和共享数据服务器模块,其中文件系统模块用于管理计算机的存储设备及其中存储的数据,并完成对存储设备上的文件访问;共享数据服务器模块用于与客域部件的共享数据客户端模块进行交互,利用文件系统模块的文件访问功能,完成客域部件中的共享数据客户端模块对主域部件直接管理的存储设备及其中存储的数据的访问;
客域部件,运行在主域部件的虚拟机监视器所支撑的虚拟机上;客域部件的内核包括:共享数据客户端模块,该模块用做客域操作系统的文件系统重定向器,以响应来自该客域部件中的应用和其他内核子系统模块对存储设备上的文件访问请求,并通过域间通道与主域部件的共享数据服务器模块进行交互,利用主域部件的共享数据服务器模块和文件系统模块的文件访问功能,完成客域部件对主域部件直接管理的存储设备及其中存储的数据的间接访问;
主域部件与客域部件之间的域间通道部件,该部件是基于半虚拟化的内存页面重映射机制实现的域间通信通道,用于完成客域部件的共享数据客户端模块和主域部件的共享数据服务器模块之间的数据交互。
所述主域部件的共享数据服务器模块和文件系统模块都运行在该主域部件的操作系统的内核态;其中共享数据服务器模块按照文件系统向上提供的接口规范与文件系统模块交互,并通过文件系统模块管理存储设备和其中存储的数据;该共享数据服务器模块的文件访问例程经文件系统模块通过执行典型的打开、读、写、关闭文件的操作系统文件访问过程完成对文件的访问。
所述文件系统模块还包括对各个文件系统进行抽象的虚拟文件系统VFS模块。
所述客域部件的操作系统是通用的操作系统,所述每个客域部件都有一个运行在该客域操作系统的内核态的共享数据客户端模块;该共享数据客户端模块在客域提供本地文件系统的功能,向客域部件中的应用和其他内核子系统模块提供本地文件系统的服务接口,通过域间通道部件与主域部件中的共享数据服务器模块进行交互。
当所述虚拟化计算机系统中有多个客域部件时,所述主域部件和该多个客域部件之间建立的域间通道部件呈一对多的星形拓扑结构,且其中每个客域部件的共享数据客户端模块与主域部件的共享数据服务器模块之间的交互是彼此独立的。
所述共享数据服务器模块应保证每个客域部件对主域部件直接管理的存储设备和其中存储的数据的访问不能干涉其它客域部件对主域部件直接管理的存储设备和其中存储的数据的访问,以及某个客域部件的非法操作不能对主域部件和其他客域部件产生不利影响。
所述主域部件的内核数据访问栈的结构由最底层向上的排列顺序包括:存储设备驱动程序模块,存储卷管理模块,文件系统模块,共享数据服务器模块;内核数据访问栈的另一种结构包括文件系统模块和共享数据服务器模块,此时的文件系统模块是基于网络的文件系统模块或虚文件系统模块。
所述共享数据服务器模块设有两类数据结构:文件访问表和文件访问实例,前者是分别为与该共享数据服务器模块进行交互的各个共享数据客户端模块单独、对应地建立的,该文件访问表由多个节点组成,每个节点对应着所述共享数据客户端模块与该共享数据服务器模块之间的一个文件访问过程;后者用于记录每一个文件访问过程中的文件访问信息,对应于某个文件访问过程的文件访问表的节点直接含有或由指针间接指向对应于同一个文件访问过程的文件访问实例;所述文件访问表的节点和文件访问实例是在该共享数据客户端模块请求共享数据服务器模块打开文件时,由共享数据服务器模块建立;并在该共享数据客户端模块请求共享数据服务器模块关闭文件时,由共享数据服务器模块拆除。
当共享数据服务器模块响应某个共享数据客户端模块请求而打开文件、建立对应本次文件访问过程的文件访问表节点时产生一个标识符-检索索引号,用于标识该文件访问过程的文件访问表节点,并回复给该共享数据客户端模块;共享数据服务器模块用该检索索引号可以获得对应的文件访问实例,从而获得这次文件访问过程的文件访问信息;且在本次文件访问过程中,在共享数据服务器模块响应该共享数据客户端模块的请求关闭文件,并拆除对应这次文件访问过程中的文件访问表节点和文件访问实例之前,标识本次文件访问过程的检索索引号始终有效、且是唯一的。
为了达到上述目的,本发明还提供了一种在上述各个域间实现数据共享的虚拟化计算机系统中共享数据的方法,其特征在于:在主域部件的共享数据服务器模块和客域部件的共享数据客户端模块之间,藉由主域部件与客域部件之间的域间通道部件,通过基于半虚拟化的内存页面重映射机制实现文件访问过程,所述方法在某个共享数据客户端模块和共享数据服务器模块之间完成的一个文件访问过程包括下列操作步骤:
步骤1、共享数据客户端模块给共享数据服务器模块发送打开文件的请求;
步骤2、共享数据服务器模块收到该打开文件的请求后,通过主域部件的文件系统模块打开文件,并在对应该共享数据客户端模块的文件访问表中建立一个对应本次文件访问过程的节点和一个文件访问实例,再将该节点的检索索引号回复给该共享数据客户端模块;
步骤3、该共享数据客户端模块给共享数据服务器模块发送访问文件的请求,该请求中含有本次文件访问过程中共享数据服务器模块回复的检索索引号;
步骤4、共享数据服务器模块收到该共享数据客户端模块发送的访问文件的请求,获悉该访问文件请求的操作类型;
步骤5、共享数据服务器模块先判断该访问文件的操作请求是否为关闭文件,若不是,顺序执行后续步骤;若是,则跳转执行步骤7;
步骤6、共享数据服务器模块通过主域部件的文件系统模块执行文件访问操作,并将对应该共享数据客户端模块的文件访问表中对应本次文件访问过程的文件访问实例的文件访问信息进行更新,再把含有本次文件访问过程的检索索引号的文件访问结果回复给该共享数据客户端模块,然后返回步骤3;
步骤7、共享数据服务器模块通过主域部件的文件系统模块关闭文件,并在对应该共享数据客户端模块的文件访问表中拆除对应本次文件访问过程的文件访问表节点和文件访问实例,结束本次文件访问过程。
所述方法在某个共享数据客户端模块与共享数据服务器模块之间可以同时并发运行多个访问文件的操作,即每个共享数据客户端模块与共享数据服务器模块之间可以并行地运行多个文件访问过程。
所述方法在每个文件访问过程中,共享数据客户端模块通过循环执行步骤3~步骤6的操作对共享数据服务器模块所打开的文件进行多次访问。
所述方法在每个文件访问过程中,每个操作步骤都是基于当前状态的,共享数据服务器模块维护的对应所述文件访问过程的数据结构-文件访问实例中,含有对应该文件访问过程的状态信息。
所述方法在共享数据客户端模块和共享数据服务器模块之间实现文件访问过程之前和之后分别包括下列两个操作步骤:
步骤0、在共享数据客户端模块与共享数据服务器模块之间建立连接:共享数据客户端模块给共享数据服务器模块发送建立连接的请求,共享数据服务器模块收到该建立连接的请求,建立一个对应该共享数据客户端模块的文件访问表;
步骤8、拆除该共享数据客户端与共享数据服务器之间的连接:该共享数据客户端模块给共享数据服务器模块发送拆除连接的请求,共享数据服务器收到该拆除连接的请求,拆除对应该共享数据客户端模块的文件访问表。
本发明是一种在各个域间实现数据共享的虚拟化计算机系统和实现数据共享的方法,它从两个方面实现了高效的域间数据共享:一个是利用基于半虚拟化的内存页面重映射机制,实现了高速通信的域间通道,减少域间数据拷贝的开销;另一个是把域间通信两端的通信实体-主域部件的共享数据服务器模块和客域部件的共享数据客户端模块-分别实现在各自域的内核态,这样可以减少本域内的数据拷贝开销;这样域间数据共享的系统开销得到最大限度的降低,并藉此获得高性能。本发明的另一优势是:适应型强,能够适用于基于主操作系统的虚拟化、基于超级监视器的虚拟化和基于混合模型的虚拟化的三种虚拟化计算机系统模型。
本发明的其它优点是:计算机硬件装置的存储资源及其中存储的数据都在主域部件的统一管理下,有利于数据的维护。在客域部件中的应用能够如同访问本地文件系统一样透明地通过客操作系统的应用编程接口访问主域部件直接管理下的存储资源和数据。客域部件必须通过主域部件的监控,才能完成对数据的访问,这样可获得比较高的数据安全性。
总之,本发明提供了一种适用于多种计算机虚拟化模型的、实现各个域间存储资源和数据共享的系统和方法,使用本发明可以实现存储数据的统一管理,减低维护成本,而且,性能好、效率高。因此,本发明有很好的推广应用前景。

附图说明

图1是基于主操作系统实现的虚拟化计算机系统结构组成示意图。
图2是基于超级监视器实现的虚拟化计算机系统结构组成示意图。
图3是基于混合模型实现的虚拟化系统计算机系统结构组成示意图。
图4是本发明在各个域间实现数据共享的虚拟化计算机系统结构组成示意图。
图5是本发明实现数据共享的虚拟化计算机系统中的共享数据客户端模块与共享数据服务器模块进行信息交互时的结构组成示意图。
图6是本发明在各个域间实现数据共享的虚拟化计算机系统中实现数据共享的方法-基于文件访问过程安全完成数据访问的操作流程方框图。
图7是本发明包括建立连接和拆除连接的共享数据客户端模块与共享数据服务器模块之间基于文件访问过程完成数据访问的总体操作步骤方框图。
图8是基于主操作系统的虚拟化计算机系统实现数据共享的本发明实施例结构组成示意图。
图9是基于超级监视器的虚拟化计算机系统实现数据共享的本发明实施例结构组成示意图。
图10是基于混合模型的虚拟化计算机系统实现数据共享的本发明实施例结构组成示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明作进一步的详细描述。
参见图4,介绍本发明在各个域间实现数据共享的虚拟化计算机系统的硬件和软件两部分结构组成,其中硬件包括:一个计算机硬件装置300,该计算机硬件装置中设有一个或一组中央处理器301、设定容量的内存302和输入输出设备,在本发明范畴内,只关心输入输出设备中的存储设备303(如图4所示),它们通常是硬盘、软盘、闪存盘、光盘、直连式存储设备DAS(Direct Attached Storage)、或包括网络连接存储NAS(Network AttachedStorage)、存储区域网络SAN(Storage Area Network)、iSCSI的网络存储设备等。计算机硬件装置300的功能是运行软件单元,该软件单元包括主域部件200、客域部件100、以及在主域部件(以下本段落简称为主域)200与客域部件(以下本段落简称为客域)100之间的域间通道部件400。
下面分别介绍这些软件单元各个部件的功能和连接关系:
一个主域200直接运行在计算机硬件装置300上,用于提供支撑虚拟机运行的虚拟机监控器;主域200的内核包括:运行在中央处理器高运行特权级的文件系统模块202和共享数据服务器模块201,其中文件系统模块202管理着计算机硬件装置300的存储设备303以及其中存储的数据,并完成对存储设备303上的文件访问,即实现对文件访问的抽象。共享数据服务器模块201主要功能是与客域100的共享数据客户端模块102进行交互,利用文件系统模块202的文件访问功能,完成客域100中的共享数据客户端模块102对主域200直接管理的存储设备303及其中存储的数据的间接访问。
一个或多个客域100,客域100的操作系统是通用操作系统,它运行在主域200的虚拟机监视器所支撑的虚拟机上。每个客域100内核包括有一个共享数据客户端模块102和其它内核子系统模块103,其中共享数据客户端模块102运行在客域100操作系统的内核态,主要功能是作为客域操作系统的文件系统重定向器(Redirector),在客域提供本地文件系统的功能,向客域部件中的应用101和其它内核子系统模块103提供本地文件系统的服务接口,响应来自客域中的应用101和客域操作系统中其他内核子系统103对文件的访问请求,并通过域间通道400与主域的共享数据服务器模块201交互,利用主域共享数据服务器模块201和文件系统模块202的文件访问功能,完成客域100对主域200直接管理的存储设备303及其中存储的数据的间接访问。
主域与客域之间的域间通道部件400,该域间通道是基于半虚拟化的内存页面重映射机制实现的,用于实现客域的共享数据客户端模块102和主域的共享数据服务器模块201之间的数据交互。
本发明系统的重点部件是主域中的共享数据服务器模块201、客域中的共享数据客户端模块102、以及两者之间利用基于半虚拟化的内存页面重映射机制实现的域间通道部件400。下面参见图5,详细描述这三个组件。
在一个虚拟化的计算机系统中,通常有一个主域,一个或多个客域。主域和多个客域之间分别建立的多个域间通道部件则呈一对多的星形拓扑结构。因为其中每个客域的共享数据客户端模块与主域的共享数据服务器模块之间的交互都是彼此独立的,因此,在图5中只描述一个主域和一个客域的交互关系。
图5中,主域的内核数据访问栈的结构通常包括共享数据服务器模块201、文件系统模块202、存储卷管理模块203和存储设备驱动程序模块204。最底层的是存储设备驱动程序模块204,向上依次是操作系统对存储设备进行逻辑抽象的存储卷管理模块203,通过存储卷管理模块203,文件系统模块202可以方便地访问管理存储卷而不用关心存储设备的细节。有些计算机系统中没有设置独立的存储卷管理模块203,因此图5将该模块203标识为虚线框。有些主域的文件系统模块可以包括虚拟文件系统VFS(Virtual File System)模块,用于提供对多种文件系统的抽象。由于虚拟文件系统模块是操作系统中的成熟技术。在此不做赘述。在本发明范畴内,将文件系统和虚拟文件系统都视为文件系统。还有一种可能的主域的内核数据访问栈则主要包括共享数据服务器模块201和文件系统模块202,此时的文件系统模块通常是基于网络的文件系统(比如NFS、CIFS等)或者虚文件系统(Pseudo File System)。
主域中的共享数据服务器模块201与文件系统模块202运行在计算机中央处理器的高运行特权级,它们之间的数据交互完全遵守文件系统向上提供的接口规范。共享数据服务器模块201的文件访问例程经文件系统模块202通过执行典型的“打开文件、包括读、写、或控制的各项文件操作、关闭文件”的操作系统完成文件的访问过程。
每个客域都有一个运行在客域内核态的共享数据客户端模块102。一方面共享数据客户端102在客域提供的是本地文件系统的功能,它向客域中的应用模块101和其他内核子系统模块103提供文件系统重定向器的服务;另一方面共享数据客户端模块102通过域间通道400与主域中的共享数据服务器模块201进行交互,间接地利用主域的文件系统模块202完成对数据的访问,真实地完成其对客域提供的文件系统重定向器服务功能。
本发明客域的共享数据客户端模块102与主域的共享数据服务器模块201之间的交互是由一个个的文件访问过程组成,并且客域的共享数据客户端模块102与主域的共享数据服务器模块201之间通过基于半虚拟化的内存页面重映射机制实现的域间通道进行数据交互。针对客域对每一个存储文件的“打开-读/写/控制/...-关闭”文件的访问过程,共享数据客户端模块102与共享数据服务器模块201之间也需要同步完成一个文件访问过程。
在现代操作系统中,每个“打开文件-读/写/控制/...文件-关闭文件”的文件访问过程都是有状态的。例如下面所示的一个简单的文件访问过程:
char buf[64];
int fd=open(“/abc.txt”...);/*打开一个文件*/
read(fd,buf,64);            /*从打开的文件头读出64个字节*/
                       /*当前的读文件指针在文件偏移的64个字节处*/
read(fd,buf,64);    /*从当前的读文件指针处读出64个字节*/
close(fd);            /*关闭一个文件*/
它的每一步操作都是基于当前状态,比如第一个read操作是基于open完成后的状态,当前的读文件指针是在从文件开始的0字节偏移处,read读出来的是该文件的第0到第63个字节;第二个read操作则是基于第一个read完成后的状态,当前的读文件指针是在从文件开始的64字节偏移处,所以第二个read读出来的是文件的第64到第127个字节。反映到共享数据客户端模块102与共享数据服务器模块201的交互上,共享数据服务器模块201必须要有相应的数据结构来记录文件访问过程的不同状态信息。此外,由于本发明系统支持多个客域对主域管理的文件的并发访问,从整个系统的安全角度出发,共享数据服务器模块201必须保证每个客域的访问不能干涉到其它客域的访问,并且任何一个客域的非法操作不能威胁到主域和其他客域的正常运行。
为了满足上述要求,本发明系统在主域的共享数据服务器模块201为文件访问过程设置和维护两类数据结构-文件访问表201A和文件访问实例201B。通过文件访问实例201B,系统可以支持客域100对主域200直接管理的文件执行有状态的文件访问过程。通过文件访问表201A,系统可以保证不同客域对主域直接管理的文件的访问不会干涉到别的客域对主域直接管理的文件的访问。
参见图5,具体介绍共享数据服务器模块201的两类数据结构:文件访问表201A和文件访问实例201B。前者201A是共享数据服务器201为与其交互的每个共享数据客户端模块102单独、对应地建立的,图5中只画出一个客域的共享数据客户端模块102,共享数据服务器201中的文件访问表201A就是与该共享客户端102相对应的。如果系统中有多个客域,就会存在对应的多个共享数据客户端模块和文件访问表。虽然图5中只描述了存在一个客域的情形,但本发明不局限于一个客域,存在多个客域的概念是同样的。
文件访问表201A由多个节点组成,每个节点对应着共享数据客户端模块102与共享数据服务器模块201之间的一个文件访问过程。共享数据服务器模块201还用文件访问实例201B记录着每一个文件访问过程的文件访问信息,文件访问表201A的节点直接含有或由指针间接指向对应的文件访问过程中的文件访问实例201B。图中只描述了文件访问表201A的节点通过指针指向文件访问实例201B的情形,但本发明不局限于此。在每一个“打开-读/写/控制/...-关闭”的文件访问过程中,共享数据客户端模块102与共享数据服务器模块201通常会有多次交互,共享数据服务器模块201的文件访问表201A的节点的检索索引号有重要作用。共享数据服务器模块201在响应共享数据客户端模块102的请求打开文件、建立对应这次文件访问过程的文件访问表节点时,共享数据服务器模块201同时产生一个标识符-检索索引号,用于标识该文件访问过程中的文件访问表节点,并回复给该共享数据客户端模块102。共享数据服务器模块201用该检索索引号可以检索获得对应于这次文件访问过程的文件访问表节点,再通过该文件访问表节点,共享数据服务器模块201可以获得对应的文件访问实例,从而获得这次文件访问过程的文件访问信息。且在本次文件访问过程中,这个检索索引号作为在共享数据客户端模块102与共享数据服务器模块201交互过程中,标识这次文件访问过程的标识符,在共享数据服务器模块201响应共享数据客户端模块102请求关闭文件,并拆除对应这次文件访问过程中的文件访问表节点和文件访问实例之前,这个标识这次文件访问过程的检索索引号始终有效、且是唯一的。
举例来说,共享数据客户端模块102通过域间通道400发送读取64个字节的请求消息给共享数据服务器模块201,该请求消息中含有共享数据服务器模块201在处理共享数据客户端模块102打开文件请求时所回复的检索索引号。共享数据服务器模块102收到这个读文件请求后,根据该请求消息中的检索索引号可以确定找到对应的文件访问实例,从而获得对应这次文件访问过程的文件访问信息,接下来就可以通过文件系统模块202访问文件了。
本发明系统中,主域部件共享数据服务器模块201管理的文件访问表201A与共享数据客户端102是一一对应的,每个客域的共享数据客户端模块102通过含有检索索引号的访问请求消息的技术手段,只触发共享数据服务器模块201在为自己对应建立的文件访问表201A的范围内进行检索,并取得自身发起的文件访问过程所对应的文件访问实例201B,而不能看到或影响到其他客域与主域的文件访问过程,这样就能够保证各个客域与主域之间访问的独立性,共享数据服务器模块201也就保证了每个客域对主域直接管理的存储设备和其中存储的数据的访问不能干涉其它客域对主域直接管理的存储设备和其中存储的数据的访问,以及某个客域的非法操作不能对主域和其他客域产生不利影响。
再者,本发明方法在每个文件访问过程中,每个操作步骤都是基于当前状态的,共享数据服务器模块维护的对应该文件访问过程的数据结构-文件访问实例,含有该文件访问过程的状态信息。
基于如上所述,本发明还提供了一种基于文件访问过程实现共享数据客户端模块与共享数据服务器模块之间安全地完成数据访问的方法(参见图6),它是在主域的共享数据服务器模块和客域的共享数据客户端模块之间,藉由主域与客域之间的域间通道,通过基于半虚拟化的内存页面重映射机制实现文件访问过程,该方法在某个共享数据客户端模块和共享数据服务器模块之间完成的每一个文件访问过程包括下列操作步骤:
步骤1、共享数据客户端模块给共享数据服务器模块发送打开文件的请求;
步骤2、共享数据服务器模块收到该打开文件的请求后,通过主域部件的文件系统模块打开文件,并在对应该共享数据客户端模块的文件访问表中建立对应这次文件访问过程的节点和文件访问实例,再将该节点的检索索引号回复给该共享数据客户端模块;
步骤3、该共享数据客户端模块给共享数据服务器模块发送访问文件的请求,该请求中含有这次文件访问过程中共享数据服务器模块回复的检索索引号;
步骤4、共享数据服务器模块收到该共享数据客户端模块发送的访问文件的请求,获悉该访问文件请求的操作类型;
步骤5、共享数据服务器模块先判断该访问文件的操作请求是否为关闭文件,若不是,顺序执行后续步骤;若是,则跳转执行步骤7;
步骤6、共享数据服务器模块通过主域部件的文件系统模块执行文件访问操作,并将对应该共享数据客户端模块的文件访问表中对应这次文件访问过程的文件访问实例的文件访问信息进行更新,再把包含这次文件访问过程的检索索引号的文件访问结果回复给该共享数据客户端模块,然后返回步骤3;
步骤7、共享数据服务器通过主域的文件系统关闭文件,并在对应这个共享数据客户端的文件访问表中拆除对应这次文件访问过程的文件访问表节点和文件访问实例,结束本次文件访问过程。
图6中的步骤1-步骤7是一个共享数据客户端模块与共享数据服务器模块之间执行的一个文件访问过程,实际上,在一个共享数据客户端模块与共享数据服务器模块之间可以同时并发运行多个访问文件的操作,也就是一个共享数据客户端模块与共享数据服务器模块之间可以同时并行地运行多个文件访问过程。而在每一个文件访问过程中,共享数据客户端模块通过循环执行步骤3~步骤6的操作对共享数据服务器模块所打开的文件进行多次访问。
需要说明的是,主域中共享数据服务器模块管理的文件访问表与共享数据客户端模块是一一对应的关系,共享数据服务器模块可以预先分配文件访问表,更好的设计是根据共享数据客户端模块的需要,动态建立和拆除文件访问表,以优化资源使用。也就是,共享数据客户端模块给共享数据服务器模块发送建立连接的请求时,共享数据服务器模块才建立一个对应该共享数据客户端模块的文件访问表;共享数据客户端模块给共享数据服务器模块发送拆除连接的请求时,共享数据服务器模块就拆除对应这个共享数据客户端模块的文件访问表。参见图7,本发明在共享数据客户端模块和共享数据服务器模块之间实现文件访问过程之前和之后还可以分别包括建立连接和拆除连接的操作步骤:
步骤0、在共享数据客户端模块与共享数据服务器模块之间建立连接:共享数据客户端模块给共享数据服务器模块发送建立连接的请求,共享数据服务器模块收到该建立连接的请求,建立一个对应该共享数据客户端模块的文件访问表。
步骤1~步骤7、在该共享数据客户端模块与共享数据服务器模块之间进行交互,通过基于半虚拟化的内存页面重映射机制实现的域间通道完成文件访问过程。
步骤8、拆除该共享数据客户端与共享数据服务器之间的连接:该共享数据客户端模块给共享数据服务器模块发送拆除连接的请求,共享数据服务器收到该拆除连接的请求,拆除对应该共享数据客户端模块的文件访问表。
本发明已经进行了实施试验,由于本发明在各个域间实现数据共享的虚拟化计算机系统和方法能够适用于三种计算机虚拟化模型,因此,根据计算机的虚拟化模型的不同,本发明采用三个实施例分别进行试验实施,下面分别介绍之:
参见图8,在基于主操作系统的虚拟化计算机系统模型中,本发明的共享数据客户端模块实现在客操作系统的内核态,而主域的共享数据服务器模块实现在主操作系统的内核态;共享数据客户端模块和共享数据服务器模块通过基于半虚拟化实现的内存页面重映射机制实现的域间通道相互之间交换数据。
参见图9,在基于超级监视器的虚拟化计算机系统中,本发明的共享数据客户端模块也是实现在客操作系统的内核态,共享数据服务器模块与虚拟机监视器都运行在中央处理器的高运行特权级,共享数据客户端模块和共享数据服务器模块通过基于半虚拟化实现的内存页面重映射机制实现的域间通道相互之间交换数据。
参见图10,在基于混合模型的虚拟化计算机系统中,本发明的共享数据客户端模块实现在非特权客操作系统的内核态,共享数据服务器模块实现在特权客操作系统的内核态,共享数据客户端和共享数据服务器通过基于半虚拟化的内存页面重映射机制实现的域间通道相互之间交换数据。
试验实施的情况证明,本发明系统中的主域对存储资源和数据进行管理,客域通过域间通道在文件系统层次上和主域进行交互,对主域管理下的数据实现了高速共享访问。而且,本发明能适用于上述三种模型,适用范围广,实现了发明目的。