修改的存储器压缩的制作方法

文档序号:10663573阅读:592来源:国知局
修改的存储器压缩的制作方法
【专利摘要】来自程序进程的工作集的一组存储页面——诸如已被修改的存储页面中的至少一些存储页面——在被写到页面文件之前被压缩到压缩存储库中,在此之后这些存储页面可以由存储器管理器赋予新用途。压缩存储库由多个存储页面构成,并且压缩存储库存储页面在被写到页面文件之后可以由存储器管理器赋予新用途。之后的来自存储器管理器的对于已被压缩到压缩存储库中的存储页面的请求通过以下方式满足:访问压缩存储库存储页面(包括如果压缩存储库存储页面被写到页面文件,则从页面文件中检索它们),将所请求的存储页面解压缩,并且将所请求的存储页面返还给存储器管理器。
【专利说明】
修改的存储器压缩
【背景技术】
[0001]随着计算机技术的发展,计算机处理器的性能增强。然而,这样的计算机处理器的性能有时被计算机中的其他瓶颈所阻碍。例如,从硬盘驱动机到随机存取存储器(RAM)的数据传送的速度是计算机性能中的瓶颈。一种减小计算机中瓶颈的影响的方式是在RAM中存储更多数据。然而,RAM的成本依然足够高,以致在计算机中使用非常大量的RAM典型地是成本太过高昂的。

【发明内容】

