组合具有相同内容的存储器页面的制作方法

文档序号:6366652阅读:95来源:国知局
专利名称:组合具有相同内容的存储器页面的制作方法
组合具有相同内容的存储器页面
背景技术
计算机已经变得越来越普遍,用户希望在他们的计算机上运行越来越多的各种程序。増加在计算机上运行的程序的数量将可能成为问题,因为这可能导致诸如可获得的存储器之类计算机资源出现紧张的状況。这种资源的紧张可能导致计算机操作变慢或迟钝,降低计算机的用户友好性。

发明内容
提供这个发明内容来以简化形式介绍在下面的详细描述部分中进ー步描述的概念选集。这个发明内容并不g在标识所要求保护主题的关键特征或必要特征,也并不旨在用来限定所要求保护的主题的范围。
根据ー个或更多方面,在具有作为多个页面被访问的存储器的设备中,所述多个页面中具有相同内容的两个或更多页面被识别。当所述两个或更多页面被识别出,设备中运行的其他进程被允许使用所述两个或更多页面,包括被允许改变两个或更多页面中每个的高速缓存属性。所述两个或更多页面被组合为单个组合页面,具有指向所述多个页面的多个条目的进程页面记录被更新,这样之前指向所述两个或更多页面之ー的条目改为指向单个页面。根据ー个或更多方面,在具有作为多个页面被访问的存储器的设备中,所述多个页面中具有相同内容的两个或更多页面被识别。所述多个页面的新页面被分配,新页面具有与所述两个或更多页面相同的内容。具有识别所述多个页面的多个条目的进程页面记录被更新,这样之前指向所述两个或更多页面之一的条目改为指向新页面。


