一种内存虚拟化的方法及装置的制造方法
【技术领域】
[0001]本发明涉及电子信息技术领域,尤其涉及一种内存虚拟化的方法及装置。
【背景技术】
[0002]目前,在使用虚拟机时,需要能使客户机操作系统看到的内存空间布局与在真实物理机器环境下相同,这就必须要对内存进行虚拟化。内存被虚拟化后,一般会包含多级地址空间映射,并形成地址映射层次,其中包括GVA (Guest Virtual Address,客户机虚拟地址)层、GPA (Guest Physical Address,客户机物理地址)层、HVA (Host Virtual Address,宿主机虚拟地址)层、HPA (Host Physical Address,宿主机物理地址)层。其中,HVA层到HPA层的映射则由宿主机操作系统维护,并记录在宿主机的Host页表中。并且在现有技术中常用影子页表技术实现映射关系的快速查找。例如:当虚拟机运行guest代码时,host硬件的页表基址寄存器指向一个影子页表,在影子页表中存储了 GVA层到HPA层的直接映射,对于影子页表的维护由虚拟机管理软件(Virtual Machine Monitor, VMM)完成。
[0003]但是,很多情况下需要随着具体运行环境的变化频繁地改变影子页表的中记载的地址映射关系,例如:客户机改变了 GVA层上的地址到GPA层上的地址之间的映射关系。这就需要通过宿主机的系统内核或加载VMM配套的内核模块,才能够实现对于影子页表的修改。因此在现有技术中对于影子页表的操作属于需要动用宿主机的系统内核的特权操作,又由于不同的宿主机经常会使用不同的操作系统或体系结构,对于不同的操作系统或体系结构的特权操作的方式也不相同,因此在一个宿主机上运行的基于影子页表技术的虚拟机,难以直接运行在另一个操作系统或体系结构不同的宿主机上,技术人员需要花费时间和精力来重新制定针对另一个操作系统或体系结构的给予影子页表技术的特权操作的方式,才能保证基于影子页表技术的虚拟机能够在另一个操作系统不同的宿主机上运行,限制了虚拟机在不同的系统平台上的迁移使用。
【发明内容】
[0004]本发明的实施例提供一种内存虚拟化的方法及装置,能够在需要修改映射关系时,避免使用宿主机的内核修改映射关系。
[0005]为达到上述目的,本发明的实施例采用如下技术方案:
[0006]第一方面,本发明的实施例提供一种内存虚拟化的方法,用于一种计算设备,所述计算设备至少包括内存和硬盘,所述内存的地址映射层次包括客户机虚拟地址(GVA)层、客户机物理地址(GPA)层、宿主机虚拟地址(HVA)层、宿主机物理地址(HPA)层,所述方法包括:
[0007]建立所述HVA层到硬盘的存储空间之间的映射关系;
[0008]为所述客户机的进程在所述HVA层中分配地址空间,并建立所述GVA层到所述HVA层中的被分配的地址空间之间的映射关系;
[0009]建立访存指令指向的所述HVA层中的被分配的地址空间上的地址到所述硬盘的存储空间之间的映射关系;
[0010]从所述宿主机获取目标数据,所述目标数据是由所述宿主机根据所述访存指令获取的数据。
[0011]结合第一方面,在第一方面的第一种可能的实现方式中,所述为所述客户机的进程在所述HVA层中分配地址空间,并建立所述GVA层到所述HVA层中的被分配地址空间之间的映射关系,包括:
[0012]确定所述GVA层上的地址为a ;
[0013]为所述客户机的进程分配所述HVA层上的地址空间,所述HVA层上的地址空间的起始地址为b,并建立所述GVA层上的地址a到所述HVA层上的地址b+a之间的映射关系。
[0014]结合第一方面或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,为所述客户机的进程分配的所述HVA层上的地址空间的起始地址为b,所述访存指令指向所述HVA层上的地址a+b ;
[0015]所述建立访存指令指向的所述HVA层中的被分配的地址空间上的地址与所述硬盘的存储空间之间的映射关系,包括:
[0016]确定所述访存指令指向的所述GVA层上的地址a,并根据所述GVA层到所述HVA层之间的映射关系,确定所述GVA层上的地址a对应的所述HVA层上的地址x ;
[0017]根据所述HVA层到所述硬盘的存储空间之间的映射关系,确定所述HVA层上的地址X对应的所述硬盘的存储空间上的地址Z ;
[0018]建立所述访存指令指向的所述HVA层上的地址a+b到所述硬盘的存储空间上的地址z之间的映射关系。
[0019]结合第一方面或第一方面的第一种或第二可能的实现方式,在第三种可能的实现方式中,在所述建立访存指令指向的所述HVA层中的被分配的地址空间上的地址与所述硬盘的存储空间之间的映射关系之前,还包括:
[0020]检测所述客户机的进程所对应的由所述GVA层到所述GPA层的映射关系是否改变;
[0021]若改变,则将为所述客户机的进程分配的所述HVA层的地址空间设置为不可访问。
[0022]结合第一方面或第一方面的第一种或第二可能的实现方式,在第四种可能的实现方式中,在所述建立访存指令指向的所述HVA层中的被分配的地址空间上的地址与所述硬盘的存储空间之间的映射关系之前,还包括:
[0023]检测所述客户机的进程所对应的由所述GVA层到所述GPA层的映射关系是否改变;
[0024]若改变,则确定发生改变的映射关系上的所述GVA层上的地址,并确定所述发生改变的映射关系上的所述GVA层的地址所对应的目标HVA层地址,所述目标HVA层地址是为所述客户机的进程分配的所述HVA层的地址空间上的地址;
[0025]将所述目标HVA层地址设置为不可访问。
[0026]结合第一方面或第一方面的第一种至第四种中的任意一种可能的实现方式,在第五种可能的实现方式中,所述方法还包括:
[0027]为所述客户机的至少两个进程分配所述HVA层上的同一段地址空间;
[0028]和/或为所述客户机的进程分配所述HVA层上的一段对应的地址空间,不同的所述客户机的进程对应的所述HVA层上的地址空间不相同。
[0029]第二方面,本发明的实施例提供一种内存虚拟化的装置,所述装置用于一种计算设备,所述计算设备包括了内存和硬盘,所述内存的地址映射层次包括客户机虚拟地址(GVA)层、客户机物理地址(GPA)层、宿主机虚拟地址(HVA)层、宿主机物理地址(HPA)层,所述装置包括:
[0030]第一映射建立模块,用于建立所述HVA层到硬盘的存储空间之间的映射关系;
[0031]地址分配模块,用于为所述客户机的进程在所述HVA层中分配地址空间,并建立所述GVA层到所述HVA层中的被分配的地址空间之间的映射关系;
[0032]第二映射建立模块,用于建立所述访存指令指向的所述HVA层中的被分配的地址空间上的地址到所述硬盘的存储空间之间的映射关系;
[0033]数据获取模块,用于从所述宿主机获取目标数据,所述目标数据是由所述宿主机根据所述访存指令获取的数据。
[0034]结合第二方面,在第二方面的第一种可能的实现方式中,所述地址分配模块包括:
[0035]地址确定单元,用于确定所述GVA层上的地址为a ;
[0036]地址分配单元,用于为所述客户机的进程分配所述HVA层上的地址空间,所述HVA层上的地址空间的起始地址为b,并建立所述GVA层上的地址a到所述HVA层上的地址b+a之间的映射关系。
[0037]结合第二方面或第二方面的第一种可能的实现方式,在第二种可能的实现方式中,为所述客户机的进程分配的所述HVA层上的地址空间的起始地址为b,所述访存指令指向所述HVA层上的地址a+b ;
[0038]所述第二映射建立模块包括:
[0039]指令分析单元,用于确定所述访存指令指向的所述GVA层上的地址a,并根据所述GVA层到所述HVA层之间的映射关系,确定所述GVA层上的地址a对应的所述HVA层上的地址X ;并根据所述HVA层到所述硬盘的存储空间之间的映射关系,确定所述HVA层上的地址X对应的所述硬盘的存储空间上的地址z ;
[0040]地址映射单元,具体用于建立所述访存指令指向的所述HVA层上的地址a+b到所述硬盘的存储空间上的地址z之间的映射关系。
[0041]结合第二方面或第二方面的第一种或第二可能的实现方式,在第三种可能的实现方式中,所述装置还包括:
[0042]第一检测模块,用于在建立所述访存指令指向的所述HVA层中的被分配的地址空间上的地址与所述硬盘的存储空间之间的映射关系之前,检测所述客户机的进程所对应的由所述GVA层到所述GPA层的映射关系是否改变;
[0043]第一禁用模块,用于若改变,则将为所述客户机的进程分配的所述HVA层的地址空间设置为不可访问。
[0044]结合第二方面或第二方面的第一种或第二可能的实现方式,在第四种可能的实现方式中,所述装置还包括:
[0045]第二检测模块,用于在建立所述访存指令指向的所述HVA层中的被分配的地址空间上的地址与所述硬盘的存储空间之间的映射关系之前,检测所述客户机的进程所对应的由所述GVA层到所述GPA层的映射关系是否改变;
[0046]第二禁用模块,用于若改变,则确定发生改变的映射关系上的所述GVA层上的地址,并确定所述发生改变的映射关系上的所述GVA层的地址所对应的目标HVA层地址,将所述目标HVA层地址设置为不可访问,所述目标HVA层地址是为所述客户机的进程分配的所述HVA层的地址空间上的地址。
[0047]结合第二方面或第二方面的第一种至第四种中的任意一种可能的实现方式,在第五种可能的实现方式中,所述地址分配模块,具体用于为所述客户机的至少两个进程分配所述HVA层上的同一段地址空间;和/或为所述客户机的进程分配所述HVA层上的一段对应的地址空间,不同的所述客户机的进程对应的所述HVA层上的地址空间不相同。
[0048]本发明实施例提供的一种内存虚拟化的方法及装置,能够建立所述HVA层到硬盘的存储空间之间的映射关系;为客户机的进程在HVA层中分配地址空间,并建立GVA层到HVA层中的被分配的地址空间之间的映射关系;建立访存指令指向的HVA层中的被分配的地址空间上的地址到硬盘的存储空间之间的映射关系;从宿主机获取目标数据。对于现有技术,本发明实施例利用了宿主机的硬盘上的文件作为中介,建立了由GVA层到HVA层,由HVA层到硬盘,由硬盘到HPA层之间的映射关系,从而建立了 GVA层到HPA层之间的映射关系,避免了直接建立HVA层到HPA层之间的映射关系。当客户机运行进程并发出访存指令时,可以通过这条映射关系,根据GVA层上的地址从HPA层获取访存指令所要获取的数据,避免了直接对HVA层到HPA层之间的映射关系进行操作,从而不需要修改内核就可以由宿主机从HPA层获取数据,因此本发明实施例运行客户机的进程的过程中,不需要直接对HVA层到HPA层的映射关系进行操作,从而不需要修改宿主机的操作系统,就能够实现虚拟机在不同的宿主机上使用并且不受宿主机的操作系统的影响,使得虚拟机在不同的系统平台上的迁移使用不再受到限制。
【附图说明】
[0049]为了更清楚地说明本发明实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
[0050]图1为本发明实施例提供的一种内存虚拟化的方法的流程图;
[0051]图2a为本发明实施例提供的一种内存虚拟化的方法的一种具体实现方式的流程图;
[0052]图2b、图2c为本发明实施例提供的