[0002]提供本概要来以简化的形式介绍概念的选择,这些概念将在以下的详细说明中进一步描述。本概要既不打算标识所要求保护的主题的关键特征或必要特征,也不打算用来限制所要求保护的主题的范围。
[0003]按照一个或者多个方面,标识已经被修改的第一组存储页面。将第一组存储页面压缩到由第二组存储页面构成的压缩存储库(compressed store)中。在第一组存储页面已经被压缩到压缩存储库中之后,允许存储器管理器为该第一组存储页面赋予新用途。另外,将第二组存储页面写出到页面文件,而不是将第一组存储页面写出到页面文件。
[0004]按照一个或者多个方面,计算设备包括存储器、被配置成管理存储器的页面的存储器管理器、以及压缩存储库管理器。压缩存储库管理器被配置成将已经被进程修改的第一组存储页面压缩到与该进程相关联的压缩存储库中,压缩存储库由第二组存储页面构成。压缩存储库管理器被进一步配置成在存储页面已经被压缩到压缩存储库中之后,针对第一组存储页面中的每个存储页面,允许存储器管理器为该存储页面赋予新用途,以及在不存在将第一组存储页面写出到页面文件的情况下,将第二组存储页面写出到页面文件。
【附图说明】
[0005]贯穿附图使用相同的数字引用同样的特征。
[0006]图1图示按照一个或者多个实施例的、采用已修改的存储器压缩的示例性系统。
[0007]图2图示按照一个或者多个实施例的存储页面的示例性生命周期。
[0008]图3图示按照一个或者多个实施例的分页存储器的示例性记录。
[0009]图4图示按照一个或者多个实施例的压缩存储页面的示例。
[0010]图5是图示了按照一个或者多个实施例的、用于压缩存储页面的示例性过程的流程图。
[0011]图6是图示了按照一个或者多个实施例的、用于检索已压缩存储页面的示例性过程的流程图。
[0012]图7图示按照一个或者多个实施例的示例性存储页面图。
[0013]图8图示按照一个或者多个实施例的示例性区域图。
[0014]图9显示按照一个或者多个实施例的将工作集(wordingset)换出(out-swapping)的示例。
[0015]图10是图示了按照一个或者多个实施例的、用于将工作集换出的示例性过程的流程图。
[0016]图11是图示了按照一个或者多个实施例的、用于将工作集换入(in-swapping)的示例性过程的流程图。
[0017]图12图示包括示例性计算设备的示例性系统,所述示例性计算设备代表可实施本文描述的各种技术的一个或者多个系统和/或设备。
【具体实施方式】
[0018]本文讨论了已修改的存储器压缩。在系统中的存储器由被称为存储页面(或者简单称为页面)的多个块或者部分构成。来自程序的工作集的一组存储页面,诸如已被修改的该工作集中的存储页面中的至少一些存储页面,在被写到页面文件之前被压缩到压缩存储库中。存储页面可以在被压缩到压缩存储库之后由存储器管理器赋予新用途,而不管压缩存储库是否已经写到页面文件。压缩存储库其自身由多个存储页面构成,并且压缩存储库存储页面可以在其被写到页面文件之后由存储器管理器赋予新用途。之后的来自存储器管理器的对于已被压缩到压缩存储库中的存储页面的请求通过以下方式满足:访问压缩存储库存储页面(包括如果所述压缩存储库存储页面被写到页面文件,则从页面文件中检索它们),将所请求的存储页面解压缩,并且将所请求的存储页面返还给存储器管理器。
[0019]附加地,在诸如当程序暂停时的某些情形中,存储页面的工作集被换出。将存储页面工作集换出包括标识在该程序进程的工作集中的存储页面的列表,压缩所标识的存储页面,并且以顺序次序通过已标识存储页面的虚拟存储器地址将经压缩的已标识存储页面写到压缩存储库。在页面文件中为压缩存储库预留空间,并且将压缩存储库写出到页面文件中的该预留空间。
[0020]响应于之后确定要恢复该程序,将用于该程序的存储页面工作集换入。换入存储页面的工作集包括从页面文件中检索压缩存储库,并且将压缩存储库存储在一组压缩存储库存储页面中。将压缩存储库存储页面解压缩,并且将其返还给存储器管理器以便包括在该程序的工作集中。
[0021]图1图示按照一个或者多个实施例的、采用已修改的存储器压缩的示例系统100。系统100包括存储器管理器102、压缩存储库管理器104和分页存储器106。一般地,存储器管理器102管理分页存储器106中的数据的存储。存储器管理器102将分页存储器106的一些部分分配给系统100中的各种程序108。在本文中,程序108在运行时也被称为进程(其是运行中的程序108的实例),所以被分配给程序108的分页存储器106的部分也被称为被分配给程序108的进程。被分配给进程的页面由该进程拥有,或者专用于该进程,并被该进程使用且不被其他进程使用(并且因此也被称为私有页面)。程序108可以是应用、操作系统程序、或者其他组件或模块。存储器管理器102从这些程序108接收关于从分页存储器106检索数据和关于将数据写到分页存储器106的请求。分页存储器106可以例如是任何类型的CPU(中央处理单元)可寻址的存储器,诸如易失性存储器(例如,RAM)或者非易失性存储器(例如,闪速存储器)。
[0022]存储器管理器102还将分页存储器106的一个或者多个部分分配给压缩存储库管理器104。虽然分开图示,但是压缩存储库管理器104被视为用于分配存储页面目的的程序108。压缩存储库管理器104生成一个或者多个用于以压缩形式存储数据的压缩存储库110,例如为每个程序108生成一个压缩存储库110。系统100还包括页面文件112,其是在可以存储存储页面的存储设备上的文件。其上存储页面文件112的存储设备是系统100中的次级存储设备,并且在一个或者多个实施例中,其具有较低的读/写次数,但是它比分页存储器106具有更大的存储容量。存储页面文件112的存储设备可以例如是闪速存储器(例如,固态盘(SSD))或者磁盘。虽然在图1中图示了单个页面文件112,但是应该指出,可以在系统100中包括多个页面文件。
[0023]存储器管理器102使用分页来管理分页存储器106。存储器管理器102将存储器106(例如,RAM)组织成页面,其是数据的特定(例如,固定)大小单位。分页的动作指的是当数据不在存储器106中时,以页面为单位从后备文件(backing file)(其是系统100中的页面文件112)读取数据。分页的动作还指的是以页面为单位将脏的(已修改的)数据写回到页面文件112中。存储页面因此也被称为后备页面文件的存储页面。这样的分页技术是本领域技术人员熟知的。
[0024]存储器管理器102包括存储器控制器114,其操作来实行存储器管理器102的功能性,以及包括页面表116,其记录关于分页存储器106的存储页面的各种信息。页面表116包括指示在任何给定时间存储页面被存储在哪里的信息。如以下更详细讨论的,存储页面典型地被存储在物理存储器(分页存储器106)中或者压缩存储库110(其自身可以被存储在物理存储器或者页面文件112中)中,但是在一些情形中,未压缩的存储页面可以被存储在页面文件112中。对于存储在物理存储器中的存储页面,存储器管理器102直接访问存储页面。对于存储在压缩存储库110中的存储页面,存储器管理器102从压缩存储库管理器104请求存储页面,压缩存储库管理器104酌情检索和解压缩存储页面,并且将解压缩的存储页面返还给存储器管理器102。在未压缩的存储页面被存储在页面文件112中的事件中,存储器管理器从页面文件112检索存储页面。
[0025]分页存储器106包括多个页面,其可以在任何给定时间各自被分类成多种不同的页面类型之一,并且这种分类可以随时间改变。一种类型的存储页面是已被分配给程序108并且当前正被程序108使用的存储页面,且这种类型的存储页面被称为程序108的进程的工作集(也被称为程序108的工作集)中的工作集页面(或者可替换地,已指派的页面)。当前正使用的存储页面指的是在阈值时间量内(例如,之前20秒)被程序108访问过的存储页面,或者别样的被程序108正以存储页面不被存储器管理器102赋予新用途这样的方式进行访问的存储页面。为存储页面赋予新用途指的是由存储器管理器102为了其他事,诸如为相同或不同程序存储不同的数据或者为系统中的其他用途,而重新使用存储页面。
[0026]另一类型的存储页面是已经被分配给程序108并且当前未被程序108使用的存储页面,且这种类型的存储页面被称为备用(standby)页面(或者可替换地被称为可再指派的页面)。当前未被使用的存储页面指的是其内容还未被修改(或者自从上次修改之后被写到页面文件112或者压缩存储库110)并且在阈值时间量内(例如,之前20秒)未被程序108访问过的页面,或者别样的被程序108以存储页面可以由存储器管理器102赋予新用途这样的方式进行访问的页面。存储页面可以通过例如被指派给不同类型的页面(例如,工作的)、被分配给不同的程序等等来被赋予新用途。
[0027]另一类型的存储页面是其内容已被修改但还未复制到页面文件112的存储页面,且这种类型的存储页面被称为已修改的页面(或者可替换地被称为脏页面)。已修改的存储页面不会被存储器管理器102赋予新用途。然而,在如以下更详细讨论的那样将已修改的存储页面压缩并存储在压缩存储库110中之后,存储页面的分类可以被改变(例如,改变为备用页面或者空闲页面)。
[0028]另一类型的存储页面是当前未被分配给程序108并且存储器管理器102可以用其来做任何事情(包括被赋予新用途)的存储页面。这种类型的存储页面被称为空闲页面(或者可替换地称为解除分配的页面)。
[0029]存储器管理器102使用各种规则或者准则来确定分页存储器106的存储页面何时被分配给程序108、哪些存储页面被分配给哪些程序108、哪些之前被分配给程序108的存储页面要被赋予新用途等等。存储器管理器102还确定对于存储页面类型的分类,从而酌情修改存储页面的分类。在一个或者多个实施例中,存储器管理器102维护分页存储器106的哪些存储页面被分类为哪种类型页面的列表或者其他记录。例如,存储器管理器102可以维护工作集页面的列表或者其他记录、备用页面的列表或者其他记录、已修改页面的列表或记录、空闲页面的列表或记录等等。
[°03°]系统100表不一个或者多个设备。在一个或者多个实施例中,在系统100中图不的组件102-108被包括作为相同计算设备的一部分。可替换地,这些组件可以跨两个或者更多设备来散布。
[0031]图2图示按照一个或者多个实施例的存储页面的示例性生命周期200。存储页面可以被分配给程序,并且被包括在程序的工作集202中。程序的工作集202包括程序的工作集页面。存储器管理器102可以在各种时间并且出于各种原因削减(trim)(也被称为减少)程序的工作集202中的存储页面,如此以使得存储页面对其他程序可用。已经被写(修改)到工作集202以及从工作集202中削减的存储页面被移动204到存储页面的已修改列表206。
[0032]压缩存储库管理器104压缩已修改列表206中的存储页面,并且将已压缩的存储页面添加208到压缩存储库110的存储页面。压缩存储库管理器104可以确定关于何时以不同方式来压缩已修改列表中的存储页面的定时,所述不同方式诸如是以规律或者不规律的间隔来压缩存储页面、响应于至少阈值数量的存储页面被包括在已修改列表中而压缩存储页面、响应于来自存储器管理器102的请求而压缩存储页面、响应于确定进程的存储页面将如以下更详细讨论的那样被换出而压缩存储页面、等等。在被压缩并添加到压缩存储库110之后,在已修改列表206中的存储页面被移动210到备用列表212。备用列表212是备用页面的列表,但是存储页面可以可替换地移动到空闲页面的列表。
[0033]压缩存储库110自身由多个存储页面(其在本文中也被称为压缩存储库存储页面)构成,并且这些压缩存储库存储页面可以按期望由压缩存储库110或者存储器管理器102移动214到已修改列表206。然而,压缩存储库存储页面不必按期望移动到已修改列表达长的时间(潜在为无限期)。压缩存储库存储页面可以保留在压缩存储库的工作集中。
[0034]对于移动到已修改列表206的压缩存储库存储页面,存储器管理器102(或者可替换地,压缩存储库管理器104)将这些压缩存储库存储页面写出216到页面文件112。因此,来自工作集202的存储页面在被压缩并存储到压缩存储库存储页面之后可以被写到页面文件112。应该指出的是,压缩存储库管理器104没有尝试压缩在已修改列表206上的压缩存储库存储页面。压缩存储库管理器104可以标识其没有尝试以不同方式压缩的存储页面,诸如基于存储页面被分配到的进程(例如,如果被分配到诸如压缩存储库管理器104那样的系统进程,则不做出压缩存储页面的尝试)、通过维护压缩存储库存储页面的记录、等等。
[0035]可能会出现一些情形,其中来自工作集202的、被移动到已修改列表206的存储页面不能在预期时间量(例如,在阈值时间量内)中被压缩或者以其他方式添加到压缩存储库110的存储页面、或者系统100出于各种策略原因选择根本不压缩存储页面。这样的情形可能偶尔发生,诸如由于在系统100中有繁重的存储器使用、在系统100中有繁重的处理器使用、应用于系统100的各种策略等等。在这样的情形中,存储器管理器102将未压缩的存储页面写出218到页面文件112。这样的存储页面因此不被包括在压缩存储库110的存储页面中,但是存储器管理器102维护如下的记录(例如,在页面表116中):这样的存储页面从页面文件112而非压缩存储库管理器104可得到。
[0036]返回图1,分页存储器106的页面每个都具有对应的优先级水平。只有特定类型的存储页面(例如,已修改的页面)可以具有优先级水平,或者可替换地,所有类型的存储页面可以具有优先级水平。存储器管理器102为每个存储页面设置优先级水平,并且可以以各种各样不同的方式确定存储页面的优先级水平。在一个或者多个实施例中,存储页面的优先级水平是由操作系统指派给曾请求分配该存储页面的进程或者线程的优先级水平。其他准则也可以被用来确定存储页面的优先级水平,诸如来自程序108的请求、该存储页面是与特定类型的检索(例如,对页面的推测性检索)相关联等等。存储器管理器102还可以随时间更改存储页面的优先级水平(例如,降低在阈值时间量内未被程序108访问的存储页面的优先级水平、降低已经被写到页面文件112并且移动到备用列表212的压缩存储库存储页面的优先级水平等等)。
[0037]优先级水平可以在系统100中以各种方式被使用。在一个或者多个实施例中,存储页面基于其优先级水平被写到页面文件112。要被写到页面文件112的、具有较低优先级的存储页面在具有较高优先级的存储页面之前被写到页面文件。这允许较高优先级的存储页面比较低优先级的存储页面在物理存储器中保留更长时间,并且避免了较高优先级的存储页面在较低优先级的存储页面(其保留在物理存储器中)之前被写到页面文件(而不再处于物理存储器中)的优先级倒置情形。相似地,在一个或者多个实施例中,存储页面基于其优先级水平从备用列表中赋予新的用途。在备用列表上的、具有较低优先级的存储页面在具有较高优先级的存储页面之前被赋予新的用途。这允许较高优先级的存储页面比较低优先级的存储页面在备用列表上保留更长时间。
[0038]图3图示按照一个或者多个实施例的分页存储器的示例性记录300。图示了一组多个(X)优先级水平302,该组优先级水平302包括可对应于页面的优先级水平。分页存储器的记录300是例如图1的分页存储器106的已修改页面的记录。具有较大数字的优先级水平可以是比具有较小数字的优先级水平更高的优先级(例如,优先级水平4可以是比优先级水平I更高的优先级),或者反之亦然。可替换地,可以使用除了数字之外的其它标签来标识优先级水平,诸如,字母或者其他字符。
[0039]对于每个优先级水平302,记录300标识具有该优先级水平的一组零个或者更多存储页面。例如,页面304对应于优先级水平I,页面306对应于优先级水平3等等。记录300可以以各种各样不同方式中的任何方式维护,所述方式诸如是标识对应于特定优先级水平的存储页面的列表或者其他数据结构,针对对应于不同优先级水平的存储页面使用不同的存储区域(例如,不同的高速缓存)等等。
[0040]返回图1,压缩存储库110被实施为由存储器管理器102分配给压缩存储库管理器104的一个或者多个存储页面。这些存储页面是在提供各种功能性的压缩存储库管理器104的用户模式虚拟地址空间中的存储页面。实施压缩存储库110的存储页面不消耗内核(kernel)虚拟地址空间,并且提供防止数据暴露的安全性,因为无特权(unprivileged)用户模式程序不能访问这些存储页面上的数据。此外,通过使用压缩存储库管理器104的用户模式虚拟地址空间中的存储页面,存储器管理器102和压缩存储库管理器104利用现有存储器管理器应用编程接口(API)对存储页面进行控制,从而允许压缩存储库管理器104按期望的去控制其后端数据的可分页能力、交换能力等等存储页面。
[0041]在一个或者多个实施例中,压缩存储库管理器104压缩分页存储器106的页面,并且将已压缩的页面存储在压缩存储库110的区域中,其也被称为将存储页面压缩到压缩存储库110中或者压缩到压缩存储库110的区域中。压缩存储库管理器104为每个程序108(并且与其相关联地)生成单独的压缩存储库110,并且将来自源于特定程序108的已修改列表206的已压缩存储页面添加到与该特定程序相关联的压缩存储库110的区域。可替换地,压缩存储库管理器104可以以不同于每个程序108有一个压缩存储库110的不同粒度生成和维护压缩存储库110(例如,压缩存储管理器104可以为任意一组程序108或者为系统中的所有可分页存储器生成和维护压缩存储库110)。
[0042]压缩存储库110的每个区域由通过存储器管理器102分配给压缩存储库管理器104的、分页存储器106的多个存储页面构成。例如,区域可以是128千字节,并且存储页面每个可以是4千字节,但是这些值是示例性的,并且可以可替换地使用其他的区域和/或页面大小。正被压缩到特定区域中的分页存储器106的页面具有至少相似的优先级水平,并且构成分页存储器106的某个区域的存储页面具有与被压缩到该区域中的存储页面至少相似的优先级水平。具有至少相似优先级水平的存储页面指的是具有相同或者相似优先级水平的存储页面。
[0043]应该指出,本文讨论的由压缩存储库管理器104或者压缩存储库110执行的操作可以由压缩存储库管理器104和压缩存储库110之一或者两者执行,本文讨论的由压缩存储库管理器104执行的操作可以可替换地由压缩存储库110执行,并且本文讨论的由压缩存储库110执行的操作可以可替换地由压缩存储库管理器104执行。在一个或者多个实施例中,压缩存储库管理器104负责管理每个压缩存储库110、将读和写请求路由到适当的压缩存储库110、管理用于压缩存储库110的存储器(例如,请求将存储页面分配给压缩存储库110)等等。在这样的情形中,每个压缩存储库110可以简单地是一组存储页面。可替换地,用以管理用于压缩存储库110的存储器(例如,请求由存储器管理器102把分页存储器106的一组页面分配给压缩存储库110)的控制和逻辑中的至少一些可以由压缩存储库110其自身实施。在这样的情形中,压缩存储库110包括一个或者多个存储页面以及压缩存储库模块来实施用以管理用于压缩存储库110的存储器的控制和逻辑。
[0044]在一个或者多个实施例中,正被压缩到压缩存储库110的特定区域中的、分页存储器106的页面具有相同的优先级水平,并且不同的区域被使用于不同的优先级水平。构成压缩存储库110的某个区域的存储页面具有与被压缩到该区域中的存储页面相同的优先级水平。例如,压缩存储库管理器104可以将图3的页面304压缩到由被分配给压缩存储库管理器104并具有优先级水平I的存储页面构成的一个区域。作为另一个示例,压缩存储库管理器104可以将图3的页面306压缩到由被分配给压缩存储库管理器104并具有优先级水平3的存储页面构成的另一个区域。应该指出,对于每个优先级水平,压缩存储库管理器104可以创建由对应于该优先级水平的存储页面构成的零个或者更多区域。
[0045]可替换地,正被压缩到压缩存储库110的特定区域的、分页存储器106的页面可以具有相似但不一定相同的优先级水平。可以用不同方式来确定哪些优先级水平相似,诸如基于优先级水平是否在彼此的阈值数量的水平(例如,I或者2)之内。例如,优先级水平I和优先级水平2可以是相似的,并且因此优先级水平I的页面和优先级水平2的页面可以被压缩到相同区域中,但是优先级水平I和优先级水平5可能是不相似的,并且因此优先级水平I的页面和优先级水平5的页面不被压缩到相同区域中。
[0046]相似地,构成分页存储器106的某一区域的存储页面可具有与被压缩到该区域的存储页面相似但不一定相同的优先级水平。例如,构成压缩存储库110的某个区域的存储页面可具有优先级水平3,而被压缩到该区域的存储页面可以具有优先级水平2或者优先级3。此外,区域可以由相同或者相似优先级水平的存储页面构成。例如,区域可以由一些具有优先级水平2的存储页面和一些具有优先级水平3的存储页面构成。
[0047]为了创建区域,压缩存储库管理器104请求由存储器管理器102把分页存储器106的一组页面分配给管理器104。所分配的该组页面被分类为工作集页面,并且压缩存储库管理器104将所分配的该组页面与特定压缩存储库110相关联。压缩存储库管理器104压缩已修改列表206上的存储页面,并且将那些已压缩的页面存储在被分配给压缩存储库管理器104的该组页面中。
[0048]因此,例如,特定页面组被压缩到对应于至少相似优先级水平的附加页面组中。在特定页面组被压缩之后,附加页面组也被分类为已修改的页面。因此,压缩存储库管理器104将该特定页面组压缩到相同类型(已修改)的并且对应于至少相似优先级水平的不同页面组中。然而,因为压缩存储库管理器104压缩该特定页面组,所以在该特定页面组中的页面数量通常大于在已压缩页面组中的页面数量。已压缩页面组然后可以被写到页面文件112。可以应用各种不同的策略来确定已压缩页面组何时(或者是否)写到页面文件112。
[0049]图4图示按照一个或者多个实施例的压缩存储页面的示例。分页存储器106包括具有相同优先级水平(例如,如以上讨论的优先级水平3)的五个存储页面306,如在402图示的。压缩存储库管理器104被分配了包括两个存储页面404的压缩存储库区域,所述存储页面404具有与存储页面306至少相似的优先级水平。压缩存储库管理器104将存储页面306压缩到存储页面404中,如在406图示的。在压缩之后,存储器管理器102可以为存储页面306赋予新用途,因为存储页面306的压缩版本作为存储页面404被存储在分页存储器106中。因此,在压缩之后,分页存储器106存储存储页面104,但是不需要存储存储页面306。
[0050]图5是图示了按照一个或者多个实施例的、用于压缩存储页面的示例性过程500的流程图。过程500由诸如图1的压缩存储库管理器104那样的压缩存储库管理器来实行,并且可以被实施在软件、固件、硬件或者其组合中。过程500被示为一组动作,并且不限于所示出的、用于执行各种动作的操作的次序。过程500是用于压缩存储页面的示例性过程;在本文中包括参考不同附图的、对于压缩存储页面的附加讨论。
[0051 ] 在过程500,标识已修改列表上的一组一个或者多个存储页面(动作502)。该组一个或者多个存储页面可以以各种方式标识,诸如以存储页面被添加到已修改列表的次序来标识、基于页面的优先级水平来标识(例如,较低优先级的页面在较高优先级的页面之前被标识)等等。
[0052]在动作502中标识的该组存储页面被压缩到分页存储器的压缩存储库的某个区域中(动作504)。压缩存储库的这个区域由具有与在动作502中标识的该组存储页面至少相似的优先级水平的一个或者多个压缩存储库存储页面构成。作为动作504中的压缩的一部分,压缩存储库管理器维护关于该组存储页面中的每个存储页面的压缩版本被存储在该区域中何处的记录。该记录可以采取各种形式,诸如对于每个存储页面的压缩版本,有一个关于哪个或者哪些压缩存储库存储页面存储着该存储页面的压缩版本的记录,对于每个存储页面的压缩版本,有一个关于该区域中存储着存储页面的压缩版本的地址范围的记录,等等。
[0053]压缩某个存储页面指的是压缩该存储页面的内容(例如,存储在存储页面中的数据)。各种各样不同的公有和/或私有压缩技术中的任何压缩技术都可以用来压缩存储页面。例如,存储页面可以使用游程长度编码压缩算法、LZW压缩算法、霍夫曼编码算法等等来压缩。可以可选地采用多种不同的压缩算法,诸如对于不同类型的内容采用不同的压缩算法。例如,一种压缩算法可以用于字母数字和/或文本内容,另一种压缩算法可以用于图像内容,而另一种压缩算法可以用于音频内容。用于压缩存储页面的压缩技术典型地是无损压缩算法,但是在某些环境下(例如,对于某些图像和/或音频内容),可以可替换地使用有损压缩算法。特定压缩算法还可以是依赖于设备的,其中,较快的设备(例如,具有较强大的一个或者多个处理器)可以被配置以处理器集约化较高的压缩算法,其压缩得较好,而较慢的设备(例如,具有不太强大的一个或者多个处理器)可以被配置以处理器集约化较低的压缩算法,其压缩得不是那么好。特定压缩算法还可以基于与存储设备性能的折衷。如果CPU的工作性能以很大幅度胜过存储设备,则可以使用压缩得较好的处理器集约化较高的压缩算法(并且因此导致较少的存储设备I/O)。
[0054]在一个或者多个实施例中,在动作504,存储页面被一个个地压缩。可替换地,两个或者更多存储页面可以被一同压缩(例如,压缩算法可以在两个或者更多存储页面上一起运行,而不是一个个地运行)。
[0055]在动作504,还可以可选地执行对该组存储页面的附加处理。这种附加处理器可以是对该组存储页面的内容加密(例如,使用对称密钥加密、公钥加密等等)、为该组存储页面生成诸如CRC(循环冗余校验)数据之类的检错数据、为该组存储页面生成诸如HMACX哈希消息验证码)数据之类的验证信息、等等。
[0056]在动作502中标识的该组存储页面在被压缩到压缩存储库之后被移动到备用列表(动作506),或者可替换地被移动到空闲列表。该组存储页面可以以各种方式被移动到备用列表(或者空闲列表),诸如响应于压缩存储库管理器104向存储器管理器102通知该组存储页面可被释放。因为不需要在分页存储器中保持相同存储页面的两个版本(一个版本未被压缩,而另一个版本被压缩)(由于它可能不是对分页存储器的高效使用),所以在动作502中标识的该组存储页面可被移动到备用列表(或者空闲列表)并且被赋予新用途。
[0057]构成压缩存储库的区域的压缩存储库存储页面由存储器管理器写出到页面文件(动作508)。应该指出,压缩存储库存储页面不需要被立刻写到页面文件。而是,写出压缩存储库存储页面可以被延迟直到某个之后的时间,诸如当存储器管理器102期望释放存储页面以便分配给另一程序108时的时间、当压缩存储库管理器104期望写入压缩存储库存储页面时的时间、等等。还应该指出,可以实施任何数量的技术来改进将压缩存储库存储页面写到页面文件的速度、效率等等(例如,压缩存储库存储页面可以被写入连续组块(chunk)中等等)。
[0058]应该进一步指出,是将压缩存储库存储页面写到页面文件508,而不是将在动作502中标识的该组存储页面写出到页面文件。因此,在动作502中标识的该组存储页面的压缩版本被写到页面文件,而没有(或者不存在)将该组存储页面的未压缩版本写出到页面文件。
[0059]一旦构成该区域的压缩存储库存储页面被写到页面文件,则压缩存储库存储页面以压缩存储库存储页面的优先级水平(或者可替换地以更低的水平)被放置于备用列表上。此时,压缩存储库存储页面被视作是系统100中的可用存储器,并且可以在任何时间由存储器管理器102按所期望的赋予新用途。
[0060]在一个或者多个实施例中,压缩存储库管理器不允许存储器管理器将压缩存储库存储页面写出,直到压缩存储库存储页面被基本填满为止。压缩存储库存储页面被基本填满指的是存储页面中剩余极少的(如果存在的话)存储空间可以向其中存储附加的压缩存储页面。例如,至少已经使用了压缩存储库存储页面的阈值量的存储空间来存储压缩存储页面。
[0061]应该指出,虽然本文中的某一些讨论涉及压缩一个或者多个进程的存储页面,但是本文所讨论的技术类似地适用于压缩对于所有可分页存储器(其可包括用户模式分页存储器和内核模式分页存储器)的存储页面。在这样的情形中,整个页面文件由压缩存储库中的存储器表示,并且压缩存储库实质上管理该页面文件,因为所有已修改的页面都经过(gothrough)该压缩存储库。
[0062]图6是图示了按照一个或者多个实施例的、用于检索已压缩存储页面的示例性过程600的流程图。过程600由诸如图1的压缩存储库管理器104那样的压缩存储库管理器实行,并且可以以软件、固件、硬件或者其组合来实施。过程600被显示为一组动作,并且不限于所示出的、用于执行各种动作的操作的次序。过程600是用于检索已压缩存储页面的示例性过程;在本文中包括参考不同附图的、对于检索已压缩存储页面的附加讨论。
[0063]从存储器管理器接收对于存储页面的请求(动作602)。该请求可以例如响应于来自程序108的、在至少一个存储页面被压缩到压缩存储库110之后请求访问存储页面中的内容的请求。请求包括至少一个存储页面的标识符,其也被称为密钥。存储器管理器可以请求单个存储页面或者多个存储页面。
[0064]响应于请求,做出关于所请求的存储页面是否处于分页存储器中的压缩存储库存储页面中的检查(动作604)。如以上讨论的,压缩存储库存储页面不需要立即被写出到页面文件112,所以所请求的存储页面可能依然在分页存储器106的压缩存储库存储页面中可得。应该指出,压缩存储库存储页面可以在压缩存储库管理器104的工作集中,或者在各种列表上(例如,已修改的列表或者备用列表),但依然是在分页存储器中。
[0065]如果所请求的存储页面在分页存储器中的压缩存储库中,则所请求的存储页面被解压缩(动作606)并且被返还到存储器管理器(动作608)。在被解压缩和返还之后,已压缩的存储页面从压缩存储库110的区域中被删除,因此避免在存储页面的未压缩和压缩形式之间的存储页面的重复。在压缩存储库存储页面的内容已被解压缩和返还之后,压缩存储库存储页面可以被赋予新用途或者释放。
[0066]所请求的存储页面被解压缩的方式可以至少部分地基于用来压缩所请求的存储页面的技术而变化。对存储页面执行的任何其他处理也在动作606中校验或者撤消,诸如对存储页面解密、校验检错数据、校验验证信息、如果该校验失败则校正数据(如果可能的话)等等。如果检错数据或者验证信息无法通过校验和/或数据无法被校正,则可以向存储器管理器返回所请求的存储页面被损坏的指示,而不是已解压缩的所请求的存储页面。
[0067]如果所请求的存储页面不在分页存储器中的压缩存储库中,则从页面文件中检索包括所请求的存储页面的压缩存储库存储页面(动作610)。检索压缩存储库存储页面包括从页面文件中读取压缩存储库存储页面,并且将压缩存储库存储页面存储在分页存储器106的压缩存储库110中。所请求的存储页面然后处于分页存储器中的压缩存储库110中,所以所请求的存储页面被解压缩(动作606)并且被返还给存储器管理器(动作608)。
[0068]应该指出,动作604和610可以一同执行。例如,压缩存储库管理器104维护关于哪些存储页面被压缩到哪些压缩存储库存储页面的记录。响应于在动作602中的请求,压缩存储库管理器104读取在其中压缩有所请求的存储页面的压缩存储库存储页面。如果该压缩存储库存储页面在分页存储器106的压缩存储库110中,则压缩存储管理器104从分页存储器106中读取该压缩存储库存储页面。如果该压缩存储库存储页面不在分页存储器106的压缩存储库110中,则页面错误出现,存储器管理器102从页面文件中检索该压缩存储库存储页面,并且将该压缩存储库存储页面置于分页存储器106中,然后压缩存储管理器从分页存储器106中读取该压缩存储库存储页面。
[0069]还应该指出,压缩存储管理器104可以可选地选择解压缩和返还(并且如果需要,则从页面文件中检索)除所请求的存储页面之外的一个或者多个存储页面。例如,压缩存储管理器104可以选择所请求的存储页面邻近的(例如,在阈值地址范围内的)一个或者多个存储页面,以尝试通过减少未来存储器管理器对于存储页面的请求而增强性能。
[0070]应该进一步指出,利用本文讨论的对存储页面的压缩和对存储页面的检索,压缩存储库管理器104操作来确保来自存储器管理器的写(压缩)或者读(检索)请求的向前进行(forward progress)。由压缩存储库管理器104确保的向前进行指的是防止系统100中的死锁,因为至少部分地由于存储页面压缩的缘故导致没有存储页面是可得的。压缩存储库管理器104操作来确保这种向前进行,无论所请求的存储页面是否已经被压缩并存储到页面文件112中、以及无论所请求的存储页面是否已经在被压缩并存储到页面文件112之后被赋予新用途。在一个或者多个实施例中,对于压缩存储页面的向前进行通过以下方式而得以确保,即通知存储器管理器将已修改列表上的一个或者多个未压缩的存储页面写到页面文件,由此释放一个或者多个存储页面。对于检索存储页面的向前进行通过以下方式而得以确保,即预先预分配必要的资源(例如,在压缩存储管理器的工作集中的一个或者多个存储页面)来保证至少一个这样的读取将总是具有所需的资源以便继续进行下去。
[0071]返回图1,每个存储页面具有与其相关联的标识符(也被称为密钥),其允许存储页面被彼此区分开。这种标识符可以由各种组件中的任何组件指派,诸如由存储器管理器102或者压缩存储库管理器104指派。存储页面的压缩版本在分页存储器106中占据比该存储页面自身少的空间,所以,压缩存储库管理器104并不使用相同的数据单元结构。例如,存储器管理器102可以通过存储页面来管理分页存储器106,但是压缩存储库管理器104将不会这么做。
[0072]压缩存储库管理器104维护存储页面图,以便标识各种已压缩的存储页面被存储在压缩存储库110中的哪些区域。图7图示按照一个或者多个实施例的示例性存储页面图702。对于被压缩到压缩存储库110中的每个存储页面,存储页面图702维护对应的记录704,其标识该已压缩存储页面被存储在存储页面的那些区域中的何处。压缩存储库110被图示为一个或者多个(η)不同的区域706(1),……,706(η),其每个自身由多个存储页面构成,如以上讨论的。在一个或者多个实施例中,针对分页存储器106中的每个压缩存储库110维护一个单独的存储页面图。可替换地,用于多个压缩存储库的存储页面图可以被组合成单个存储页面图,并且记录704可以包括其中存储该已压缩存储页面的压缩存储库110的标识符。
[0073]每个记录704包括页面密钥字段710、区域号字段712、偏移字段714、大小字段716和(一个或者多个)标记字段718。页面密钥字段710存储对应的已压缩存储页面的标识符。该标识符可以采取各种各样不同形式中的任何形式。例如,其可以是进程标识符和虚拟地址、记录标识符等等。
[0074]区域号字段712存储特定区域706的标识符,对应的已压缩存储页面被存储在该特定区域中。该区域虽然典型地是用数字来标识,但是也可以以各种各样其他方式中的任何方式来标识。偏移字段714存储进入特定区域706的偏移一一用于对应的已压缩存储页面的数据存储从此处开始一一的标识符。可替换地,不是使用区域和偏移标识符,而是可以使用存储已压缩部分中的位置一一对应的已压缩存储页面被存储在此处一一的任何其他(一个或者多个)标识符的一个或者多个字段。
[0075]大小字段716存储对应的已压缩存储页面的大小(例如,以字节计)的标识符。给出区域、进入该特定区域的偏移和已压缩存储页面的大小,可以容易地标识已压缩存储页面被存储处的存储器地址范围。(一个或者多个)标记字段718存储关于对应的已压缩存储页面的各种状态信息。这样的标记的示例包括对于存储页面的选择优先级(其被使用来确定选择哪些存储页面进行压缩)、对应于存储页面的优先级水平等等。
[0076]要意识到,存储页面图702仅是示例。在其他实施例中,在图702的每个记录中可包括附加的字段。例如,在图702的每个记录中可以包括诸如CRC数据之类的检错数据、诸如HMAC数据之类的验证信息、描述存储页面的使用历史和/或频率的信息、等等。此外,字段710-718中的一项或者多项可以从图702的记录中省略。另外,应该指出,在字段710-718中的一项或者多项中的数据可以与分页存储器106中的存储页面一同存储,而不是存储在单独的记录中。
[0077]除了存储页面图702之外,压缩存储库管理器104还维护区域图,以标识在区域的特定位置中存储着什么存储页面。因此,存储页面图702操作来标识何处存储了所标识的已压缩存储页面,而区域图操作来标识在给定的区域位置中存储了哪个已压缩存储页面。
[0078]图8图示按照一个或者多个实施例的示例性区域图802。对于进入存储了不同存储页面的区域的每个偏移,区域图802维持一个记录804,其标识了存储在该偏移的、对应的已压缩存储页面。每个记录804包括页面密钥字段806、区域号字段808和偏移字段810。
[0079]页面密钥字段806存储对应的已压缩存储页面的标识符,这类似于图7的记录704的页面密钥字段710。区域号字段808存储对应的已压缩存储页面被存储在其中的特定区域706的标识符,这类似于记录704的区域号字段712。偏移字段810存储进入特定区域706的偏移一一用于对应的已压缩存储页面的数据存储从此处开始一一的标识符,这类似于记录704的偏移字段714。可替换地,不是使用区域和偏移标识符,而是可以使用存储已压缩部分中的位置一一对应的已压缩存储页面被存储在此处一一的任何其他(一个或者多个)标识符的一个或者多个字段。
[0080]要认识到,区域图802仅是示例。在其他实施例中,在图802的每个记录中可包括附加的字段,和/或字段806-810中的一项或者多项可以从图802的记录中省略。另外,应该指出,在字段806-810中的一项或者多项中的数据可以与图1的分页存储器106中的存储页面一同存储,而不是存储在单独的记录中。
[0081]图7的存储页面图702和图8的区域图802可以以各种各样不同方式中的任何方式实施。在一个或者多个实施例中,这些图各自被实施为B+树,以便增强在访问个体记录方面的性能。可替换地,可以使用各种各样其他常规数据结构中的任何数据结构来实施这些图,诸如AVL树、哈希表、阵列等等。
[0082]返回图1,可能会出现存储器管理器102期望将用于程序108的整个工作集移出分页存储器108的情形。在一个或者多个实施例中,当程序108在系统100中被暂停时会出现这样的情形。作为暂停程序108的过程的一部分,存储页面的工作集被压缩并存储在压缩存储库110,这也被称为将工作集换出。该压缩存储库110可以随后被写到页面文件112。如果程序108后来要被恢复(例如,不再暂停),则从页面文件112中检索压缩存储库110(如果其被写到页面文件112),并且压缩存储库110中的存储页面被解压缩并且被返还到工作集202,这也被称为将工作集换入。
[0083]图9示出了按照一个或者多个实施例的将工作集换出的示例。图9中,图示了程序108的特定进程(进程X)的工作集202。将工作集202换出是通过生成存储页面的列表902来执行,列表902诸如是开始虚拟地址和长度(例如,在该开始虚拟地址处开始的工作集中的顺序存储页面的计数)的列表。列表被顺序地排序,诸如从最小地址到最大地址(这些地址是进程在其中执行的存储器空间的虚拟地址)。工作集202的存储页面以这个相同的顺序排序被添加到已修改列表206。此外,如所示的,工作集202的存储页面以这个相同的顺序排序被压缩,并且以这个相同的顺序排序被写到与程序108相关联的压缩存储库110。因此,虽然在工作集202中的存储页面可能在工作集202中是不连续的,但它们被写入压缩存储库110中的连续位置中。
[0084]还确定压缩存储库110的总大小,并且在页面文件112中预留的空间足以存储压缩存储库110。当压缩存储库110被写到页面文件112时,压缩存储库110被连续地写到页面文件112。将页面写入页面文件的连续的、顺序排序的部分可以使得在之后的换入操作期间、当把页面读回到工作集202中时,之后的读操作能够读取页面文件112的大的、顺序排序的块。
[0085]图10是图示了按照一个或者多个实施例的、用于将工作集换出的示例性过程1000的流程图。过程1000由诸如图1的压缩存储库管理器104那样的压缩存储库管理器实行,并且可以以软件、固件、硬件或者其组合来实施。过程1000被示为一组动作,并且不限于所示出的、用于执行各种动作的操作的次序。过程1000是用于将工作集换出的示例性过程;在本文中包括参考于不同附图的、对于将工作集换出的附加讨论。
[0086]在过程1000中,做出将来自进程的工作集的一个或者多个页面换出到页面文件中的确定(动作1002)。该确定可以基于各种准则(例如,由存储器管理器102或者其他策略管理器)做出,所述各种准则诸如是确定进程是不活动的或暂停的、确定与进程相关联的一个或者多个线程已不活动达特定的时间量、确定进程已处在后台中达特定的时间量、确定进程在特定时间量期间未使用一定数量的页面、确定计算系统整体已暂停或者是不活动的、等等。
[0087]—旦做出了将一个或者多个页面换出的决定,就从进程的工作集中标识一个或者多个候选页面,并且生成这些候选存储页面的列表(动作1004)。候选存储页面的列表被顺序地排序,诸如从最小虚拟地址到最大虚拟地址。在一个或者多个实施例中,存储器管理器102分析工作集的每个页面,并且基于一定的准则确定每个页面是否是用于换出的候选者。在一个或者多个实施例中,用于换出的候选者可以包括工作集202中的私有页面和/或后备页面文件的共享页面。候选页面还可以以不同方式被标识,诸如基于那些页面是否是干净的(已经被写到压缩存储库110,但是自从这样的写入以来还没有被修改的页面,这样使得物理存储器中的页面的当前版本与压缩存储库110中的页面相同)。此外,在一个或者多个实施例中,当决定页面是否是用于换出的候选者时,可以考虑页面是否被锁在存储器中。
[0088]在动作1004中所生成的列表上的候选存储页面被添加到已修改列表206(动作1006)。候选存储页面以与其出现在动作1004中所生成的列表上的相同顺序排序被添加到已修改列表。
[0089]在已修改列表206中的候选存储页面被压缩并被写到与运行的程序(其是进程)相关联的压缩存储库110(动作1008)。压缩可以以各种各样方式中的任何方式执行,这类似于以上关于图5的讨论。各种其他操作(例如,对存储页面的内容进行加密、生成检错数据等等)也可以可选地对存储页面执行,这类似于以上关于图5的讨论。已压缩存储页面以与其出现在动作1004中所生成的列表上以及其出现在已修改列表206上的相同顺序排序被写到压缩存储库110。因此,虽然工作集202中的存储页面可能在工作集202中是不连续的,但是其被写入压缩存储库110中的连续位置(例如,如图9中示出的)。在候选存储页面被写到压缩存储库110之后,候选存储页面被从工作集202中移除(例如,并且被添加到空闲列表)。
[0090]在页面文件112中预留足以存储压缩存储库110的空间(动作1010)。预留页面文件112中的空间指的是将页面文件112的一部分留出或者标记为:对于写入压缩存储库110是可接受的,但是对于写入其他数据是不可接受的。在页面文件112中的空间可以以各种各样不同方式被预留,诸如通过维护分配表或者标识页面文件的某些部分以及这样的部分是否被预留(并且如果被预留,则标识预留它们所用于的压缩存储库110)的其他记录。预留可以通过例如存储器管理器102或者压缩存储管理器104执行。
[0091]在某个稍后的时间,(例如,通过存储器管理器102或者压缩存储管理器104)做出将包括已压缩的换出页面的压缩存储库110写到其在页面文件112中的预留空间的决定(动作1012)。在一个或者多个实施例中,这个决定可以基于以下的确定而做出,即确定经过了某个阈值时间量,在该阈值时间量期间导致做出(动作1002中的)换出的决定的准则依然有效。例如,可能经过特定时间量(例如,5分钟),其间进程依然不活动或者暂停。该决定还可以基于如下的确定而做出,即由存储器管理器102确定需要更多的物理存储器以供一个或者多个其他程序108使用。
[0092]响应于在动作1012的关于将压缩存储库写到交换文件的决定,压缩存储库存储页面被写到页面文件中的预留空间(动作1014)。在一个或者多个实施例中,压缩存储库存储页面全部都被移除,并且在一个或者多个写操作中被写到页面文件112。可替换地,压缩存储库存储页面的仅一部分可以被移除并且被写到页面文件112。在一些实施例中,所写的候选页面可以基于对于存储器的压力(例如,基于存储器管理器对于更多物理存储器的需要)而被确定。在写到页面文件112后,压缩存储库存储页面以压缩存储库存储页面的优先级水平(或者可替换地以更低的水平)被放置于备用列表上。此时,压缩存储库存储页面被视为在系统上的可用存储器,并且可以在任何时间由存储器管理器102按期望赋予新用途。
[0093]返回动作1012,在一些情形中,可以做出不写出压缩存储库的决定。在这样的情形下,用于压缩存储库的预留空间得以保留,直到发生换入为止。在一个或者多个实施例中,如果导致最初决定将页面换出(例如在动作1002中)的条件在特定阈值时间量之后不再存在,则可以做出不将压缩存储库写出的决定。例如,进程可能再次活动或者可能不再暂停。在其他情形中,对于将页面换入的决定可以在那些候选页面已经被写到页面文件之前发生。
[0094]图11是图示了按照一个或者多个实施例的、用于将工作集换入的示例性过程1100的流程图。过程1100由诸如图1的压缩存储库管理器104那样的压缩存储库管理器实行,并且可以以软件、固件、硬件或者其组合来实施。过程1100被示为一组动作,并且不限于所示出的、用于执行各种动作的操作的次序。过程1100是用于将工作集换入的示例性过程;在本文中包括参考不同附图的、对于将工作集换入的附加讨论。
[0095]在过程1100,做出将之前从用于某个进程的工作集换出的压缩存储库换入的确定(动作1102)。在一个或者多个实施例中,这种确定由存储器管理器102或者其他策略管理器做出,并且可以基于各种准则做出。这样的准则可以包括接收到进程不再不活动或者暂停的指示、终止了导致在图10的动作1002中换出的决定的那些条件、等等。
[0096]做出关于所换出的已压缩的压缩存储库存储页面是否保留在物理存储器中的确定(动作1104)。在一些情形中,压缩存储库存储页面可能已经被写到页面文件,但是保留在物理存储器中(例如,如果页面在备用列表上高速缓存并且还没有被赋予新的用途)。在这样的情形中,可以解压缩这些保留在物理存储器中的压缩存储库存储页面,而不是从页面文件中读取压缩存储库存储页面。
[0097]如果换出的压缩存储库存储页面不在物理存储器中,则从页面文件中检索该存储页面(动作1106)。检索压缩存储库存储页面包括从页面文件中读取压缩存储库存储页面,并且将压缩存储库存储页面存储到分页存储器106的压缩存储库110中。在一个或者多个实施例中,这种对压缩存储库存储页面的读入是从页面文件以压缩存储库存储页面的大块进行读取,因此,这比从页面文件的任意位置读取较小块更加高效率。此外,因为页面被写入预留在页面文件中的连续块中,并且以顺序的虚拟地址次序写入,所以多个页面的簇然后可以以大块并且以顺序的虚拟地址次序读取,从而提供更加高效率的读操作。
[0098]压缩存储库110的压缩存储库存储页面中的换出的存储页面被解压缩(动作1108),并且被返还给存储器管理器(动作1110)。将已解压缩的存储页面返还给存储器管理器允许将已解压缩的存储页面包括在程序的工作集中。解压缩可以以各种各样方式中的任何方式执行,这类似于以上关于图6的讨论。各种其他操作(例如,对存储页面内容进行解密、校验检错数据等等)也可以可选地在存储页面上执行,这类似于以上关于图6的讨论。在被解压缩和返还之后,从压缩存储库110的区域中删除该已压缩的存储页面。在压缩存储库存储页面的内容已经被解压缩和返还之后,压缩存储库存储页面可以被赋予新用途或者被释放。
[0099]页面文件中的用于压缩存储库的预留空间也被释放(动作1112)。页面文件中的预留空间然后可用于存储其他数据。
[0100]返回动作1104,如果换出的存储页面中的任何存储页面保留在物理存储器中,则那些存储页面被解压缩(动作1108)并且被返还给存储器管理器(动作1110)。存储那些换出的已压缩存储页面的压缩存储库存储页面不需要在动作1106从页面文件中读取,因为其保留在物理存储器中。
[0101]应该指出,在动作1106的对换出的压缩存储库存储页面的检索和在动作1108的对存储页面的解压缩可以并行执行。在一个或者多个实施例中,已经从页面文件中检索到的存储页面被解压缩,而同时其他换出的压缩存储库存储页面正从页面文件中被读取。可以使用多个线程来解压缩存储页面和从页面文件中检索压缩存储库存储页面。例如,在系统100中的一个处理器核上运行的一个线程可以管理从页面文件中对压缩存储库存储页面的检索,而同时或者并行地运行在该系统100的其余处理器核上的线程可以管理对存储页面的解压缩。
[0102]因此,换入压缩存储库存储页面的执行可以通过使用本文讨论的技术而得以增强。存储页面被压缩,所以会读取比在未压缩情况下将读取的更少的存储页面。此外,解压缩可以与存储页面的读取并行执行,并且多个解压缩线程可以同时运行,从而进一步地增加了已解压缩存储页面可返还存储器管理器的速度。
[0103]本文讨论的技术还支持各种附加的功能性。对于存储页面文件的存储设备的读和写的数量可以由于存储页面被压缩的缘故而减少。减少对于存储设备的读和写的数量可以导致存储设备的增长的生命期限,以及减少由于存储设备输入/输出而导致的瓶颈。此外,存储页面的压缩可以导致可用于由存储器管理器分配给程序的存储页面数量的增多。
[0104]此外,换出的压缩存储库存储页面比存储页面的解压缩版本占据更少数量的页面。如上讨论的,换出的压缩存储库存储页面被写到页面文件112,并且被添加到备用列表,并且由于其被压缩的性质,所以可能能够在备用列表上保持较大数量的压缩存储库。这可以增大在暂停的程序被恢复的情况下用于该程序的压缩存储库存储页面处于物理存储器中的可能性,且因此相比于从页面文件中进行检索的情况可以换入得更快。
[0105]另外,已压缩存储页面以与在压缩之前那些存储页面的相似的优先级水平存储在压缩存储库中。通过维持存储页面的至少相似的优先级水平,避免了其中显著较高优先级的存储页面在较低优先级的存储页面之前被写到页面文件的优先级倒置情形。
[0106]虽然本文参考特定模块讨论了特定的功能性,但是应该指出的是,本文讨论的单个模块的功能性可以被分散到多个模块中,和/或多个模块的至少某个功能性可以被组合到单个模块中。另外,本文讨论的特定模块执行动作包括该特定模块自己执行该动作,或者可替换地,该特定模块调用或者以其他方式访问执行该动作(或者结合该特定模块执行该动作)的另一个组件或者模块。因此,特定模块执行动作包括由该特定模块自己来执行该动作和/或由被该特定模块调用的或者以其他方式访问的其他模块来执行该动作。
[0107]图12总的以1200图示包括示例性计算设备1202的示例性系统,示例性计算设备1202代表可实施本文所述各种技术的一个或多个系统和/或设备。计算设备1202可以是例如服务提供商的服务器、与客户端相关联的设备(例如客户端设备)、片上系统和/或任何其他适当的计算设备或计算系统。
[0108]所图示的示例性计算设备1202包括处理系统1204、一个或多个计算机可读介质1206、以及被相互通信地耦合的一个或多个I/O接口 1208。虽然未示出,但计算设备1202可进一步包括将各种组件相互耦合的系统总线或其他数据和命令传送系统。系统总线可以包括不同总线结构中的任何一种或组合,诸如存储器总线或存储器控制器、外围总线、通用串行总线、和/或利用各种各样总线架构中的任何一种的处理器或本地总线。还可预期各种各样的其他示例,诸如控制和数据线。
[0109]处理系统1204代表使用硬件执行一个或多个操作的功能性。因此,处理系统1204被图示为包括可被配置为处理器、功能块等的硬件元件1210。这可包括在硬件中实施为专用集成电路或使用一个或多个半导体形成的其他逻辑设备。硬件元件1210不受形成这些硬件元件的材料或在其中采用的处理机制的限制。例如,处理器可由(一个或多个)半导体和/或晶体管(例如,电子集成电路(IC))构成。在这样的上下文中,处理器可执行指令可以是电子可执行指令。
[0110]计算机可读介质1206被图示为包括存储器/存储装置1212。存储器/存储装置1212代表与一个或多个计算机可读介质相关联的存储器/存储装置容量。存储器/存储装置1212可包括易失性介质(诸如随机存取存储器(RAM))和/或非易失性介质(诸如只读存储器(R0M)、闪速存储器、光盘、磁盘等)。存储器/存储装置1212可包括固定介质(例如,RAM、R0M、固定硬盘驱动器等)以及可移除介质(例如,闪速存储器、可移除硬盘驱动器、光盘等)。可用各种各样其他方式配置计算机可读介质1206,如以下进一步描述的。
[0111](一个或多个)输入/输出接口1208代表将允许用户向计算设备1202输入命令和信息并且还允许使用各种输入/输出设备向用户和/或其他组件或设备呈现信息的功能性。输入设备的示例包括键盘、光标控制设备(例如,鼠标)、麦克风(例如,用于话音输入)、扫描仪、触摸功能性(例如,被配置成检测物理触摸的电容传感器或其他传感器)、照相机(例如,其可采用诸如红外频率之类的可见或不可见波长来将未涉及到触摸的移动检测为手势)等。输出设备的示例包括显示设备(例如,监视器或投影仪)、扬声器、打印机、网卡、触觉响应设备等。因此,可用如下面进一步描述的各种各样方式来配置计算设备1202以支持用户交互。
[0112]计算设备1202还包括存储库管理器1214。存储库管理器1214提供如上讨论的各种已修改的存储器压缩功能性。存储库管理器1214可以实施例如图1的压缩存储库管理器104。虽然被图示为与计算机可读介质1206分开,但是应该指出,存储库管理器1214可以可替换地被实施为计算机可读介质1206的一部分。
[0113]本文中,各种技术可以是在软件、硬件元件或程序模块的一般上下文中描述的。一般地,这样的模块包括执行特定任务或实施特定抽象数据类型的例程、程序、对象、元件、组件、数据结构等。当在本文使用时,术语“模块”、“功能性”和“组件” 一般地表示软件、固件、硬件或其组合。本文所述技术的特征是平台无关的,这意味着这些技术可在具有各种各样处理器的各种各样计算平台上实施。
[0114]所描述的模块和技术的实现可被存储在某种形式的计算机可读介质上,或跨某种形式的计算机可读介质来传输。计算机可读介质可包括可被计算设备1202访问的各种各样的介质。作为示例而非限制,计算机可读介质可包括“计算机可读存储介质”和“计算机可读信号介质”。
[0115]“计算机可读存储介质”指的是使得能够实现信息的持久性存储的介质和/或设备和/或是有形的存储装置(与仅仅信号传输、载波或信号本身相反)。因此,计算机可读存储介质指的是非信号承载介质。计算机可读存储介质包括以适合于存储诸如计算机可读指令、数据结构、程序模块、逻辑元件/电路或其他数据之类的信息的方法或技术实施的硬件,诸如易失性和非易失性、可拆卸和不可拆卸介质和/或存储设备。计算机可读存储介质的示例可包括但不限于RAM、R0M、EEPR0M、闪速存储器或其他存储器技术、⑶-R0M、数字多功能盘(DVD)或其他光学存储装置、硬盘、盒式磁带、磁带、磁盘存储装置或其他磁性存储设备、或者适合于存储想要的信息且可被计算机访问的其他存储设备、有形介质或制品。
[0116]“计算机可读信号介质”指的是被配置成诸如经由网络向计算设备1202的硬件传输指令的信号承载介质。信号介质典型地可在诸如载波、数据信号或其他传输机制之类的已调制数据信号中体现计算机可读指令、数据结构、程序模块或其他数据。信号介质还包括任何信息传递介质。术语“已调制数据信号”意指如下这样的信号,即:使其特性中的一个或多个以对信号中的信息进行编码的方式设置或改变。作为示例而非限制,通信介质包括诸如有线网络或直接有线连接之类的有线介质,以及诸如声学、RF、红外的无线介质以及其他无线介质。
[0117]如前所述,硬件元件1210和计算机可读介质1206代表在某些实施例中可被用来实施本文描述的技术的至少某些方面的、以硬件形式实现的指令、模块、可编程设备逻辑和/或固定设备逻辑。硬件元件可包括如下的组件:集成电路或片上系统、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、复杂可编程逻辑器件(CPLD)、以及用硅的其他实现或其他硬件设备。在本上下文中,硬件元件可以作为处理设备来操作,其执行通过由硬件元件体现的指令、模块和/或逻辑所定义的程序任务,以及作为被利用来存储指令以供执行的硬件设备(例如之前描述的计算机可读存储介质)来操作。
[0118]还可采用前述内容的组合来实施本文所描述的各种技术和模块。因此,可将软件、硬件或程序模块以及其他程序模块实施为在某种形式的计算机可读存储介质上体现的、和/或由一个或多个硬件元件1210体现的一个或多个指令和/或逻辑。计算设备1202可被配置成实施对应于软件和/或硬件模块的特定指令和/或功能。因此,将模块实施为可被计算设备1202作为软件执行的模块可至少部分地以硬件来达到,例如通过使用处理系统的计算机可读存储介质和/或硬件元件1210来实现。指令和/或功能可以是一个或多个制品(例如,一个或多个计算设备1202和/或处理系统1204)可执行/可操作的,以实施本文描述的技术、模块以及示例。
[0119]如在图12中进一步图示的,示例性系统1200使得能够当在个人计算机(PC)、电视设备和/或移动设备上运行应用时为了无缝的用户体验来实现普适的环境。当在使用应用、玩视频游戏、观看视频等时从一个设备过渡至下一个设备的时候,为了共同的用户体验,月艮务和应用在所有三个环境中基本类似地运行。
[0120]在示例性系统1200中,多个设备通过中央计算设备互连。中央计算设备可以对于该多个设备来说是本地的,或者可位于远离该多个设备的地方。在一个或多个实施例中,中央计算设备可以是通过网络、互联网或其他数据通信链路连接到多个设备的一个或多个服务器计算机的云。
[0121]在一个或多个实施例中,这种互连架构使得功能性能够跨多个设备传递,以便向多个设备的用户提供共同且无缝的体验。多个设备中的每一个设备可具有不同的物理要求和能力,并且中央计算设备使用平台来使得能够向设备传递既是为该设备定制又还是为所有设备所共有的体验。在一个或多个实施例中,创建目标设备的类并为设备的泛型类(generic class)定制体验。可由设备的物理特征、使用类型或其他共同特性来限定设备的类。
[0122]在各种实现中,计算设备1202可采取各种各样不同的配置,诸如以供计算机1216、移动装置1218以及电视1220使用。这些配置中的每一个配置包括通常可具有不同构造和能力的设备,并且因此可根据不同设备类中的一个或多个设备类来配置计算设备1202。例如,可将计算设备1202实施为计算机1216类的设备,包括个人计算机、台式计算机、多屏幕计算机、膝上型计算机、上网本等。
[0123]还可将计算设备1202实施为移动装置1218类的设备,其包括移动设备,诸如移动电话、便携式音乐播放器、便携式游戏设备、平板计算机、多屏幕计算机等。还可将计算设备1202实施为电视1220类的设备,其包括在放松的观看环境中具有或被连接到一般较大屏幕的设备。这些设备包括电视、机顶盒、游戏控制台等。
[0124]本文描述的技术可被计算设备1202的这各种配置支持,并且不限于本文描述的技术的特定示例。这种功能性还可全部或者部分地通过使用分布式系统来实施,诸如如下所述地经由平台1224在“云” 1222上实施。
[0125]云1222包括和/或代表用于资源1226的平台1224。平台1224将云1222的硬件(例如,服务器)和软件资源的底层功能性抽象化。资源1226可包括当计算机处理正在远离计算设备1202的服务器上被执行的时候可以被利用的应用和/或数据。资源1226还可以包括在互联网上和/或通过诸如蜂窝式或W1-Fi网络之类的订户网提供的服务。
[0126]平台1224可将资源和功能抽象化,以将计算设备1202与其他计算设备相连。平台1224还可用于将资源的缩放抽象化,以针对所遇到的对于经由平台1224实施的资源1226的需求提供相应的规模水平。因此,在互连设备实施例中,本文描述的功能性的实现可分布在整个系统1200中。例如,该功能性可部分地在计算设备1202上以及经由将云1222的功能性抽象化的平台1224来实施。
[0127]虽然已经以特定于结构特征和/或方法动作的语言描述了本主题,但将理解的是,在所附权利要求中限定的主题不一定局限于上文描述的特定特征或动作。而是,上文描述的特定特征和动作是作为实施权利要求的示例形式被公开的。
【主权项】
1.一种用来增大可用于分配给计算设备中的程序的存储器量的计算机实施的方法,所述方法包括: 标识已经被修改的第一组存储页面; 将第一组存储页面压缩到由第二组存储页面构成的压缩存储库中; 在第一组存储页面已经被压缩到所述压缩存储库中之后,允许存储器管理器为该第一组存储页面赋予新用途;以及 将第二组存储页面写出到页面文件,而不是将第一组存储页面写出到页面文件。2.如权利要求1中记载的方法,进一步包括在第二组存储页面已经被写到页面文件之后,允许所述存储器管理器为第二组存储页面赋予新用途。3.如权利要求1中记载的方法,第一组存储页面已经被分配给程序的进程,而压缩存储库仅与所述程序的所述进程相关联。4.如权利要求3中记载的方法,进一步包括响应于确定换出所述进程的存储页面而: 标识在所述进程的工作集中的存储页面的列表; 将所标识的存储页面压缩; 将已压缩的所标识的存储页面以顺序次序、通过所标识的存储页面的虚拟存储器地址写到所述压缩存储库; 在页面文件中为所述压缩存储库预留空间;以及 将所述压缩存储库写出到页面文件中的该预留空间。5.如权利要求4中记载的方法,进一步包括响应于在换出所述进程的存储页面之后确定换入所述进程的所述存储页面而: 从所述页面文件检索所述压缩存储库; 将所检索的压缩存储库存储到第三组存储页面中; 将第三组存储页面中的已压缩存储页面解压缩;以及 返还解压缩的存储页面以便包括在所述进程的工作集中。6.如权利要求1中记载的方法,进一步包括在第一组存储页面已经被压缩之后确保在返还第一组存储页面中的向前进行,而不管第二组存储页面是已经被写到页面文件还是在被写到页面文件后被赋予新用途。7.如在权利要求1中记载的方法,第一组存储页面中的每个存储页面具有至少相似的优先级水平,并且第二组存储页面中的每个存储页面具有至少相似的优先级水平。8.—种被配置成增大可用于分配给计算设备中的程序的存储器量的计算设备,所述计算设备包括: 存储器; 存储器管理器,其被配置成管理所述存储器的页面;以及 压缩存储库管理器,其被配置成通过以下方式,增大所述存储器管理器可用于分配给所述计算设备的程序的存储器的量: 将已经被进程修改的第一组存储页面压缩到与所述进程相关联的压缩存储库中,所述压缩存储库由第二组存储页面构成; 在所述存储页面已经被压缩到所述压缩存储库中之后,针对第一组存储页面中的每个存储页面,允许存储器管理器为所述存储页面赋予新用途;以及 在不存在将第一组存储页面写出到页面文件的情况下,将第二组存储页面写出到该页面文件。9.如权利要求8中记载的计算设备,所述压缩存储库仅与所述程序的所述进程相关联。10.如权利要求9中记载的计算设备,所述压缩存储库管理器被进一步配置成: 响应于确定换出所述进程的存储页面而: 标识在所述进程的工作集中的存储页面的列表, 将所标识的存储页面压缩; 将已压缩的所标识的存储页面以顺序次序、通过所标识的存储页面的虚拟存储器地址写到所述压缩存储库; 在页面文件中为所述压缩存储库预留空间;以及 将所述压缩存储库连续写出到页面文件中的该预留空间;以及 响应于在换出所述进程的存储页面之后确定换入所述进程的所述存储页面而: 从所述页面文件检索所述压缩存储库; 将所检索的压缩存储库存储到第三组存储页面中; 将第三组存储页面中的已压缩存储页面解压缩;以及 返还解压缩的存储页面以便包括在所述进程的工作集中。
【文档编号】G06F12/02GK106030547SQ201580009622
【公开日】2016年10月12日
【申请日】2015年2月18日
【发明人】Y.M.巴克, M.伊冈, L.王, A.U.基尚
【申请人】微软技术许可有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1