在所有附图中相同的数字用于表示相似的特征。图I示出了根据ー个或更多实施方式实现组合具有相同内容的存储器页面的示例系统。图2示出了根据ー个或更多实施方式包含实现组合具有相同内容的存储器页面的组件的示例系统。图3是示出了根据ー个或更多实施方式用于组合及分离存储器页面的示例过程的流程图。图4是示出了根据ー个或更多实施方式用于组合具有相同内容的存储器页面的示例过程的流程图。图5示出了根据ー个或更多实施方式能够被配置用于实现组合具有相同内容的存储器页面的示例计算设备。
具体实施例方式此处讨论具有相同内容的存储器页面的组合。ー组策略被用来确定分析设备的物理存储器页面的时间,以便于识别具有相同内容的物理存储器页面。在该分析期间允许其他进程使用存储器 页面。如果多个存储器页面具有相同内容,则所述多个存储器页面被组合为单个存储器页面,并且适当的进程页面表格条目(或其他记录条目)被更新以指向该单个存储器页面。如果进程随后写入单个存储器页面,那么新页面被分配给该进程并且适当的进程页面表格条目被更新,使得用于所述进程的条目被指向新页面而不是指向组合页面。图I示出了根据ー个或更多实施方式实现组合具有相同内容的存储器页面的示例系统100。系统100包含存储器管理器102,物理存储器104,进程页面记录106以及存储设备108。系统100可以由多种不同类型的设备实现。例如,系统100可以由台式机,月艮务器计算机,膝上或笔记本计算机,平板电脑或记事本计算机,移动站,娱乐设备,与显示设备、电视或其他显示设备可通信地耦合的机顶盒,蜂窝或其他无线电话,游戏控制台、汽车用计算机等等来实现。物理存储器104是在系统100中物理地存在的一个或更多存储器组件(例如存储器芯片)。物理存储器104可以由各种不同类型的存储器组件构成,诸如随机存取存储器(RAM),闪存存储器等等。物理存储器104以被称为页面112的存储器块的形式被组织或访问。多个页面112在物理存储器104中示出,每个页面112包含特定数量的物理存储器(例如特定数量的物理存储器的字节),称为页面大小。每个页面112典型地具有相同大小,尽管根据实现页面112的大小可以不同。存储器管理器102为系统100管理物理存储器104。系统100中的各种不同进程(例如正在运行的应用或程序)可以请求存储器页面。存储器管理器102响应于所述请求,分配存储器页面给请求的进程。存储器管理器102还可以实现虚拟存储器空间,其中进程所引用的存储器地址是由存储器管理器102映射到物理存储器104中特定地址的虚拟地址。不同的页面112可以被分配给不同的进程,存储器管理器102维护用于识别在各种不同时间哪些页面112被分配给哪些进程的进程页面记录106。可替换地,该进程页面记录还可以是ー个或更多进程页面表格和/或其他数据结构。存储设备108可以是各种不同类型的存储设备,诸如一个或更多磁盘,一个或更多光盘,闪存存储器及其组合,等等。存储器管理器102可以可选地实现分页功能,其中在当前未被系统100中的进程使用时,页面112可以被传送到存储设备108,并在系统100中的进程想要使用这种页面112时传送回物理存储器104。存储设备108典型地是比物理存储器104慢的设备,但是更大。因此,存储设备108典型地可以比物理存储器104存储更多的页面112,但是相比于从物理存储器104检索,存储器管理器102典型地花费更多的时间来从存储设备108检索页面112。存储器管理器102还包含页面组合模块114。可以发生不同的页面112具有相同内容的情形(存储在那些页面的物理存储器组件中的数据是相同的)。这些不同页面112可以包含分配给相同进程的页面以及分配给不同进程的页面。页面组合模块114分析页面112,识别具有相同内容的多个页面112并将那些多个页面112组合到单个页面112中。页面组合模块114还更新进程页面记录106的适当条目,以使得先前指向所述多个页面112之一的条目改为指向组合页面。这些由页面组合模块114执行的识别、组合以及更新在这里还被称为页面组合过程。如果进程随后尝试写入组合页面,存储器管理器102为该进程分配新页面112,将进程页面记录106的适当条目更新为指向这个新页面112而不是组合页面,并允许进程写入该新页面112。此处的讨论涉及组合具有相同内容的存储器的页面。根据系统100被实现或设计的方式,一些页面可以是可组合的,而其他页面是不可组合的。此处讨论的组合具有相同内容的存储器页面的技术基于可组合的页面而操作,不组合那些不可组合的页面。在不同的实施方式中,各种不同类型的页面可以是可组合的,诸如用户模式进程页面,内核模式进程页面,会话空间页面,等等。此外,各种不同状态的页面可以是可组合的,诸如标记为污染(dirty)的页面,标记为洁净(clean)的页面,包含在页面工作组中的页面,包含在各种存储器列表上的页面(例如,备用、修改等),等等。图2示出了根据ー个或更多实施方式包含实现组合具有相同内容的存储器页面的组件的示例系统200。系统200包括存储器管理器202,其可以是图I的存储器管理器102。系统200还包括页面组合策略模块204,一个或更多进程206以及ー个或更多进程208。
存储器管理器202管理物理存储器,诸如图I的物理存储器104的页面112。存储器管理器202包括页面组合模块212,管理模块214,分配模块216和页面信息记录218。页面组合模块212可以是图I的页面组合模块114,如下面将要详细讨论的,它管理具有相同内容的物理页面的组合。分配模块216管理分配或指派物理存储器的特定页面至不同的进程206和/或208。当分配给每个进程206和/或208时,指向这些页面的指针被维护在一个或更多进程页面记录(诸如图I的进程页面记录106)中。管理模块214可以执行各种其他的存储器管理功能,诸如响应来自进程206和/或208的请求,在物理存储器和存储设备之间传送页面,在物理和虚拟存储器地址之间转换,等等。页面信息记录218是ー个或更多数据结构,维护供页面组合模块212、管理模块214和/或分配模块216使用的信息。页面信息记录218可以作为一个或更多表格或是可替换地作为其他数据结构来维护。在一个或更多实施方式中,页面信息记录218包括ー个或更多进程页面表格(例如如图I的进程页面记录106所包括的一个或更多进程页面表格)。页面信息记录218还可以包括页面组合模块212在执行此处所讨论的组合具有相同内容的物理页面的技术时所使用的附加数据。该附加数据可以作为进程页面记录的一部分或是可替换地作为ー个或更多其它表格的一部分和/或其他数据结构而被包含。由页面组合模块212所使用的该附加数据在下面将要更为详细地讨论。系统200采用包含用户模式200和内核模式224的架构。这些不同模式是指系统200的不同级别或安全分区。内核模式224是比用户模式220更安全或更优先的级别。诸如存储器管理器、设备驱动器、系统管理模块等之类的操作系统组件典型地在内核模式224中执行,而其他组件典型地在用户模式220中执行。用户模式220中的组件被阻止直接访问内核模式224中的组件,但是可以经由内核模式中执行的组件暴露的一个或更多接ロ与内核模式224中的组件交互。这些不同的模式或级别可以以各种不同的传统方式实现,例如使用不同的处理器环(processor ring)。尽管图2中示出了两种模式或级别,但是应当注意到,不同数量的模式或级别可以可替换地被使用(例如三个或更多级别)。页面组合策略模块204和进程206在用户模式220中执行,而存储器管理器202和进程208在内核模式中执行。页面组合策略模块204跟踪有关系统200的各种信息,并向存储器管理器202确定什么时候发起如下面更为详细地描述的页面组合过程。应当注意至IJ,尽管图示为在用户模式中执行,但是可替换地页面组合策略模块204的至少部分能够在内核模式中执行。此外,在一个或更多实施方式中,在对于运行在设备上的进程支持不同优先级别的设备上实现系统200。分配有更高优先级别的进程被赋予比分配有较低优先级别的进程运行的优先权(例如高优先级别的进程被赋予更多的处理器时间(或处理器核心)或其他资源带宽)。在这样的实施方式中,页面组合模块212可以作为低优先权的进程被执行,而进程206和208作为较高优先权进程被执行。页面组合模块212执行页面组合过程,识别并组合具有相同内容的物理页面。页面组合模块212包括循环冗余检验(CRC)生成模块232,页面比较模块234,修改模块236以及页面分离模块238。页面组合模块212可以在不同时间执行页面组合过程。在一个或更多实施方式中,页面组合策略模块204确定页面组合模块212何时执行页面组合过程,并通知页面组合模块212 (例如通过调用页面组合模块212暴露的接ロ)开始页面组合过程。在其他实施方式中,页面组合模块212可以基于其自身的分析或信息跟踪及其组合等,响应 于来自系统200的另ー个模块或组件的这么做的指示,响应于来自耦合至实现系统200的设备的另ー个设备的这么做的指示,确定开始页面组合过程。当到了页面组合模块212执行页面组合过程的时间的时候,CRC生成模块232为被分析的物理存储器的每个页面生成CRC值。物理存储器的所有页面都可以被分析,或可替换地地,物理存储器页面的子集可以被分析。将被分析的物理存储器页面的特定子集可以由页面组合模块212或另ー个组件或模块(例如页面组合策略模块)以不同的方式来确定,诸如将不同类型的页面分类到子集中并选择子集,选择特定数量的页面包含在子集中,选择特定的物理页面范围包含在子集中,等等。页面组合过程基于物理存储器中的页面(例如图I的页面112)执行,而不是基于虚拟页面或存储在别处的页面(如下面更详细讨论的,尽管ー些页面可以从存储器设备被传送)。CRC生成模块232可以使用各种公开可获得的和/或专有技术中的任何一种来基于页面的内容为物理存储器的页面生成CRC值。可替换地,一个或更多其他哈希函数或其他算法可以被应用于页面的内容以生成将被用于代替CRC值的值。从而,尽管CRC值以及CRC值的生成在此处被讨论,可替换地,其他值和生成所述其他值的哈希函数或其他算法能够可替换地被用来代替CRC值和此处所讨论的CRC值的生成。CRC生成模块232维护为物理存储器的每个页面所生成的CRC值的记录。该记录可以例如作为页面信息记录218的一部分被维护。应当注意到,当CRC生成模块232为物理存储器的页面生成CRC值时,系统200中的其他进程(例如进程206和/或208)被允许继续使用那些页面。CRC生成模块232不需要锁定或以其它方式阻止系统200中的其他进程使用那些页面。例如,在CRC生成模块232为页面生成CRC值的同时,进程206和/或208可以从该页面读取,向该页面写入,将该页面传送给另ー个进程206和/或208,改变该页面的高速缓存属性,等等。在一个或更多实施方式中,在任何给定时间,CRC生成模块232在一个或更多物理存储器的页面中每个页面的页面信息记录218中维护标识符,为所述页面生成了 CRC值。该标识符例如可以作为与物理存储器的页面相关联的标记值而被维护。标记值可以作为进程页面记录的一部分或可替换地作为单独表格或其他数据结构的一部分而被包含。当对于该页面正生成CRC值时,如果从进程206和/或208接收到使用该页面的请求,且如果请求可能潜在地导致存储器相干(coherence)或腐坏(corruption)情形,CRC生成模块232终止对于该页面生成CRC值并允许所述请求被执行。当请求已完成时,CRC生成模块232可以为所述页面重新计算CRC值,或者可替换地,对于由页面组合模块212执行的当前页面组合过程可以跳过所述页面(然而,对 于所述页面的CRC值可以在下次页面组合模块212执行页面组合过程时重新计算)。存储器相干或腐坏情形是指预期具有相同内容的不同页面(无论在物理存储器中还是存储在别处)可能具有不同的内容的情形。可能潜在导致存储器相关或腐坏情形的请求类型的一个示例为改变页面的属性,诸如页面的高速缓存属性。例如,实现系统200的设备经常允许存储器的物理页面在任意给定时间具有单个的高速缓存属性(诸如高速缓存,非高速缓存,或写组合之一)。当CRC生成模块232对于页面在计算CRC值时,进程206和/或208被允许改变该页面的高速缓存属性,但是该请求被视为潜在地导致存储器相干或腐坏情形。根据系统被设计和/或实现的方式,其他类型的请求也可能潜在地导致存储器相干或腐坏情形。例如,向包含在页面中的地址写数据的请求可能是潜在地导致存储器相干或腐坏情形的请求。 页面比较模块234分析CRC生成模块232所生成的CRC值并识别出匹配CRC值。两个CRC值如果具有相同的值则为匹配CRC值。在一个或更多实施方式中,由CRC生成模块232所生成的CRC值与为之生成CRC值的页面之间的关联被维护。由CRC生成模块232所生成的CRC值被存储(例如以数字的升序或降序),这样具有相同CRC值的不同页面可以很容易地被识别出。可替换地,由CRC生成模块232所生成的CRC值可以以各种其他传统的方式被存储和/或捜索,以便于识别匹配CRC值。对于具有相同CRC值的多个页面,页面比较模块234将页面相互比较以检查多个页面是否具有相同内容。如果存储在两个页面的物理存储器组件中的数据相同且两个页面的属性(例如高速缓存属性)相同,则两个页面具有相同内容。此外,在一个或更多实施方式中,为了两个页面具有相同内容,任何与两个页面相关联的页面保护也必须相同。在不同的实施方式中,不同的页面保护可以与页面相关联,页面保护识别在系统200中页面可以如何被使用。例如,页面可以带有“读写”页面保护而被映射或分配,以指示数据可以从页面读取或写入页面,可以带有“读”页面保护而被映射或分配,以指示数据可以从页面读取但不可写入页面,可以带有“读写执行”页面保护而被映射或分配,以指示数据可以从页面读取、写入页面,以及从页面执行,等等。从而跟随该示例,如果ー个页面带有“读写”页面保护而被映射或分配,且另ー个页面带有“读写执行”页面保护而被映射或分配,则两个页面不被认为具有相同内容。比较两个页面是否具有相同内容以在比较期间保护页面不被改变(例如,被改变的任一页面的内容、属性、页面保护等)的方式而执行。这个防止改变的保护可以按照不同的方式执行。例如,如果有写入任一页面或改变任ー页面属性或页面保护的请求,页面比较模块234可以终止比较。当请求已完成时,所述请求被允许执行,且页面比较模块234可以重新开始对于那些页面的比较,或者可替换地,对于由页面组合模块212执行的当前页面组合过程可以跳过所述比较(例如,类似于如上所讨论的,如果接收到可能潜在地导致存储器相干或腐坏情形的请求,对于页面終止生成CRC值)。可替换地,在比较期间可以阻止对于页面的任何数据写入或者对属性或页面保护的改变(例如对于被比较页面的访问可以被锁定,以使得 仅有页面组合模块212可以访问所述页面)。页面比较模块234通知修改模块236具有相同内容的两个或更多页面,修改模块236进而可以将具有相同内容的两个或更多页面组合为单个页面。具有相同内容的两个或更多页面的组合可以以不同的方式执行。在一个或更多实施方式中,修改模块236具有被分配(例如由分配模块216)的物理存储器的新页面,该新页面也被称为组合页面。组合页面具有与两个或更多被组合的页面同样的属性、页面保护等。修改模块236将两个或更多页面之一的内容拷贝至组合页面,并更新进程页面记录,以使得先前指向具有相同内容的两个或更多页面之一的进程页面记录中的条目改为指向组合页面。修改模块236还可以使得两个或更多页面解除分配(例如,通过分配模块216),由此释放两个或更多页面以供分配给其他进程或如系统200所愿供作他用。在一个或更多实施方式中,组合页面以减少物理存储器碎片的方式被分配。例如,新页面可以位于物理存储器的高端部分(例如,在包含系统200的设备中具有最大物理存储器地址的特定数量页面或特定百分比物理存储器),或者位于物理存储器的低端部分(例如,在包含系统200的设备中具有最小物理存储器地址的特定数量页面或特定百分比物理存储器)。这导致组合页面被近似聚合在物理存储器的特定区域,而不是被散布在分配给各进程206和/或208的页面之中。此外,应当注意到,在一些情形下系统200被实现在作为节点集合或簇中的ー个节点的设备中。在这种情形下,物理存储器的新页面典型地位于实现系统200的设备中的物理存储器上,而不是位于另ー个设备的物理存储器上。物理存储器的新页面典型地不会位于除了其中实现系统200的设备或节点之外的设备上或节点中。可替换地,除了分配将成为组合页面的存储器的新页面,修改模块236可以选择具有相同内容的多个页面之一作为组合页面。修改模块236可以根据各种准则在多个页面中选择ー个成为组合页面,诸如在实现系统200的设备中选择具有最小物理存储器地址的页面,在实现系统200的设备中选择具有最大物理存储器地址的页面,随机选择多个页面之一或是根据其他规则或准则选择,等等。修改模块236还更新进程页面记录,这样先前指向具有相同内容的多个页面之一的进程页面记录中的每个条目改为指向组合页面。将意识到,指向被选择作为组合页面的页面的进程页面记录中的条目无需被更新,但是指向多个页面中的其他页面的进程页面记录中的条目被更新。修改模块236还使得多个页面中除组合页面之外的页面被解除分配(例如通过分配模块216),由此释放那些页面以供分配给其他进程或是如系统200所愿供作他用。不管是新分配页面还是从具有相同内容的多个页面中选择的ー个,组合页面还由修改模块236标记为“写时拷贝”页面。“写时拷贝”标记向存储器管理器202指示,如果随后接收到对于组合页面的写请求,组合页面将被拷贝,该拷贝被写入而不是组合页面被写入。这允许页面分离模块238将组合页面的拷贝分离为单独的页面供进程写入,如在下面将详细讨论的。例如,“写时拷贝”标记可以被维护在进程页面记录中或可替换地在页面信息记录218的其他表格或数据结构中。此外,在一个或更多实施方式中,修改模块236维护參考计数,识别有多少进程页面记录的条目引用或指向组合页面。从而该參考计数还识别多个页面中有多少个具有与组合页面相同的内容。如果额外的页面被识别具有与组合页面相同的内容,则该參考计数递增,如果组合页面的拷贝由分离模块238分离出,则參考计数递減。由CRC生成模块232生成的CRC值与物理存储器中对应每个CRC的页面指示一起被维护在页面信息记录218中。维护在页面信息记录218中的CRC值包括组合页面的CRC值。在每个页面组合过程由页面组合模块212执行之后CRC值被维护,并且CRC值对于页面组合模块212所执行的后续页面组合过程是可获得的。在一个或更多实施方式中,除了比较作为当前页面组合过程的一部分而生成的 CRC值之外,页面比较模块234将CRC生成模块232所生成的CRC值与之前组合页面的CRC 值相比较。对于具有与组合页面相同CRC值的ー个或更多页面,页面比较模块234检查所述ー个或更多页面中的每ー个是否具有与组合页面相同的内容。对于具有与组合页面相同的内容的每个页面,修改模块236更新进程页面记录,从而进程页面记录中先前指向每个这样的页面的条目改为指向组合页面。修改模块236还使每个这样的页面解除分配(例如,通过分配模块216),由此释放每个这样的页面,用于分配给其他进程或是如系统200所愿供作他用。此外,对于每个这样的具有与组合页面相同的内容的页面,修改模块236增加组合页面的參考计数。可替换地,页面比较模块234不将CRC生成模块232生成的CRC值与先前组合页面的CRC值相比较。相反,先前组合页面的CRC值被页面比较模块234忽略,模块234仅仅依赖于在页面组合模块212执行的当前页面组合过程期间由CRC生成模块232生成的CRC值。此外,在这种情形下包含CRC值的页面信息记录在当前页面组合过程结束后可以被释放。此外,在一个或更多实施方式中物理存储器的页面可以被传送至存储设备(例如图I中的存储设备108),页面比较模块234将CRC生成模块232所生成的CRC值与已传送给存储设备的先前组合页面的CRC值相比较。已传送给存储设备的组合页面的CRC值记录被维护在页面信息记录218中,尽管所述页面当前并不位于物理存储器中。存储在存储设备中,且具有与CRC生成模块232作为当前页面组合过程的一部分而生成的CRC值相同的CRC值的每个组合页面从存储设备被传送至物理存储器。如上所讨论的,页面比较模块234然后开始检查具有与组合页面相同的CRC值的ー个或更多页面的每ー个是否具有与组合页面相同的内容。可替换地,在其他实施方式中页面比较模块234不将CRC生成模块232生成的CRC值与已传送到存储设备的先前组合页面的CRC值相比较。相反,页面比较模块234将CRC生成模块232作为当前页面组合过程的一部分而生成的CRC值彼此比较,并且如上所讨论的,与物理存储器中的先前组合的页面相比较。进程206和/或208可以提供对于存储器管理器202的请求,请求使用指向组合页面的页面。如果这种请求不能潜在修改组合页面(例如请求是读请求),则存储器管理器202进而响应使用组合页面的请求(例如,来自组合页面的内容被返回至请求)。然而,如果这种请求可能潜在地修改组合页面(例如,该请求是写请求,或者改变页面的高速缓存属性的请求),页面分离模块238分配(例如通过分配模块216)新页面并将组合页面的内容拷贝至新页面。页面分离模块238还更新进程页面记录,以使得对于请求进程先前指向组合页面的进程页面记录中的条目改为指向新页面。此外,修改模块236递减组合页面的參考计数以反映減少了ー个的进程页面记录条目指向组合页面。存储器管理器202然而开始使用新页面而不是组合页面响应所述请求。此外,在一个或更多实施方式中,页面分离模块208检查组合页面的參考计数在被递减之后是否反映了没有进程页面记录条目指向组合页面。例如,页面分离模块208检查组合页面的參考计数是否为零。如果组合页面的參考计数指示没有进程页面记录条目指向组合页面,则页面分离模块238也解除分配组合页面(例如通过分配模块216),由此释放组合页面以分配给其他进程或是如系统200所愿供作他用。另ー方面,如果组合页面的參考计数指示ー个或更多页面记录条目仍指向组合页面,则组合页面不被解除分配。可替换地,在其他实施方式中页面分离模块208可以在生成新页面之前检查组合页面的參考计数是否反映仅有ー个进程页面记录条目指向组合页面。例如,页面分离模块208检查组合页面的參考计数是否是一。如果组合页面的參考值指示仅有ー个进程页面记录条目指向组合页面,不是分配新页面并将组合页面的内容拷贝至新页面,相反,组合页面可以简单地不再被作为组合页面对待。组合页面上的“写时拷贝”标记可以被移除。參考计数被递减且进程被允许写入该页面。应当注意到,页面组合模块212并不干扰进程206和/或208对于物理存储器的页面的使用。然而,在页面组合模块212执行页面组合过程时接收到请求可能导致改变正由模块212所分析的页面(例如,对于页面包含的存储器地址的写请求)。页面组合模块212通过跳过或以其它方式終止分析所述页面而响应这种请求。例如,如果接收到的请求所写入的存储器地址包含在两个正被比较以确定是否包含相同内容的页面中的一个上时,则停止比较。写请求被允许继续,且包含被写入的存储器地址的页面不再与其他页面相比较以确定其是否应当被组合进组合页面。然而,在页面组合模块212所执行的后续页面组合过程期间,所述页面可以再次被分析。在一个或更多实施方式中,页面组合策略模块204确定页面组合模块212何时执行页面组合过程,并通知页面组合模块212 (例如通过调用页面组合模块212所暴露的接ロ)何时开始页面组合过程。页面组合策略模块204可以实现各种不同的策略来确定何时指示页面组合模块212执行页面组合过程。通常,页面组合策略模块204所使用的策略在频繁执行页面组合过程以组合大量页面的愿望与较少执行页面组合过程以減少页面组合模块212的资源使用(例如处理器,处理器核心,电池,存储器带宽等)的愿望之间平衡。页面组合策略模块204可以配置有(例如由实现系统200的设备的用户或管理员编程或配置)或以其它方式获得(例如从另ー个组件、模块、设备等)一个或更多策略以确定何时指示页面组合模块212执行页面组合过程。在一个或更多实施方式中,页面组合策略模块204监控系统200和/或实现系统200的设备的各个方面,记录有关这些方面的各种数据。页面组合策略模块204可以自己收集有关系统200各个方面的数据,或者可替换地从其他组件或模块(例如进程206和/或208,存储器管理器202,等等)获得有关系统200各方面的数据。页面组合策略模块204结合一个或更多策略使用该记录的数据来确定何时指示页面组合模块212执行页面组合过、程。系统200和/或实现系统200的设备的各个方面可以包括用户状态,存储器使用,自最近分析以来的持续时间,存储器压力,存储器内容,系统启动,及其组合等等。用户状态是指系统200的用户是否被检测为离开了系统200(相对于在系统200中出现)。页面组合策略模块204可以分析各种输入以确定用户是否离开系统200,诸如键盘或触摸屏的活动的存在,可听的输入的存在,由图像捕捉设备检测到的运动的存在,等等。页面组合策略模块204在用户已离开系统200至少阈值时间量(例如,一个小时)之后,指示页面组合模块212执行页面组合过程。可替换地,如果用户在至少阈值时间量内未被检测为离开系统200,那么页面组合策略模块204可以指示页面组合模块212在特定间隔(例如,近似每小时)执行页面组合过程。存储器使用是指当前有多少物理存储器正被系统200使用。如果至少 阈值数量的物理存储器未被使用(例如尚未被分配模块216分配),则页面组合策略模块204不指示页面组合模块212执行页面组合过程。该阈值量可以是固定量(例如特定页面数)或是相对量(例如物理存储器中页面总量的特定百分比)。存储器使用还可以是指正由系统200使用的存储器数量的改变(例如已被分配模块216分配的存储器数量的改变)。响应于被使用的存储器数量的増大,页面组合策略模块204指示页面组合模块212执行页面组合过程。被使用的存储器数量的増大可以是特定时间量内存储器阈值量的増大。该存储器的阈值量可以是固定量(例如特定页面数)或是相对量(例如物理存储器中页面总量的特定百分比或是在特定时间量流逝之前物理存储器中正被使用的页面数量的特定百分比)。该特定时间量可以是固定量(例如特定量的秒或分钟)或相对量(例如从实现系统200的设备被引导(boot)时的特定时间百分比)。自最近分析以来的持续时间是指从页面组合模块212最近执行(例如,开始、结束等)页面组合过程以来流逝的时间量。直到从页面组合模块212最近执行页面组合过程以来已至少流逝了阈值时间量,页面组合策略模块204才指示页面组合模块212执行页面组合过程。该阈值时间量可以是例如特定数量的秒、分钟、小时等等(例如15分钟)。该阈值时间量还可以根据系统200使用的物理存储器的数量(例如已由分配模块216分配的存储器的数量)的不同而变化。例如,当正在使用的物理存储器的数量增大时,阈值时间量可以减小,以及当正在使用的物理存储器的数量减小吋,阈值时间量可以类似地増大。该阈值时间量还可以根据系统200的其他特性而变化(例如如果实现系统200的设备操作在电池供电模式,则阈值时间量可以更大,如果实现系统200的设备操作在插电模式则可以更小)。存储器压カ是指物理存储器的通量(flux)或搅动(churn)状态。物理存储器的通量或搅动状态是存储器页面被传送至存储设备(例如图I的存储设备108)和/或从存储设备被传送的频繁程度的量度。如果存储器页面以低于阈值速率的速率被传送到和/或从存储设备被传送,页面组合策略模块204指示页面组合模块212在较小的间隔(例如较少数量的分钟数)上执行识别和组合过程,如果存储器页面至少以阈值速率被传送到和/或从存储设备被传送,则以较大的间隔(例如较大数量的分钟数)执行。存储器内容是指物理存储器页面内容的改变量。物理存储器的页面内容的变化量例如是由分配模块216分配新页面速率的量度。仅当分配模块216分配新页面的速率超过阈值量,页面组合策略模块204指示页面组合模块212执行页面组合过程进程。该阈值量可以是固定量(例如特定时间量(诸如15分钟)上的特定数量的兆字节(诸如10))或相对量(例如在特定时间量上被使用的存储器页面数量的特定百分比)。系统启动是指在系统200 (或者实现系统200的设备)被启动或引导之后多久页面组合过程被执行。在设备或系统启动或引导之后的阈值时间量,页面组合策略模块204指示页面组合模块212执行页面组合过程。该阈值时间量可以是特定数量的秒(例如40)、分
钟等等。应当注意到进程206和208不需要知道以及典型地不知道此处所讨论的组合具有相同内容的存储器页面的技木。进程206和208发出访问存储器的请求,且这些请求由存储器管理器202响应。进程206和208不知道请求是否涉及可能是组合页面的页面以及此处讨论的任何的页面组合过程(或是组合页面的分离)。图3是示出根据ー个或更多实施方式用于组合及分离存储器页面的示例过程300的流程图。过程300由诸如图I中系统100和/或图2中系统200之类的系统来完成,并且能够以软件、固件、硬件或其组合来实现。过程300被显示为ー组动作,并且不限于所显示 的用于执行各个动作的操作的顺序。过程300是用于组合及分离存储器页面的示例进程;在此參照不同的附图包括组合及分离存储器页面的附加讨论。过程300中,做出何时分析物理存储器的页面的确定(动作302)。如上所讨论的,该确定可以以不同的方式被做出,例如基于来自评价各种策略的页面组合策略模块的输入。响应于到了分析物理存储器的页面的时间,具有相同内容的多个页面(如果有的话)被识别(动作304)。如上讨论的,该识别例如可以通过生成CRC值并比较具有相同CRC值的页面而被执行。被分析用来识别相同内容的物理存储器的页面可以是物理存储器中的所有页面,物理存储器的特定部分的页面,特定物理页面范围,等等。与动作304中的识别并行或同时,在设备或实现过程300的系统中运行的其他进程可以使用物理存储器的页面(动作306)。如上所讨论的,接收的请求可能潜在地导致存储器相干或腐坏情形,或是可能变更页面的内容,使得页面的分析被跳过或以其它方式終止。如上所讨论的,动作306中的这种请求包括改变页面的高速缓存属性的请求。具有相同内容的多个页面被组合为单个组合页面(动作308)。如上所讨论的,该单个页面可以是新分配的页面或是多个页面之一。此外,进程页面记录被更新(动作310)。如上所讨论的,进程页面记录可以是ー个或更多进程页面表格,且被更新以使得先前指向具有相同内容的多个页面之一的记录中的条目改为指向组合页面。随后,从进程接收请求以写入已被组合的页面(动作312)。响应于该请求,存储器的新页面被分配(动作314),且进程页面记录被更新以使得对于该进程先前指向组合页面的记录中的条目改为指向新分配的页面(动作316)。该进程然后被允许写入新分配的页面(动作318)。如上所讨论的,基于新分配的页面而不是组合页面,存储器管理器响应于写请求。图4是示出根据ー个或更多实施方式用于组合具有相同内容的存储器页面的示例过程400的流程图。过程400由诸如图I中系统100和/或图2中系统200之类的系统来完成,并且能够以软件、固件、硬件或其组合来实现。过程400被显示为ー组动作,并且不限于所显示的用于执行各个动作的操作的顺序。过程400是用于组合具有相同内容的存储器页面的示例进程;在此參照不同的附图包括组合具有相同内容的存储器页面的附加讨论。在过程400中,一组可组合的物理存储器页面被扫描(动作402),生成该组页面的每个页面的CRC值(动作404)。可替换地,如上所讨论的除CRC值之外其他值也可被生成。过程400然后通过分析生成的CRC值而迭代(动作406),检查被分析的当前页面的CRC值是否与该组页面中的另ー页面的CRC值相匹配,其中CRC值为动作404中所生成的或是先前组合页面的CRC值(动作408)。这种先前组合的页面典型地为在先前运行过程400期间生成的组合页面。如上面所讨论的,CRC值可选地可以在迭代之前被排序(sort)。如果被分析的当前页面的CRC值与该组页面中的另ー页面的CRC值不匹配,其中CRC值为动作404中所生成的或是先前组合的页面的CRC值,则过程400继续通过CRC值迭代(动作406)。然而,如果被分析的当前页面的CRC值与该组页面中的另ー页面的CRC值相匹配,其中CRC值为动作404中所生成的或是先前组合的页面的CRC值,则做出具有匹配 CRC值的页面是否具有相同内容的检查(动作410)。如果具有匹配CRC值的页面不具有相同的内容,则过程400继续通过CRC值迭代(动作406)。然而,如果具有匹配CRC值的页面具有相同的内容,则多个页面被组合以构成单个组合(共享)页面(动作412)。该组合页面是如上所讨论的“写时拷贝”页面。此外,进程页面记录被更新,以使得先前指向具有相同内容的多个页面之ー的记录的条目改为指向组合页面(动作414)。如上所讨论的,进程页面记录可以是ー个或更多进程页面表格。如上所讨论的,与组合页面相关联的參考计数也被生成或递增以反映指向组合页面的页面数量。图5示出了能够被配置用于根据一个或更多实施方式实现组合具有相同内容的存储器页面的示例计算设备500。计算设备500可以实现例如图I的系统100和/或图2的系统200。计算设备500包括一个或更多处理器或处理单元502、可以包括一个或更多存储器和/或存储组件506的一个或更多计算机可读媒体504、一个或更多输入/输出(I/O)设备508以及总线510,其中总线510允许各种组件和设备彼此通信。计算机可读媒体504和/或一个或更多I/O设备508可以作为计算设备500的一部分而被包括,或可替换地,可以耦合到计算设备500。总线510表示若干类型的总线结构中的ー种或多种,这包括使用多种不同总线架构的存储器总线或存储控制器、外设总线、图形加速端ロ、处理器或局部总线等等。总线510可以包括有线和/或无线总线。存储器/存储组件506表示一个或更多计算机存储媒体。组件506可以包括易失性媒体(诸如随机存取存储器(RAM))和/或非易失性媒体(诸如只读存储器(ROM)、闪存、光盘、磁盘等等)。组件506可以包括固定媒体(例如,RAM、R0M、固定硬盘驱动器等)以及可移动媒体(例如,闪存驱动器、可移动硬盘驱动器、光盘等等)。此处所讨论的技术能够利用由一个或更多处理单元502执行的指令以软件来实现。将意识到不同的指令可以被存储在计算设备500的不同组件中,例如存储在处理单元502中、在处理单元502的各种高速缓冲存储器中、在设备500的其他高速缓冲存储器(未示出)中、在其他计算机可读媒体上等等。此外,将意识到指令在计算设备500中所存储的位置可以随时间而变化。
—个或更多输入/输出设备508允许用户给计算设备500输入命令和信息,并且也允许信息被呈现给用户和/或其他组件或设备。输入设备的示例包括键盘、光标控制设备(例如,鼠标)、麦克风、扫描仪等等。输出设备的示例包括显示设备(例如,监视器或投影仪)、扬声器、打印机、网卡等等。此处可以在软件或程序模块的一般上下文中描述各种技术。通常,软件包括执行特定任务或实现特定抽象数据类型的例程、程序、应用、对象、组件、数据结构等等。这些模块和技术的实现可以被存储在某些形式的计算机可读媒体上或者通过某些形式的计算机可读媒体进行发送。计算机可读媒体可以是任何可获得的能够由计算设备访问的介质或媒体。通过示例而非限制,计算机可读媒体可以包括“计算机存储媒体”和“通信媒体”。“计算机存储媒体”包括以任何的方法和技术实现的易失性和非易失性的、可移动和不可移动媒体,用于存储诸如计算机可读指令、数据结构、程序模块,或其他数据之类的信息。计算机存储媒体包括但不限于RAM、R0M、EEPR0M、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光学存储设备、磁带盒、磁带、磁盘存储设备或其他磁存储设备或任何其他的可以用于存储期望的信息并且能够由计算机访问的介质。 “通信媒体”典型地包含计算机可读指令、数据结构、程序模块或调制数据信号中的其他数据,例如载波或其他传输机制。通信媒体也包括任何的信息传递媒体。术语“调制数据信号”意指这样的信号,其特性中的一个或更多以在信号中编码信息的方式进行设置或改变。通过示例而非限制,通信媒体包括诸如有线网络或直接有线连接之类的有线媒体以及诸如声学、RF、红外线和其他无线媒体之类的无线媒体。上面的任何组合也被包括在计算机可读媒体的范围内。通常,此处所描述的任何功能或技术可以使用软件、固件、硬件(例如,固定逻辑电路)、人工处理或这些实现方式的组合来实现。此处所使用的术语“模块”和“组件”通常表示软件、固件、硬件或其组合。在软件实现的情况下,模块或组件表示当在处理器(例如,CPU或多个CPU)上运行时执行指定任务的程序代码。程序代码可以被存储在一个或更多计算机可读存储器设备中,其进ー步的描述可以參考图5找到。此处所描述的组合具有相同内容的存储器页面的技术的特征是平台独立的,这意味着这些技术可以在具有各种处理器的各种商业计算平台上实现。尽管以结构特征和/或方法动作所特有的语言描述了该主題,但是将明白在所附的权利要求书中定义的主题不一定限于上述的特定特征或动作。相反,上述的特定特征和动作作为实现这些权利要求的示例形式而被公开。
权利要求
1.一种在具有作为多个页面被访问的存储器的设备中的方法,该方法包括 识别(304)具有相同内容的多个页面中两个或更多页面; 当两个或更多页面被识别时,允许(306)运行在设备上的其他进程使用所述两个或更多页面,包括允许其他进程改变两个或更多页面中每一个的高速缓存属性; 组合(308)两个或更多页面为单个组合页面;以及 更新(310)具有指向多个页面的多个条目的进程页面记录,以使得先前指向两个或更多页面之一的条目改为指向单个组合页面。
2.如权利要求I所述的方法,所述允许包括 响应于在分析页面时接收到可能潜在导致存储器相干或腐坏情形的请求,停止分析页面以确定该页面是否具有与多个页面中的一个或更多其他页面相同的内容;以及允许请求被执行。
3.如权利要求I所述的方法,进一步包括响应于来自用户模式页面组合策略模块的分析多个页面的指示而执行识别、允许、组合和更新。
4.如权利要求3所述的方法,用户模式页面组合策略模块至少部分基于页面组合策略模块监视的设备的各方面而生成指示。
5.如权利要求I所述的方法,组合包括分配存储器的新页面作为单个组合页面,以及更新进程页面记录包括更新进程页面记录以使得先前指向两个或更多页面之一的每个条目改为指向新页面。
6.如权利要求I所述的方法,识别包括 对于多个页面中的每一个,生成循环冗余检验(CRC)值,多个页面包含先前组合的页面,先前组合的页面包括已被传送至存储设备的一个或更多先前组合的页面; 识别多个页面中具有匹配CRC值的页面; 比较多个页面中具有匹配CRC值的页面,以确定哪些页面具有相同的内容,如果有的话。
7.如权利要求I所述的方法,进一步包括,响应于来自其他进程之一的,向包含在所述两个或更多页面之一中的存储器地址写入的请求 分配存储器中的新页面; 将单个组合页面的内容拷贝至新页面;以及 更新进程页面记录,以使得对于从其接收到请求的进程,先前指向组合页面的条目改为指向新页面。
8.一种具有作为多个页面被访问的存储器的计算设备,该计算设备包含 一个或更多处理器(502);以及 一个或更多计算机可读媒体(504),具有存储于其上的多个指令,所述多个指令当由一个或更多处理器执行时,通过使得一个或更多处理器执行如下步骤来实现页面组合过程识别(304)具有相同内容的多个页面中两个或更多页面; 分配(308)多个页面中的新页面,新页面具有与两个或更多页面相同的内容;以及更新(310)具有指向多个页面的多个条目的进程页面记录,以使得先前指向两个或更多页面之一的条目改为指向新页面。
9.如权利要求8所述的计算设备,其中指令进一步使得一个或更多处理器,响应于向包含在两个或更多页面之一中的存储器地址写入的请求 分配存储器中额外的新页面; 将新页面的内容拷贝至额外的新页面;以及 更新进程页面记录,以使得对于从其接收到请求的进程,先前指向新页面的条目改为指向额外的新页面。
10.如权利要求8所述的计算设备,新页面以减少物理存储器碎片的方式被分配。
11.一种计算机可读存储介质,其上存储了计算机可读指令,所述指令在被计算机执行时导致计算机执行如权利要求1-7中任何一项所述的方法。
全文摘要
在具有作为多个页面被访问的存储器的设备中,具有相同内容的多个页面中两个或更多页面被识别。当两个或更多页面被识别时,运行在设备上的其他进程被允许使用所述两个或更多页面,包括被允许改变所述两个或更多页面中每一个的高速缓存属性。所述两个或更多页面被组合为单个组合页面(例如多个页面的新分配页面);以及具有指向多个页面的多个条目的进程页面记录被更新,以使得先前指向两个或更多页面之一的条目改为指向所述单个页面。
文档编号G06F12/08GK102708067SQ20121007550
公开日2012年10月3日 申请日期2012年3月21日 优先权日2011年3月21日
发明者L.王, M.伊根, P.L.勒贝戴恩斯基, V.森达拉姆, Y.贝克 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1