虚拟化计算环境中的动态内存管理的制作方法
【专利摘要】提供一种虚拟化计算环境中的内存管理方法,其中系统管理程序在主机上至少实现一虚拟机(VM),其中在所述VM上执行来宾操作系统(OS),并且在所述来宾OS上执行支持内存管理能力的应用。所述方法包括:响应于所述系统管理程序提交的请求,调用所述应用实现的第一内存管理器(java气球),以取消分配被分配给所述应用的内存以便供所述系统管理程序使用;以及响应于所述系统管理程序提交的请求,调用在所述来宾操作系统上实现的第二内存管理器(来宾气球),以便取消分配被分配给所述来宾OS的内存。
【专利说明】虚拟化计算环境中的动态内存管理
【技术领域】
[0001]所公开的主题一般地涉及动态内存分配,更具体地说,涉及用于控制与在虚拟化计算环境中执行的程序关联的已分配内存的大小的系统和方法。
【背景技术】
[0002]动态内存分配指在计算机程序运行时将内存分配给该程序。动态分配有助于高效地将有限的内存资源分配给同时执行的若干程序。可以从未使用内存池在所述程序之间分配内存,该内存池由称为堆的数据结构或其它合适的内存管理数据结构来管理。当程序不再需要内存时,将已分配的资源释放回堆(即,取消分配)。
[0003]虚拟化环境中的动态内存分配通常更具挑战性,因为内存资源在多个虚拟化组件(例如系统管理程序、一个或多个虚拟机(VM)和对应的来宾(guest)软件)之间共享。系统管理程序在主机上运行以便支持将资源分配给VM。VM允许来宾软件在主机上执行,而来宾软件无需知晓主机的底层硬件规范。换言之,VM为来宾软件提供平台无关的(B卩,虚拟)执行环境。
[0004]在虚拟化环境中,将用于来宾软件的内存空间分成通常为4KB的块(称为页)。还将物理内存(即,主机的内存)分成块,通常也为4KB。当主机的内存已满时,将未存在于主机内存中的虚拟页的数据存储在磁盘上。因此,可以存在三个内存层:来宾虚拟内存、来宾物理内存和主机物理内存。当动态分配内存时,每个来宾根据其配置的大小以及用于虚拟化的额外内存开销来使用内存。
[0005]来宾有时使用的内存多于主机物理上可用的内存。例如,各自被分配2GB内存的三个来宾可以在具有4GB物理内存的主机上运行。在这种情况下,可以说内存的过度使用量约为2GB。为了提高内存利用率,系统管理程序可以从空闲来宾软件取消分配内存,并将内存分配给需要更多内存的来宾软件。
[0006]当主机中的总内存量变得低时,来宾软件可能均不释放来宾物理内存,因为来宾OS无法检测到主机的内存不足。具体地说,Java虚拟机(JVM)(其是用于转换和执行Java字节代码的平台无关的执行环境)缺少自动机制以便在运行时从外部控制堆大小。在JVM中,当JVM启动时定义堆大小的最小和最大值。在运行时期间,堆大小通常增加,并且不可由JVM减小。
[0007]在上面的情形中,OS将物理内存的一部分分配给JVM,如对任何来宾进程所做的那样。如果JVM消耗的内存多于可用的物理内存,则OS开始将用户空间内存交换到磁盘或类似的外部设备。该过程明显降低JVM和整体系统的性能。在某些实现中,当多个VM在单个主机上运行并共享固定数量的物理内存时,系统管理程序可能过度使用内存以降低成本,方式为:使VM误以为它们具有的内存多于物理机上实际可用的内存。
[0008]由于JVM和系统管理程序之间没有协作的这一实际情况,当VM在内部运行JVM并且JVM的堆大小大于系统管理程序分配的物理内存时,将在主机或来宾级别发生交换,从而也会降低VM和整体主机的性能。在JVM性能和堆大小之间存在公知的权衡。尽管减小堆大小会降低JVM性能,但这种性能下降也比堆大小大于可用物理内存时导致的性能下降
小一个数量级。
【发明内容】
[0009]根据一个实施例,提供一种虚拟化计算环境中的内存管理方法,其中系统管理程序在主机上至少实现一虚拟机(VM),其中在所述VM上执行来宾操作系统(OS),并且在所述来宾OS上执行支持内存管理能力的应用。所述方法包括:响应于所述系统管理程序提交的请求,调用所述应用实现的第一内存管理器(java气球(java balloon)),以取消分配被分配给所述应用的内存以便供所述系统管理程序使用;以及响应于所述系统管理程序提交的请求,调用在所述来宾操作系统上实现的第二内存管理器(来宾气球),以便取消分配被分配给所述来宾OS的内存。
[0010]根据一个或多个实施例,提供一种包括一个或多个逻辑单元的系统。所述一个或多个逻辑单元被配置为执行与上面所公开的方法关联的功能和操作。在另一个实施例中,提供一种包括计算机可读存储介质的计算机程序产品,所述计算机可读存储介质具有计算机可读程序。当在计算机上执行时,所述计算机可读程序导致所述计算机执行与上面所公开的方法关联的功能和操作。
【专利附图】
【附图说明】
[0011]现在仅通过实例的方式参考附图描述本发明的优选实施例,这些附图是:
[0012]图1示出根据一个或多个实施例的示例性操作环境,其中在虚拟化计算环境中执行多个VM ;
[0013]图2是根据在来宾内部运行JVM的示例性实施例的用于在虚拟化计算环境中动态分配内存的数据结构的示例性框图;
[0014]图3A和3B是根据一个实施例的用于动态分配和取消分配内存的示例性方法的流程图;
[0015]图4A和4B是根据一个或多个实施例的其中可以运行所公开的系统和方法的硬件和软件环境的框图。
[0016]根据一个或多个实施例,不同图中的相同标号引用的特性、元素和方面表示相同、等效或类似的特性、元素或方面。
【具体实施方式】
[0017]参考图1,在一个实施例中,示出一个示例性运行时计算环境。如图所示,操作环境110包括在主机100上运行的系统管理程序112。系统管理程序112基本上用作主机100的操作系统(OS),并为一个或多个虚拟机(VM)提供运行时环境。因此,操作环境110支持虚拟化系统,其中可以在系统管理程序112之上执行实例VM120和130。
[0018]VMl20和130可以托管在来宾0S124或134之上运行的一个或多个来宾软件(例如应用126、136)。如图2中所示,可以在一个或多个来宾应用126、136和系统管理程序112之间分配内存。系统管理程序112从主机100上可用的空闲内存空间(未示出)将内存分配给VM120和130。来宾0S124将某些内存分配给用于应用126的内存管理数据结构。可以通过一个或多个预先内存保留(即,应用气球280)机制,保留所述内存管理数据结构中的某些内存,如下面进一步详细描述的那样。
[0019]参考图2,在一个示例性实施例中,应用126可以是Java虚拟机(JVM),并且内存管理数据结构可以实现为堆222,堆222包括堆空闲空间260中的可用内存池。可以使用在此称为“来宾气球操纵”的过程以使来宾0S124知晓主机100的低内存状态(即,系统管理程序112需要额外的内存)。在一个实施例中,当系统管理程序112需要回收内存时,系统管理程序112与VM气球驱动器230 (即,来宾气球驱动器)或应用气球280或这两者通信。取决于实现,系统管理程序112可以针对VM气球驱动器230设置目标气球大小,以使来宾0S124气球例如通过在来宾0S124中分配来宾物理页而膨胀。
[0020]在一种实现中,系统管理程序112根据一个或多个内存管理策略使来宾0S124气球膨胀(例如当系统管理程序112处于内存压力之下时)。通过使来宾气球膨胀,系统管理程序112管理内存分配以便达到已实施策略的目标(例如将内存压力从主机100转移到来宾0S124)。作为响应,VM气球驱动器230分配并可能固定(pin)来宾物理内存。来宾0S124判定OS是否需要对来宾物理内存执行页出,以便满足VM气球驱动器230分配请求。
[0021]如果来宾具有大量的空闲来宾物理内存,则使来宾气球膨胀不会引起分页,并且不会影响来宾性能。但是,如果来宾已处于内存压力之下,则来宾0S124确定将哪些来宾物理页页出到虚拟交换设备,以便满足气球驱动器的分配请求。因此,这种来宾气球操纵机制允许来宾0S124智能地确定对哪些页执行页出而无需系统管理程序112的参与。
[0022]如果上面的来宾气球操纵机制不足以回收内存,则可以强制系统管理程序112针对来宾0S124创建单独的交换文件,以便系统管理程序112可以直接将来宾物理内存换出到该交换文件,这会为其它来宾释放主机物理内存。在一个实施例中,可以使用第二气球机制(除去或不包括上面的来宾气球机制)从内存管理数据结构(例如在JVM的情况下为堆222)获得或释放内存,以便将内存分配或取消分配给正在运行的来宾0S124。
[0023]总而言之,在一个实施例中,可以使用该第二气球操纵机制将堆222中的某些内存分配给由来宾的操作系统(例如来宾0S124)实例化的气球对象。在下面,通过实例的方式将第二气球操纵机制公开为已实现,以便应用于在JVM上运行的来宾OS。因此,将气球对象称为java气球对象210 (参见图2)。
[0024]但是,值得指出的是,在此公开的概念和机制可以应用于虚拟机或JVM之外的虚拟化环境。因此,不应将权利要求的范围解释为狭义地适用于在此公开的、与JVM或其它示例性特性或机制(被实现为用于诸如堆222之类的JVM环境)结合的实施例。尽管如此,例如出于一致性目的,将第二气球机制称为java气球。因此,在此公开的概念适用于能够在内存管理数据结构(例如堆222)中管理内存分配的其它应用。
[0025]再次参考图1和2,java气球对象210的用途是充当占位符,以便JVM或JVM托管的进程不会使用分配给java气球对象210的内存空间。通过这种方式,如果系统管理程序112需要额外的内存(例如用于分配给在主机100上运行的其它VM或进程),则可以将java气球对象210所保留的内存空间释放给来宾0S124,并最终释放给系统管理程序112,如下面进一步详细描述的那样。
[0026]在一个实施例中,JVM通过为java气球对象210分配更多或更少的内存,使所谓的java气球膨胀或紧缩。在概念上,java气球指堆222的一部分,该部分被分配给java气球对象210以便为系统管理程序112保留内存空间或者提供来宾OS124未使用的内存220。堆空闲空间260的其余部分可用于由JVM (S卩,应用126)实例化的常规对象200以实现其它目的。
[0027]借助java气球机制,其它进程和应用无法访问被分配给java气球对象210的内存空间。此外,将java气球对象210保留的内存释放给系统管理程序112时,来宾0S124无法检查其配额。在一个实施例中,可以将java气球对象210固定在JVM中,以便例如不会由于垃圾收集过程而在堆222中移动java气球对象210。
[0028]在一个实施例中,java气球在JVM用户空间进程内部用作线程,并获得或释放java气球对象210以便更改堆大小。如前所述,前面讨论的来宾气球机制未针对运行基于Java的工作负载的VM解决内存过度使用问题,因为当JVM堆大小大于当前分配给VM的物理内存量时,来宾OS可能进行密集交换。
[0029]通过使用java气球(例如可选地与来宾气球机制结合),系统管理程序112可以控制分配给来宾0S124的物理内存量以及在来宾0S124上运行的应用126 (例如JVM进程)的内存要求。简言之,系统管理程序112使用java气球将JVM堆大小保持在VM物理内存大小以下。通过这种方式,在JVM内部使用java气球时,java应用代码或字节代码可以保持不变,如下面进一步详细描述的那样。
[0030]参考图2和3A,在一个实施例中,java气球可以由占用堆222中的空间的一个或多个java气球对象210 (例如基元字节数组)实现。当系统管理程序112请求从应用获得内存时,调用java气球(S310)。通过从应用内存空间获得内存(例如在堆中分配新的java气球对象210)并保持其引用,使java气球膨胀(S320)。在一个实施例中,例如使用java本机接口(JNI ),可以将java气球对象210固定在内存中以防止垃圾收集过程移动java气球对象210。
[0031]可以使用过程或系统调用监视是否可以将分配给java气球对象210的内存释放给来宾0S124 (S330)。在一种实现中,可以使用对象的本机引用(例如虚拟地址)向来宾0S124通知不再需要对应于java气球对象210的内存。例如,使用Linux中可用的madviseO系统调用,可以将内存返回给来宾0S124 (S340)。根据上面的过程(即,S320到S340)使java气球膨胀之后,可以使用来宾0S124的VM气球驱动器230,通过使来宾气球膨胀从来宾OS 124获得内存(S350 )。
[0032]与图3A相反,图3B示出根据一个实施例的方法,所述方法关于系统管理程序112不再需要内存时,如何将内存返回给来宾0S124。如图所示,在使java气球紧缩之前,系统管理程序112可以调用来宾0S124的VM气球驱动器230以使来宾气球紧缩(S360),如下面进一步详细描述的那样。
[0033]在一个实施例中,系统管理程序112可以请求java气球将分配给java气球对象210的内存返回给应用内存空间(例如堆222) (S370)。
[0034]系统管理程序112调用java气球以使释放给上面所公开的来宾0S124的内存紧缩,并将该内存转移到JVM堆222。当java气球膨胀时,java气球检查是否将内存释放给来宾0S124 (S380)。如果是,则从来宾0S124获得分配给java气球对象的内存(S390)。Java气球释放对java气球对象的任何引用,以便来宾0S124将这些对象视为空闲空间,并可以在应用空闲内存空间中将它们用于其它用途(S395)。[0035]在下面,参考在Linux OS上的具有嵌入式java气球的JVM中实现的示例性实施例,进一步详细公开与java气球膨胀和紧缩关联的过程。在此类实现中,将应用入口点作为运行时参数传递给JVM。可以使用接收原始入口点作为命令行参数的新入口点来更改入口点。新入口点启动负责创建具有初始大小(可以指定为命令行参数)的java气球的守护线程,然后启动原始入口点的执行。守护线程在JVM进程的生命周期内保持活动状态,并等待外部请求以增加或减小java气球大小。这可以使用TCP套接字或任何其它进程通信机制来完成。每次守护线程接收到请求时,它通过释放或获得新对象而相应地使java气球膨胀或紧缩。
[0036]使java气球膨胀-当气球守护进程接收到使java气球膨胀的请求时,它开始创建新对象直到java气球达到对应的大小。例如,如果气球大小为100MB,并且守护进程接收到使其膨胀为300MB的请求,则守护进程创建在堆中占用200MB的新对象并保持引用。这些对象例如可以是基元字节数组。然后,使用JNI服务,将对象固定在内存中(例如调用GetPrimitiveArrayCritical)。最后,例如针对 Linux 调用具有 MADV_DONTNEEDED 标志的madvise系统调用,将对应的内存释放给OS。
[0037]使java气球紧缩-当气球守护进程接收到使java气球紧缩的请求时,它例如针对Linux调用具有MADV_N0RMAL标志的madvise系统调用,从OS回收对应数量的内存。然后守护进程取消固定对应的对象(例如调用Re I easePrimi t iveArrayCr i t i cal)。释放对对应对象的引用,同时允许JVM垃圾收集器找到这些对象并将它们视为空闲空间。
[0038]如果JVM不支持长期固定,则上面的细节可能有所变化。例如,如果JVM不支持长期固定但支持禁用压缩,则可以启动JVM而没有压缩,并且java气球不会固定对象。如果JVM既不支持长期固定也不支持禁用压缩,则java气球不会固定对象,也不会针对该对象通知OS。一段时间之后,java气球对象被压缩并保持在堆中的恒定位置。OS然后检测到未使用对应于java气球对象的页,并将它们换出到磁盘。
[0039]上面的方法可以适用于其它非JVM环境和程序,这些环境和程序实现它们自己的内存管理,例如使得(I)程序允许在相同内存上下文(例如插件)下运行模块/代码,(2)程序公开接口以便获得和释放内存,或者(3)程序公开接口以便与外部实体通信。如果上面的可选条件不存在,则可以将气球机制与内置的自治策略一起使用以便控制气球大小。
[0040]在不同的实施例中,所要求保护的主题可以实现为硬件和软件元素的组合,或者备选地完全以硬件形式或完全以软件形式实现。此外,在此公开的计算系统和程序软件可以包括受控计算环境,其可以根据执行的硬件组件或逻辑代码提供,这些硬件组件或逻辑代码用于执行实现在此构想的结果的方法和过程。当由通用计算系统或机器执行时,所述方法和过程将通用机器转换为专用机器。
[0041]参考图4A和4B,根据一个示例性实施例的计算系统环境可以包括硬件环境1110和软件环境1120。硬件环境1110可以包括逻辑单元、电路或其它机器和设备,它们为软件环境1120的组件提供执行环境。反过来,软件环境1120可以为硬件环境1110的各种组件提供执行指令,包括底层操作设置和配置。
[0042]参考图4A,在此公开的应用软件和逻辑代码可以以计算机可读代码的形式实现,计算机可读代码在由示例性硬件环境1110表示的一个或多个计算系统上执行。如图所示,硬件环境1110可以包括处理器1101,其通过系统总线1100耦合到一个或多个存储元件。存储元件例如可以包括本地存储器1102、存储介质1106、高速缓冲存储器1104或其它计算机可用或计算机可读介质。在本公开的上下文中,计算机可用或计算机可读存储介质可以包括任何可以用于包含、存储、发送、传播或传输程序代码的可记录制品。
[0043]计算机可读存储介质可以是电、磁、光、电磁、红外线或半导体介质、系统、装置或器件。计算机可读存储介质还可以以传播介质实现(但不限于传播介质),直至这种实现被视为法定主题的程度。计算机可读存储介质的实例可以包括半导体或固态存储器、磁带、可移动计算机盘、随机存取存储器(RAM)、只读存储器(ROM)、硬磁盘、光盘或载波(如果适用)。光盘的当前实例包括光盘-只读存储器(⑶-ROM)、光盘-读/写(⑶-R/W)、数字视频盘(DVD )、高清晰度视频盘(HD-DVD )或Blue-ray?盘。
[0044]在一个实施例中,处理器1101将可执行代码从存储介质1106加载到本地存储器1102。高速缓冲存储器1104通过提供临时存储优化处理时间,这种临时存储有助于减少加载代码以便执行的次数。一个或多个用户接口设备1105(例如键盘、指点设备等)和显示屏1107例如可以直接或通过中间I/O控制器1103耦合到硬件环境1110中的其它元件。可以提供通信接口单元1108 (例如网络适配器),以使硬件环境1110能够通过中间专用或公共网络(例如因特网)与本地或远程定位的计算系统、打印机和存储器件通信。有线或无线调制解调器和以太网卡是网络适配器的几种示例性类型。
[0045]值得指出的是,在某些实现中,硬件环境1110可能不包括上面的部分或全部组件,或者可能包括额外组件以提供补充功能或效用。取决于构想的使用和配置,硬件环境1110可以是台式或膝上型计算机,或者是可选地包含在嵌入式系统中的其它计算设备,例如机顶盒、个人数字助理(PDA)、个人媒体播放器、移动通信单元(例如无线电话),或者是具有信息处理或数据存储能力的其它类似的硬件平台。
[0046]在某些实施例中,通信接口 1108用作数据通信端口,以便通过发送和接收数字、电、电磁或光信号提供与一个或多个计算系统通信的手段,这些信号承载表示各种类型信息(包括程序代码)的模拟或数字数据流。通信可以通过本地或远程网络建立,或者备选地通过空气传输或其它介质传输(包括但不限于载波传播)建立。
[0047]如在此所提供的,根据本质上示例性的逻辑或功能关系定义在所示硬件元素上执行的所公开的软件元素。但是,应当指出,通过所述示例性软件元素实现的相应方法还可以例如通过配置和编程的处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)和数字信号处理器(DSP)而编码在所述硬件元素中。
[0048]参考图4B,软件环境1120通常可以分为两类,包括在一个或多个硬件环境1110上执行的系统软件1121和应用软件1122。在一个实施例中,在此公开的方法和过程可以实现为系统软件1121、应用软件1122或它们的组合。系统软件1121可以包括诸如操作系统(OS)或信息管理系统之类的控制程序,它们指示硬件环境1110中的一个或多个处理器1101 (例如微控制器)如何运行和处理信息。应用软件1122可以包括但不限于程序代码、数据结构、固件、驻留软件、微代码,或者可以由处理器1101读取、分析或执行的任何其它形式的信息或例程。
[0049]换言之,应用软件1122可以实现为程序代码,其以计算机可用或计算机可读存储介质的形式嵌入在计算机程序产品中,该介质提供程序代码以便由计算机或任何指令执行系统使用或者与其结合使用。此外,应用软件1122可以包括一个或多个计算机程序,这些计算机程序在从存储介质1106加载到本地存储器1102之后,在系统软件1121之上执行。在客户端-服务器体系结构中,应用软件1122可以包括客户端软件和服务器软件。例如,在一个实施例中,客户端软件可以在客户端计算系统上执行,该客户端计算系统不同于并且独立于执行服务器软件的服务器计算系统。
[0050]软件环境1120还可以包括浏览器软件1126以便访问通过本地或远程计算网络提供的数据。此外,软件环境1120可以包括用户接口 1124 (例如图形用户接口(⑶I))以便接收用户命令和数据。有必要重申,上面描述的硬件和软件体系结构和环境用于实例目的。因此,可以在任何类型的系统体系结构、功能或逻辑平台或处理环境上实现一个或多个实施例。
[0051]还应当理解,逻辑代码、程序、模块、过程、方法,以及每种方法的相应过程的执行顺序完全是示例性的。取决于实现,过程或任何底层子过程和方法可以以任何顺序执行或同时执行,除非本公开中另有所指。此外,除非明确地另有所指,否则本公开的上下文中的逻辑代码定义并不与任何特定程序设计语言相关或限于任何特定程序设计语言,并且可以包括一个或多个模块,它们可以在分布式、非分布式、单处理或多处理环境中的一个或多个处理器上执行。
[0052]所属【技术领域】的技术人员知道,软件实施例可以包括固件、驻留软件、微代码等。包括软件或硬件或者组合软件和硬件方面的某些组件在此通常可以统称为“电路”、“模块”或“系统”。此外,所公开的主题可以实现为包含在一个或多个计算机可读存储介质中的计算机程序产品,这些介质在其中包含计算机可读程序代码。可以使用一个或多个计算机可读存储介质的任意组合。计算机可读存储介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是一但不限于一电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者上述的任意合适的组合。
[0053]在此文档的上下文中,计算机可读存储介质可以是任何能够包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。计算机可读信号介质可以包括例如在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读程序代码。这种传播的数据信号可以采用多种形式,包括一但不限于一电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
[0054]计算机可读存储介质上包含的程序代码可以用任何适当的介质传输,包括一但不限于一无线、有线、光缆、RF等等,或者上述的任意合适的组合。可以以一种或多种程序设计语言的任意组合来编写用于执行所公开的操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语目一诸如Java、Smalltalk、C++等,还包括常规的过程式程序设计语言一诸如“C”语言或类似的程序设计语言。
[0055]程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络一包括局域网(LAN)或广域网(WAN) —连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。[0056]将参考根据实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图公开某些实施例。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用机器或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。
[0057]也可以把这些计算机程序指令存储在计算机可读存储介质中,这些指令使得计算机、其它可编程数据处理装置、或其它设备以特定方式工作,从而,存储在计算机可读存储介质中的指令就产生出包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的指令的制造品(article of manufacture)。
[0058]也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令提供实现流程图和/或框图中的一个或多个方框中规定的功能/动作的过程。
[0059]附图中的流程图和框图显示了根据不同实施例的系统、方法和计算机程序产品的可能实现的体系结构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能可以以不同于附图中所标注的顺序发生。
[0060]例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0061]在此参考一个或多个特性或实施例提供了所要求保护的主题。所属【技术领域】的技术人员将认识到并知道,尽管在此提供了示例性实施例的详细性质,但是可以向所述实施例应用更改和修改而不会限制或偏离原本预期的范围。在此提供的实施例的这些和各种其它改变和组合,均在权利要求及其全部等效物限定的所公开的主题的范围之内。
【权利要求】
1.一种虚拟化计算环境中的内存管理方法,其中系统管理程序在主机上至少实现一虚拟机“VM”,其中在所述VM上执行来宾操作系统“OS”,并且在所述来宾OS上执行支持内存管理能力的应用,所述方法包括: 响应于所述系统管理程序提交的请求,调用由所述应用实现的第一内存管理器“java气球”,以取消分配被分配给所述应用的内存以便供所述系统管理程序使用;以及 响应于所述系统管理程序提交的请求,调用在所述来宾操作系统上实现的第二内存管理器“来宾气球”,以取消分配被分配给所述来宾OS的内存。
2.根据权利要求1的方法,其中调用所述第一内存管理器包括从分配给所述应用的内存空间获得内存。
3.根据权利要求2的方法,其中调用所述第一内存管理器进一步包括保持对从分配给所述应用的所述内存空间获得的内存的引用。
4.根据权利要求3的方法,其中调用所述第一内存管理器进一步包括监视是否可以将分配给与所述第一内存管理器“java气球”关联的第一内存管理数据结构的内存释放给所述来宾OS。
5.根据权利要求4的方法,还包括将分配给与所述第一内存管理器“java气球”关联的所述第一内存管理数据结构的内存释放给所述来宾OS。
6.根据权利要求4的方法,还包括调用所述第二内存管理器“来宾气球”以便从所述来宾OS获得内存。
7.根据权利要求1的方法,其中调用所述第二内存管理器“来宾气球”包括调用所述来宾OS以便从分配给所述第一内存管理器“java气球”的内存来将内存返回给所述应用。
8.根据权利要求 7的方法,还包括监视所述第一内存管理器“java气球”是否已将内存释放给所述来宾OS。
9.根据权利要求8的方法,其中如果所述第一内存管理器“java气球”已将内存释放给所述来宾OS,则从来宾OS再次获得内存释放。
10.根据权利要求9的方法,还包括:所述第一内存管理器“java气球”释放对分配给与所述第一内存管理器关联的对象的内存的引用,使得所述应用可以使用关联的内存空间。
11.一种虚拟化计算环境中的内存管理系统,其中系统管理程序在主机上至少实现一虚拟机“VM”,其中在所述VM上执行来宾操作系统“OS”,并且在所述来宾OS上执行支持内存管理能力的应用,所述系统包括: 一逻辑单元,其用于响应于所述系统管理程序提交的请求,调用由所述应用实现的第一内存管理器,以取消分配被分配给所述应用的内存以便供所述系统管理程序使用;以及 一逻辑单元,其用于响应于所述系统管理程序提交的请求,调用在所述来宾操作系统上实现的第二内存管理器,以取消分配被分配给所述来宾OS的内存。
12.根据权利要求11的系统,其中调用所述第一内存管理器包括从分配给所述应用的内存空间获得内存。
13.根据权利要求12的系统,其中调用所述第一内存管理器进一步包括保持对从分配给所述应用的所述内存空间获得的内存的引用。
14.根据权利要求13的系统,其中调用所述第一内存管理器进一步包括监视是否可以将分配给与所述第一内存管理器关联的第一内存管理数据结构的内存释放给所述来宾OS。
15.根据权利要求14的系统,还包括将分配给与所述第一内存管理器关联的所述第一内存管理数据结构的内存释放给所述来宾OS。
16.根据权利要求14的系统,还包括调用所述第二内存管理器以便从所述来宾OS获得内存。
17.根据权利要求11的系统,其中调用所述第二内存管理器包括调用所述来宾OS以便从分配给所述第一内存管理器的内存来将内存返回给所述应用。
18.根据权利要求17的系统,还包括监视所述第一内存管理器“java气球”是否已将内存释放给所述来宾OS。
19.根据权利要求18的系统,其中如果所述第一内存管理器已将内存释放给所述来宾OS,则从来宾OS再次获得内存释放。
20.根据权利要求19的系统,还包括:所述第一内存管理器释放对分配给与所述第一内存管理器关联的对象的内存的引用,使得所述应用可以使用关联的内存空间。
21.一种包括计算机可读存储介质的计算机程序产品,所述计算机可读存储介质具有计算机可读程序,其中提供一种虚拟化计算环境中的内存管理系统,其中系统管理程序在主机上至少实现一虚拟机“VM”,其中在所述VM上执行来宾操作系统“OS”,并且在所述来宾OS上执行支持内存管理能力的应用,并且其中当在计算机上执行时,所述计算机可读程序导致所述计算机执行以下操作: 响应于所述系统管理程序提交的请求,调用由所述应用实现的第一内存管理器,以取消分配被分配给所述应用的内存以便供所述系统管理程序使用;以及 响应于所述系统管理程序提交的请求,调用在所述来宾操作系统上实现的第二内存管理器,以取消分配被分配给所 述来宾OS的内存。
22.根据权利要求21的计算机程序产品,其中调用所述第一内存管理器包括从分配给所述应用的内存空间获得内存。
23.根据权利要求22的计算机程序产品,其中调用所述第一内存管理器进一步包括保持对从分配给所述应用的所述内存空间获得的内存的引用。
24.根据权利要求23的计算机程序产品,其中调用所述第一内存管理器进一步包括监视是否可以将分配给与所述第一内存管理器关联的第一内存管理数据结构的内存释放给所述来宾OS。
25.根据权利要求24的计算机程序产品,其中将分配给与所述第一内存管理器关联的所述第一内存管理数据结构的内存释放给所述来宾OS。
【文档编号】G06F12/08GK103430159SQ201280013030
【公开日】2013年12月4日 申请日期:2012年3月9日 优先权日:2011年3月13日
【发明者】A·戈登, M·希奈斯, D·M·达席尔瓦, S·本耶胡达 申请人:国际商业机器公司