虚拟机内存的共享方法与计算机系统的制作方法

文档序号:6443307阅读:284来源:国知局

专利名称::虚拟机内存的共享方法与计算机系统的制作方法
技术领域
:本发明涉及一种可共享虚拟机中未使用内存的方法与一种使用该方法的计算机系统。
背景技术
:随着计算机硬件装置的成本越来越降低以及大型服务器的需求越来越高,虚拟机(VirtualMachine)也越来越被重视。虚拟机为一种接口,应用于一软件与计算机系统之间,并可提供此计算机系统的各种资源给上述软件使用。此软件通常为一操作系统,因此,操作系统可以通过虚拟机来存取计算机系统上的资源。然而,在一计算机系统上可以安装多个虚拟机,每个虚拟机上可安装不同的操作系统。举例来说,微软的windows操作系统与Iinux操作系统便可同时安装在一个计算机系统上不同的虚拟机中。另一方面,在开发新的操作系统时还可在一计算机系统上测试不同版本的操作系统,其中各个操作系统也被安装在不同的虚拟机上,当其中一个测试的操作系统发生错误时便不会导致整个计算机系统当机。另外,随着云端计算(CloudComputing)的应用越来越广,服务器的机动性(mobility)也越来越重要。而由于虚拟机能让操作系统与计算机系统之间的耦合关系被松绑,因此一个操作系统可以随着虚拟机动态的被移动到另外一个计算机系统,藉此平衡服务器的负载。然而,虽然理论上计算机系统上可以执行多个虚拟机,但是可执行的虚拟机数量还是会受到限制,其中一个限制的原因便是内存容量的问题。在一计算机系统上所配置的内存是有限的,若平均的将所有的内存分配给所执行的虚拟机,则每个虚拟机所能运用的内存便可能不足。然而,这些虚拟机中可能会使用到相同的程序代码或是数据(例如,window操作系统的核心程序),因此每一个虚拟机上都存有这些相同的数据。若能将这些虚拟机中相同的数据共享,使各个虚拟机只使用一份程序代码或数据于计算机系统的内存中,便能更有效的利用计算机系统的内存。其中一种共享内存的作法是,针对每个虚拟机中的每一个内存分页(memorypage),根据一个哈希函数(hashfunction)来计算出一个哈希值,并比对各个虚拟机中的内存分页是否有相同哈希值。若不同的虚拟机中存在相同的哈希值的内存分页,则这些内存分页便可能是存有相同的资料,可以进一步的共享。然而,此方法必须对每个虚拟机的每个内存分页都计算哈希值,所以非常的耗时。因此如何有效的共享虚拟机中的内存,为此领域研究人员所关心的问题。
发明内容本发明提出一种虚拟机内存的共享方法,此共享方法用于执行至少一个虚拟机的计算机系统中。此共享方法包括以下步骤。取得虚拟机所对应的内存映像图,此内存映像图存有所对应的虚拟机中内存页面的使用状态。根据虚拟机所对应的内存映像图,标记虚拟机上未被使用的内存页面为第一空闲页。以及,共享虚拟机中的第一空闲页。以另外一个角度来说,本发明还提出一种计算机系统,用以执行至少一个虚拟机。此计算机系统包括有内存单元、处理单元、内存控制单元。其中内存单元包括有多个物理内存页面,而处理单元耦接至该内存单元。内存控制单元则耦接至上述处理单元与内存单元,并用以取得上述虚拟机所对应的内存映像图,此内存映像图存有所对应的虚拟机中内存页面的使用状态。内存控制单元还用以根据虚拟机所对应的内存映像图,标记虚拟机上未被使用的内存页面为多个第一空闲页,并共享各虚拟机中的第一空闲页。图1为依照本发明第一实施例所绘示的计算机系统方块图。图2为依照本发明第一实施例所绘示的计算机系统与虚拟机的示意图。图3为依照本发明第一实施例的虚拟机内存共享方法的流程图。图4A为依照本发明第一实施例所绘示的第一空闲页的示意图。图4B为依照本发明第一实施例所绘示的一个虚拟机的内存页面的共享示意图。图5为依照本发明第二实施例的内存共享方法的流程图。图6为依照本发明第三实施例的内存共享方法的流程图。图7为依照本发明第三实施例所绘示的未使用内存分页的示意图。图8为依照本发明第三实施例所绘示的共享内存方法各步骤的时间轴示意图。主要组件符号说明100:计算机系统120:处理单元140:内存单元142、143、144、145:物理内存页面220:虚拟机监控程序230、240:虚拟机232、234、236、242、731、740:内存页面250,260:操作系统262、252:虚拟内存页面254、264:内存映像图234,244,720:第一空闲页730:第二空闲页S302、S303、S304、S305、S306、S602、S604、S606:虚拟机内存共享方法的各步骤S802:写入资料S804:呼叫nominate指令S806:呼叫share指令具体实施例方式为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。[第一实施例]图1为依照本发明第一实施例所绘示的计算机系统方块图。请参照图1,计算机系统100包括处理单元120、内存单元140、与内存控制单元160。处理单元120耦接至内存单元140,用以执行计算机系统100中的软件及轫体。处理单兀120例如为中央处理器(CentralProcessUnit,CPU)。内存单元140包含了多个物理内存页面142。内存单元140例如为动态随机存取内存(DynamicRandomAccessMemory,DRAM)或静态随机存取内存(StaticRandomAccessMemory,SRAM)。内存控制单元160耦接至处理单元120与内存单元140,用以控制内存单元140中的物理内存页面142。内存控制单兀160例如为微处理器(microprocessor),执行一非挥发性内存(未绘示)中的程序代码。计算机系统100上执行了多个虚拟机,而每个虚拟机上可执行一操作系统。请参照图2,图2为依照本发明实施例所绘示的计算机系统与虚拟机的示意图。虚拟机监控程序(VirtualMachineMonitor,VMM)220被执行在计算机系统100上,用以控制计算机系统100上所有的资源。其中计算机系统100的资源包括处理单元120、内存单元140、或是计算机系统100上的输入输出(inputoutput,10)装置(未绘示)的执行与使用。在本实施例中,VMM220建置了虚拟机230与虚拟机240,虚拟机230与虚拟机240便可以通过VMM220来存取上述计算机系统100的资源。然而虚拟机监控程序220可以提供数目更多或更少的虚拟机,本发明并不限制虚拟机的数目。VMM220可将计算机系统100上的资源分配给虚拟机230与虚拟机240。以内存为例,VMM220将内存单元140中的物理内存页面142分配给虚拟机230与虚拟机240,使虚拟机230中包含了多个内存页面232,并使虚拟机240中包含了多个内存页面242。值得注意的是,内存页面232与内存页面242为客端物理内存(guestphysicalmemory),也就是说内存页面232与内存页面242并不是实体的内存,仅是被对应至内存单元140中物理内存页面142的虚拟内存。另一方面,虚拟机230上安装了操作系统260,且虚拟机240上安装了操作系统250。如此一来,操作系统260便可以存取虚拟机230上的资源(例如,内存页面232),而操作系统250便可以存取虚拟机240上的资源(例如,内存页面242)。而操作系统260中也包含了多个虚拟内存页面262,操作系统260是用逻辑地址(logicaladdress)来存取这些虚拟内存页面262。当操作系统260用逻辑地址存取虚拟内存页面262时,此逻辑地址会被操作系统260转换为内存页面232的客端实体位置(guestphysicaladdress),而VMM220再将此客端实体位置转换为物理内存页面142的实体位置(physicaladdress)。操作系统260通过这样的转换关系来存取物理内存页面142。操作系统250也通过类似的转换用逻辑地址来存取物理内存页面142,在此便不再赘述。而操作系统260中的内存映像图(memorymap)264则存放着内存页面232的使用状态。在一实施例中,操作系统260为微软windows操作系统,内存映像图264则为页框值数据库(pageframenumberdatabase,PFNdatabase)。而页框值数据库为数组型态的数据结构,此数组的每一个元素中包括”Type”字段,而”Type”字段记录着对应的一个内存页面232的使用状态。而内存页面232的使用状态例如为已配置、或未使用等。在一实施例中,操作系统250为Linux操作系统,并使用对偶式内存管理算法(BuddySystemAlgorithm)来管理空闲页,内存映像图254是名为mem_map的数组数据结构。然而,本发明并不限制虚拟机上操作系统的种类,也不限制内存映像图的数据结构。图3为依照本发明实施例的虚拟机内存共享方法的流程图。请参照图3,在步骤S302中,本实施例的内存控制单元160取得对应各虚拟机的内存映像图在内存中的地址,并通过此地址得到内存映像图。详细的说,内存控制单元160取得对应于虚拟机230的内存映像图264,以及对应于虚拟机240的内存映像图254。在一实施例中,操作系统260为windows操作系统,而在windows操作系统中执行文件、动态链接数据库(dynamicallylinkedlibraries,DLLs)或核心映像文件(kernelimage)皆符合可携带可执行(portableexecutable,PE)的格式。内存控制单元160可以根据有PE格式的核心映像文件找到此核心映像文件在内存中的基准地址(baseaddress),并可以找到所对应的程序数据库(programdatabase,PDB)档案。内存控制单元160可以从上述程序数据库档案找到操作系统260中内存映像图264在内存中相对于核心映像文件的相对位置。内存控制单元160将上述的相对位置与基准位置结合,便可以得到内存映像图264的内存位置。然而,本发明并不限制内存控制单元160取得内存映像图的方式。在步骤S304中,内存控制单元160根据各虚拟机所对应的内存映像图,标记各虚拟机上未被使用的内存页面为多个第一空闲页。请参考图4A(a),图4A为依照本发明实施例所绘示的第一空闲页的示意图。举例来说,内存控制单元160根据内存映像表264取得内存页面232的使用状态,并将使用状态为”未使用”的内存页面标示为第一空闲页234;并且根据内存映像表254取得内存页面242的使用状态,将虚拟机240中未使用的内存页面标示为第一空闲页244。以下称第一空闲页时所指的是标记为第一空闲页的内存分页。值得注意的是,第一空闲页234对应至内存单元140中的物理内存页面143,而第一空闲页244对应至内存单元140中的物理内存页面144,因此,第一空闲页234与第一空闲页244分别占据了内存单元140不同的物理内存页面。值得注意的是,若第一空闲页234与第一空闲页244内的资料并没有被重置(即,全设为O),则即使经过哈希函数的运算,第一空闲页234与第一空闲页244很有可能会产生不同的哈希值,也就不能被公知的做法共享。在步骤S306中,内存控制单元160共享各虚拟机的第一空闲页。举例来说,内存控制单元160共享第一空闲页234与第一空闲页244,使得第一空闲页234与第一空闲页244会对应至相同的物理内存页面143(如图4A(b)所示)。在一实施例中,VMM220是名为Xen的开放原始码的虚拟机监控程序,其中提供了nominate与share的指令,用以共享内存。内存控制单元160可通过呼叫上述nominate与share的指令来共享内存。另一方面,在另一实施例中,内存控制单元160所执行的功能被实作为在虚拟机230上的程序代码,由处理单元120执行并呼叫上述的nominate与share指令来共享内存。本发明并不限制共享虚拟机上内存的方式。在其他实施例中,为了避免内存控制单元160在共享第一空闲页234与第一空闲页244的同时,虚拟机230(或虚拟机240)将数据写入第一空闲页234(或第一空闲页244),此种情形会使得内存控制单元160共享已被使用的内存分页,造成错误。因此,在本发明的一实施例中,内存控制单元160在步骤S306之前还会暂停各虚拟机对第一空闲页的存取。并且在步骤S306之后,内存空置单元160还会恢复各虚拟机对第一空闲页的存取。然而,本发明并不限制共享内存页面时虚拟机的个数,本发明也可用在只有建置一个虚拟机的计算机系统上。图4B为依照本发明一实施例所绘示的一个虚拟机的内存页面的共孚不意图。请参考图4B,在一实施例中,VMM220上只建置了一个虚拟机230,虚拟机230上执行操作系统260。内存控制单元160依照图3的流程,先取得虚拟机220上的内存映像图264(步骤S302)。接着在步骤S304中,内存控制单元160根据虚拟机所对应的内存映像图264,标记虚拟机230上未被使用的内存页面232为第一空闲页。例如,内存控制单元160标记未使用的内存页面234与内存页面264为第一空闲页。接着在步骤S306中,共享虚拟机230中的第一空闲页,使得内存页面232中不同的内存页面可映像至物理内存页面142中相同的物理内存页面。例如,内存控制单元160在共享内存页面234与内存页面236之后,使得内存页面234与内存页面236被映像至物理内存页面145。[第二实施例]请参考图5,图5为依照本发明第二实施例的内存共享方法的流程图。其中步骤S302.S304.S306已详细说明如上,在此便不再赘述。在步骤S303中,内存控制单元160暂停各虚拟机对内存页面的存取。也就是说,内存控制单元160暂停了虚拟机230对内存页面232的存取,也暂停了虚拟机240对内存页面242的存取。并且,在步骤S305中,内存控制单元恢复了各虚拟机对内存页面的存取。也就是说,内存控制单元160恢复了虚拟机230对内存页面232的存取,也恢复了虚拟机240对内存页面242的存取。如此一来,就可以避免内存控制单元160在进行步骤S304的同时,各虚拟机将数据写入内存页面所造成的错误。[第三实施例]请参考图6及图7,图6为依照本发明第三实施例的内存共享方法的流程图;图7为依照本发明第三实施例所绘示的未使用内存分页的示意图。其中步骤S302与步骤S304已详细说明如上,在此便不再赘述。然而,为了避免在步骤S304之后并且在内存控制单元160共享内存页面之前有数据写入至要共享的内存页面,本实施例还会根据内存映像图再次标记未使用的内存页面为第二空闲页并且使用只读(read-only)标记来确认内存页面未被写入过。举例来说,在步骤S304中,内存控制单元160根据虚拟机230所对应的内存映像图264,标记各虚拟机上未被使用的内存页面为多个第一空闲页720(如图7(a)所不)。接着在步骤S602中,内存控制单元160标记虚拟机上的内存页面为只读状态。具体来说,内存控制单元160是将被标记为第一空闲页的内存页面标记为只读状态。以虚拟机230为例,第一空闲页720皆被内存控制单元160标记为只读状态。除此之外,在步骤S602之后,若有被标记为只读状态的内存页面(例如,第一空闲页720)被写入时,内存控制单元160会取消被写入的内存页面的只读状态。接着在步骤S604中,内存控制单元160根据各虚拟机所对应的内存映像图,标记各虚拟机上未被使用的内存页面为多个第二空闲页。例如,内存控制单元160根据对应于虚拟机230的内存映像图264,将内存页面232中未使用的内存页面标示为第二空闲页730(如图7(b)所示)。值得注意的是,在内存控制单元执行步骤S304与步骤S604的时间之间,内存页面731被改写了,因此第二空闲页730与第一空闲页720的范围并不相同。并且,内存页面731的只读状态也会被取消。接着,在步骤S606中,内存控制单元160将共享各虚拟机中同时被标记为只读、第一空闲页以及第二空闲页的内存页面。举例来说,内存控制单元160检查第一空闲页720与第二空闲页730所包含的内存分页,得到重复的内存页面740(如图7(c)所示)。并且在共享内存页面时,内存控制单元160检查内存页面740是否仍是只读状态以判断内存页面740是否有遭到写入。如果内存页面740仍是只读状态则内存控制单元160保持其只读状态并共享内存页面740。在本实施例中,VMM220是名为Xen的开放原始码的虚拟机监控程序,其中提供了nominate与share的指令,用以共享内存。更详细的说,内存控制单元160是先呼叫nominate指令,取得内存页面的手柄(handle)。然后再根据两个内存页面的手柄来呼叫share指令,藉此共享此两内存页面(步骤S606)。也就是说步骤S606是通过呼叫share指令来实作,而nominate的指令必须在步骤S606之前完成。举例来说,请参照图4A,内存控制单元160先呼叫nominate指令取得被标记为第一空闲页234的各个内存分页的手柄,接着呼叫nominate指令取得虚拟机240里标记为第一空闲页244的各个内存分页的手柄。接着内存控制单元160再跟据标记为第一空闲页234的内存分页的手柄,以及被标记为第一空闲页244的内存分页的手柄来呼叫share指令,使得第一空闲页234与第一空闲页244的内存分页可以共享物理内存分页143。由于nominate与share的指令并不是被同时执行,因此会产生在nominate与share之间有数据写入的问题。请参考图8,图8为依照本发明第三实施例所绘示的共享内存方法各步骤的时间轴示意图。请同时参考图7与图8。如图8(a)所示的情况,内存控制单元160先执行步骤S304并将未使用的内存分页标示为第一空闲页720,接着虚拟机230写入数据到内存页面731(步骤S802)。然后在步骤S804中内存控制单元160执行nominate指令,但所得到的内存手柄会是标记为第一空闲页720的内存分页。也就是说,内存控制单元160所得到的手柄所指向的第一空闲页720中包含有一个已被使用的内存分页731。在这样的情况下,内存控制单元160在执行share指令时(步骤S806),会共享已被使用的内存分页731,造成错误。然而,在本实施例的共享方法中会确认两次未使用的内存分页并使用只读标记。本实施例如图8(b)所示,在内存控制单元160执行步骤S304之后,内存控制单元160会标记内存页面232为只读状态(步骤S602)。并且在步骤S802与S804以后,还会进行第二次的确认(步骤S604),标示非使用的内存页面为第二空闲页730。如此一来,在步骤S604中便会得到第二空闲页730,而不会包括已被写入的内存页面731。因此在步骤S606中内存控制单元160执行share指令以共享同时被标记为只读、第一空闲页以及第二空闲页的内存页面740时,并不会共享已被使用的内存分页731。在其他实施例中,内存控制单元160在图6的流程图中也可只执行步骤S302、S304、S604与S606。也就是说,内存控制单元160并不标记内存页面为只读状态(步骤S602);而在步骤S606中,内存控制单元160共享被标记为第一空闲页且也被标记为第二空闲页的内存页面。综上所述,本发明提出了一种虚拟机内存的共享方法与一种计算机系统。本发明由于所共享的内存是虚拟机中未被使用的内存分页,因此不需要经过哈希函数的比对,能够提升效率。另一方面,本发明在确认虚拟机中未被使用的内存分页时,会先暂停各虚拟机对内存分页的存取,或者是确认两次未使用的内存分页,使得可以解决在存取内存分页的同时有数据被写入的问题。以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。权利要求1.一种虚拟机内存的共享方法,用于一计算机系统,该计算机系统用以执行至少一虚拟机,该共享方法包括取得该至少一虚拟机所对应的一内存映像图,该内存映像图存有所对应的该至少一虚拟机中多个内存页面的使用状态;根据该至少一虚拟机所对应的该内存映像图,标记该至少一虚拟机上未被使用的该些内存页面为多个第一空闲页;以及共享该至少一虚拟机中的该些第一空闲页。2.如权利要求1所述的共享方法,该方法还包括根据该至少一虚拟机所对应的该内存映像图,标记该至少一虚拟机上未被使用的该些内存页面为多个第二空闲页;共享该至少一虚拟机中被标记为该些第一空闲页且也被标记为该些第二空闲页的该些内存页面。3.如权利要求2所述的共享方法,其中被标记为该些第二空闲页的该些内存页面的个数少于被标记为该些第一空闲页的该些内存页面的个数。4.如权利要求2所述的共享方法,其中根据该至少一虚拟机所对应的该内存映像图,标记该至少一虚拟机上未被使用的该些内存页面为该些第一空闲页的步骤之后还包括标记被标记为该些第一空闲页的该些内存页面为只读状态。5.如权利要求4所述的共享方法,其中标记被标记为该些第一空闲页的该些内存页面为只读状态的步骤之后还包括当被标记为只读状态且被标记为该些第一空闲页的该些内存页面被写入时,取消被写入的该些内存页面的只读状态。6.如权利要求5所述的共享方法,其中共享该至少一虚拟机中被标记为该些第一空闲页且也被标记为该些第二空闲页的该些内存页面的步骤还包括共享同时被标记为只读状态、第一空闲页以及第二空闲页的该些内存页面。7.如权利要求1所述的共享方法,其中根据该至少一虚拟机所对应的该内存映像图,标记该至少一虚拟机上未被使用的该些内存页面为该些第一空闲页的步骤之前还包括暂停该至少一虚拟机对该些内存页面的存取。8.如权利要求7所述的共享方法,其中根据该至少一虚拟机所对应的该内存映像图,标记该至少一虚拟机上未被使用的该些内存页面为该些第一空闲页的步骤之后还包括恢复该至少一虚拟机对该些内存页面的存取。9.如权利要求1所述的共享方法,其中共享方法该至少一虚拟机中的该些第一空闲页的步骤之前还包括暂停该至少一虚拟机对该些第一空闲页的存取。10.如权利要求9所述的共享方法,其中共享该至少一虚拟机中的该些第一空闲页的步骤之后还包括恢复该至少一虚拟机对该些第一空闲页的存取。11.一种计算机系统,用以执行至少一虚拟机,该计算机系统包括一内存单元,包括有多个物理内存页面;一处理单元,耦接至该内存单元;以及一内存控制单元,耦接至该处理单元与该内存单元;其中,该内存控制单元取得该至少一虚拟机所对应的一内存映像图,该内存映像图存有所对应的该虚拟机中多个内存页面的使用状态;该内存控制单元根据该至少一虚拟机所对应的该内存映像图,标记该至少一虚拟机上未被使用的该些内存页面为多个第一空闲页;以及该内存控制单元共享该至少一虚拟机中的该些第一空闲页。12.如权利要求11所述的计算机系统,其中该内存控制单元根据该至少一虚拟机所对应的该内存映像图,标记该至少一虚拟机上未被使用的该些内存页面为多个第二空闲页;以及该内存控制单元共享该至少一虚拟机中被标记为该些第一空闲页且也被标记为该些第二空闲页的该些内存页面。13.如权利要求12所述的计算机系统,其中被标记为该些第二空闲页的该些内存页面的个数少于被标记为该些第一空闲页的该些内存页面的个数。14.如权利要求12所述的计算机系统,其中该内存控制单元在标记该至少一虚拟机上未被使用的该些内存页面为该些第一空闲页之后,该内存控制单元还将被标记为该些第一空闲页的该些内存页面标记为只读状态。15.如权利要求14所述的计算机系统,其中该内存控制单元在标记被标记为该些第一空闲页的该些内存页面为只读状态之后,当被标记为只读状态且被标记为该些第一空闲页的该些内存页面被写入时,该内存控制单元取消被写入的该些内存页面的只读状态。16.如权利要求15所述的计算机系统,其中该内存控制单元在共享该至少一虚拟机中被标记为该些第一空闲页且也被标记为该些第二空闲页的该些内存页面时,该内存控制单元是共享同时被标记为只读状态、该些第一空闲页以及该些第二空闲页的该些内存页面。17.如权利要求11所述的计算机系统,其中在标记该至少一虚拟机上未被使用的该些内存页面为该些第一空闲页之前,该内存控制单元暂停该至少一虚拟机对该些内存页面的存取。18.如权利要求17所述的计算机系统,其中在标记该至少一虚拟机上未被使用的该些内存页面为该些第一空闲页之后,该内存控制单元恢复该至少一虚拟机对该些内存页面的存取。19.如权利要求11所述的计算机系统,其中在共享该至少一虚拟机中的该些第一空闲页之前,该内存控制单元暂停该至少一虚拟机对该些第一空闲页的存取。20.如权利要求19所述的计算机系统,其中在共享该至少一虚拟机中的该些第一空闲页之后,该内存控制单元恢复该至少一虚拟机对该些第一空闲页的存取。全文摘要本发明公开了一种虚拟机内存的共享方法,此共享方法用于在执行至少一个虚拟机的计算机系统上。此共享方法包括以下步骤取得虚拟机所对应的内存映像图,此内存映像图存有所对应的虚拟机中内存页面的使用状态;根据虚拟机所对应的内存映像图,标记虚拟机上未被使用的内存页面为空闲页;共享虚拟机中的空闲页。藉此,虚拟机可以共享未被使用的内存页面。本发明还提出了一种使用上述共享方法的计算机系统。文档编号G06F12/08GK103064796SQ201110442250公开日2013年4月24日申请日期2011年12月26日优先权日2011年10月18日发明者李翰林,姜瑞豪,阙志克,潘颖轩,曹伯瑞申请人:财团法人工业技术研究院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1