用于变化内存压缩机器的方法和装置的制作方法

文档序号:6422594阅读:166来源:国知局

专利名称::用于变化内存压缩机器的方法和装置的制作方法
技术领域
:本发明涉及一种用于将内存中的内容从一种格式转换成另一种格式的处理系统和方法,更具体的,涉及一种在移除操作系统和常规应用程序的同时将压缩的内容转换成解压的格式(变化(morphing))或将解压的内容转换成压缩的格式的系统和方法。
背景技术
:在页式操作系统中,虚拟地址空间(即可以由程序寻址的地址集合)被划分成页,具有固定长度的连续虚拟地址的集合。通常一页包含4Kb。程序的虚拟地址空间一般要比可用物理内存大得多。操作系统提供一组支持这一特征的功能性集合,这些功能性被总称为虚拟内存管理器。为了支持大于物理内存的虚拟地址空间,虚拟内存管理器在内存中和通常为硬盘的第三存储器上存储虚拟页。当访问一个虚拟页并且该虚拟页不在主存中时,从磁盘进行读取(页调入操作)。如果对于从磁盘读出的页不存在可用的物理空间,则将另一个虚拟页写入磁盘中(页调出操作)并释放其空间。当从磁盘读出虚拟页时,为它分配一个起始实际地址,即从处理器看到的地址。将实际内存(处理器的地址空间)划分成连续并且两两不相交的实际地址范围的集合,其具有与逻辑页相同的大小。这些地址范围被称为页帧。因此,当从内存中读出一个逻辑页时,其被存储在一个页帧中。逻辑和实际页之间的转化依赖于划分成多页、被称为页表的目录结构。每个逻辑页在页表中具有唯一的表目,称为页表表目,其包含包括有该页的页帧的起始实际地址、或者如果逻辑页在第三存储器上时则包含在磁盘上的位置。利用分离数据结构来管理未使用页帧。通过操作系统的适当模块来管理由处理(包括OS的那些处理)使用的页帧集。大多数操作系统提供虚拟内存管理,即为每个处理提供一个通常比可用物理地址要大得多的地址空间。为了实现这一目的,操作系统在内存中仅保留每个处理的一小部分页,并将其他页存储在例如硬盘的海量存储器中。因此作为连续物理地址的集合的物理页可以包含处理的虚拟页,或暂时可以不使用。物理页通常被称为页帧。当处理对不在内存中的页发出操作时,该页从磁盘中被复制到未使用的页帧中(类似的,如果该页是一个新页,即其未存储在磁盘上,则向其分配一个未使用的页帧)。页帧至少可以由于三个原因而未被使用(1)因为它自机器最后一次启动后从未被使用过;(2)因为最后使用它的处理已经终止;和(3)因为操作系统释放了它。在最后一种情形中,操作系统还负责确保将要释放的页帧的内容的副本出现在磁盘上。通常,存在多种机制用来检测页帧的内容自从被分配和从磁盘中复制之后是否已经被修改了。如果页帧没有改变,则不需要将其复制回去。如果页帧内容已经被修改了,则必须将其复制到磁盘中,否则就不需要这样做。计算机结构的新兴发展是在计算机系统的主存中使用数据压缩。主存中的数据以压缩格式进行存储。图1描述了在内存中具有压缩的内容的示例性处理系统。在图1中,中央处理单元(CPU)102从/向高速缓冲存储器104中读出/写入数据。高速缓冲存储器出错(miss)并借助于压缩控制器106存储其从/向压缩的主存储器110读取/写入的结果。通常将实际内存——即与内存中存储的数据相对应的处理器地址的集合——划分成对应于固定数目的连续处理器地址的多个两两不相交的段。两两不相交意味着每个实际地址属于一个并且只属于一个所述的段。这些段被称为内存行。内存行是压缩的单位。取决于其内容压缩的程度如何,存储在压缩内存中的内存行被压缩并存储在多个内存位置中。美国专利第5761536号和5729228号公开了其中主存的内容被压缩的计算机系统。再次参见图1,压缩的内存被划分为两个部分数据部分108和目录107。数据部分被划分为两两不相交的扇区,所述扇区是物理内存位置的固定大小的间隔。例如,扇区可以由具有连续物理地址的256个物理字节组成。压缩内存行的内容存储在最少可能数目的物理扇区中。包含压缩行的物理扇区不需要具有连续的物理地址,并且可以位于压缩主存的数据部分中的任何位置。经由目录107来执行字节的实际地址与包含其的物理扇区的地址之间的转化。图2示出了更好地理解压缩内存的操作的更进一步的细节。处理器高速缓冲存储器240包含未压缩的高速缓冲存储器行241和存储每个高速缓冲存储器行的实际地址的高速缓冲存储器目录242。在下面的讨论中,假设高速缓冲存储器行具有与内存行(压缩单元)相同的大小。当高速缓冲存储器出错时,高速缓冲存储器通过提供引起这一出错的实际地址270而从内存中请求对应行。实际地址被划分成两部分log2(行长度)最低有效位是行中地址的偏移量,其中log2()是以2为底的对数。其他位用作压缩内存目录220中的索引,所述压缩内存目录对于在所支持的实际地址范围内的每一行包含一个行表目。地址A1(271)对应于行表目1(221)、地址A2(272)对应于行表目2(222)、地址A3(273)对应于行表目3(513)、以及地址A4(274)对应于行表目4(514)等等。在示例中示出了不同的地址,用于示出在压缩主存中存储压缩数据的不同方法。在这一示例说明中,具有地址A1的行(例如,全部由零组成的行)很好地进行压缩。这样的行整个存储在目录表目221中,并且不需要内存扇区。地址A2处的行的压缩得稍差,并且需要两个内存扇区231和232,它们都存储在数据扇区230中。行表目222包含指向内存扇区231和232的指针。注意内存扇区232的最后一部分未使用。具有地址A3的行需要3个内存扇区233、234和235。扇区235中剩余的未使用空间的大小足够用来存储具有实际地址A4的压缩行的一部分,具有实际地址A4的压缩行依次使用扇区236和235的一部分。地址A4和A3处的行被称为同空间者(roommate)。当高速缓冲存储器中所谓的脏行(例如,先前使用的行)被回写到内存中时,使用压缩器。当高速缓冲存储器回写时,压缩脏行。如果其与在回写前使用的相同的存储量相配,则在适当的位置对其进行存储。否则,写入在适当数目的扇区中。如果所需扇区的数目减少,则将未使用的扇区加入到闲置扇区列表。如果所需扇区的数目增加,则从闲置扇区列表取回所需扇区。图3示出了压缩目录220中的表目的结构。附图示出了三种不同的行结构。表目1(306)包含一组标志(301)以及4个扇区的地址。如果行的大小是1024字节,并且内存扇区的大小是256,则该行需要最多4个扇区。表目2(307)包含一组标志、由该行使用的第一扇区的地址、压缩行的起始、以及由该行使用的最后一个扇区的地址。如果行需要2个以上的内存扇区,则通过指针的链表来连接这些扇区(即,每个内存扇区包含随后的内存扇区的地址)。表目3包含一组标志,以及高度压缩的行,其压缩为120位或更少。示例中的标志为标志302,指示行是以压缩方式还是解压缩方式存储的;标志303,指示行是否是可高度压缩的并且整体存储在目录表目中;标志304(2位),指示行使用了多少个扇区;标志305(4位),包含片段信息,即行占用了最后使用的扇区的那个部分(这一信息用于空间相配)。在内存压缩依赖于所述的压缩内存组织结构的系统中,可获得的最大压缩比取决于目录的大小实际地址的最大数目等于目录中目录表目的数目。限制目录的大小以产生(比方说)2∶1的压缩对于通常在其中遵守更高的压缩比的大多数计算机应用程序来说不是最理想的。另一方面,大的目录占用大量的物理内存量,其在内存内容碰巧压缩性不好时会削弱系统性能。在现有技术中描述的内存压缩方案具有下述的目录大小该目录大小在机器引导时是固定的,并且在机器操作时不能被改变。压缩和解压的代价(即执行时间)部分地被高速缓冲存储器所隐藏。对于多数普通的工作负荷,大的高速缓冲存储器几乎完全地隐藏了这些执行时间。但是,对于不具有内存引导的强局域性的、不支持高速缓冲存储器的工作负荷,高速缓冲存储器不能隐藏执行时间,并且具有内存压缩的系统的性能比不具有内存压缩的类似系统的性能要差很多。如果推理得出工作负荷的特性,则在现有技术中描述的内存压缩方案允许启动计算机系统并以非压缩的方式操作(作为标准计算机,其中实际地址对应于物理地址)。但是,如果以非压缩的模式启动机器,则如果不重启的话其不能被变换回压缩模式,反之亦然。当在页式内存系统中使用内存压缩时,则可以由处理使用的页帧的数目动态地变化。可以由处理使用的页帧此处被称为可用页帧。如果数据的可压缩性增加,则可用页帧的数目也可以增加。类似的,如果可压缩性下降,则会使得更多的页帧无法使用。在主存内容保持压缩格式的计算机系统中,使用目录执行由处理器产生的实际地址与包含压缩数据的内存单元的物理地址之间的转化,所示目录此处被称为压缩转化表(CTT,compressed-translationtable)。当高速缓冲存储器回写时,数据被压缩并存储到内存中。当高速缓冲存储器出错时,解压缩内存的内容。通过使用大的高速缓冲存储器隐藏了解压缩处理的执行时间。当内存包含可压缩性不好的数据时,由于页缺失的增加,内存中不同页帧的数目(实际内存的大小)会比物理页的数目要少,并且压缩内存系统的性能可能会低于具有相同的物理内存量的传统系统的性能。当工作负荷不支持高速缓冲存储器时,即当造成大量高速缓冲存储器出错时,高速缓冲存储器不能很好地隐藏解压缩执行时间,并且支持内存压缩的系统的性能受损。如果不支持高速缓冲存储器的工作负荷运行了很长的时间段,则系统的性能下降对于用户变成可见。上述以内存内容非压缩并且不具有实际-物理转化的额外代价的传统模式运行系统的情形的示例是有益的。因此支持内存压缩的系统的硬件也可以以传统的非压缩方式工作。通常,基于对预期的工作负荷和数据的了解决定以压缩内存模式运行系统还是以传统模式运行系统。一旦作出了决定,则系统以压缩内存模式或非压缩内存模式运行,直到其下一次重新启动在系统处理时不能改变操作模式。因此需要存在下述的系统和方法该系统和方法用于将操作模式从压缩内存转换为非压缩内存或从非压缩内存转换为压缩内存,而不需要重新启动系统或停止应用程序的操作,或者能够动态地改变压缩内存目录的大小。
发明内容在具有用于存储压缩格式数据的主存和用于存储解压缩数据的处理器高速缓冲存储器的计算机系统中,一种用于将所述主存中的数据从压缩状态变换为非压缩状态的方法,包括步骤将所述主存中的使用部分减少至一个目标值;禁止用于压缩非压缩数据的压缩器;解压缩所述主存的所述压缩数据;将所述解压缩的数据移动到与实际地址相等的物理地址;和释放由上述步骤中使用的压缩内存导向器和数据结构占用的内存。优选地,减少所述压缩主存的使用部分的步骤包括将所述主存中的页帧数目减少至低于阈值的数目,其中所述阈值乘以页的大小等于目标值。优选地,将所述主存中的页帧数目减少至低于阈值的数目的步骤还包括步骤禁止向实际内存空间添加新的页帧;从零列表中移除所有的页帧;从使用所述主存的处理的工作区中修剪页;从所述零列表中移除所述修剪后的页。优选地,所述内存中的页帧数目的阈值不大于物理内存的大小减去所述压缩内存目录的大小减去所述数据结构的大小。优选地,所述的方法还包括将所述主存划分成多个存储扇区并使用未使用扇区列表管理未使用的内存扇区,并且其中解压缩所述主存的所述压缩数据的步骤包括步骤定义实际地址的允许范围;从未使用扇区列表中移除具有在允许范围之外的物理地址的扇区;将在允许范围外的实际地址改变为在允许范围内的实际地址;和解压缩代表压缩/解压缩单元的压缩内存行。优选地,定义允许范围的步骤包括步骤定义阈值;和将允许范围调整为在所述阈值之下的实际地址减去由所述内存目录使用的物理地址的集合。优选地,所述阈值大于所述主存的使用部分的所述目标值加上所述压缩内存目录的大小。优选地,所述阈值小于所述主存的物理大小减去由变化使用的数据结构的大小。所述方法最好还包括通过操作系统管理页式的虚拟内存;其中所述对于由每个处理使用的内存执行解压缩所有压缩的内存行的步骤包括步骤获取所述处理的页表;对于与所述主存中包含的页对应的、所述处理的所述页表中的每个页表表目,应用下面的步骤将所述页的所有内存行读入到高速缓冲存储器中,和将所述内存行的内容回写到所述主存中。所述方法最好还包括通过操作系统管理页式的虚拟内存,其中所述对于由每个处理使用的内存执行将在允许范围外的实际地址改变为在允许范围内的实际地址的步骤包括步骤获取所述处理的页表;对于与所述主存中包含的页对应的、所述处理的所述页表中的每个页表表目,应用下面的步骤检查所述页的地址是否在允许范围之外,并将在允许范围外的所述页的地址改变为在允许范围内的地址。所述方法最好还包括步骤初始化指针,以指向所述压缩内存目录的第一表目;使所述指针前进至指向对应于所述允许范围内的实际地址的所述压缩内存目录的第一个未使用表目;将在允许范围外的所述页的所述地址改变为在所述指针中包含的地址;和使所述指针前进至指向对应于所述允许范围内的实际地址的所述压缩内存目录的下一个未使用表目。优选地,将所述内存内容移动到与实际地址相等的物理地址的步骤包括步骤创建物理-实际地址映射;对于在所述压缩内存目录中索引标记的每个内存行,将所述内存行移动至与其实际地址相等的物理地址。优选的,将所述内存行移动到与实际地址相等的物理地址的步骤包括步骤寻找占用与所述内存行的内存扇区的实际地址相等的物理地址的内存扇区的压缩内存目录表目;将具有与所述内存行的内存扇区的实际地址相等的物理地址的内存扇区的内容复制到未使用的内存扇区;更新所述复制的内存扇区的压缩内存目录表目,以包含所述内存扇区的新物理内存地址;用所述复制的内存扇区的新位置更新物理-实际映射;将所述内存行的所述物理内存扇区的内容复制到具有与它们的实际地址相等的物理地址的内存扇区;用所述复制的内存扇区的新位置更新物理-实际映射;从物理-实际映射移除所述复制的内存扇区的旧位置。在能够以压缩格式和非压缩格式保持主存内容的优选的计算机系统中,一种用于将操作模式从非压缩模式变换为压缩模式而不需要停止和重新启动所述计算机系统的方法,包括步骤选择用于压缩内存目录的大小;移除所述主存中选择用来容纳所述压缩内存目录的部分的内容;初始化所述压缩内存目录,并启动压缩主存模式。该方法还包括步骤选择用于压缩内存目录的起始位置。优选地,移除所述主存中选择用来容纳所述压缩内存目录的部分的内容的步骤包括步骤阻止虚拟内存管理器向处理部分分配选择用来容纳所述压缩内存目录的所述主存的所述部分;标识所述选择用来容纳所述压缩内存目录的所述内存的所述部分,其由所述虚拟内存管理器使用而不是由处理使用;向第三存储器写入修改了的、内存的所述标识的部分,并且不允许由虚拟内存管理器使用它们;和不允许由虚拟内存管理器使用未修改的、内存的所述标识的部分。优选的,移除所述主存中选择用来容纳所述压缩内存目录的部分的内容的步骤还包括步骤分析由处理使用的内存;在由处理使用的所述内存中标识所述主存中选择用来容纳所述压缩内存目录的所述部分;向第三存储器写入修改了的、内存的所述标识的部分,并且不允许由虚拟内存管理器使用它们;和不允许由虚拟内存管理器使用未修改的、内存的所述标识的部分。优选地,所述主存中选择用来容纳所述压缩内存目录的所述部分是页帧。该方法还包括步骤填充所述压缩内存目录。优选地,启动所述压缩内存目录的初始化,启动压缩和填充压缩内存目录还包括步骤将所述压缩内存目录的所有表目初始化为一个未被用来指示压缩表目的值;启动压缩器,在反向变化模式中初始化压缩内存管理;在所述反向变化模式中操作压缩内存管理,直到反向变化了内存的全部内容。优选地,在所述反向变化模式中运行压缩内存管理包括步骤为高速缓冲存储器读/写操作的控制行设置检查标志;将变化后的内存行的计数器初始化为零;当高速缓冲存储器写入时,通过将压缩内存目录表目值与未用于压缩表目的值进行比较来检查是否反向变化了内存行,并且当比较的值相等时增大计数器;当高速缓冲存储器读取时,通过将压缩内存目录表目值与未用于压缩表目的值进行比较来检查是否反向变化了内存行,并且如果所述比较的值不相等时使用CTT表目来执行实际-物理转化;当高速缓冲存储器写入时,通过将压缩内存目录表目值与未用于压缩表目的值进行比较来检查是否反向变化了CTT行,并且如果所述比较的值不相等时使用页表实际-物理转化,修改CTT表目和增大所述计数器;当增大了所述计数器时,将计数器的值与所述压缩内存目录中的表目数进行比较,当所述比较值相等时,重置所述标志,并终止反向变化模式。在具有用于保持压缩格式的内容和压缩内存目录的主存的优选计算机系统中,用于增大压缩内存目录的大小而不需要停止和重新启动所述计算机系统的方法包括步骤选择压缩内存目录的新的大小;移除所述主存中选择用来容纳所述压缩内存目录的附加部分的所述部分的内容;和初始化所述压缩内存目录的扩展部分。优选地,移除所述主存中选择用来容纳所述压缩内存目录的附加部分的所述部分的内容包括步骤防止将落入在主存的所述部分内的未使用内存扇区添加到未使用扇区列表中;从未使用扇区列表中移除属于主存的所述部分的内存扇区;将主存的所述部分使用的内存扇区复制到未使用内存扇区。用于存储可以由计算机系统中的处理器执行的代码的设备,所述处理器执行所述代码以执行一种用于减小计算机系统的主存中的压缩内容的压缩内存导向器的大小的方法,该方法包括步骤为压缩内存目录选择新的大小以容纳用于M个页帧的表目;将页帧的数目减少至所述值M;将具有在可以由所述压缩内存目录寻址的范围之外的地址的页帧的地址改变为在所述可寻址范围内的地址,所述压缩内存目录具有所述选择的新的大小。优选地,减少页帧的数目包括步骤防止分配具有比所述值M乘以页帧大小要大的实际地址的新页帧;防止向用于重新分配释放的页帧的数据结构中添加具有在可以由所述压缩内存目录寻址的地址范围之外的实际地址的页帧,所述压缩内存目录具有所述选择的新的大小;从用于重新分配释放的页帧的所述数据结构中移除所有具有在可以由所述压缩内存目录寻址的所述地址范围之外的实际地址的页帧,所述压缩内存目录具有所述选择的新的大小;和通过修剪处理的工作区将页帧的数目减少至M。优选地,所述用于重新分配释放的页帧的数据结构包括修改页备用列表、未使用页列表、和零页列表之一。优选地,改变具有在可以由具有新大小的所述压缩内存目录寻址的范围之外的地址的页帧的地址包括步骤在处理的页表中搜索具有在所述可寻址范围之外的地址的页帧;在所述压缩内存目录中搜索对应于新的可寻址范围的未使用表目;修改所述页表表项中的实际地址以指向所述未使用表目;以及将具有在所述可寻址范围之外的地址的所述页帧的压缩内存目录表项复制到所述未使用表项。在具有用于存储压缩格式数据的主存和用于存储解压缩数据的处理器高速缓冲存储器的优选计算机系统中,一种用于将所述主存中的数据从压缩状态变换为非压缩状态的方法包括步骤将所述主存中的使用部分减少至一个目标值;禁止用于压缩非压缩的数据的压缩器;解压缩所述主存的所述压缩数据;将所述解压缩的数据移动到与实际地址相等的物理地址;和释放由在上述步骤中使用的压缩内存导向器和数据结构占用的内存。一种具有用于存储压缩格式数据的主存和用于存储解压缩数据的处理器高速缓冲存储器的优选计算机系统,用于将所述主存中的数据从压缩状态变换为非压缩状态的方法,包括步骤将所述主存中的使用部分减少至一个目标值;禁止用于压缩非压缩数据的压缩器;解压缩所述主存的所述压缩数据;将所述解压缩的数据移动到与实际地址相等的物理地址;和释放由在上述步骤中使用的压缩内存导向器和数据结构占用的内存。一种能够以压缩格式和解压缩格式保持主存内容的优选的计算机系统,用于将操作模式从非压缩模式变换为压缩模式而不需要停止和重新启动所述计算机系统的方法,包括步骤选择用于压缩内存目录的大小;移除所述主存中选择用来容纳所述压缩内存目录的部分的内容;初始化所述压缩内存目录,并启动压缩主存模式。一种具有用于保持压缩格式和解压缩格式的内容的主存的优选计算机系统,用于增大压缩内容目录的大小而不需要停止和重新启动所述计算机系统的方法,包括步骤选择用于压缩内存目录的新的大小;移除所述主存中选择用来容纳所述压缩内存目录的附加部分的部分的内容;初始化所述压缩内存目录的扩展部分。一种用于存储可以由计算机系统中的处理器执行的代码的设备,所述处理器执行所述代码以执行一种用于减小计算机系统的主存中的压缩内容的压缩内存导向器的大小的方法,该方法包括步骤为压缩内存目录选择新的大小以容纳用于M个页帧的表目;将页帧的数目减少至所述值M;将具有在可以由所述压缩内存目录寻址的范围之外的地址的页帧的地址改变为在所述可寻址范围内的地址,所述压缩内存目录具有所述选择的新的大小。一种具有用于存储压缩格式数据的主存和用于存储解压缩数据的处理器高速缓冲存储器的优选计算机系统,用于将所述主存中的数据从压缩状态变换为非压缩状态的方法,包括步骤将所述主存中的使用部分减少至一个目标值;禁止用于压缩非压缩数据的压缩器;解压缩所述主存的所述压缩数据;将所述解压缩的数据移动到与实际地址相等的物理地址;和释放由在上述步骤中使用的压缩内存导向器和数据结构占用的内存。图1示出了具有压缩主存的传统计算机系统。图2示出了图1的计算机系统的内存结构。图3示出了图1的计算机系统中的内存目录表目的结构。图4示出了根据本发明实施例、用于将主存的内容从压缩状态变化至解压缩状态而不需要中断计算机系统的正常操作的方法。图5示出了将压缩主存的使用部分减少为希望的值的方法。图6示出了用于将由处理所使用的页的实际地址变化到允许的区域和解压缩页的内容的方法。图7示出了用于将由处理所使用的页的实际地址变化到允许的区域和解压缩所述页的内容的方法。图8示出了用于移动内存内容以使得实际地址等于物理地址的方法。图9示出了根据本发明的优选实施例、用于将主存内容从解压缩变换为压缩而不需要中断计算机系统的正常操作的方法。图10示出了在将内容从解压缩变换为压缩的同时寻址主存内容的方法,以及压缩内容而不需要中断正常操作的细节。图11示出了用于增大内存压缩目录的大小而不需要中断正常操作的方法。图12示出了用于减小内存压缩目录的大小而不需要中断正常操作的方法。图13示出了本发明的一个实施例的实现。图14示出了用于移除未使用扇区列表扇区的装置。具体实施例方式本发明优选实施例的一个方面经由连续目录动态地改变支持压缩内容的计算机的实际空间的大小。图4示出了根据本发明实施例、用于从压缩内存操作变化至非压缩内存操作的方法的示例性流程图。取决于本发明的特定实施例,将可以由处理使用的页帧数目(下文中称为可用页帧)减少为数值M(步骤401)。M小于可以在物理内存中包含的页帧的最大数目。步骤402禁止压缩内存的压缩器。在步骤402之后,每个从磁盘页调入的逻辑页以非压缩形式存储在主存中,并占用最大数目的内存扇区,如关于图3所描述的。类似的,非压缩地存储从高速缓冲存储器回写到内存的每个内存行。在步骤403,内存的全部内容被解压缩;优选地,通过将每个内存行读入到高速缓冲存储器和强制进行回写来实现内存的全部内容的解压缩。当内存的全部内容被解压缩,并且每个内存行被存储在最大数目的扇区中时,步骤404将内存扇区复制到与他们的实际地址相等的物理地址中。当压缩内存110中的所有扇区都非压缩地存储在与他们的实际地址相等的物理地址处时,步骤404终止。步骤405释放由压缩内存目录以及变化模块使用的数据结构占用的内存,其被归还给操作系统作为未使用的页帧。图5示出了步骤401中将页帧的数目减少至希望的数值M的优选处理。步骤501阻止增加可用页帧的数目禁止如果可压缩性提高(例如,如果未使用扇区列表上的内存扇区数目超过阈值)就使得页帧可用的压缩内存机制。在可选实施例中,使用一种不阻止增加可用页帧的数目但是限制使得页帧可用的速率的控制策略,从而由图5示出的过程的整体效果是实际地减少可用页帧的数目。图5中随后的步骤将具有增大未使用扇区列表上的扇区数目的整体效果。在优选的实施例中,其中通过不支持高速缓冲存储器的工作负荷触发变化,步骤501也暂时地禁止用户处理的页调入,除非未使用扇区列表上的扇区数目在适当的阈值之上。在这一实施例中,在步骤506再次允许页调入。在其他实施例中,没有禁止页调入。操作系统使用适当的数据结构,通常为一个或多个列表,以记录没有被任何处理所使用的可用页帧。特别的,存在一种明了有效的可用页帧(例如,如果可用页帧没有被任何处理所使用,其内容已经被修改但是还没有被写入到磁盘中,则该页帧会是无效的)的数据结构。在一些操作系统中,这一结构被称为零页列表。步骤502从零页列表中移除所有的可用页帧。在优选实施例中,这些页帧与内存扇区无关如图3中所述,高压缩性的内存行全部存储在对应的CTT-表目中。从零页列表中移除所有的页帧具有减少实际内存的效果。重复执行步骤503和504,直到内存中可用页帧的数目减少到低于阈值M。回想一下可用页帧是由处理使用的页帧或者未使用并由操作系统保持在使其可用于处理的数据结构中的页帧。本领域的技术人员能够容易地知道,如何能够使可用页帧的定义适用于对于页帧管理使用不同数据结构的页式操作系统。步骤503获取由处理使用的页、将修改后的页写入到磁盘中、并将他们添加到用于记录未使用页的数据结构中。这一处理与修剪在诸如Windows2000的操作系统中的处理的工作区的处理类似。在优选的实施例中,通过调用适当的操作系统模块来执行步骤503所需要的操作。步骤504获取未使用的页帧并使得他们对于处理是无效的。步骤503和504可以同步地执行。步骤505控制步骤503和504的操作,并在页帧数目等于希望的数值M或降到M之下时终止他们的执行。在优选实施例中,使用下面的等式M<=(物理内存大小-CTT大小-变化结构大小)/(页大小)来选择M的值。数字M必须足够大,以便包含存储在内存中的非-可分页编码和数据结构。注意,除了常驻在M页外部、由变化处理使用的数据之外,计算机系统的操作需要的所有编码和数据将包含在这些M个页中。图5示教的方法不阻止页调入。例如,如果未使用扇区列表中的内存扇区的数目足够大,适当的操作系统模块可以再次使用在备用和未使用页列表中的页帧,并将他们添加到他们的原始处理的工作区。为了确保图5的方法终止,所调用的操作系统模块必须具有足够高的优先权,其值可以在以希望的速率从内存中移除页帧的变化操作中进行修改。图6示出了根据本发明的优选实施例解压缩内存403的内容的方法。在步骤601,选择阈值T,其满足两个约束条件(1)阈值T大于CTT的字节大小加上物理页的大小的M倍,和(2)阈值T小于物理内存的大小减去在变化期间使用的数据结构的大小。步骤602将实际内存空间的允许范围定义为在步骤601中定义的阈值T之下的实际地址的集合减去内存压缩管理系统使用的CTT和其他数据结构占用的物理地址的集合。这一允许范围具有两个主要用途在实际空间中,其定义当变化终止时可以激活的实际地址集合;在物理空间中,其定义刚好在变化终止后正在使用的物理地址集合。因此,实现了两个目标从实际空间中移除具有允许范围外的实际地址的所有激活的页;回收具有在允许范围外的物理地址、并且正在使用的所有内存空间。步骤603和604处理由内存压缩系统保存的未使用扇区列表。步骤603阻止将具有允许范围外的物理地址的未使用扇区添加到未使用扇区列表中。在一种实现方法中,适当地修改控制未使用扇区列表的管理的机制。在后面将要描述的图13中示出了这样的管理控制的优选实施例。当位于允许区域外的未使用扇区被呈现给未使用扇区列表管理器时,该管理器不将该扇区添加到列表中,并且忘记其地址。因此,所述扇区既不会被页帧使用,也不在未使用扇区列表中。不保存包含该扇区地址的指针,并且因此此后该扇区是不可见的,因此不能被压缩内存管理系统使用。注意,这不是一个问题最后所有常驻在允许区域外的内存扇区将会被释放;变化机制直接访问(即,使用物理地址)允许范围外的存储位置,因此不需要保存指向释放的扇区的指针。随后,步骤604分析由内存压缩子系统保留的未使用扇区列表。检查它所有的内存扇区并移除具有在允许范围外的物理地址的那些扇区。与步骤603中相同,简单地释放这些扇区,并且不通过内存压缩管理器来保留指向它们的指针。当步骤604终止时,步骤605分析系统中的所有处理。在优选的实施例中,操作系统为每个处理保留唯一的处理描述符,即包含与所述处理相关的信息的数据结构。在这一优选实施例中,步骤605获取执行每个处理描述符的指针,并使用所述处理描述符来分析每个处理。步骤605控制步骤606和607的执行,并且当已经分析过所有的处理时终止在图6中描述的操作(步骤608)。在步骤606,检查与正在分析的处理相关的页帧,并将落在允许范围外的页帧移动到允许的范围。在步骤607,通过将处理的常驻页的所有行读入高速缓冲存储器并强制进行回写来解压缩所述常驻页的所有行。图7图解说明了根据本发明优选实施例的步骤606和607。步骤701和702优选地执行一次。他们可以在步骤601之前执行、在步骤601和602之间执行、在步骤603和604之间执行、或者在步骤604之后但在步骤704之前执行。在步骤701中,指针P被初始化为指向CTT中的第一表目。在优选的实施例中,指针P物理地存储在内存控制器的专用寄存器中。在步骤702中,使指针前进,直到找到第一个未使用的CTT表目。在一个优选实施例中,关于CTT表目使用了还是未使用的信息包含在CTT表目自身中。在另一个优选实施例中,保存未使用CTT表目的列表,并且在这一情形中,步骤701将指针初始化为指向未使用CTT表目的列表的开始,步骤702使指针前进,直到遇到具有在步骤602中定义的允许范围内的实际地址的第一个未使用CTT表目。在当前优选实施例的环境中,步骤703到709是步骤606和607的详细解释。步骤704分析与正在分析的处理相关的每个页表表目(PTE),并且在处理的所有PTE都已经分析过时终止(步骤705)。如果PTE将虚拟页转化内存中的实际页,则执行下面描述的步骤。步骤706解压缩页的每一行。在优选实施例中(其中内存行在高速缓冲存储器出错时被解压缩,并且全部存储到高速缓冲存储器中),步骤706将页的每一行读入到高速缓冲存储器中,并强制进行回写,因此解压缩行的内容(因为压缩器在步骤402中被禁止)。在优选实施例中,通过硬件来辅助强制的回写为高速缓冲存储器控制器增加将强制进行回写的适当电路(例如,将根据需要设置修改标记的硬件)。在不同的实施例中,通过软件来完成步骤706通过程序将内存行读入到高速缓冲存储器中,所述程序还将行中的字节之一(比方说第一个字节)载入到处理器的寄存器中,并将该字节回写到高速缓冲存储器行中的相同位置。利用这一方法,高速缓冲存储器控制器检测向高速缓冲存储器行的写入、将该行标记为已修改,因此当从高速缓冲存储器中收回时,该行被回写。步骤707检查由PTE转化的页的实际地址。如果实际地址在允许范围内,则通过步骤704分析下一个PTE。否则,步骤708将与地址在PTE中的实际页相对应的CTT表目的内容复制到由P指出的未使用CTT表目,并将PTE中的实际地址改变为通过由P指出的CTT表目转化的实际页。不需要将旧的CTT表目添加到未使用表目列表中,因为其不会被再次使用。步骤709使指针前进到下一个未使用的CTT表目。在CTT表目中包含它们是否被使用的信息的优选实施例中,简单地递增指针P,直到找到未使用的CTT表目。在未使用的CTT表目属于一个列表的优选实施例中,使指针P在该列表中前进,直到找到与具有允许范围内的地址的实际页相对应的CTT表目。本领域的技术人员显而易见的,取决于特定的操作系统,可能需要采用其他的步骤来阻止操作系统在不允许的范围内分配新的页帧。在诸如WindowsNT和Windows2000的操作系统中,这不是必需的,因为不在零或未使用页列表中的所有页帧仍然通过它们所属于的处理的CTT表目来指出,或者通过与它们所属于的处理相关的数据结构来指出。在操作系统保存所述数据结构的优选实施例中,将使用与图7中所描述的相同的方法来分析该数据结构。在一个优选实施例中,在开始步骤703之前分析在零列表上的页帧,并且如果它们的地址在不允许的范围内则从零列表中移除它们。在另一个实施例中,利用步骤707、708和709来分析和修改所述在零列表上的页帧。根据本发明的又一个实施例,CTT可以安置在物理内存中的普通位置,并且可以潜在地细分为连续间隔的集合。允许区域的定义形式是相同的,并且本领域的技术人员能够容易地对确定页帧的物理扇区和实际地址是否落在允许范围内的测试做出适当的改变。图8描述了本发明实现步骤404的优选实施例。步骤801构造内存扇区的物理-实际映射。由于此时没有向实际内存添加新的页帧并且压缩被禁止,所以与每个页帧相关的扇区现在在物理内存中的固定位置,并且它们的位置在计算期间不会改变。构造物理-实际映射包括下列步骤1.分配指针数组A,其对于允许范围内的每一个物理内存扇区包含一个条目。在物理内存中具有比在步骤601中定义的阈值T大的地址的部分分配这一指针数组。2.遍历(walk)CTT下面的伪码描述了该操作对于每个CTT条目,进行对于CTT条目中的每个指针P,进行将CTT条目的索引复制到数组A中与存储在P中的地址相对应的每个条目中。完成完成一旦创建了物理-实际映射,则步骤802例如从CTT的末端开始遍历CTT,并控制附图中所有后继步骤的执行。本领域的技术人员将会明白,能够容易地修改算法,以便重新排列内存的内容,从而增大实际地址。当CTT包含由页帧使用的CTT表目时,执行步骤804至810。当CTT不再包含由页帧使用的CTT表目时,图9的方法终止于步骤803。将E作为通过步骤902选择的CTT条目。E对应于包含一定量的扇区的实际地址范围。在页的大小为4096字节并且内存扇区的大小为256字节的优选实施例中,对应于一个页帧的实际地址范围包含4096/256=16个内存扇区。步骤804对于与对应于E的实际地址范围相等的物理地址范围中的每个扇区S应用步骤805、806和807。步骤805在物理-实际映射中查看使用扇区S的实际地址,并检索对应的CTT表目Es。步骤806将扇区S的内容复制到从未使用扇区列表中获得的未使用的扇区S’中。本领域的技术人员显而易见的,可以以任意的顺序执行步骤805和806。步骤807将S’的地址复制到包含S的地址的CTT表目Es的指针中。当步骤804终止迭代时,可以重写与对应于CTT表目E的实际地址范围相对应的物理地址范围,而不会损害数据的完整性。步骤808在包含由E索引指出的数据的内存扇区上进行迭代。用S”指示这样的扇区。步骤809将包含在S”中的数据复制到具有与S”的实际地址相等的物理地址的扇区中。在优选实施例中,用于内存压缩和变化的硬件和软件在变化期间支持双向寻址模式。具体来说,通过页表直接访问变化后的范围内的地址(即,已经经历了变化处理的地址),而不需要更进一步的CTT的间接寻址;通过由CTT提供的附加间接寻址访问变化范围外的地址(即,等待进行变化的地址)。优选地,一旦变化了内存中的所有的实际页,则通过下面的优选步骤来终止变化处理将被物理-实际映射占用的物理地址划分成页帧,所述页帧被添加到未使用页列表中;将被CTT占用的物理地址划分成页帧,所述页帧被添加到未使用页列表中。图9描述了用于将主存的内容从非压缩转化为压缩,而不需要中断计算机系统的正常操作的方法。根据这一优选方法,当I/O缓冲区驻留在固定页中时,操作系统对于a)内核和b)I/O操作控制不可分页的范围。在步骤901中,选择CTT的大小。在一个优选实施例中,将CTT的大小静态地选择为等于预定值。在另一个实施例中,当回写高速缓冲存储器行时,压缩器收集关于高速缓冲存储器行的压缩性的统计,并将该压缩性信息用于决定CTT的大小。在一个优选的实施例中,CTT开始于预定的地址。在另一个实施例中,可以使用预定的策略来选择CTT的起始地址,并将该起始地址用作压缩内存管理的参数;在该实施例中,步骤901还使用所述预定的策略来选择CTT的起始地址。在该发明中,物理地址开始于CTT的起始地址、并且具有与CTT相同的大小的范围称为CTT范围。步骤902页式调出CTT范围中的所有页帧,并阻止虚拟内存管理器再次使用所述页帧。在操作系统是WindowsNT,2000或具有类似的虚拟内存管理的操作系统的优选实施中,步骤902可以通过下面的示例性处理来执行通过适当地修改工作区管理器来阻止内存管理器将CTT范围内的页帧添加到修改后的备用页列表中;分析修改后的页,备用、未使用和零页列表,以识别CTT范围内的页帧;将修改后的页列表上的所述识别出的页写入到页文件中,并将它们从修改后的页列表中移除;将所述识别出的页从备用、未使用和零页列表中移除;在处理的页表中搜索CTT范围内的页帧;和将识别出的页帧写入到所述页文件中,并从页表中移除它们。最后两个任务可以通过修改图7的方法来实现。步骤903初始化CTT;步骤904启用压缩以及压缩内存管理;和步骤905填充CTT。图10示出了一个优选的实施例。在执行步骤903、904和905的步骤1001中,将CTT表目的内容初始化为一个当在实际和物理地址之间进行CTT表目转化时从未使用的值。通过将CTT表目的内容与所述值进行比较,从而可能确定CTT表目当前是否用于实际和物理地址之间的变化或者其是否从未被使用过。步骤1002启用压缩器,并通过设置标志以反向变化模式初始化压缩内存管理器。步骤1003将对应于反向变化后的行的CTT表目的数目计数器初始化为零。步骤1004在高速缓冲存储器写入时检查标志如果标志被设置为指示反向变化模式,则执行步骤1005和1006。在步骤1005,压缩内存管理系统检查正在回写的行是否在其回写之前被转换了。如果该行未被转化,则步骤1005增大计数器,以指示该行当前尚未被转换。步骤1007在高速缓冲存储器写入时检查标志如果标志被设置为指示反向变化模式,则执行步骤1008,其检查是否已经修改了行的CTT表目以及该行是否被转换。如果所述行已经被转换,则步骤1011通过经由CTT表目将实际地址转化为物理地址来继续进行读操作。如果所述行尚未被转换,则步骤1009通过经由CTT表目将实际地址转化为物理地址来继续进行读操作。为了加速反向变化操作的完成(例如,如在数据挖掘任务中那样,当内存内容的大部分已经被读取并且极少被写入时),通过指示非压缩地存储了所述行并通过将内存扇区指针初始化为指向由该行使用的内存扇区的物理位置,步骤1010修改CTT表目,并增大计数器。当通过步骤1005和1010增大了计数器时,调用步骤1006。如果计数器等于CTT中表目的数目,则终止反向变化操作,并重置标志。图11示出了用于动态增大CTT的大小的优选实施例。在步骤1101,计算出CTT的附加大小。本领域的技术人员显而易见的,可以使用适合的控制策略来确定CTT的附加大小。符号S被用来指示这一以内存扇区的数目来表示的附加大小,A用来指示将由CTT使用的地址的间隔。步骤1102阻止落在扩展CTT区域(物理内存地址集合A)中的未使用扇区被添加到未使用扇区列表中。在优选的实施例中,步骤1102通知负责管理未使用扇区的压缩内存管理模块,当内存扇区未使用时,应当检查其地址以便确定其是否落入在A中,那样的话该内存扇区不应被添加到未使用扇区列表中。步骤1103分析未使用扇区列表,并从中移除所有具有在A中的地址的扇区。在一个优选实施例中,将数目S减少由步骤1103移除的内存扇区的数目。步骤1104是一个迭代器,其目的是控制步骤1105和1106,它们共同从未使用扇区列表中获得S个未利用的内存扇区。当收回了S个未利用的内存扇区时,终止步骤1104。步骤1105从未使用扇区列表中收回扇区。为了避免内存用尽,如通过压缩内存管理策略所规定的,步骤1105总是在未使用扇区列表中剩余最少量的未使用内存扇区。为了允许步骤1105收集未使用扇区,步骤1106强制进行处理工作区的修剪,其增大未使用扇区列表的大小。本领域的技术人员能够容易的理解,步骤1105和1106可以以任意的顺序来执行,并且也可以同时地执行。当从未使用扇区列表中收回S个扇区时,步骤1107对CTT表目进行迭代。步骤1107对CTT中的每个CTT表目进行迭代。步骤1108对CTT表目的每个扇区指针进行迭代。如果扇区在区域A中,则将该扇区的内容复制到在步骤1101-1106中收回的S个扇区中的一个中,并且更新指针(步骤1109)。为了防止同空间者的问题,可能在掩蔽中断时可以自动地对一组(允许空间相配的行的集合)中的所有表目执行步骤1107、1108、1109。本领域的技术人员将会明白,步骤1104、1105、1106的集合及步骤1107、1108、1109的集合不需要顺序地执行,而是可以同时执行。当已经分析过CTT中所有的表目时,步骤1110扩展CTT并初始化其表目。图12图示说明了用于将压缩内存目录的大小减小为索引指示M个页帧所需要的大小的方法的优选实施例。可以通过分析在内存中包含的数据的压缩性的动态特性来选择页帧的数目M。在步骤1201,阻止压缩内存管理系统分配具有比M乘以非压缩页的大小要大的地址的新页帧。步骤1202阻止向修改、备用、未使用和零页列表中添加具有比M乘以非压缩页的大小要大的实际地址的页帧。压缩内存管理系统将所述页添加到修改页列表的表头、强制进行页写入、并丢弃页帧,而不是向修改列表中添加所述页帧。压缩内存管理系统丢弃页帧,而不是向备用、未使用和零页列表中添加所述页帧。步骤1203分析所述列表,搜索具有比M乘以解压缩页的大小要大的实际地址的页帧。当在修改列表中找到这样的页帧时,将其移动到列表的表头并发出写入到磁盘操作,并且丢弃该页帧。在不同的实施例中,写操作被延迟,直到分析了整个修改页列表。当在其他列表中找到这样的页帧时,其被丢弃。步骤204例如使用图5中的方法将内存中页帧的数目减少至M。步骤1205将指针P1设置为指向内存压缩目录的开始。步骤1206分析依次在计算机系统上执行的每个处理。步骤1207分析由在步骤1206中选择的处理使用的页的所有的页表表目。步骤1208将通过在步骤1207中选择的页表表目索引指示的页的实际地址与一个阈值进行比较,该阈值等于M乘以非压缩的页帧的大小。如果地址大于所述阈值,则步骤1209增大指针P1,直到其指向CTT中未使用的表目,步骤1210复制与在步骤1208中识别的实际地址相对应的CTT表目,并且步骤1211将通过步骤1207选择的页表表目中的所述地址修改为在P1中包含的值。当已经分析了由步骤1206选择的处理的最后的PTE时,步骤1207终止(附图中的完成),而当已经分析了最后的处理时,步骤1206终止。本领域的普通技术人员显而易见的,步骤1206只需要分析在步骤1204的执行终止之前已经初始化的处理。而且,不需要分析在步骤1206终止之前终止的处理,因为已经通过在步骤1201到1203中初始化的压缩内存管理部件管理了干扰页帧。图13图示说明了用于防止将落在允许范围之外的内存扇区添加到未使用扇区列表中的装置的实施例。在这一实施例中,允许范围包括物理地址间隔的集合。该集合包含至多K个间隔。每个间隔通过其下限和上限来表示。在这一实施例中,通过未使用扇区列表管理逻辑(1313)以硬件来管理未使用扇区列表。通过信号1314来允许将内存扇区添加到未使用扇区列表中的逻辑部分1313。例如,当信号等于0时,所述逻辑不将内存扇区添加到未使用扇区列表中,而当信号等于1时,允许该逻辑将内存扇区添加到未使用扇区列表中。将要添加到未使用扇区列表中的内存扇区的起始地址存储在寄存器1301中。允许范围的第一间隔的起始地址存储在寄存器1302中,而允许范围的第一间隔的结束地址存储在寄存器1303中。更具体的,该结束地址是属于对应间隔的最后一个内存扇区的起始地址。在这一示例性实施例中,对于允许范围内的每一个间隔使用一对寄存器(用于起始和结束地址)。为了举例说明,仅示出了第一间隔和用于最后一个间隔——间隔K的那些寄存器(即寄存器1307和1308)。对于每一对寄存器,所述逻辑包含一对比较器。第一比较器连接到寄存器1301并连接到包含间隔的起始地址的寄存器。例如,比较器1304比较寄存器1301和1302的值,而比较器1309比较存储在寄存器1301和1307中的值。如果包含在寄存器1301中的值大于或等于包含在连接到比较器的其他寄存器中的值,这一比较器输出“1”。第二比较器连接到寄存器1301并连接到包含间隔的结束地址的寄存器。例如,比较器1305比较寄存器1301和1303的值,而比较器1310比较存储在寄存器1301和1308中的值。如果包含在寄存器1301中的值小于或等于包含在连接到比较器的其他寄存器中的值,这一比较器输出“1”然后将两个比较器的输出用作到AND门的输入。例如,将比较器1304和1305的输出用作到AND门1306的输入,将比较器1309和1310的输出用作到AND门1311的输入。如果其输入都等于1,则AND门1306生成“1”作为输出,否则生成“0”。因此,如果寄存器1301中包含的值大于或等于寄存器1302中存储的值并且小于或等于寄存器1303中存储的值,即只有当其起始地址存储在1301中的内存扇区落在由存储在1302中的起始地址和存储在1303中的结束地址定义的允许范围的间隔中,AND门1306生成“1”。根据这一实施例,如果由允许范围实际使用的间隔数是k,其中k小于最大值K,则禁用最后一个K-k寄存器对的AND门。在一个优选的实施例中,这是通过向每个寄存器对添加1位的标志来实现的,如果寄存器对应于允许范围的一个间隔则该标志设置为1,否则设置为0;然后将这个1位的标志与比较器的输出一起用作到AND门的输入。将所有AND门的输出用作到OR门1312的输入,如果OR门1312的至少一个输入等于“1”,则该OR门生成“1”,否则生成“0”。因此,如果地址存储在寄存器1301中的存储器扇区属于允许范围的间隔之一,则门1312的输出1314等于1。图14描述了用于从未使用扇区列表中移除位于允许范围之外的扇区的装置。未使用内存扇区可以位于内存1401中的任何物理位置,限制条件为内存扇区中的第一个字节的地址是内存扇区大小的倍数(这里,为了讨论的缘故,我们假设内存中第一个字节的地址等于1;如果内存中第一个字节的地址为0,限制条件为通过使内存扇区的第一字节的地址模(modulo)内存扇区的大小,得到0)。在这一实施例中,以链表来组织未使用扇区,如在作为参考文件列出的专利中所述。优选地,每个未使用内存扇区包含一个指针,其包含未使用列表中的下一个内存扇区的地址。例如,该指针可以被限制在内存扇区的前4字节中。如图14中所示,内存扇区1402在列表的表头,其指针1406包含第二内存扇区1403的地址。沿该列表继续向下,1403中的指针1407包含列表中的第三个内存扇区1404的地址,其后跟随有第四个内存扇区1405,等等。1405的地址存储于包含在1404中的指针1408中。在这个实施例中,使用2个寄存器1410和1411来管理未使用扇区列表。对于32位的机器,每个寄存器都是4字节长,而对于64位的机器,它们将是8字节长。寄存器1410包含在未使用扇区列表表头的内存扇区的地址。寄存器1411包含紧随表头的内存扇区的地址。当收到对于未使用内存扇区的请求,并且列表不空时,返回寄存器1410的内容。同时,读/写单元1412读取地址在寄存器1411中的内存扇区的前4个字节。在该实施例中,这4个字节包含未使用扇区列表上的下一个内存扇区的地址。本领域的技术人员能够理解,可以如何修改这一方案以适应不同长度的并且具有未使用扇区列表中的其他位置的指针,并使该方案适合于通过不是常驻在未使用扇区自身中的数据结构来管理未使用扇区列表的情形。用于指示未使用扇区列表为空并记录未使用内存扇区数目的电路是公知的并且没有示出。当通过硬件接收到从未使用扇区列表移除在允许范围之外的所有内存扇区的命令时,调用逻辑1413。这一逻辑执行下面的操作1.禁止从未使用内存扇区列表分配未使用内存扇区。2.将寄存器1410的值与允许范围的描述1414进行比较。3.如果列表的表头在允许范围之外,则通过将包含在1411中的值复制到1410来丢弃该扇区,调用读/写单元1412的操作,返回到步骤2。4.允许从未使用内存扇区列表分配未使用内存扇区,将1410的值复制到寄存器1415和将1411的值复制到寄存器1416,并对列表控制逻辑1417进行控制。注意,禁止从未使用扇区列表中分配未使用内存扇区通常不会使机器的操作停止很长的时间。当允许范围外的所有内存扇区都在未使用扇区列表上并在允许范围内的任意内存扇区之前时出现最差的情况。回想一下,在这一步骤中仅涉及留出来用于容纳物理-实际映射并且支持数据结构的不允许范围部分与内存压缩使用的CTT和数据结构重叠的未使用内存扇区不能在未使用内存列表上。允许范围的描述1414可以由一对寄存器或寄存器对的集合来实现。当1413对列表清除控制逻辑1417进行控制时,寄存器3的内容是允许范围内的地址。逻辑1417执行下面的操作A.将寄存器3(1415)的值与寄存器1(1410)的值进行比较。如果比较成功,则禁止从未使用内存扇区列表分配未使用内存扇区;否则允许分配。B.与前一操作并行地,将在寄存器4(1416)中包含的值与允许范围的描述1414进行比较如果1416中包含的值在允许范围内,其执行下面的操作i.将1416中包含的值复制到1415中;ii.调用读/写单元1412,并在上面的步骤1期间将地址在1416中的内存扇区的前4个字节读入到1416中。如果1416中包含的地址不在允许范围内,则1.调用读/写单元1412,并在上面的步骤1期间将地址在1416中的内存扇区的前4个字节读入到1416中。2.重复步骤1,直到1416的内容在允许范围内为止。3.使用读/写单元1412将寄存器4(1416)的内容复制到地址在寄存器3(1415)中的内存扇区的前4个字节。4.如果寄存器3(1415)的内容等于寄存器1(1410)的内容,将寄存器4(1416)的内容复制到寄存器2(1411)。5.返回到步骤B。逻辑1417的特征还在于当到达列表的表尾时适当地终止操作。当逻辑1417有效时,寄存器3总是指向允许范围内的内存扇区,而寄存器4的内容改变直到其等于允许范围内的地址。通过将寄存器4的内容复制到地址在1415中的扇区的前4个字节,所述逻辑从未使用扇区列表“分离”位于允许范围外的那些内存扇区。通过当1415的内容等于1410的内容时不允许分发未使用扇区,将用于控制未使用扇区列表的表头的电路的变化减到最小。基于页式操作系统描述了本发明的优选实施例,所述页式操作系统例如Windows95、Windows98、WindowsNT、Windows2000、Linux、AIX、以及所有其他版本的UNIX、MacOS、IBMOS/400等。本领域的普通技术人员容易理解,非页式操作系统同样适用于本发明的实施例。尽管已经参考本发明的优选实施例示出和描述了本发明,但是本领域的技术人员应当明白,在不背离本发明的实质的情况下可以在其中做出各种形式和细节上的改变。权利要求1.在具有用于存储压缩格式数据的主存和用于存储解压缩数据的处理器高速缓冲存储器的计算机系统中,一种用于将所述主存中的数据从压缩状态变换为非压缩状态的方法,包括步骤将所述主存中的使用部分减少至一个目标值;禁止用于压缩非压缩数据的压缩器;解压缩所述主存的所述压缩数据;将所述解压缩的数据移动到与实际地址相等的物理地址;和释放由上述步骤中使用的压缩内存导向器和数据结构占用的内存。2.如权利要求1所述的方法,其中减少所述压缩主存中的使用部分的步骤包括将所述主存中的页帧数目减少至低于阈值的数目,其中所述阈值乘以页的大小等于目标值。3.如权利要求2所述的方法,其中将所述主存中的页帧数目减少至低于阈值的数目的步骤还包括步骤禁止向实际内存空间添加新的页帧;从零列表中移除所有的页帧;从使用所述主存的处理的工作区中修剪页;从所述零列表中移除所述修剪后的页。4.如权利要求2所述的方法,其中所述内存中的页帧数目的阈值不大于物理内存的大小减去所述压缩内存目录的大小减去所述数据结构的大小。5.如权利要求1所述的方法,还包括将所述主存划分成多个存储扇区并使用未使用扇区列表管理未使用的内存扇区,并且其中解压缩所述主存的所述压缩数据的步骤包括步骤定义实际地址的允许范围;从未使用扇区列表中移除具有在允许范围之外的物理地址的扇区;将在允许范围外的实际地址改变为在允许范围内的实际地址;和解压缩代表压缩/解压缩单元的压缩内存行。6.如权利要求5所述的方法,其中定义允许范围的步骤包括步骤定义阈值;和将允许范围调整为在所述阈值之下的实际地址减去由所述内存目录使用的物理地址的集合。7.如权利要求6所述的方法,其中所述阈值大于所述主存的使用部分的所述目标值加上所述压缩内存目录的大小。8.如权利要求6所述的方法,其中所述阈值小于所述主存的物理大小减去由变化使用的数据结构的大小。9.如权利要求5所述的方法,还包括通过操作系统管理页式的虚拟内存;和其中所述对于由每个处理使用的内存执行解压缩所有压缩的内存行的步骤包括步骤获取所述处理的页表;对于与所述主存中包含的页对应的、所述处理的所述页表中的每个页表表目,应用下面的步骤将所述页的所有内存行读入到高速缓冲存储器中,和将所述内存行的内容回写到所述主存中。10.在具有用于存储压缩格式数据的主存和用于存储解压缩数据的处理器高速缓冲存储器的计算机系统中,一种用于将所述主存中的数据从压缩状态变换为非压缩状态的装置,包括用于将所述主存中的使用部分减少至一个目标值的部件;用于禁止用来压缩非压缩数据的压缩器的部件;用于解压缩所述主存的所述压缩数据的部件;用于将所述解压缩的数据移动到与实际地址相等的物理地址的部件;和用于释放由上述步骤中使用的压缩内存导向器和数据结构占用的内存的部件。全文摘要在具有用于存储压缩格式数据的主存和用于存储解压缩数据的处理器高速缓冲存储器的计算机系统中,一种用于将所述主存中的数据从压缩状态变换为非压缩状态的方法,包括步骤将所述主存中的使用部分减少至一个目标值;禁止用于压缩非压缩的数据的压缩器;解压缩所述主存的所述压缩数据;将所述解压缩的数据移动到与实际地址相等的物理地址;和释放由上述步骤中使用的压缩内存导向器和数据结构占用的内存。文档编号G06F12/10GK1799032SQ200380105684公开日2006年7月5日申请日期2003年12月5日优先权日2002年12月12日发明者维多利奥·卡斯特利,彼德·弗拉纳兹克,丹·波夫,查尔斯·舒尔茨申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1