CN112231238A - 使用存储器压缩来减少存储器提交开销 - Google Patents

使用存储器压缩来减少存储器提交开销 Download PDF

Info

Publication number
CN112231238A
CN112231238A CN202011112834.3A CN202011112834A CN112231238A CN 112231238 A CN112231238 A CN 112231238A CN 202011112834 A CN202011112834 A CN 202011112834A CN 112231238 A CN112231238 A CN 112231238A
Authority
CN
China
Prior art keywords
memory
program
commit
amount
pages
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202011112834.3A
Other languages
English (en)
Other versions
CN112231238B (zh
Inventor
Y·M·巴克
M·伊甘
L·王
A·U·基山
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Priority to CN202011112834.3A priority Critical patent/CN112231238B/zh
Publication of CN112231238A publication Critical patent/CN112231238A/zh
Application granted granted Critical
Publication of CN112231238B publication Critical patent/CN112231238B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0615Address space extension
    • G06F12/0623Address space extension for memory modules
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • G06F12/0261Garbage collection, i.e. reclamation of unreferenced memory using reference counting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/253Centralized memory
    • G06F2212/2532Centralized memory comprising a plurality of modules
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/401Compressed data

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System (AREA)

Abstract

计算设备中的存储器管理器将存储器分配给在计算设备上运行的程序,分配给程序的一定量的存储器是针对程序的存储器提交。当程序处于所述程序能够被终止的状态中时,对分配给所述程序的存储器页面的内容进行压缩,并确定能够被释放的针对程序的存储器提交量。该存储器提交量是提交给程序的量减去仍(以压缩格式)存储程序的信息(例如,数据或指令)的任何量。所确定的存储器提交量被释放,以允许其他程序视情况消费所述一定量的存储器。

Description

使用存储器压缩来减少存储器提交开销
本申请是申请号为201680013351.3、申请日为2016年2月19日、发明名称为“使用存储器压缩来减少存储器提交开销”的中国发明专利申请的分案申请。
背景技术
随着计算机技术的推进,计算机处理器的性能已经改进。这种改进的性能已经使得更复杂的计算机程序为用户提供改进的功能性。然而,该改进的性能并不是没有问题。一个这种问题在于:随着计算机程序变得更加复杂,它们使用增大量的计算机存储器。这导致需要在计算机中包括更多的计算机存储器,从而增大了这种计算机的成本。
发明内容
提供本发明内容来以简化形式介绍以下在具体实施方式中进一步描述的概念的选择。本发明内容不意图标识所要求保护的主题的关键特征或必要特征,也不意图用于限制所要求保护的主题的范围。
根据一个或多个方面,确定程序处于所述程序能够从其终止的状态中,一定量的存储器已经提交给所述程序,所述一定量的存储器是针对所述程序的存储器提交(memorycommit),并且提交给程序的所述一定量的存储器的子集已经被所述程序使用。提交给程序的所述一定量的存储器包括多个存储器页面。对程序使用的存储器的子集中的存储器页面的内容进行压缩,并确定能够被释放的针对程序的存储器提交量。在已经对程序使用的存储器的子集进行压缩之后,释放所确定的针对程序的存储器提交量。
根据一个或多个方面,确定要访问程序的一个或多个存储器页面,该程序已经释放了其存储器提交的至少一部分。做出重新获得所述程序的至少一个或多个存储器页面的存储器提交的尝试。响应于重新获得存储器提交的尝试成功,允许访问所述一个或多个存储器页面。响应于重新获得存储器提交的尝试不成功,终止并重新启动所述程序。
附图说明
贯穿附图,相同标号用于引用同样的特征。
图1图示了根据一个或多个实施例的采用使用存储器压缩来减少存储器提交开销(commit charge)的示例系统。
图2A和图2B图示了根据一个或多个实施例的示出了程序可以处于的不同状态的示例状态图。
图3是图示了根据一个或多个实施例的用于在程序可终止时节省存储器提交的示例过程的流程图。
图4是图示出根据一个或多个实施例的用于允许访问已被挂起或以其他方式使其可终止的程序的存储器的示例过程的流程图。
图5图示了包括示例计算设备的示例系统,所述示例计算设备代表可以实现本文描述的各种技术的一个或多个系统和/或设备。
具体实施方式
本文讨论使用存储器压缩来减少存储器提交开销。计算设备中的存储器由被称为存储器页面(或简单地,页面)的多个块或部分组成。这些页面通过存储设备(例如,盘)上的页面文件进行备份,并且计算设备的存储器管理器视情况对于在存储器和页面文件之间传送各种页面的数据进行管理。存储器管理器还向计算设备上运行的程序分配一定量的存储器。
当向程序分配存储器时,向程序指派或分配地址空间。该地址空间包括所分配的一定量的存储器,并且存储器管理器对所分配的一定量的存储器的提交开销进行分配。该分配的一定量的存储器是提交给程序的一定量的存储器,也称为程序的存储器提交(或简单地,程序的提交)。存储器提交保证向程序分配的一定量的存储器的可用性——存储器管理器保证如果访问分配给程序的存储器中的所提交的虚拟地址,则可以使得物理存储器(例如,RAM)中的页面对于地址可用。在将存储器分配给程序时,不需要(但可替换地可以)向程序分配物理页面。计算设备中可容许的最大提交开销量等于物理存储器(例如,RAM)的量加上备份物理存储器(例如,RAM)的在存储设备上的全部页面文件的大小。
对程序的一个或多个存储器页面的内容进行压缩。这种压缩可以在程序活动时(例如,运行或以其他方式被容许访问分配给程序的存储器)和/或响应于程序被挂起(或以其他方式处于非活动状态)而发生。当程序被挂起时,确定能够释放的程序的存储器提交量。能够释放的该存储器提交量是提交给程序的量减去仍(以压缩格式)存储程序的信息(例如,数据或指令)的任何量。所确定的存储器提交量被释放,从而允许其他程序视情况消费所释放的存储器提交量。
在比如由于使被挂起的程序再次活动或内核模式代码附加到被挂起的程序的存储器空间而导致要访问被挂起的程序的一个或多个存储器页面时,尝试重新获取那些存储器页面的存储器提交。根据已经将什么样的存储器分配给什么样的其他程序,尝试可能会成功或不成功。如果尝试成功,则容许访问一个或多个存储器页面。然而,如果尝试不成功,则终止程序,并且可选地重新启动该程序。重新启动程序允许程序运行,视情况将存储器分配给程序(以及可选地使得一个或多个其他程序终止)。是否重新启动该程序可以基于访问类型而有所不同(例如,如果访问是由于使被挂起的程序再次活动而引起的,则可以重新启动该程序,但是如果访问是由于内核模式代码附加到被挂起的程序的存储器空间而引起的,则可以不重新启动该程序)。
图1图示了根据一个或多个实施例的采用使用存储器压缩来减少存储器提交开销的示例系统100。系统100由计算设备实现,并且包括存储器管理器104、存储设备106和分页存储器108。一般地,存储器管理器104管理数据在分页存储器108中的存储。存储器管理器104包括存储器控制器110和存储器分配器112。存储器分配器112将分页存储器108的部分分配给系统100中的各种程序114。分配给程序114的分页存储器108的部分也被称为程序114的地址空间。存储器控制器110控制在分页存储器108和存储设备106之间的存储器页面的传送以及分页存储器108的不同部分的压缩。
在本文中,程序114在运行时也被称为进程(其是运行的程序114的实例),因此分配给程序114的分页存储器108的部分也被称为分配给程序114的进程。分配给进程的页面由该进程拥有或专用于该进程,并由该进程而不由其他进程使用(其因此也称为私有页面)。程序114可以是应用、操作系统程序或其他组件或模块。存储器管理器104接收来自这些程序114的请求以便从分页存储器108检索数据以及将数据写入分页存储器108。分页存储器108可以是例如任何类型的CPU(中央处理单元)可寻址存储器,比如易失性存储器(例如,RAM)或非易失性存储器(例如,闪存)。
存储器控制器110使用分页来管理分页存储器108。存储器控制器110将存储器108(例如,RAM)组织成为页面,页面是特定(例如,固定)大小的数据单元。分页的动作指的是,当数据不在存储器108中时,以页为单位从备份文件(也称为交换文件)读取数据,该备份文件是系统100中的页面文件116。分页的动作还指的是,以页为单位将脏(经修改的)数据写回到页面文件116中。因此,存储器页面也被称为页面文件备份的存储器页面。这种分页技术是本领域技术人员众所周知的。
响应于针对程序的存储器分配的请求,存储器分配器112为所请求的一定量的存储器分配提交开销,这保证如果在某个时间点访问该存储器中的虚拟地址,则将使得存储器中的物理页面对于程序可用。通常从程序本身接收该请求。分配给程序的存储器的页面的内容(例如,数据)可以在不同的时间传送至页面文件116以及从页面文件116传送,但是该传送由存储器控制器110管理,并且程序可以访问分配给程序的存储器。
可替换地,存储器分配112和程序114遵循延迟的存储器提交方法。在延迟的存储器提交方法中,当由程序114做出存储器分配请求时,不会发生实际的提交分配。相反,当程序114最早写入分配的存储器时,根据需要对提交进行分配。如果那时不能对提交进行分配,则引发异常和/或终止程序。
系统100包括程序终止准备模块118和程序访问模块120。程序终止准备模块118对将程序置于所述程序能够被终止的状态(也称为可终止状态)进行管理。这可以涉及与程序通信,使得程序保存程序的处理状态,程序的处理状态指的是,程序使用的各种数据、设置或其他信息。通过保存程序的处理状态,如果程序被终止,则随后程序可以被重新启动并返回到与其终止之前所具有的处理状态相同的处理状态。如下面更详细地讨论的,将程序置于程序能够被终止的状态中还包括释放程序的存储器提交中的至少一些。在一个或多个实施例中,挂起被置于所述程序能够被终止的状态中的程序,这指的是,程序不在系统100上运行(例如,该程序不被系统100的任何处理器调度来执行)。可替换地,可以将程序置于所述程序能够被终止的状态中,而不挂起程序。
在一个或多个实施例中,系统100遵循挂起提交释放方法。在挂起提交释放方法中,如上所讨论的,程序终止准备模块118对将程序置于所述程序能够被终止的状态中进行管理。
可替换地,系统100可以遵循运行时间提交释放方法。在运行时间提交释放方法中,即使程序是活动的(例如运行)时,也始终认为该程序是可终止的。可以当应用仍是活动的(但可终止的)时在运行时节约存储器提交,使得一旦页面被压缩成经压缩的存储器页面,就可以释放在地址空间中的被压缩的页面子集的提交开销。在(例如,结合以上讨论的延迟的存储器提交方法使用的)这种方法中,用于经压缩的数据(经压缩的存储器页面)的存储装置承担(charge)其自身的提交的开销。当程序访问提交被释放的页面时,重新承担(recharge)提交的开销,分配物理页面,并将数据从经压缩的存储仓库解压到物理页面中。如果提交开销失效(不能重新获取到提交开销),则引发异常(和/或终止程序)。
程序访问模块120对允许访问已被挂起或以其他方式使其可终止的程序的存储器进行管理。该允许访问可以包括恢复运行程序,比如重新启动被终止的程序、或恢复运行被挂起的程序。如下面更详细地讨论的,该允许访问还可以包括重新获取先前分配给程序的存储器提交开销中的至少一些,使得另一个程序可以访问存储器。
图2A和图2B图示了根据一个或多个实施例的示出了程序可以处于的不同状态的示例状态图200。状态图200包括活动状态202、可终止状态204和终止状态206。如箭头所图示的,程序可以在状态202、204和206中的不同状态之间转换。程序可以从可终止状态204转换到活动状态202或终止状态206。程序可以从终止状态206转换到可终止状态204或活动状态202。
在如图2A中所图示的一个或多个实施例中,活动状态202和可终止状态204不重叠。因此,在这样的实施例中,程序可以是活动的或可终止的,但不可以同时既是活动的又是可终止的。可替换地,如图2B中所图示的,活动状态202和可终止状态204部分重叠。因此,在这样的实施例中,程序可以是活动的但不是可终止的、可终止的但不是活动的、或同时既是活动的又是可终止的。
在活动状态202中,程序正在运行(例如,正被调度以由运行程序的系统或设备的一个或多个处理器执行)。当处于活动状态202时,程序能够访问已经分配给程序的存储器。比如当程序被挂起或者以其他方式被置于所述程序能够被终止的状态中时,程序可以从活动状态202转换到可终止状态204。
在可终止状态204中,程序处于所述程序能够被终止的状态中(例如,程序被挂起)。在从活动状态202转换成可终止状态204时,程序保存程序的处理状态,使得如果该程序被终止,则程序可以随后被重新启动并返回到与它在被转换到可终止状态204之前所具有的处理状态相同的处理状态。如下面更详细讨论的,在处于可终止状态204中时,程序不能够访问已经被分配给该程序的存储器,并且可以释放已被分配给该程序的存储器提交开销中的至少一些。
程序可以从可终止状态204转换到活动状态202。向活动状态202的转换可以由于比如用户请求运行程序、由另一个程序请求附加到程序的存储器空间等各种不同的事件而发生。同样,程序可以从可终止状态204转换到终止状态206。向终止状态206的转换可以由于比如用户请求关闭程序、确定先前分配给程序的存储器将用于一个或多个附加程序等各种不同的事件而发生。
在终止状态206中,程序不运行。尽管程序被存储在另一个存储设备上并且可以被加载到系统或计算设备的存储器中,但是该程序没有被加载到将运行程序的系统或计算设备的存储器(例如,RAM)中。程序可以从终止状态206转换到活动状态202。向活动状态202的转换可以由于比如用户请求运行程序之类的各种不同的事件而发生。同样,程序可以从终止状态204转换到可终止状态204。向可终止状态204的转换可以由于比如用户请求加载但不运行程序之类的各种不同的事件而发生。
回到图1,存储器控制器110对由程序使用的存储器的压缩进行管理。由程序使用的存储器指的是,已经由程序实例化或以其他方式已经被程序访问(例如,写入或存储数据)的存储器页面。对程序的存储器或由程序使用的存储器进行压缩指的是,对分配给程序的存储器的一个或多个存储器页面的内容(例如,存储在所述一个或多个存储器页面中的数据)进行压缩。可以使用各种不同的公共和/或专有压缩技术来压缩存储器页面。例如,可以使用行程长度(run-length)编码压缩算法、LZW压缩算法、霍夫曼编码算法等来压缩存储器页面。可以可选地采用多种不同的压缩算法,比如针对不同类型的内容的不同压缩算法。例如,一种压缩算法可以用于字母数字和/或文本内容,另一种压缩算法可以用于图像内容,以及又一种压缩算法可以用于音频内容。用于压缩存储器页面的压缩技术通常是无损压缩算法,但是在某些情况下(例如,对于某些图像和/或音频内容)可以可替换地使用有损压缩算法。具体的压缩算法也可以取决于设备,其中较快的设备(例如,具有更强大的一个或多个处理器)可以被配置有更好地进行压缩的更处理器密集的压缩算法,而较慢的设备(例如,具有不那么强大的一个或多个处理器)可以被配置有也没有那么好地进行压缩的处理器较不密集的算法。
可以在不同的时间压缩程序所使用的存储器。在一个或多个实施例中,在程序运行时压缩由程序使用的存储器。存储器控制器110可以使用各种不同的规则或准则中的任何一个来确定哪些存储器页面被压缩。例如,可以压缩程序所使用的全部存储器页面,可以压缩在阈值时间量内程序尚未访问的存储器页面,可以压缩正被写出到页面文件的存储器页面等。
作为在程序运行时压缩存储器的附加方案或可替换方案,可以响应于程序转换到可终止状态对程序的存储器进行压缩。存储器控制器110可以压缩由程序使用(并且尚未被压缩)的全部存储器页面,或可替换地应用其他规则或准则来确定哪些存储器页面被压缩。在一个或多个实施例中,存储器控制器110对分配给程序的存储器中的已被程序(实例化)访问的、全部存储器页面进行压缩。程序尚未访问的存储器页面将不存储程序的内容,因此不具有要压缩的内容。
程序终止准备模块118对将程序置于所述程序能够被终止的状态中进行管理。这包括与存储器控制器110通信以对尚未被压缩的存储器页面进行压缩。附加地,程序终止准备模块118确定可以被释放的针对程序的存储器提交量。程序终止准备模块118将经压缩的存储器页面存储到分页存储器108和/或存储设备106中。可以被释放的针对程序的存储器提交量可以根据经压缩的存储器页面被存储的方式而有所不同。
在一个或多个实施例中,程序终止准备模块118将经压缩的存储器页面写入存储设备106的一个或多个附加文件(而不是页面文件116)。在这种情况下,经压缩的存储器页面既不存储在分页存储器108中也不存储在页面文件116中,并因此可以释放程序的全部存储器提交。例如,假设向程序提交了100兆字节(MB)的存储器,并且可以对程序所使用的存储器页面进行压缩,使得它们以压缩形式占据40MB的存储器。在该示例中,可以将40MB存储器的内容写入存储设备的文件,并可以释放针对该程序的100MB的存储器提交。
可替换地,程序终止准备模块118将经压缩的存储器页面写入分页存储器108(此后存储器控制器110可以将所述一个或多个页面传送给页面文件116)。在这种情况下,把经压缩的存储器页面存储在分页存储器108或页面文件116中,并且可以被释放的存储器提交量是提交给程序的量减去存储器页面被压缩成的存储器量。例如,假设向程序提交了100MB的存储器,并且可以对程序所使用的存储器页面进行压缩,使得它们以压缩形式占据40MB的存储器。在该示例中,不能释放针对40MB的经压缩的存储器的存储器提交,但可以释放与提交给程序的存储器量(100MB)和存储器页面被压缩成的存储器量(40MB)之间的差额相等的量(可以释放60MB)。该示例假定数据被压缩成的存储器页面本身不占用任何附加的存储器提交。如果数据被压缩成的存储器页面本身占用附加的存储器提交,则可以释放针对程序的整个100MB的存储器提交。
程序终止准备模块118向存储器分配器112通知可释放的针对程序的存储器提交量,以及存储器提交被释放。存储器分配器112维护被释放的针对程序的存储器提交量的记录(例如,在存储设备106、分页存储器108或系统100的其他存储器或存储装置中)。如下面更详细地讨论的,所释放的针对程序的存储器提交量的该记录可以用于随后恢复应用的情况。
可替换地,如以上所讨论的,在某些情况下,在运行时释放存储器页面。在这种情况下,程序是活动的并且随着存储器页面被压缩,在每个页面的基础上释放存储器提交,并且如以上所讨论的,响应于程序访问经压缩的存储器页面而做出重新获取存储器提交的尝试。在这种情况下,存储器分配器112随着存储器页面被压缩(例如并且写入经压缩的存储仓库中的存储器页面)而释放存储器页面,并进一步维护标识出提交给程序的哪些存储器页面已经释放了存储器提交的记录。存储器分配器112使用该记录(例如,每个存储器页面的每页记录)来确定,如果随后访问存储器页面,是否重新获取针对存储器页面的存储器提交。如果针对特定页面尚未释放存储器提交,则不需要重新获取针对该特定页面的存储器提交。然而,如果针对特定页面已经释放了存储器提交,则做出重新获取针对该特定页面的存储器提交的尝试。
释放针对程序的存储器提交使得节省了系统100中的存储器提交。释放先前提交给当前无论如何不能够访问存储器的程序(例如由于程序被挂起)的存储器提交,允许其他程序消费存储器提交。例如,如果由于程序被挂起而释放了60MB的存储器提交,则该60MB可以被分配给另一个程序(并因此成为该另一个程序的存储器提交)。应该注意的是,如果程序没有被挂起,则程序可以尝试访问提交被释放的存储器页面,这时存储器管理器将尝试重新获取针对该存储器页面的提交,分配物理页面(如果重新获取提交的尝试成功),并将经压缩的数据解压缩到该物理页面。
程序访问模块120对允许访问已被挂起或终止的程序的存储器进行管理。在处于可终止状态中时,程序本身或其他程序不能直接访问分配给程序的存储器,原因在于内容是压缩的,并且内容(如果被解压缩的话)将被置于的存储器已经被释放了。可能发生各种事件,包括访问处于可终止状态中的程序的地址空间的请求。响应于这样的事件,程序访问模块120通过尝试重新获得(也称为重新获取)针对先前提交给程序的、并被释放的存储器中的至少一些的存储器提交,来对允许访问先前分配给程序的存储器中的至少一些进行管理。如果重新获得针对存储器中的至少一些的存储器提交的尝试成功,则容许所请求的对程序的地址空间的访问。然而,如果重新获得针对存储器中的至少一些的存储器提交的尝试不成功,则终止程序(程序的执行停止)。可以可选地重新启动该程序,使得对程序进行新的存储器分配(这可能使得一个或多个其他程序被转换成可终止状态或终止状态)。
在程序的运行已被挂起(或以其它方式被置于非活动状态中)的情况下,程序访问模块120可以响应于各种事件而恢复程序的运行。在一个或多个实施例中,这些事件包括恢复程序运行的请求,比如请求使应用成为活动应用(当前在计算设备上运行的应用)的用户输入。附加地或可替换地,这些事件可以包括其他请求,比如由另一程序或代码附加至程序的地址空间的请求。通常,与正在访问其地址空间的程序相比,这些其他程序或代码在更专用的空间(例如,在内核模式)中执行。这些其他程序可以在地址空间上执行各种操作,比如分析地址空间以标识恶意软件。
在这种情况下,程序访问模块120可以尝试重新获得先前已提交给程序并被释放的全部存储器的存储器提交,或可选地,先前提交给程序并释放的存储器中的仅仅一些的存储器提交。例如,程序控制模块120可以尝试重新获得针对足够存储器的存储器提交,以允许访问特定数量的存储器页面(例如,包括被访问的地址空间的部分在内的存储器页面)。在这种情况下,存储器控制器110确保不能访问尚未重新获得其提交开销的页面(以避免违反提交限制(commit limit)的规则)。
程序访问模块120还可以基于正在执行的访问类型来确定是否尝试重新获得先前提交给程序并释放的存储器提交中的一些或全部。例如,如果访问类型是恢复运行程序的用户请求,则程序访问模块120尝试重新获得先前提交给程序并被释放的全部存储器提交。作为另一示例,如果访问类型是由另一程序附加至程序的地址空间的请求,则程序访问模块120尝试重新获得足够的存储器提交以允许对包括被访问的地址空间的部分在内的存储器页面进行解压缩和访问。
程序访问模块120还可以确定,对于某些类型的访问,不需要重新获得先前提交给程序并被释放的存储器提交。在一个或多个实施例中,如果请求的类型是由另一个程序附加至程序的地址空间并从其读取的请求,则不需要重新获得先前提交给程序并被释放的存储器提交。如果将要读取存储器页面,则不需要重新获得页面文件116中已经备份(例如,以压缩形式)的存储器页面的存储器提交,原因在于不会对存储器页面做出将使得存储器页面需要被保存回到页面文件或被维护在分页存储器108中的改变。然而,如果请求的类型是另一程序附加至并且执行非读取访问(例如,写访问、存储器页面锁定访问等)的请求,则程序访问模块120尝试重新获得足够的存储器提交以允许对包括被访问的地址空间的部分在内的存储器页面进行解压缩和访问。
在如以上讨论的存储器管理器遵循运行时间提交释放方法的其他情况下,程序保持活动,并且程序访问模块120不需要恢复程序运行。相反,当接收到访问程序的提交被释放的存储器页面的请求(例如,由程序、或由其他程序附加至程序的地址空间且从程序的地址空间读取的请求)时,重新承担提交的开销,分配物理页面,以及将数据从经压缩的存储器解压缩到物理页面中。如上所讨论的,如果提交开销失效(不能重新获取提交开销),则引发异常(和/或终止程序)。
图3是图示了根据一个或多个实施例的用于在程序可终止时节省存储器提交的示例过程300的流程图。过程300由存储器管理器和程序终止准备模块(比如图1的存储器管理器104和程序终止准备模块118)执行,并且可以用软件、固件、硬件或其组合来实现。过程300被示出为一组动作,并且不限于所示出的执行各种动作的操作的顺序。过程300是用于当程序可终止时节省存储器提交的示例过程;本文中参考不同的附图包括了在程序可终止时节省存储器提交的附加讨论。
在过程300中,可选地在程序是活动的时对程序的存储器页面进行压缩(动作302)。如上所讨论的,程序的存储器页面中的至少一些可以可选地在程序运行时被存储器控制器压缩以节省存储器。然而,在替换的实施例中,当程序是活动的时,不发生对存储器页面的这种压缩。
在某一时刻,确定程序处于所述程序能够从其终止的状态中(动作304)。如以上所讨论的,程序可以通过转换到可终止状态或通过同时处于活动和可终止状态中,而处于所述程序能够从其终止的状态中。
标识出要压缩的程序的存储器页面的子集(动作306)。要压缩的存储器页面的子集是包括在分配给程序的存储器中的、已被程序访问(被实例化)并且尚未被压缩的存储器页面(例如,在动作302中)。
对所标识的存储器页面的子集进行压缩(动作308)。可以使用如上所讨论的各种不同的压缩算法或技术中的任一种对存储器页面进行压缩。
确定能够被释放的针对程序的存储器提交量(动作310)。能够被释放的存储器提交量等于通过从程序的存储器提交量中减去存储器页面被压缩成的存储器量而导出的值。未实例化页面(程序未使用的程序的存储器页面)的存储器提交被包括在能够被释放的针对程序的存储器提交量中。能够被释放的存储器提交量可以小于程序的全部存储器提交(例如,在经压缩的存储器被存储在分页存储器或页面文件中的情况下),或者是程序的全部存储器提交(例如,在经压缩的存储器被存储在除了页面文件之外的在存储设备上的附加文件中的情况下,或者在经压缩的存储器已经承担其自身的提交开销的情况下)。
应当注意,在某些情况下,由于对其他程序或代码(例如,内核模式驱动器)所做出的保证,不能释放程序的某些存储器提交。从如在动作310中确定的能够被释放的存储器提交量中排除这样的存储器提交量。因此,能够被释放的存储器提交量等于通过从程序的存储器提交量中减去存储器页面被压缩成的存储器量和由于对其他程序或代码所做出的保证而不能释放的存储器提交量而导出的值。
释放在动作310中确定的存储器提交量(动作312)。释放存储器提交允许由在计算设备上运行的其他程序消费存储器提交量。程序未使用的程序的存储器页面的提交开销被减少到零,并且程序使用的(并随后压缩的)存储器页面的提交开销按压缩率减少。
维护被释放的存储器提交量的记录(动作314)。该记录允许随后做出关于要针对程序重新获得多少存储器提交的确定。在一个或多个实施例中,记录包括提交给程序的哪些存储器页面已经释放了它们的存储器提交的指示,从而如以上所讨论的,允许存储器管理器知道如果访问存储器页面,则是否要重新获取存储器页面的存储器提交。
图4是图示出根据一个或多个实施例的用于允许访问已被挂起或以其他方式使其可终止的程序的存储器的示例过程400的流程图。过程400由存储器管理器和程序访问模块(比如图1的存储器管理器104和程序访问模块120)执行,并且可以用软件、固件、硬件或其组合来实现。过程400被示出为一组动作,并且不限于所示出的执行各种动作的操作的顺序。过程400是用于允许访问已被挂起或以其他方式使其可终止的程序的存储器的示例过程;在本文中参照不同的附图包括关于允许访问已经被挂起或以其他方式使其可终止的程序的存储器的附加讨论。
在过程400中,确定要访问已经释放了其存储器提交中的至少部分的程序的一个或多个存储器页面(动作402)。如上所讨论的,可以作为各种不同事件的部分访问一个或多个存储器页面。
做出重新获得所述程序的至少一个或多个存储器页面的存储器提交的尝试(动作404)。如以上所讨论的,这种尝试可以是重新获得所释放的全部存储器提交(例如,如图3的动作314中所维护的记录中所指示的)或存储器提交的子集(例如,被访问的特定存储器页面的存储器提交)的尝试。
过程400基于动作404中的尝试是否成功(动作406)而继续进行。如果动作404中的尝试成功,则允许访问一个或多个存储器页面(动作408)。然而,如果尝试不成功,则终止程序(动作410)并且可选地重新启动程序(动作412)。应当注意,通过终止并重新启动该程序,响应于该程序的存储器分配请求将存储器分配给程序,这可能使得计算设备上的一个或多个其他程序被终止。
在终止程序中采取的动作可以基于实现而有所不同。在一个或多个实施例中,终止程序包括拆除程序的地址空间(如同程序正在退出那样),并触发在作为运行的程序的进程(例如,其将到线程的消息排队以便从其被挂起的状态唤醒和终止)中的全部线程的强制线程终止。
在一个或多个实施例中,当终止程序时要注意,使得与计算设备中的其他程序保持同步。在动作410中,以与程序以及任何其他程序(例如,其可能已经附加到正被终止的程序)期望的方式一致的方式终止程序。例如,在动作410中,仅当当前没有其他程序附加到程序的地址空间时,才终止程序。
回到图1,在一个或多个实施例中,存储器管理系统102提供附加的支持以促进节约存储器提交。存储器管理系统102允许程序114指示:如果存储器管理系统102期望的话,则可以释放先前分配给程序114的特定的存储器提交量。通过提供这样的指示,程序114确认程序114可以接受先前分配给程序114的存储器提交的损失。可以例如通过调用由存储器分配器112暴露的应用编程接口(API)来提供这样的指示。提供指示允许存储器分配器112释放先前分配给程序114的存储器提交中的一些,并将存储器提交分配给请求存储器分配的另一个程序。
本文讨论的技术支持各种使用场景。本文讨论的技术通过减少分配给计算设备中程序的存储器提交量来节省计算设备中的存储器提交。这增大了在任何给定时间可以在计算设备中运行或挂起的程序的数量,而不必终止程序。这也减少了在任何给定时间允许给定数量的程序在计算设备中运行或挂起所需的分页存储器和/或存储设备空间(用于页面文件)的量,而不必终止任何程序。
尽管本文参考特定模块讨论了特定功能性,但应当注意,本文所讨论的各个模块的功能性可以分为多个模块、和/或多个模块的至少一些功能性可以组合成单个模块。附加地,本文中被讨论为执行动作的特定模块包括该特定模块本身执行动作,或者可替换地该特定模块调用或以其他方式访问执行该动作(或结合该特定模块来执行动作)的另一个组件或模块。因此,特定模块执行动作包括:特定模块本身执行动作和/或由该特定模块调用或以其他方式访问的另一模块执行动作。
图5一般地在500处图示了示例系统,其包括代表可以实现本文描述的各种技术的一个或多个系统和/或设备的示例计算设备502。计算设备502可以是例如服务提供商的服务器、与客户端相关联的设备(例如,客户端设备)、片上系统和/或任何其他适当的计算设备或计算系统。
所图示的示例计算设备502包括彼此通信耦合的处理系统504、一个或多个计算机可读介质506和一个或多个I/O接口508。尽管没有示出,但是计算设备502还可以包括将各种组件彼此耦合的系统总线或其他数据和命令传送系统。系统总线可以包括不同总线结构中的任何一个或组合,比如存储器总线或存储器控制器、外围总线、通用串行总线、和/或利用各种各样的总线架构中的任何一种的处理器或局部总线。还设想到各种各样的其他示例,比如控制和数据线。
处理系统504代表使用硬件执行一个或多个操作的功能性。相应地,处理系统504被图示为包括可以被配置成处理器、功能块等的硬件元件510。这可以包括作为专用集成电路或者使用一个或多个半导体形成的其他逻辑器件的按照硬件的实现。硬件元件510不受形成它们的材料或者其中所采用的处理机制的限制。例如,处理器可以包括(多个)半导体和/或晶体管(例如,电子集成电路(IC))。在这样的上下文中,处理器可执行指令可以是电子可执行指令。
计算机可读介质506被图示为包括存储器/存储装置512。存储器/存储装置512表示与一个或多个计算机可读介质相关联的存储器/存储装置容量。存储器/存储装置512可以包括易失性介质(比如随机存取存储器(RAM))和/或非易失性介质(比如只读存储器(ROM)、闪存、光盘、磁盘等)。存储器/存储装置512可以包括固定介质(例如,RAM、ROM、固定硬驱动器等)以及可移除介质(例如,闪存、可移除硬驱动器、光盘等)。计算机可读介质506可以用各种各样的其他方式配置,如在下文进一步所描述的。
(多个)输入/输出接口508代表通过使用各种输入/输出设备而允许用户向计算设备502录入命令和信息以及还允许将信息呈现给用户和/或其他组件或设备的功能性。输入设备的示例包括键盘、光标控制设备(例如,鼠标)、麦克风(例如,用于语音输入)、扫描仪、触摸功能性(例如,被配置成检测物理触摸的电容式或其他传感器)、相机(例如,其可以采用可见波长或比如红外频率之类的不可见波长来检测不涉及触摸的作为手势的移动)等。输出设备的示例包括显示设备(例如,监视器或投影仪)、扬声器、打印机、网卡、触觉响应设备等。因而,计算设备502可以如在下文进一步描述的用各种各样的方式配置,以支持用户交互。
计算设备502还包括存储器管理系统514。如上所讨论的,存储器管理系统514提供用于通过减少存储器提交开销来节省存储器的各种功能性。存储器管理系统514可以实现例如图1的存储器管理系统102。尽管被图示为与计算机可读介质506分离,但是应当指出,存储器管理系统514可以可替换地被实现为计算机可读介质506的部分。
本文可以在软件、硬件元件或程序模块的一般上下文中描述各种技术。一般地,这样的模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、元件、组件、数据结构等。如本文中使用的术语“模块”、“功能性”和“组件”一般地表示软件、固件、硬件或其组合。本文描述的技术的特征是独立于平台的,这意味着技术可以实现在具有各种各样的处理器的各种各样的计算平台上。
所描述的模块和技术的实现可以存储在某种形式的计算机可读介质上或者跨其传送。计算机可读介质可以包括可以由计算设备502访问的各种各样的介质。作为示例而非限制,计算机可读介质可以包括“计算机可读存储介质”和“计算机可读信号介质”。
“计算机可读存储介质”指的是,使得能够实现信息的持久性存储的介质和/或设备和/或相对于单纯的信号传送、载波或信号本身而言的有形的存储装置。因而,计算机可读存储介质指的是,非信号承载介质。计算机可读存储介质包括硬件,比如以适用于存储比如计算机可读指令、数据结构、程序模块、逻辑元件/电路或其他数据之类的信息的方法或技术实现的易失性和非易失性的、可移除和不可移除的介质和/或存储设备。计算机可读存储介质的示例可以包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多用盘(DVD)或其他光学存储装置、硬盘、磁盒、磁带、磁盘存储或其他磁性存储设备、或者适于存储期望信息并且可以由计算机访问的其他存储设备、有形介质或制造品。
“计算机可读信号介质”指的是,被配置为比如经由网络向计算设备502的硬件传送指令的信号承载介质。信号介质通常可以具体实现计算机可读指令、数据结构、程序模块、或者在调制数据信号(比如载波、数据信号或者其他输运机制)中的其他数据。信号介质还包括任何信息递送介质。术语“调制数据信号”意指这样的信号,使其一个或多个特性按照将信息编码在其中的这种方式进行设定或改变。作为示例而非限制,通信介质包括比如有线网络或直接有线连接之类的有线介质,以及比如声学、RF、红外和其他无线介质之类的无线介质。
如之前所描述的,硬件元件510和计算机可读介质506代表以硬件形式实现的指令、模块、可编程设备逻辑和/或固定设备逻辑,其在一些实施例中可以用于实现本文描述的技术的至少一些方面。硬件元件可以包括以下设备的组件:集成电路或片上系统、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、复杂可编程逻辑器件(CPLD)、以及在硅或其他硬件设备中的其他实现。在该上下文中,硬件元件可以作为执行由硬件元件具体实现的指令、模块和/或逻辑所定义的程序任务的处理设备以及用于存储指令以供执行的硬件设备(例如之前描述的计算机可读存储介质)进行操作。
前述内容的组合也可以用于实现本文描述的各种技术和模块。相应地,软件、硬件或程序模块以及其他程序模块可以实现为具体实现在某种形式的计算机可读存储介质上和/或由一个或多个硬件元件510具体实现的一个或多个指令和/或逻辑。计算设备502可以被配置为实现与软件和/或硬件模块对应的特定指令和/或功能。相应地,作为可由计算设备502作为软件执行的模块的模块实现可以例如通过使用计算机可读存储介质和/或处理系统的硬件元件510来至少部分地以硬件完成。指令和/或功能可以由一个或多个制造品(例如,一个或多个计算设备502和/或处理系统504)可执行/可操作来实现本文描述的技术、模块和示例。
如图5中进一步图示的,示例系统500使得当在个人计算机(PC)、电视设备和/或移动设备上运行应用时能够实现用于无缝用户体验的普遍存在的环境。服务和应用在全部三个环境中基本上类似地运行以在利用应用、播放视频游戏、观看视频等的同时从一个设备向下一个设备转换时得到共同的用户体验。
在示例系统500中,通过中央计算设备互连多个设备。中央计算设备可以在多个设备的本地或者可以位于多个设备的远方。在一个或多个实施例中,中央计算设备可以是通过网络、因特网或其他数据通信链路连接到多个设备的一个或多个服务器计算机的云。
在一个或多个实施例中,该互连架构使得能够跨多个设备递送功能性以向多个设备的用户提供共同且无缝的体验。多个设备中的每一个可以具有不同的物理要求和能力,并且中央计算设备使用平台以使得能够向设备递送既针对设备定制又是全部设备所共同的体验。在一个或多个实施例中,创建目标设备分类并且针对通用设备分类定制体验。设备分类可以由设备的物理特征、使用类型或者其他共同特性来定义。
在各种实现中,计算设备502可以采取各种各样的不同配置,比如以用于计算机516、移动装置518和电视520用途。这些配置中的每一个包括可以具有一般不同的构造和性能的设备,并且因而计算设备502可以根据不同设备分类中的一个或多个进行配置。例如,计算设备502可以实现为计算机516分类的设备,其包括个人计算机、桌上型计算机、多屏幕计算机、膝上型计算机、上网本等。
计算设备502还可以实现为移动装置518分类的设备,其包括移动设备,比如移动电话、便携式音乐播放器、便携式游戏设备、平板计算机、多屏幕计算机等。计算设备502还可以实现为电视520分类的设备,其包括具有或连接到在非正式观看环境中的一般更大的屏幕的设备。这些设备包括电视、机顶盒、游戏操控台等。
本文描述的技术可以由计算设备502的这些各种配置来支持并且不限于本文描述的技术的具体示例。该功能性还可以全部地或者部分地通过使用分布式系统而实现,比如在“云”522之上经由平台524来实现,如下文所描述的那样。
云522包括和/或代表用于资源526的平台524。平台524对云522的硬件(例如服务器)和软件资源的底层功能性进行抽象。资源526可以包括在远离计算设备502的服务器上执行计算机处理的同时可以利用的应用和/或数据。资源526还可以包括在因特网之上和/或通过订户网络(比如蜂窝或Wi-Fi网络)提供的服务。
平台524可以对资源和功能进行抽象以将计算设备502与其他计算设备连接。平台524还可以服务于抽象资源的规模以针对所遇到的经由平台524而实现的资源526的需求而提供对应级别的规模。相应地,在互连设备实施例中,本文描述的功能性的实现可以遍及系统500而分布。例如,功能性可以部分地在计算设备502上并经由抽象云522的功能性的平台524而实现。
在本文的讨论中,描述了各种不同的实施例。应当意识并理解到,本文描述的每个实施例可以单独使用或与本文所述的一个或多个其他实施例结合使用。本文讨论的技术的其他方面涉及一个或多个以下实施例。
一种减少针对计算设备中的程序的存储器提交量的方法,所述方法包括:确定所述程序处于所述程序能够从其终止的状态中,一定量的存储器已经被提交给所述程序,所述一定量的存储器是针对所述程序的存储器提交,提交给程序的所述一定量的存储器的子集已经被所述程序使用,以及提交给程序的所述一定量的存储器包括多个存储器页面;压缩所述程序使用的存储器的子集中的存储器页面的内容;确定能够被释放的针对程序的存储器提交量;以及在已经压缩了程序所使用的存储器的子集之后,释放所确定的针对程序的存储器提交量。
作为以上描述的方法中的任意一个的可替换方案或附加方案,以下各项中的任意一个或其组合:所述程序能够从其终止的状态包括其中已经保存了程序的处理状态并且随后所述程序能够被恢复至的可终止状态;所述程序能够从其终止的状态包括活动状态;所述压缩包括:由所述计算设备的存储器控制器在所述程序正在运行时并且在所述程序被转换到所述程序能够从其终止的状态之前,对所述存储器页面的子集中的一个或多个存储器页面进行压缩;压缩所述存储器页面的内容包括:响应于确定所述程序已经转换到所述程序能够从其终止的状态中而由所述计算设备的存储器控制器对存储器页面的子集中的一个或多个存储器页面进行压缩;所述程序使用的存储器的子集包括由程序访问或由程序实例化的存储器页面;所述程序使用的存储器的子集包括小于提交给所述程序的全部存储器;能够被释放的针对所述程序的存储器提交量包括提交给所述程序的全部存储器;能够被释放的针对所述程序的存储器提交量包括与提交给所述程序的全部存储器减去其中存储了经压缩的内容的所使用的存储器量相等的量;以及还包括:在释放了能够被释放的针对一定量的存储器的存储器提交之后:确定将要访问所述程序的一个或多个存储器页面,尝试重新获得针对所述程序的至少一个或多个存储器页面的存储器提交,响应于重新获得存储器提交的尝试成功,允许访问所述一个或多个存储器页面,以及响应于重新获得存储器提交的尝试不成功,终止并重新启动所述程序。
一种减少针对计算设备中的程序的存储器提交量的方法,所述方法包括:确定要访问所述程序的一个或多个存储器页面,所述程序已经释放了其存储器提交的至少一部分;尝试重新获得针对所述程序的至少一个或多个存储器页面的存储器提交;响应于重新获得存储器提交的尝试成功,允许访问所述一个或多个存储器页面;以及响应于重新获得存储器提交的尝试不成功,终止并重新启动所述程序。
作为以上描述的方法中的任意一个的可替换方案或附加方案,以下各项中的任意一个或其组合:尝试重新获得针对至少所述一个或多个存储器页面的存储器提交包括尝试重新获得针对程序的先前释放的全部存储器提交;尝试重新获得针对至少所述一个或多个存储器页面的所述存储器提交包括:在接收到访问存储器页面的请求时,在每个页面的基础上,尝试重新获得针对所述一个或多个存储器页面中的每一个存储器页面的存储器提交;所述确定包括确定所述一个或多个存储器页面将由附加至所述程序的地址空间的代码访问;所述确定还包括确定所述程序的所述一个或多个存储器页面将要通过来自附加至所述程序的地址空间的代码的写请求或锁定请求访问;还包括,在不尝试重新获得针对程序的一个或多个存储器页面中的至少一个的存储器提交的情况下,允许响应于确定要由来自附加程序的读取请求访问程序的一个或多个存储页面而访问一个或多个存储器页面;以及所述确定包括,响应于运行程序的用户请求,确定将要访问一个或多个存储器页面。
一种计算设备,包括存储器管理系统,所述存储器管理系统被配置为节省在计算设备中的存储器提交,所述存储器管理系统包括:程序终止准备模块,其被配置为:确定程序处于所述程序能够从其终止的状态中,一定量的存储器已经被提交给所述程序,所述一定量的存储器是针对所述程序的存储器提交,提交给程序的所述一定量的存储器的子集已经被所述程序使用,以及提交给程序的所述一定量的存储器包括多个存储器页面;压缩由所述程序使用的存储器的子集中的存储器页面的内容;确定能够被释放的针对程序的存储器提交量;以及在已经压缩了程序所使用的存储器的子集之后,释放所确定的针对程序的存储器提交量;以及程序访问模块,其被配置为在释放了能够被释放的针对一定量的存储器的提交开销之后:确定要访问所述程序的一个或多个存储器页面;尝试重新获得针对所述程序的至少所述一个或多个存储器页面的存储器提交;响应于重新获得存储器提交的尝试成功,允许访问所述一个或多个存储器页面;以及响应于重新获得存储器提交的尝试不成功,终止并重新启动所述程序。
作为以上描述的计算设备中的任意一个的可替换方案或附加方案,以下各项中的任意一个或其组合:存储器管理系统还包括存储器分配器,所述存储器分配器被配置为从所述程序接收这样的指示,如果所述存储器分配器期望的话,则能够释放先前分配的存储器提交量,并且所述存储器分配器被配置为释放先前分配的存储器提交量并将先前分配的存储器提交量分配给计算设备的另一个程序;程序终止准备模块还被配置为:响应于确定所述程序已经被转换到所述程序能够从其终止的状态,由所述存储器管理系统的存储器控制器对所述存储器页面的内容进行压缩;其中,尝试重新获得针对至少所述一个或多个存储器页面的所述存储器提交在于:在接收到访问存储器页面的请求时,在每个页面的基础上,尝试重新获得针对所述一个或多个存储器页面中的每一个存储器页面的存储器提交;以及其中,确定要访问所述程序的所述一个或多个存储器页面在于:确定将由附加至所述程序的地址空间的代码来访问一个或多个存储器页面。
尽管已经以特定于结构特征和/或方法动作的语言描述了主题,但是应理解到,在随附权利要求中限定的主题未必限于以上描述的特定特征或动作。相反,以上描述的特定特征和动作是作为实现权利要求的示例形式而公开的。

Claims (16)

1.一种减少针对计算设备中的程序的存储器提交量的方法,所述方法包括:
确定所述程序处于所述程序能够从其终止的状态中,一定量的存储器已经被提交给所述程序,所述一定量的存储器是保证向所述程序分配的一定量的存储器的可用性的存储器提交,提交给所述程序的所述一定量的存储器的子集已经被所述程序使用,并且提交给所述程序的所述一定量的存储器包括多个存储器页面,;
压缩被所述程序使用的所述存储器的子集中的所述存储器页面的内容,其中所述压缩包括由所述计算设备的存储器控制器在所述程序正在运行时并且在所述程序被转换到所述程序能够从其终止的状态之前,对所述存储器页面的子集中的一个或多个存储器页面进行压缩;
确定能够被释放的针对所述程序的存储器提交量;以及
在已经压缩了被所述程序使用的所述存储器的所述子集之后,释放所确定的针对所述程序的存储器提交量,所确定的针对所述程序的存储器提交量是有效的以保证将可用于所述程序的所述一定量的存储器减少到比当前分配给所述程序的量小的量。
2.根据权利要求1所述的方法,所述程序能够从其终止的状态包括可终止状态,在所述可终止状态中已经保存了程序的处理状态,并且所述程序随后能够被恢复至所述可终止状态。
3.根据权利要求1所述的方法,所述程序能够从其终止的状态包括活动状态。
4.根据权利要求1所述的方法,进一步包括维持释放的所述存储器提交的记录。
5.根据权利要求1所述的方法,压缩所述存储器页面的内容包括:响应于确定所述程序已经转换到所述程序能够从其终止的状态,而由所述计算设备的存储器控制器对所述存储器页面的子集中的一个或多个存储器页面进行压缩。
6.根据权利要求1所述的方法,被所述程序使用的所述存储器的子集包括由所述程序访问或由所述程序实例化的存储器页面。
7.根据权利要求1所述的方法,被所述程序使用的所述存储器的子集包括小于提交给所述程序的全部存储器。
8.根据权利要求1所述的方法,能够被释放的针对所述程序的存储器提交量包括提交给所述程序的全部存储器。
9.根据权利要求1所述的方法,能够被释放的针对所述程序的存储器提交量包括与针对所述程序提交的全部存储器减去其中存储了经压缩的内容的所使用的存储器量相等的量。
10.根据权利要求4所述的方法,还包括:在针对能够被释放的所述一定量的存储器的释放了所述存储器提交之后:
确定所述程序的一个或多个存储器页面要被访问;
使用所述记录尝试重新获得针对所述程序的至少所述一个或多个存储器页面的存储器提交;
响应于重新获得存储器提交的所述尝试成功,允许访问所述一个或多个存储器页面;以及
响应于重新获得存储器提交的所述尝试不成功,终止并重新启动所述程序。
11.一种计算设备,包括存储器管理系统,所述存储器管理系统被配置为节省在计算设备中的存储器提交,所述存储器管理系统包括:
程序终止准备模块,其被配置为:
确定程序处于所述程序能够从其终止的状态中,一定量的存储器已经被提交给所述程序,所述一定量的存储器是保证向所述程序分配的一定量的存储器的可用性的存储器提交,提交给所述程序的所述一定量的存储器的子集已经被所述程序使用,并且提交给所述程序的所述一定量的存储器包括多个存储器页面;
压缩被所述程序使用的所述存储器的子集中的所述存储器页面的内容,并且在所述程序正在运行时并且在所述程序被转换到所述程序能够从其终止的状态之前,对所述存储器页面的子集中的一个或多个存储器页面进行压缩;
确定能够被释放的针对所述程序的存储器提交量;以及
在已经压缩了被所述程序所使用的所述存储器的子集之后,释放所确定的针对所述程序的存储器提交量,以便有效降低由所述程序使用的存储器的量。
12.根据权利要求11所述的计算设备,还包括程序访问模块,其被配置为在针对能够被释放的针对一定量的存储器释放了提交开销之后:
维持释放的所述存储器提交的记录;
确定所述程序的一个或多个存储器页面要被访问;
使用所述记录尝试重新获得针对所述程序的至少所述一个或多个存储器页面的存储器提交;
响应于重新获得存储器提交的所述尝试成功,允许访问所述一个或多个存储器页面;以及
响应于重新获得存储器提交的所述尝试不成功,终止并重新启动所述程序。
13.根据权利要求11所述的计算设备,所述存储器管理系统还包括存储器分配器,所述存储器分配器被配置为从所述程序接收如果所述存储器分配器期望则先前分配的存储器提交量能够被释放的指示,并且释放先前分配的存储器提交量并将先前分配的存储器提交量分配给计算设备的另一个程序。
14.根据权利要求11所述的计算设备,所述程序终止准备模块还被配置为:响应于确定所述程序已经被转换到所述程序能够从其终止的状态,由所述存储器管理系统的存储器控制器来对所述存储器页面的内容进行压缩。
15.根据权利要求12-14中任一项所述的计算设备,其中尝试重新获得针对至少所述一个或多个存储器页面的存储器提交是当接收到访问存储页面的请求时在每页面的基础上尝试重新获得针对所述一个或多个存储器页面中每个存储器页面的存储器提交。
16.根据权利要求12-14中任一项所述的计算设备,其中确定所述程序的一个或多个存储器页面要被访问是通过被附加到所述程序的地址空间的代码来确定所述程序的一个或多个存储器页面要被访问。
CN202011112834.3A 2015-03-02 2016-02-19 使用存储器压缩来减少存储器提交开销 Active CN112231238B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011112834.3A CN112231238B (zh) 2015-03-02 2016-02-19 使用存储器压缩来减少存储器提交开销

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US14/635,302 US9632924B2 (en) 2015-03-02 2015-03-02 Using memory compression to reduce memory commit charge
US14/635,302 2015-03-02
CN202011112834.3A CN112231238B (zh) 2015-03-02 2016-02-19 使用存储器压缩来减少存储器提交开销
PCT/US2016/018559 WO2016140808A1 (en) 2015-03-02 2016-02-19 Using memory compression to reduce memory commit charge
CN201680013351.3A CN107408073B (zh) 2015-03-02 2016-02-19 使用存储器压缩来减少存储器提交开销

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN201680013351.3A Division CN107408073B (zh) 2015-03-02 2016-02-19 使用存储器压缩来减少存储器提交开销

Publications (2)

Publication Number Publication Date
CN112231238A true CN112231238A (zh) 2021-01-15
CN112231238B CN112231238B (zh) 2024-04-16

Family

ID=55487135

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201680013351.3A Active CN107408073B (zh) 2015-03-02 2016-02-19 使用存储器压缩来减少存储器提交开销
CN202011112834.3A Active CN112231238B (zh) 2015-03-02 2016-02-19 使用存储器压缩来减少存储器提交开销

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN201680013351.3A Active CN107408073B (zh) 2015-03-02 2016-02-19 使用存储器压缩来减少存储器提交开销

Country Status (5)

Country Link
US (1) US9632924B2 (zh)
EP (1) EP3265918B1 (zh)
CN (2) CN107408073B (zh)
ES (1) ES2711561T3 (zh)
WO (1) WO2016140808A1 (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10102148B2 (en) 2013-06-13 2018-10-16 Microsoft Technology Licensing, Llc Page-based compressed storage management
US9684625B2 (en) 2014-03-21 2017-06-20 Microsoft Technology Licensing, Llc Asynchronously prefetching sharable memory pages
US10037270B2 (en) 2015-04-14 2018-07-31 Microsoft Technology Licensing, Llc Reducing memory commit charge when compressing memory
US11150929B2 (en) * 2018-05-29 2021-10-19 Red Hat, Inc. Enhanced memory management for virtual machines
US10977172B2 (en) * 2018-06-03 2021-04-13 Apple Inc. Memory page reclamation in a user idle mode

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1289419A (zh) * 1998-02-10 2001-03-28 国际商业机器公司 压缩存储自由空间管理
US6298422B1 (en) * 1996-06-17 2001-10-02 Network Associates, Inc. Method for reducing the memory requirements for an application program executing in a multi-tasking environment
US20050132161A1 (en) * 2003-12-15 2005-06-16 Nokia Corporation Creation of virtual memory space in a memory
US20130160011A1 (en) * 2011-12-19 2013-06-20 Vmware, Inc. Hibernate mechanism for virtualized java virtual machines
CN104008064A (zh) * 2013-02-25 2014-08-27 国际商业机器公司 用于多级存储器压缩的方法和系统

Family Cites Families (82)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0097256B1 (en) 1982-06-21 1989-01-25 International Business Machines Corporation Method and apparatus for managing a buffer pool referenced by batch and interactive process
EP0346039A2 (en) 1988-06-06 1989-12-13 Demax Software, Inc Dynamic load balancing for multi-user computers
CA1329432C (en) 1988-11-02 1994-05-10 William Davy Method of memory and cpu time allocation for a multi-user computer system
US4965717A (en) 1988-12-09 1990-10-23 Tandem Computers Incorporated Multiple processor system having shared memory with private-write capability
US5125086A (en) 1989-06-29 1992-06-23 Digital Equipment Corporation Virtual memory paging apparatus with variable size in-page clusters
US5101485B1 (en) 1989-06-29 1996-12-10 Frank L Perazzoli Jr Virtual memory page table paging apparatus and method
US5394537A (en) 1989-12-13 1995-02-28 Texas Instruments Incorporated Adaptive page placement memory management system
US5247687A (en) 1990-08-31 1993-09-21 International Business Machines Corp. Method and apparatus for determining and using program paging characteristics to optimize system productive cpu time
CA2055295C (en) 1991-11-12 2000-05-23 Jean Gilles Fecteau Logical mapping of data objects using data spaces
US5826057A (en) 1992-01-16 1998-10-20 Kabushiki Kaisha Toshiba Method for managing virtual address space at improved space utilization efficiency
US5628023A (en) 1993-04-19 1997-05-06 International Business Machines Corporation Virtual storage computer system having methods and apparatus for providing token-controlled access to protected pages of memory via a token-accessible view
US5696926A (en) 1993-07-30 1997-12-09 Apple Computer, Inc. Method and apparatus for transparently compressing data in a primary storage device
WO1995018997A2 (en) 1993-12-30 1995-07-13 Connectix Corporation Virtual memory management system and method using data compression
US5802599A (en) 1994-02-08 1998-09-01 International Business Machines Corporation System and method for allocating storage in a fragmented storage space
US5555399A (en) 1994-07-07 1996-09-10 International Business Machines Corporation Dynamic idle list size processing in a virtual memory management operating system
JP2831602B2 (ja) 1995-01-13 1998-12-02 富士通株式会社 圧縮データ管理装置及び圧縮データ管理方法
US5544349A (en) 1995-01-23 1996-08-06 International Business Machines Corporation Method and system for improving the performance of memory in constrained virtual memory environments by reducing paging activity
US5758174A (en) 1995-06-07 1998-05-26 International Business Machines Corporation Computer system having a plurality of stored system capability states from which to resume
US5966735A (en) 1996-11-22 1999-10-12 Digital Equipment Corporation Array index chaining for tree structure save and restore in a process swapping system
US6681239B1 (en) 1996-12-23 2004-01-20 International Business Machines Corporation Computer system having shared address space among multiple virtual address spaces
US6128713A (en) 1997-09-24 2000-10-03 Microsoft Corporation Application programming interface enabling application programs to control allocation of physical memory in a virtual memory system
US6330572B1 (en) 1998-07-15 2001-12-11 Imation Corp. Hierarchical data storage management
JP3444346B2 (ja) 1999-01-04 2003-09-08 日本電気株式会社 仮想メモリ管理方式
US6496912B1 (en) 1999-03-25 2002-12-17 Microsoft Corporation System, method, and software for memory management with intelligent trimming of pages of working sets
US6496909B1 (en) 1999-04-06 2002-12-17 Silicon Graphics, Inc. Method for managing concurrent access to virtual memory data structures
US6349372B1 (en) 1999-05-19 2002-02-19 International Business Machines Corporation Virtual uncompressed cache for compressed main memory
US6442664B1 (en) 1999-06-01 2002-08-27 International Business Machines Corporation Computer memory address translation system
US6564305B1 (en) 2000-09-20 2003-05-13 Hewlett-Packard Development Company Lp Compressing memory management in a device
US7047382B2 (en) 2000-11-29 2006-05-16 Quickshift, Inc. System and method for managing compression and decompression and decompression of system memory in a computer system
US6877081B2 (en) 2001-02-13 2005-04-05 International Business Machines Corporation System and method for managing memory compression transparent to an operating system
US6516397B2 (en) 2001-04-09 2003-02-04 Hewlett-Packard Company Virtual memory system utilizing data compression implemented through a device
US7107299B2 (en) 2001-08-14 2006-09-12 Hewlett-Packard Development Company, L.P. Method and apparatus for managing large numbers of objects having the same property
US6775751B2 (en) 2002-08-06 2004-08-10 International Business Machines Corporation System and method for using a compressed main memory based on degree of compressibility
US6968424B1 (en) 2002-08-07 2005-11-22 Nvidia Corporation Method and system for transparent compressed memory paging in a computer system
US6910106B2 (en) 2002-10-04 2005-06-21 Microsoft Corporation Methods and mechanisms for proactive memory management
US6956507B2 (en) 2002-12-12 2005-10-18 International Business Machines Corporation Method and apparatus for morphing memory compressed machines
US7296139B1 (en) 2004-01-30 2007-11-13 Nvidia Corporation In-memory table structure for virtual address translation system with translation units of variable range size
TWI267024B (en) 2004-06-18 2006-11-21 Winbond Electronics Corp Method and apparatus for connecting LPC bus and serial flash memory
US7587572B1 (en) 2004-08-31 2009-09-08 Sun Microsystems, Inc. Method and system for managing process memory configured in resizable uncompressed and compressed regions
US20060161912A1 (en) 2005-01-18 2006-07-20 Barrs John W Infrastructure for device driver to monitor and trigger versioning for resources
US7437529B2 (en) 2005-06-16 2008-10-14 International Business Machines Corporation Method and mechanism for efficiently creating large virtual memory pages in a multiple page size environment
US20070005911A1 (en) 2005-07-01 2007-01-04 Nec Laboratories America, Inc. Operating System-Based Memory Compression for Embedded Systems
US7984084B2 (en) 2005-08-03 2011-07-19 SanDisk Technologies, Inc. Non-volatile memory with scheduled reclaim operations
US7461242B2 (en) 2005-11-03 2008-12-02 Ati Technologies Ulc Method and apparatus for providing context switching of logic in an integrated circuit using test scan circuitry
US7475183B2 (en) 2005-12-12 2009-01-06 Microsoft Corporation Large page optimizations in a virtual machine environment
US20070156386A1 (en) 2005-12-30 2007-07-05 Guenthner Russell W Linearization of page based memory for increased performance in a software emulated central processing unit
US7484074B2 (en) 2006-01-18 2009-01-27 International Business Machines Corporation Method and system for automatically distributing real memory between virtual memory page sizes
US8095931B1 (en) 2006-04-27 2012-01-10 Vmware, Inc. Controlling memory conditions in a virtual machine
US7624240B1 (en) 2006-10-17 2009-11-24 Vmware, Inc. Separate swap files corresponding to different virtual machines in a host computer system
US8015367B1 (en) 2007-02-16 2011-09-06 Vmware, Inc. Memory management methods in a computer system with shared memory mappings
US7895242B2 (en) 2007-10-31 2011-02-22 Microsoft Corporation Compressed storage management
US8631203B2 (en) * 2007-12-10 2014-01-14 Microsoft Corporation Management of external memory functioning as virtual cache
US20090327621A1 (en) 2008-06-27 2009-12-31 Microsoft Corporation Virtual memory compaction and compression using collaboration between a virtual memory manager and a memory manager
US8024546B2 (en) 2008-10-23 2011-09-20 Microsoft Corporation Opportunistic page largification
US8341380B2 (en) 2009-09-22 2012-12-25 Nvidia Corporation Efficient memory translator with variable size cache line coverage
US8239610B2 (en) 2009-10-29 2012-08-07 Red Hat, Inc. Asynchronous page faults for virtual machines
US20110153978A1 (en) 2009-12-21 2011-06-23 International Business Machines Corporation Predictive Page Allocation for Virtual Memory System
US8386740B2 (en) 2010-03-29 2013-02-26 International Business Machines Corporation Modeling memory compression
US9015441B2 (en) 2010-04-30 2015-04-21 Microsoft Technology Licensing, Llc Memory usage scanning
US8484405B2 (en) 2010-07-13 2013-07-09 Vmware, Inc. Memory compression policies
EP2630573B1 (en) 2010-10-22 2015-05-20 ST-Ericsson SA Methods and devices for reducing compressed page loading time on page fault
US8495267B2 (en) 2010-11-24 2013-07-23 International Business Machines Corporation Managing shared computer memory using multiple interrupts
KR20120066198A (ko) 2010-12-14 2012-06-22 삼성전자주식회사 휘발성 메모리를 포함하는 저장 장치의 데이터 저장 방법
US8370667B2 (en) * 2010-12-22 2013-02-05 Intel Corporation System context saving based on compression/decompression time
US8972696B2 (en) 2011-03-07 2015-03-03 Microsoft Technology Licensing, Llc Pagefile reservations
US8661221B2 (en) 2011-03-16 2014-02-25 International Business Machines Corporation Leasing fragmented storage between processes
US9286101B2 (en) 2011-07-28 2016-03-15 Red Hat, Inc. Free page hinting
JP5385347B2 (ja) 2011-08-02 2014-01-08 レノボ・シンガポール・プライベート・リミテッド メイン・メモリのフリー・メモリ量を拡大する方法およびコンピュータ
KR101221241B1 (ko) 2011-08-26 2013-01-11 린나이코리아 주식회사 실 팩킹 및 조리장치와 외부 설치구조물의 실 팩킹구조
US8832411B2 (en) 2011-12-14 2014-09-09 Microsoft Corporation Working set swapping using a sequentially ordered swap file
US9053018B2 (en) 2012-06-29 2015-06-09 International Business Machines Corporation Compressed memory page selection based on a population count of a dataset
US9489293B2 (en) 2012-08-17 2016-11-08 Netapp, Inc. Techniques for opportunistic data storage
US9354916B2 (en) 2012-11-29 2016-05-31 Red Hat Israel, Ltd. Detection of guest disk cache
KR102011135B1 (ko) 2012-12-11 2019-08-14 삼성전자주식회사 모바일 장치 및 그것의 스왑을 통한 데이터 관리 방법
US10565099B2 (en) 2012-12-28 2020-02-18 Apple Inc. Methods and apparatus for compressed and compacted virtual memory
US9396030B2 (en) 2013-03-13 2016-07-19 Samsung Electronics Co., Ltd. Quota-based adaptive resource balancing in a scalable heap allocator for multithreaded applications
US10102148B2 (en) 2013-06-13 2018-10-16 Microsoft Technology Licensing, Llc Page-based compressed storage management
KR20150043102A (ko) 2013-10-14 2015-04-22 한국전자통신연구원 하이브리드 메모리의 데이터 관리 장치 및 방법
US9400754B2 (en) 2013-12-19 2016-07-26 International Business Machines Corporation Asynchronous swap mechanism and page eviction from memory
US20150242432A1 (en) 2014-02-21 2015-08-27 Microsoft Corporation Modified Memory Compression
US9684625B2 (en) 2014-03-21 2017-06-20 Microsoft Technology Licensing, Llc Asynchronously prefetching sharable memory pages
US10037270B2 (en) 2015-04-14 2018-07-31 Microsoft Technology Licensing, Llc Reducing memory commit charge when compressing memory

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6298422B1 (en) * 1996-06-17 2001-10-02 Network Associates, Inc. Method for reducing the memory requirements for an application program executing in a multi-tasking environment
CN1289419A (zh) * 1998-02-10 2001-03-28 国际商业机器公司 压缩存储自由空间管理
US20050132161A1 (en) * 2003-12-15 2005-06-16 Nokia Corporation Creation of virtual memory space in a memory
US20130160011A1 (en) * 2011-12-19 2013-06-20 Vmware, Inc. Hibernate mechanism for virtualized java virtual machines
CN104008064A (zh) * 2013-02-25 2014-08-27 国际商业机器公司 用于多级存储器压缩的方法和系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
谭兰, 卢显良: "内存压缩技术提高计算机系统性能的方法和实现", 福建电脑, no. 12 *

Also Published As

Publication number Publication date
EP3265918B1 (en) 2018-11-14
EP3265918A1 (en) 2018-01-10
CN107408073B (zh) 2020-11-10
US9632924B2 (en) 2017-04-25
WO2016140808A1 (en) 2016-09-09
CN107408073A (zh) 2017-11-28
ES2711561T3 (es) 2019-05-06
US20160259720A1 (en) 2016-09-08
CN112231238B (zh) 2024-04-16

Similar Documents

Publication Publication Date Title
US10310893B2 (en) Managing container pause and resume
JP6412583B2 (ja) 修正されたメモリー圧縮
CN107408073B (zh) 使用存储器压缩来减少存储器提交开销
KR102069940B1 (ko) 페이지 기반 압축 저장 관리
US9928168B2 (en) Non-volatile random access system memory with DRAM program caching
EP3283965B1 (en) Reducing memory commit charge when compressing memory
US9626126B2 (en) Power saving mode hybrid drive access management
US9323460B2 (en) Assigning priorities to data for hybrid drives
US20180321857A1 (en) Dirty Data Management for Hybrid Drives
US11360884B2 (en) Reserved memory in memory management system
US9684625B2 (en) Asynchronously prefetching sharable memory pages
US10649889B2 (en) Method and apparatus for managing kernel memory of data processing systems
US10275169B2 (en) Shared memory in memory isolated partitions
CN115357389A (zh) 内存管理方法、装置及电子设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant