專(zhuān)利名稱(chēng)::用于變化內(nèi)存壓縮機(jī)器的方法和裝置的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種用于將內(nèi)存中的內(nèi)容從一種格式轉(zhuǎn)換成另一種格式的處理系統(tǒng)和方法,更具體的,涉及一種在移除操作系統(tǒng)和常規(guī)應(yīng)用程序的同時(shí)將壓縮的內(nèi)容轉(zhuǎn)換成解壓的格式(變化(morphing))或?qū)⒔鈮旱膬?nèi)容轉(zhuǎn)換成壓縮的格式的系統(tǒng)和方法。
背景技術(shù):
:在頁(yè)式操作系統(tǒng)中,虛擬地址空間(即可以由程序?qū)ぶ返牡刂芳?被劃分成頁(yè),具有固定長(zhǎng)度的連續(xù)虛擬地址的集合。通常一頁(yè)包含4Kb。程序的虛擬地址空間一般要比可用物理內(nèi)存大得多。操作系統(tǒng)提供一組支持這一特征的功能性集合,這些功能性被總稱(chēng)為虛擬內(nèi)存管理器。為了支持大于物理內(nèi)存的虛擬地址空間,虛擬內(nèi)存管理器在內(nèi)存中和通常為硬盤(pán)的第三存儲(chǔ)器上存儲(chǔ)虛擬頁(yè)。當(dāng)訪問(wèn)一個(gè)虛擬頁(yè)并且該虛擬頁(yè)不在主存中時(shí),從磁盤(pán)進(jìn)行讀取(頁(yè)調(diào)入操作)。如果對(duì)于從磁盤(pán)讀出的頁(yè)不存在可用的物理空間,則將另一個(gè)虛擬頁(yè)寫(xiě)入磁盤(pán)中(頁(yè)調(diào)出操作)并釋放其空間。當(dāng)從磁盤(pán)讀出虛擬頁(yè)時(shí),為它分配一個(gè)起始實(shí)際地址,即從處理器看到的地址。將實(shí)際內(nèi)存(處理器的地址空間)劃分成連續(xù)并且兩兩不相交的實(shí)際地址范圍的集合,其具有與邏輯頁(yè)相同的大小。這些地址范圍被稱(chēng)為頁(yè)幀。因此,當(dāng)從內(nèi)存中讀出一個(gè)邏輯頁(yè)時(shí),其被存儲(chǔ)在一個(gè)頁(yè)幀中。邏輯和實(shí)際頁(yè)之間的轉(zhuǎn)化依賴于劃分成多頁(yè)、被稱(chēng)為頁(yè)表的目錄結(jié)構(gòu)。每個(gè)邏輯頁(yè)在頁(yè)表中具有唯一的表目,稱(chēng)為頁(yè)表表目,其包含包括有該頁(yè)的頁(yè)幀的起始實(shí)際地址、或者如果邏輯頁(yè)在第三存儲(chǔ)器上時(shí)則包含在磁盤(pán)上的位置。利用分離數(shù)據(jù)結(jié)構(gòu)來(lái)管理未使用頁(yè)幀。通過(guò)操作系統(tǒng)的適當(dāng)模塊來(lái)管理由處理(包括OS的那些處理)使用的頁(yè)幀集。大多數(shù)操作系統(tǒng)提供虛擬內(nèi)存管理,即為每個(gè)處理提供一個(gè)通常比可用物理地址要大得多的地址空間。為了實(shí)現(xiàn)這一目的,操作系統(tǒng)在內(nèi)存中僅保留每個(gè)處理的一小部分頁(yè),并將其他頁(yè)存儲(chǔ)在例如硬盤(pán)的海量存儲(chǔ)器中。因此作為連續(xù)物理地址的集合的物理頁(yè)可以包含處理的虛擬頁(yè),或暫時(shí)可以不使用。物理頁(yè)通常被稱(chēng)為頁(yè)幀。當(dāng)處理對(duì)不在內(nèi)存中的頁(yè)發(fā)出操作時(shí),該頁(yè)從磁盤(pán)中被復(fù)制到未使用的頁(yè)幀中(類(lèi)似的,如果該頁(yè)是一個(gè)新頁(yè),即其未存儲(chǔ)在磁盤(pán)上,則向其分配一個(gè)未使用的頁(yè)幀)。頁(yè)幀至少可以由于三個(gè)原因而未被使用(1)因?yàn)樗詸C(jī)器最后一次啟動(dòng)后從未被使用過(guò);(2)因?yàn)樽詈笫褂盟奶幚硪呀?jīng)終止;和(3)因?yàn)椴僮飨到y(tǒng)釋放了它。在最后一種情形中,操作系統(tǒng)還負(fù)責(zé)確保將要釋放的頁(yè)幀的內(nèi)容的副本出現(xiàn)在磁盤(pán)上。通常,存在多種機(jī)制用來(lái)檢測(cè)頁(yè)幀的內(nèi)容自從被分配和從磁盤(pán)中復(fù)制之后是否已經(jīng)被修改了。如果頁(yè)幀沒(méi)有改變,則不需要將其復(fù)制回去。如果頁(yè)幀內(nèi)容已經(jīng)被修改了,則必須將其復(fù)制到磁盤(pán)中,否則就不需要這樣做。計(jì)算機(jī)結(jié)構(gòu)的新興發(fā)展是在計(jì)算機(jī)系統(tǒng)的主存中使用數(shù)據(jù)壓縮。主存中的數(shù)據(jù)以壓縮格式進(jìn)行存儲(chǔ)。圖1描述了在內(nèi)存中具有壓縮的內(nèi)容的示例性處理系統(tǒng)。在圖1中,中央處理單元(CPU)102從/向高速緩沖存儲(chǔ)器104中讀出/寫(xiě)入數(shù)據(jù)。高速緩沖存儲(chǔ)器出錯(cuò)(miss)并借助于壓縮控制器106存儲(chǔ)其從/向壓縮的主存儲(chǔ)器110讀取/寫(xiě)入的結(jié)果。通常將實(shí)際內(nèi)存——即與內(nèi)存中存儲(chǔ)的數(shù)據(jù)相對(duì)應(yīng)的處理器地址的集合——?jiǎng)澐殖蓪?duì)應(yīng)于固定數(shù)目的連續(xù)處理器地址的多個(gè)兩兩不相交的段。兩兩不相交意味著每個(gè)實(shí)際地址屬于一個(gè)并且只屬于一個(gè)所述的段。這些段被稱(chēng)為內(nèi)存行。內(nèi)存行是壓縮的單位。取決于其內(nèi)容壓縮的程度如何,存儲(chǔ)在壓縮內(nèi)存中的內(nèi)存行被壓縮并存儲(chǔ)在多個(gè)內(nèi)存位置中。美國(guó)專(zhuān)利第5761536號(hào)和5729228號(hào)公開(kāi)了其中主存的內(nèi)容被壓縮的計(jì)算機(jī)系統(tǒng)。再次參見(jiàn)圖1,壓縮的內(nèi)存被劃分為兩個(gè)部分?jǐn)?shù)據(jù)部分108和目錄107。數(shù)據(jù)部分被劃分為兩兩不相交的扇區(qū),所述扇區(qū)是物理內(nèi)存位置的固定大小的間隔。例如,扇區(qū)可以由具有連續(xù)物理地址的256個(gè)物理字節(jié)組成。壓縮內(nèi)存行的內(nèi)容存儲(chǔ)在最少可能數(shù)目的物理扇區(qū)中。包含壓縮行的物理扇區(qū)不需要具有連續(xù)的物理地址,并且可以位于壓縮主存的數(shù)據(jù)部分中的任何位置。經(jīng)由目錄107來(lái)執(zhí)行字節(jié)的實(shí)際地址與包含其的物理扇區(qū)的地址之間的轉(zhuǎn)化。圖2示出了更好地理解壓縮內(nèi)存的操作的更進(jìn)一步的細(xì)節(jié)。處理器高速緩沖存儲(chǔ)器240包含未壓縮的高速緩沖存儲(chǔ)器行241和存儲(chǔ)每個(gè)高速緩沖存儲(chǔ)器行的實(shí)際地址的高速緩沖存儲(chǔ)器目錄242。在下面的討論中,假設(shè)高速緩沖存儲(chǔ)器行具有與內(nèi)存行(壓縮單元)相同的大小。當(dāng)高速緩沖存儲(chǔ)器出錯(cuò)時(shí),高速緩沖存儲(chǔ)器通過(guò)提供引起這一出錯(cuò)的實(shí)際地址270而從內(nèi)存中請(qǐng)求對(duì)應(yīng)行。實(shí)際地址被劃分成兩部分log2(行長(zhǎng)度)最低有效位是行中地址的偏移量,其中l(wèi)og2()是以2為底的對(duì)數(shù)。其他位用作壓縮內(nèi)存目錄220中的索引,所述壓縮內(nèi)存目錄對(duì)于在所支持的實(shí)際地址范圍內(nèi)的每一行包含一個(gè)行表目。地址A1(271)對(duì)應(yīng)于行表目1(221)、地址A2(272)對(duì)應(yīng)于行表目2(222)、地址A3(273)對(duì)應(yīng)于行表目3(513)、以及地址A4(274)對(duì)應(yīng)于行表目4(514)等等。在示例中示出了不同的地址,用于示出在壓縮主存中存儲(chǔ)壓縮數(shù)據(jù)的不同方法。在這一示例說(shuō)明中,具有地址A1的行(例如,全部由零組成的行)很好地進(jìn)行壓縮。這樣的行整個(gè)存儲(chǔ)在目錄表目221中,并且不需要內(nèi)存扇區(qū)。地址A2處的行的壓縮得稍差,并且需要兩個(gè)內(nèi)存扇區(qū)231和232,它們都存儲(chǔ)在數(shù)據(jù)扇區(qū)230中。行表目222包含指向內(nèi)存扇區(qū)231和232的指針。注意內(nèi)存扇區(qū)232的最后一部分未使用。具有地址A3的行需要3個(gè)內(nèi)存扇區(qū)233、234和235。扇區(qū)235中剩余的未使用空間的大小足夠用來(lái)存儲(chǔ)具有實(shí)際地址A4的壓縮行的一部分,具有實(shí)際地址A4的壓縮行依次使用扇區(qū)236和235的一部分。地址A4和A3處的行被稱(chēng)為同空間者(roommate)。當(dāng)高速緩沖存儲(chǔ)器中所謂的臟行(例如,先前使用的行)被回寫(xiě)到內(nèi)存中時(shí),使用壓縮器。當(dāng)高速緩沖存儲(chǔ)器回寫(xiě)時(shí),壓縮臟行。如果其與在回寫(xiě)前使用的相同的存儲(chǔ)量相配,則在適當(dāng)?shù)奈恢脤?duì)其進(jìn)行存儲(chǔ)。否則,寫(xiě)入在適當(dāng)數(shù)目的扇區(qū)中。如果所需扇區(qū)的數(shù)目減少,則將未使用的扇區(qū)加入到閑置扇區(qū)列表。如果所需扇區(qū)的數(shù)目增加,則從閑置扇區(qū)列表取回所需扇區(qū)。圖3示出了壓縮目錄220中的表目的結(jié)構(gòu)。附圖示出了三種不同的行結(jié)構(gòu)。表目1(306)包含一組標(biāo)志(301)以及4個(gè)扇區(qū)的地址。如果行的大小是1024字節(jié),并且內(nèi)存扇區(qū)的大小是256,則該行需要最多4個(gè)扇區(qū)。表目2(307)包含一組標(biāo)志、由該行使用的第一扇區(qū)的地址、壓縮行的起始、以及由該行使用的最后一個(gè)扇區(qū)的地址。如果行需要2個(gè)以上的內(nèi)存扇區(qū),則通過(guò)指針的鏈表來(lái)連接這些扇區(qū)(即,每個(gè)內(nèi)存扇區(qū)包含隨后的內(nèi)存扇區(qū)的地址)。表目3包含一組標(biāo)志,以及高度壓縮的行,其壓縮為120位或更少。示例中的標(biāo)志為標(biāo)志302,指示行是以壓縮方式還是解壓縮方式存儲(chǔ)的;標(biāo)志303,指示行是否是可高度壓縮的并且整體存儲(chǔ)在目錄表目中;標(biāo)志304(2位),指示行使用了多少個(gè)扇區(qū);標(biāo)志305(4位),包含片段信息,即行占用了最后使用的扇區(qū)的那個(gè)部分(這一信息用于空間相配)。在內(nèi)存壓縮依賴于所述的壓縮內(nèi)存組織結(jié)構(gòu)的系統(tǒng)中,可獲得的最大壓縮比取決于目錄的大小實(shí)際地址的最大數(shù)目等于目錄中目錄表目的數(shù)目。限制目錄的大小以產(chǎn)生(比方說(shuō))2∶1的壓縮對(duì)于通常在其中遵守更高的壓縮比的大多數(shù)計(jì)算機(jī)應(yīng)用程序來(lái)說(shuō)不是最理想的。另一方面,大的目錄占用大量的物理內(nèi)存量,其在內(nèi)存內(nèi)容碰巧壓縮性不好時(shí)會(huì)削弱系統(tǒng)性能。在現(xiàn)有技術(shù)中描述的內(nèi)存壓縮方案具有下述的目錄大小該目錄大小在機(jī)器引導(dǎo)時(shí)是固定的,并且在機(jī)器操作時(shí)不能被改變。壓縮和解壓的代價(jià)(即執(zhí)行時(shí)間)部分地被高速緩沖存儲(chǔ)器所隱藏。對(duì)于多數(shù)普通的工作負(fù)荷,大的高速緩沖存儲(chǔ)器幾乎完全地隱藏了這些執(zhí)行時(shí)間。但是,對(duì)于不具有內(nèi)存引導(dǎo)的強(qiáng)局域性的、不支持高速緩沖存儲(chǔ)器的工作負(fù)荷,高速緩沖存儲(chǔ)器不能隱藏執(zhí)行時(shí)間,并且具有內(nèi)存壓縮的系統(tǒng)的性能比不具有內(nèi)存壓縮的類(lèi)似系統(tǒng)的性能要差很多。如果推理得出工作負(fù)荷的特性,則在現(xiàn)有技術(shù)中描述的內(nèi)存壓縮方案允許啟動(dòng)計(jì)算機(jī)系統(tǒng)并以非壓縮的方式操作(作為標(biāo)準(zhǔn)計(jì)算機(jī),其中實(shí)際地址對(duì)應(yīng)于物理地址)。但是,如果以非壓縮的模式啟動(dòng)機(jī)器,則如果不重啟的話其不能被變換回壓縮模式,反之亦然。當(dāng)在頁(yè)式內(nèi)存系統(tǒng)中使用內(nèi)存壓縮時(shí),則可以由處理使用的頁(yè)幀的數(shù)目動(dòng)態(tài)地變化。可以由處理使用的頁(yè)幀此處被稱(chēng)為可用頁(yè)幀。如果數(shù)據(jù)的可壓縮性增加,則可用頁(yè)幀的數(shù)目也可以增加。類(lèi)似的,如果可壓縮性下降,則會(huì)使得更多的頁(yè)幀無(wú)法使用。在主存內(nèi)容保持壓縮格式的計(jì)算機(jī)系統(tǒng)中,使用目錄執(zhí)行由處理器產(chǎn)生的實(shí)際地址與包含壓縮數(shù)據(jù)的內(nèi)存單元的物理地址之間的轉(zhuǎn)化,所示目錄此處被稱(chēng)為壓縮轉(zhuǎn)化表(CTT,compressed-translationtable)。當(dāng)高速緩沖存儲(chǔ)器回寫(xiě)時(shí),數(shù)據(jù)被壓縮并存儲(chǔ)到內(nèi)存中。當(dāng)高速緩沖存儲(chǔ)器出錯(cuò)時(shí),解壓縮內(nèi)存的內(nèi)容。通過(guò)使用大的高速緩沖存儲(chǔ)器隱藏了解壓縮處理的執(zhí)行時(shí)間。當(dāng)內(nèi)存包含可壓縮性不好的數(shù)據(jù)時(shí),由于頁(yè)缺失的增加,內(nèi)存中不同頁(yè)幀的數(shù)目(實(shí)際內(nèi)存的大小)會(huì)比物理頁(yè)的數(shù)目要少,并且壓縮內(nèi)存系統(tǒng)的性能可能會(huì)低于具有相同的物理內(nèi)存量的傳統(tǒng)系統(tǒng)的性能。當(dāng)工作負(fù)荷不支持高速緩沖存儲(chǔ)器時(shí),即當(dāng)造成大量高速緩沖存儲(chǔ)器出錯(cuò)時(shí),高速緩沖存儲(chǔ)器不能很好地隱藏解壓縮執(zhí)行時(shí)間,并且支持內(nèi)存壓縮的系統(tǒng)的性能受損。如果不支持高速緩沖存儲(chǔ)器的工作負(fù)荷運(yùn)行了很長(zhǎng)的時(shí)間段,則系統(tǒng)的性能下降對(duì)于用戶變成可見(jiàn)。上述以內(nèi)存內(nèi)容非壓縮并且不具有實(shí)際-物理轉(zhuǎn)化的額外代價(jià)的傳統(tǒng)模式運(yùn)行系統(tǒng)的情形的示例是有益的。因此支持內(nèi)存壓縮的系統(tǒng)的硬件也可以以傳統(tǒng)的非壓縮方式工作。通常,基于對(duì)預(yù)期的工作負(fù)荷和數(shù)據(jù)的了解決定以壓縮內(nèi)存模式運(yùn)行系統(tǒng)還是以傳統(tǒng)模式運(yùn)行系統(tǒng)。一旦作出了決定,則系統(tǒng)以壓縮內(nèi)存模式或非壓縮內(nèi)存模式運(yùn)行,直到其下一次重新啟動(dòng)在系統(tǒng)處理時(shí)不能改變操作模式。因此需要存在下述的系統(tǒng)和方法該系統(tǒng)和方法用于將操作模式從壓縮內(nèi)存轉(zhuǎn)換為非壓縮內(nèi)存或從非壓縮內(nèi)存轉(zhuǎn)換為壓縮內(nèi)存,而不需要重新啟動(dòng)系統(tǒng)或停止應(yīng)用程序的操作,或者能夠動(dòng)態(tài)地改變壓縮內(nèi)存目錄的大小。
發(fā)明內(nèi)容在具有用于存儲(chǔ)壓縮格式數(shù)據(jù)的主存和用于存儲(chǔ)解壓縮數(shù)據(jù)的處理器高速緩沖存儲(chǔ)器的計(jì)算機(jī)系統(tǒng)中,一種用于將所述主存中的數(shù)據(jù)從壓縮狀態(tài)變換為非壓縮狀態(tài)的方法,包括步驟將所述主存中的使用部分減少至一個(gè)目標(biāo)值;禁止用于壓縮非壓縮數(shù)據(jù)的壓縮器;解壓縮所述主存的所述壓縮數(shù)據(jù);將所述解壓縮的數(shù)據(jù)移動(dòng)到與實(shí)際地址相等的物理地址;和釋放由上述步驟中使用的壓縮內(nèi)存導(dǎo)向器和數(shù)據(jù)結(jié)構(gòu)占用的內(nèi)存。優(yōu)選地,減少所述壓縮主存的使用部分的步驟包括將所述主存中的頁(yè)幀數(shù)目減少至低于閾值的數(shù)目,其中所述閾值乘以頁(yè)的大小等于目標(biāo)值。優(yōu)選地,將所述主存中的頁(yè)幀數(shù)目減少至低于閾值的數(shù)目的步驟還包括步驟禁止向?qū)嶋H內(nèi)存空間添加新的頁(yè)幀;從零列表中移除所有的頁(yè)幀;從使用所述主存的處理的工作區(qū)中修剪頁(yè);從所述零列表中移除所述修剪后的頁(yè)。優(yōu)選地,所述內(nèi)存中的頁(yè)幀數(shù)目的閾值不大于物理內(nèi)存的大小減去所述壓縮內(nèi)存目錄的大小減去所述數(shù)據(jù)結(jié)構(gòu)的大小。優(yōu)選地,所述的方法還包括將所述主存劃分成多個(gè)存儲(chǔ)扇區(qū)并使用未使用扇區(qū)列表管理未使用的內(nèi)存扇區(qū),并且其中解壓縮所述主存的所述壓縮數(shù)據(jù)的步驟包括步驟定義實(shí)際地址的允許范圍;從未使用扇區(qū)列表中移除具有在允許范圍之外的物理地址的扇區(qū);將在允許范圍外的實(shí)際地址改變?yōu)樵谠试S范圍內(nèi)的實(shí)際地址;和解壓縮代表壓縮/解壓縮單元的壓縮內(nèi)存行。優(yōu)選地,定義允許范圍的步驟包括步驟定義閾值;和將允許范圍調(diào)整為在所述閾值之下的實(shí)際地址減去由所述內(nèi)存目錄使用的物理地址的集合。優(yōu)選地,所述閾值大于所述主存的使用部分的所述目標(biāo)值加上所述壓縮內(nèi)存目錄的大小。優(yōu)選地,所述閾值小于所述主存的物理大小減去由變化使用的數(shù)據(jù)結(jié)構(gòu)的大小。所述方法最好還包括通過(guò)操作系統(tǒng)管理頁(yè)式的虛擬內(nèi)存;其中所述對(duì)于由每個(gè)處理使用的內(nèi)存執(zhí)行解壓縮所有壓縮的內(nèi)存行的步驟包括步驟獲取所述處理的頁(yè)表;對(duì)于與所述主存中包含的頁(yè)對(duì)應(yīng)的、所述處理的所述頁(yè)表中的每個(gè)頁(yè)表表目,應(yīng)用下面的步驟將所述頁(yè)的所有內(nèi)存行讀入到高速緩沖存儲(chǔ)器中,和將所述內(nèi)存行的內(nèi)容回寫(xiě)到所述主存中。所述方法最好還包括通過(guò)操作系統(tǒng)管理頁(yè)式的虛擬內(nèi)存,其中所述對(duì)于由每個(gè)處理使用的內(nèi)存執(zhí)行將在允許范圍外的實(shí)際地址改變?yōu)樵谠试S范圍內(nèi)的實(shí)際地址的步驟包括步驟獲取所述處理的頁(yè)表;對(duì)于與所述主存中包含的頁(yè)對(duì)應(yīng)的、所述處理的所述頁(yè)表中的每個(gè)頁(yè)表表目,應(yīng)用下面的步驟檢查所述頁(yè)的地址是否在允許范圍之外,并將在允許范圍外的所述頁(yè)的地址改變?yōu)樵谠试S范圍內(nèi)的地址。所述方法最好還包括步驟初始化指針,以指向所述壓縮內(nèi)存目錄的第一表目;使所述指針前進(jìn)至指向?qū)?yīng)于所述允許范圍內(nèi)的實(shí)際地址的所述壓縮內(nèi)存目錄的第一個(gè)未使用表目;將在允許范圍外的所述頁(yè)的所述地址改變?yōu)樵谒鲋羔樦邪牡刂罚缓褪顾鲋羔樓斑M(jìn)至指向?qū)?yīng)于所述允許范圍內(nèi)的實(shí)際地址的所述壓縮內(nèi)存目錄的下一個(gè)未使用表目。優(yōu)選地,將所述內(nèi)存內(nèi)容移動(dòng)到與實(shí)際地址相等的物理地址的步驟包括步驟創(chuàng)建物理-實(shí)際地址映射;對(duì)于在所述壓縮內(nèi)存目錄中索引標(biāo)記的每個(gè)內(nèi)存行,將所述內(nèi)存行移動(dòng)至與其實(shí)際地址相等的物理地址。優(yōu)選的,將所述內(nèi)存行移動(dòng)到與實(shí)際地址相等的物理地址的步驟包括步驟尋找占用與所述內(nèi)存行的內(nèi)存扇區(qū)的實(shí)際地址相等的物理地址的內(nèi)存扇區(qū)的壓縮內(nèi)存目錄表目;將具有與所述內(nèi)存行的內(nèi)存扇區(qū)的實(shí)際地址相等的物理地址的內(nèi)存扇區(qū)的內(nèi)容復(fù)制到未使用的內(nèi)存扇區(qū);更新所述復(fù)制的內(nèi)存扇區(qū)的壓縮內(nèi)存目錄表目,以包含所述內(nèi)存扇區(qū)的新物理內(nèi)存地址;用所述復(fù)制的內(nèi)存扇區(qū)的新位置更新物理-實(shí)際映射;將所述內(nèi)存行的所述物理內(nèi)存扇區(qū)的內(nèi)容復(fù)制到具有與它們的實(shí)際地址相等的物理地址的內(nèi)存扇區(qū);用所述復(fù)制的內(nèi)存扇區(qū)的新位置更新物理-實(shí)際映射;從物理-實(shí)際映射移除所述復(fù)制的內(nèi)存扇區(qū)的舊位置。在能夠以壓縮格式和非壓縮格式保持主存內(nèi)容的優(yōu)選的計(jì)算機(jī)系統(tǒng)中,一種用于將操作模式從非壓縮模式變換為壓縮模式而不需要停止和重新啟動(dòng)所述計(jì)算機(jī)系統(tǒng)的方法,包括步驟選擇用于壓縮內(nèi)存目錄的大?。灰瞥鲋鞔嬷羞x擇用來(lái)容納所述壓縮內(nèi)存目錄的部分的內(nèi)容;初始化所述壓縮內(nèi)存目錄,并啟動(dòng)壓縮主存模式。該方法還包括步驟選擇用于壓縮內(nèi)存目錄的起始位置。優(yōu)選地,移除所述主存中選擇用來(lái)容納所述壓縮內(nèi)存目錄的部分的內(nèi)容的步驟包括步驟阻止虛擬內(nèi)存管理器向處理部分分配選擇用來(lái)容納所述壓縮內(nèi)存目錄的所述主存的所述部分;標(biāo)識(shí)所述選擇用來(lái)容納所述壓縮內(nèi)存目錄的所述內(nèi)存的所述部分,其由所述虛擬內(nèi)存管理器使用而不是由處理使用;向第三存儲(chǔ)器寫(xiě)入修改了的、內(nèi)存的所述標(biāo)識(shí)的部分,并且不允許由虛擬內(nèi)存管理器使用它們;和不允許由虛擬內(nèi)存管理器使用未修改的、內(nèi)存的所述標(biāo)識(shí)的部分。優(yōu)選的,移除所述主存中選擇用來(lái)容納所述壓縮內(nèi)存目錄的部分的內(nèi)容的步驟還包括步驟分析由處理使用的內(nèi)存;在由處理使用的所述內(nèi)存中標(biāo)識(shí)所述主存中選擇用來(lái)容納所述壓縮內(nèi)存目錄的所述部分;向第三存儲(chǔ)器寫(xiě)入修改了的、內(nèi)存的所述標(biāo)識(shí)的部分,并且不允許由虛擬內(nèi)存管理器使用它們;和不允許由虛擬內(nèi)存管理器使用未修改的、內(nèi)存的所述標(biāo)識(shí)的部分。優(yōu)選地,所述主存中選擇用來(lái)容納所述壓縮內(nèi)存目錄的所述部分是頁(yè)幀。該方法還包括步驟填充所述壓縮內(nèi)存目錄。優(yōu)選地,啟動(dòng)所述壓縮內(nèi)存目錄的初始化,啟動(dòng)壓縮和填充壓縮內(nèi)存目錄還包括步驟將所述壓縮內(nèi)存目錄的所有表目初始化為一個(gè)未被用來(lái)指示壓縮表目的值;啟動(dòng)壓縮器,在反向變化模式中初始化壓縮內(nèi)存管理;在所述反向變化模式中操作壓縮內(nèi)存管理,直到反向變化了內(nèi)存的全部?jī)?nèi)容。優(yōu)選地,在所述反向變化模式中運(yùn)行壓縮內(nèi)存管理包括步驟為高速緩沖存儲(chǔ)器讀/寫(xiě)操作的控制行設(shè)置檢查標(biāo)志;將變化后的內(nèi)存行的計(jì)數(shù)器初始化為零;當(dāng)高速緩沖存儲(chǔ)器寫(xiě)入時(shí),通過(guò)將壓縮內(nèi)存目錄表目值與未用于壓縮表目的值進(jìn)行比較來(lái)檢查是否反向變化了內(nèi)存行,并且當(dāng)比較的值相等時(shí)增大計(jì)數(shù)器;當(dāng)高速緩沖存儲(chǔ)器讀取時(shí),通過(guò)將壓縮內(nèi)存目錄表目值與未用于壓縮表目的值進(jìn)行比較來(lái)檢查是否反向變化了內(nèi)存行,并且如果所述比較的值不相等時(shí)使用CTT表目來(lái)執(zhí)行實(shí)際-物理轉(zhuǎn)化;當(dāng)高速緩沖存儲(chǔ)器寫(xiě)入時(shí),通過(guò)將壓縮內(nèi)存目錄表目值與未用于壓縮表目的值進(jìn)行比較來(lái)檢查是否反向變化了CTT行,并且如果所述比較的值不相等時(shí)使用頁(yè)表實(shí)際-物理轉(zhuǎn)化,修改CTT表目和增大所述計(jì)數(shù)器;當(dāng)增大了所述計(jì)數(shù)器時(shí),將計(jì)數(shù)器的值與所述壓縮內(nèi)存目錄中的表目數(shù)進(jìn)行比較,當(dāng)所述比較值相等時(shí),重置所述標(biāo)志,并終止反向變化模式。在具有用于保持壓縮格式的內(nèi)容和壓縮內(nèi)存目錄的主存的優(yōu)選計(jì)算機(jī)系統(tǒng)中,用于增大壓縮內(nèi)存目錄的大小而不需要停止和重新啟動(dòng)所述計(jì)算機(jī)系統(tǒng)的方法包括步驟選擇壓縮內(nèi)存目錄的新的大??;移除所述主存中選擇用來(lái)容納所述壓縮內(nèi)存目錄的附加部分的所述部分的內(nèi)容;和初始化所述壓縮內(nèi)存目錄的擴(kuò)展部分。優(yōu)選地,移除所述主存中選擇用來(lái)容納所述壓縮內(nèi)存目錄的附加部分的所述部分的內(nèi)容包括步驟防止將落入在主存的所述部分內(nèi)的未使用內(nèi)存扇區(qū)添加到未使用扇區(qū)列表中;從未使用扇區(qū)列表中移除屬于主存的所述部分的內(nèi)存扇區(qū);將主存的所述部分使用的內(nèi)存扇區(qū)復(fù)制到未使用內(nèi)存扇區(qū)。用于存儲(chǔ)可以由計(jì)算機(jī)系統(tǒng)中的處理器執(zhí)行的代碼的設(shè)備,所述處理器執(zhí)行所述代碼以執(zhí)行一種用于減小計(jì)算機(jī)系統(tǒng)的主存中的壓縮內(nèi)容的壓縮內(nèi)存導(dǎo)向器的大小的方法,該方法包括步驟為壓縮內(nèi)存目錄選擇新的大小以容納用于M個(gè)頁(yè)幀的表目;將頁(yè)幀的數(shù)目減少至所述值M;將具有在可以由所述壓縮內(nèi)存目錄尋址的范圍之外的地址的頁(yè)幀的地址改變?yōu)樵谒隹蓪ぶ贩秶鷥?nèi)的地址,所述壓縮內(nèi)存目錄具有所述選擇的新的大小。優(yōu)選地,減少頁(yè)幀的數(shù)目包括步驟防止分配具有比所述值M乘以頁(yè)幀大小要大的實(shí)際地址的新頁(yè)幀;防止向用于重新分配釋放的頁(yè)幀的數(shù)據(jù)結(jié)構(gòu)中添加具有在可以由所述壓縮內(nèi)存目錄尋址的地址范圍之外的實(shí)際地址的頁(yè)幀,所述壓縮內(nèi)存目錄具有所述選擇的新的大?。粡挠糜谥匦路峙溽尫诺捻?yè)幀的所述數(shù)據(jù)結(jié)構(gòu)中移除所有具有在可以由所述壓縮內(nèi)存目錄尋址的所述地址范圍之外的實(shí)際地址的頁(yè)幀,所述壓縮內(nèi)存目錄具有所述選擇的新的大?。缓屯ㄟ^(guò)修剪處理的工作區(qū)將頁(yè)幀的數(shù)目減少至M。優(yōu)選地,所述用于重新分配釋放的頁(yè)幀的數(shù)據(jù)結(jié)構(gòu)包括修改頁(yè)備用列表、未使用頁(yè)列表、和零頁(yè)列表之一。優(yōu)選地,改變具有在可以由具有新大小的所述壓縮內(nèi)存目錄尋址的范圍之外的地址的頁(yè)幀的地址包括步驟在處理的頁(yè)表中搜索具有在所述可尋址范圍之外的地址的頁(yè)幀;在所述壓縮內(nèi)存目錄中搜索對(duì)應(yīng)于新的可尋址范圍的未使用表目;修改所述頁(yè)表表項(xiàng)中的實(shí)際地址以指向所述未使用表目;以及將具有在所述可尋址范圍之外的地址的所述頁(yè)幀的壓縮內(nèi)存目錄表項(xiàng)復(fù)制到所述未使用表項(xiàng)。在具有用于存儲(chǔ)壓縮格式數(shù)據(jù)的主存和用于存儲(chǔ)解壓縮數(shù)據(jù)的處理器高速緩沖存儲(chǔ)器的優(yōu)選計(jì)算機(jī)系統(tǒng)中,一種用于將所述主存中的數(shù)據(jù)從壓縮狀態(tài)變換為非壓縮狀態(tài)的方法包括步驟將所述主存中的使用部分減少至一個(gè)目標(biāo)值;禁止用于壓縮非壓縮的數(shù)據(jù)的壓縮器;解壓縮所述主存的所述壓縮數(shù)據(jù);將所述解壓縮的數(shù)據(jù)移動(dòng)到與實(shí)際地址相等的物理地址;和釋放由在上述步驟中使用的壓縮內(nèi)存導(dǎo)向器和數(shù)據(jù)結(jié)構(gòu)占用的內(nèi)存。一種具有用于存儲(chǔ)壓縮格式數(shù)據(jù)的主存和用于存儲(chǔ)解壓縮數(shù)據(jù)的處理器高速緩沖存儲(chǔ)器的優(yōu)選計(jì)算機(jī)系統(tǒng),用于將所述主存中的數(shù)據(jù)從壓縮狀態(tài)變換為非壓縮狀態(tài)的方法,包括步驟將所述主存中的使用部分減少至一個(gè)目標(biāo)值;禁止用于壓縮非壓縮數(shù)據(jù)的壓縮器;解壓縮所述主存的所述壓縮數(shù)據(jù);將所述解壓縮的數(shù)據(jù)移動(dòng)到與實(shí)際地址相等的物理地址;和釋放由在上述步驟中使用的壓縮內(nèi)存導(dǎo)向器和數(shù)據(jù)結(jié)構(gòu)占用的內(nèi)存。一種能夠以壓縮格式和解壓縮格式保持主存內(nèi)容的優(yōu)選的計(jì)算機(jī)系統(tǒng),用于將操作模式從非壓縮模式變換為壓縮模式而不需要停止和重新啟動(dòng)所述計(jì)算機(jī)系統(tǒng)的方法,包括步驟選擇用于壓縮內(nèi)存目錄的大??;移除所述主存中選擇用來(lái)容納所述壓縮內(nèi)存目錄的部分的內(nèi)容;初始化所述壓縮內(nèi)存目錄,并啟動(dòng)壓縮主存模式。一種具有用于保持壓縮格式和解壓縮格式的內(nèi)容的主存的優(yōu)選計(jì)算機(jī)系統(tǒng),用于增大壓縮內(nèi)容目錄的大小而不需要停止和重新啟動(dòng)所述計(jì)算機(jī)系統(tǒng)的方法,包括步驟選擇用于壓縮內(nèi)存目錄的新的大??;移除所述主存中選擇用來(lái)容納所述壓縮內(nèi)存目錄的附加部分的部分的內(nèi)容;初始化所述壓縮內(nèi)存目錄的擴(kuò)展部分。一種用于存儲(chǔ)可以由計(jì)算機(jī)系統(tǒng)中的處理器執(zhí)行的代碼的設(shè)備,所述處理器執(zhí)行所述代碼以執(zhí)行一種用于減小計(jì)算機(jī)系統(tǒng)的主存中的壓縮內(nèi)容的壓縮內(nèi)存導(dǎo)向器的大小的方法,該方法包括步驟為壓縮內(nèi)存目錄選擇新的大小以容納用于M個(gè)頁(yè)幀的表目;將頁(yè)幀的數(shù)目減少至所述值M;將具有在可以由所述壓縮內(nèi)存目錄尋址的范圍之外的地址的頁(yè)幀的地址改變?yōu)樵谒隹蓪ぶ贩秶鷥?nèi)的地址,所述壓縮內(nèi)存目錄具有所述選擇的新的大小。一種具有用于存儲(chǔ)壓縮格式數(shù)據(jù)的主存和用于存儲(chǔ)解壓縮數(shù)據(jù)的處理器高速緩沖存儲(chǔ)器的優(yōu)選計(jì)算機(jī)系統(tǒng),用于將所述主存中的數(shù)據(jù)從壓縮狀態(tài)變換為非壓縮狀態(tài)的方法,包括步驟將所述主存中的使用部分減少至一個(gè)目標(biāo)值;禁止用于壓縮非壓縮數(shù)據(jù)的壓縮器;解壓縮所述主存的所述壓縮數(shù)據(jù);將所述解壓縮的數(shù)據(jù)移動(dòng)到與實(shí)際地址相等的物理地址;和釋放由在上述步驟中使用的壓縮內(nèi)存導(dǎo)向器和數(shù)據(jù)結(jié)構(gòu)占用的內(nèi)存。圖1示出了具有壓縮主存的傳統(tǒng)計(jì)算機(jī)系統(tǒng)。圖2示出了圖1的計(jì)算機(jī)系統(tǒng)的內(nèi)存結(jié)構(gòu)。圖3示出了圖1的計(jì)算機(jī)系統(tǒng)中的內(nèi)存目錄表目的結(jié)構(gòu)。圖4示出了根據(jù)本發(fā)明實(shí)施例、用于將主存的內(nèi)容從壓縮狀態(tài)變化至解壓縮狀態(tài)而不需要中斷計(jì)算機(jī)系統(tǒng)的正常操作的方法。圖5示出了將壓縮主存的使用部分減少為希望的值的方法。圖6示出了用于將由處理所使用的頁(yè)的實(shí)際地址變化到允許的區(qū)域和解壓縮頁(yè)的內(nèi)容的方法。圖7示出了用于將由處理所使用的頁(yè)的實(shí)際地址變化到允許的區(qū)域和解壓縮所述頁(yè)的內(nèi)容的方法。圖8示出了用于移動(dòng)內(nèi)存內(nèi)容以使得實(shí)際地址等于物理地址的方法。圖9示出了根據(jù)本發(fā)明的優(yōu)選實(shí)施例、用于將主存內(nèi)容從解壓縮變換為壓縮而不需要中斷計(jì)算機(jī)系統(tǒng)的正常操作的方法。圖10示出了在將內(nèi)容從解壓縮變換為壓縮的同時(shí)尋址主存內(nèi)容的方法,以及壓縮內(nèi)容而不需要中斷正常操作的細(xì)節(jié)。圖11示出了用于增大內(nèi)存壓縮目錄的大小而不需要中斷正常操作的方法。圖12示出了用于減小內(nèi)存壓縮目錄的大小而不需要中斷正常操作的方法。圖13示出了本發(fā)明的一個(gè)實(shí)施例的實(shí)現(xiàn)。圖14示出了用于移除未使用扇區(qū)列表扇區(qū)的裝置。具體實(shí)施例方式本發(fā)明優(yōu)選實(shí)施例的一個(gè)方面經(jīng)由連續(xù)目錄動(dòng)態(tài)地改變支持壓縮內(nèi)容的計(jì)算機(jī)的實(shí)際空間的大小。圖4示出了根據(jù)本發(fā)明實(shí)施例、用于從壓縮內(nèi)存操作變化至非壓縮內(nèi)存操作的方法的示例性流程圖。取決于本發(fā)明的特定實(shí)施例,將可以由處理使用的頁(yè)幀數(shù)目(下文中稱(chēng)為可用頁(yè)幀)減少為數(shù)值M(步驟401)。M小于可以在物理內(nèi)存中包含的頁(yè)幀的最大數(shù)目。步驟402禁止壓縮內(nèi)存的壓縮器。在步驟402之后,每個(gè)從磁盤(pán)頁(yè)調(diào)入的邏輯頁(yè)以非壓縮形式存儲(chǔ)在主存中,并占用最大數(shù)目的內(nèi)存扇區(qū),如關(guān)于圖3所描述的。類(lèi)似的,非壓縮地存儲(chǔ)從高速緩沖存儲(chǔ)器回寫(xiě)到內(nèi)存的每個(gè)內(nèi)存行。在步驟403,內(nèi)存的全部?jī)?nèi)容被解壓縮;優(yōu)選地,通過(guò)將每個(gè)內(nèi)存行讀入到高速緩沖存儲(chǔ)器和強(qiáng)制進(jìn)行回寫(xiě)來(lái)實(shí)現(xiàn)內(nèi)存的全部?jī)?nèi)容的解壓縮。當(dāng)內(nèi)存的全部?jī)?nèi)容被解壓縮,并且每個(gè)內(nèi)存行被存儲(chǔ)在最大數(shù)目的扇區(qū)中時(shí),步驟404將內(nèi)存扇區(qū)復(fù)制到與他們的實(shí)際地址相等的物理地址中。當(dāng)壓縮內(nèi)存110中的所有扇區(qū)都非壓縮地存儲(chǔ)在與他們的實(shí)際地址相等的物理地址處時(shí),步驟404終止。步驟405釋放由壓縮內(nèi)存目錄以及變化模塊使用的數(shù)據(jù)結(jié)構(gòu)占用的內(nèi)存,其被歸還給操作系統(tǒng)作為未使用的頁(yè)幀。圖5示出了步驟401中將頁(yè)幀的數(shù)目減少至希望的數(shù)值M的優(yōu)選處理。步驟501阻止增加可用頁(yè)幀的數(shù)目禁止如果可壓縮性提高(例如,如果未使用扇區(qū)列表上的內(nèi)存扇區(qū)數(shù)目超過(guò)閾值)就使得頁(yè)幀可用的壓縮內(nèi)存機(jī)制。在可選實(shí)施例中,使用一種不阻止增加可用頁(yè)幀的數(shù)目但是限制使得頁(yè)幀可用的速率的控制策略,從而由圖5示出的過(guò)程的整體效果是實(shí)際地減少可用頁(yè)幀的數(shù)目。圖5中隨后的步驟將具有增大未使用扇區(qū)列表上的扇區(qū)數(shù)目的整體效果。在優(yōu)選的實(shí)施例中,其中通過(guò)不支持高速緩沖存儲(chǔ)器的工作負(fù)荷觸發(fā)變化,步驟501也暫時(shí)地禁止用戶處理的頁(yè)調(diào)入,除非未使用扇區(qū)列表上的扇區(qū)數(shù)目在適當(dāng)?shù)拈撝抵?。在這一實(shí)施例中,在步驟506再次允許頁(yè)調(diào)入。在其他實(shí)施例中,沒(méi)有禁止頁(yè)調(diào)入。操作系統(tǒng)使用適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu),通常為一個(gè)或多個(gè)列表,以記錄沒(méi)有被任何處理所使用的可用頁(yè)幀。特別的,存在一種明了有效的可用頁(yè)幀(例如,如果可用頁(yè)幀沒(méi)有被任何處理所使用,其內(nèi)容已經(jīng)被修改但是還沒(méi)有被寫(xiě)入到磁盤(pán)中,則該頁(yè)幀會(huì)是無(wú)效的)的數(shù)據(jù)結(jié)構(gòu)。在一些操作系統(tǒng)中,這一結(jié)構(gòu)被稱(chēng)為零頁(yè)列表。步驟502從零頁(yè)列表中移除所有的可用頁(yè)幀。在優(yōu)選實(shí)施例中,這些頁(yè)幀與內(nèi)存扇區(qū)無(wú)關(guān)如圖3中所述,高壓縮性的內(nèi)存行全部存儲(chǔ)在對(duì)應(yīng)的CTT-表目中。從零頁(yè)列表中移除所有的頁(yè)幀具有減少實(shí)際內(nèi)存的效果。重復(fù)執(zhí)行步驟503和504,直到內(nèi)存中可用頁(yè)幀的數(shù)目減少到低于閾值M。回想一下可用頁(yè)幀是由處理使用的頁(yè)幀或者未使用并由操作系統(tǒng)保持在使其可用于處理的數(shù)據(jù)結(jié)構(gòu)中的頁(yè)幀。本領(lǐng)域的技術(shù)人員能夠容易地知道,如何能夠使可用頁(yè)幀的定義適用于對(duì)于頁(yè)幀管理使用不同數(shù)據(jù)結(jié)構(gòu)的頁(yè)式操作系統(tǒng)。步驟503獲取由處理使用的頁(yè)、將修改后的頁(yè)寫(xiě)入到磁盤(pán)中、并將他們添加到用于記錄未使用頁(yè)的數(shù)據(jù)結(jié)構(gòu)中。這一處理與修剪在諸如Windows2000的操作系統(tǒng)中的處理的工作區(qū)的處理類(lèi)似。在優(yōu)選的實(shí)施例中,通過(guò)調(diào)用適當(dāng)?shù)牟僮飨到y(tǒng)模塊來(lái)執(zhí)行步驟503所需要的操作。步驟504獲取未使用的頁(yè)幀并使得他們對(duì)于處理是無(wú)效的。步驟503和504可以同步地執(zhí)行。步驟505控制步驟503和504的操作,并在頁(yè)幀數(shù)目等于希望的數(shù)值M或降到M之下時(shí)終止他們的執(zhí)行。在優(yōu)選實(shí)施例中,使用下面的等式M<=(物理內(nèi)存大小-CTT大小-變化結(jié)構(gòu)大小)/(頁(yè)大小)來(lái)選擇M的值。數(shù)字M必須足夠大,以便包含存儲(chǔ)在內(nèi)存中的非-可分頁(yè)編碼和數(shù)據(jù)結(jié)構(gòu)。注意,除了常駐在M頁(yè)外部、由變化處理使用的數(shù)據(jù)之外,計(jì)算機(jī)系統(tǒng)的操作需要的所有編碼和數(shù)據(jù)將包含在這些M個(gè)頁(yè)中。圖5示教的方法不阻止頁(yè)調(diào)入。例如,如果未使用扇區(qū)列表中的內(nèi)存扇區(qū)的數(shù)目足夠大,適當(dāng)?shù)牟僮飨到y(tǒng)模塊可以再次使用在備用和未使用頁(yè)列表中的頁(yè)幀,并將他們添加到他們的原始處理的工作區(qū)。為了確保圖5的方法終止,所調(diào)用的操作系統(tǒng)模塊必須具有足夠高的優(yōu)先權(quán),其值可以在以希望的速率從內(nèi)存中移除頁(yè)幀的變化操作中進(jìn)行修改。圖6示出了根據(jù)本發(fā)明的優(yōu)選實(shí)施例解壓縮內(nèi)存403的內(nèi)容的方法。在步驟601,選擇閾值T,其滿足兩個(gè)約束條件(1)閾值T大于CTT的字節(jié)大小加上物理頁(yè)的大小的M倍,和(2)閾值T小于物理內(nèi)存的大小減去在變化期間使用的數(shù)據(jù)結(jié)構(gòu)的大小。步驟602將實(shí)際內(nèi)存空間的允許范圍定義為在步驟601中定義的閾值T之下的實(shí)際地址的集合減去內(nèi)存壓縮管理系統(tǒng)使用的CTT和其他數(shù)據(jù)結(jié)構(gòu)占用的物理地址的集合。這一允許范圍具有兩個(gè)主要用途在實(shí)際空間中,其定義當(dāng)變化終止時(shí)可以激活的實(shí)際地址集合;在物理空間中,其定義剛好在變化終止后正在使用的物理地址集合。因此,實(shí)現(xiàn)了兩個(gè)目標(biāo)從實(shí)際空間中移除具有允許范圍外的實(shí)際地址的所有激活的頁(yè);回收具有在允許范圍外的物理地址、并且正在使用的所有內(nèi)存空間。步驟603和604處理由內(nèi)存壓縮系統(tǒng)保存的未使用扇區(qū)列表。步驟603阻止將具有允許范圍外的物理地址的未使用扇區(qū)添加到未使用扇區(qū)列表中。在一種實(shí)現(xiàn)方法中,適當(dāng)?shù)匦薷目刂莆词褂蒙葏^(qū)列表的管理的機(jī)制。在后面將要描述的圖13中示出了這樣的管理控制的優(yōu)選實(shí)施例。當(dāng)位于允許區(qū)域外的未使用扇區(qū)被呈現(xiàn)給未使用扇區(qū)列表管理器時(shí),該管理器不將該扇區(qū)添加到列表中,并且忘記其地址。因此,所述扇區(qū)既不會(huì)被頁(yè)幀使用,也不在未使用扇區(qū)列表中。不保存包含該扇區(qū)地址的指針,并且因此此后該扇區(qū)是不可見(jiàn)的,因此不能被壓縮內(nèi)存管理系統(tǒng)使用。注意,這不是一個(gè)問(wèn)題最后所有常駐在允許區(qū)域外的內(nèi)存扇區(qū)將會(huì)被釋放;變化機(jī)制直接訪問(wèn)(即,使用物理地址)允許范圍外的存儲(chǔ)位置,因此不需要保存指向釋放的扇區(qū)的指針。隨后,步驟604分析由內(nèi)存壓縮子系統(tǒng)保留的未使用扇區(qū)列表。檢查它所有的內(nèi)存扇區(qū)并移除具有在允許范圍外的物理地址的那些扇區(qū)。與步驟603中相同,簡(jiǎn)單地釋放這些扇區(qū),并且不通過(guò)內(nèi)存壓縮管理器來(lái)保留指向它們的指針。當(dāng)步驟604終止時(shí),步驟605分析系統(tǒng)中的所有處理。在優(yōu)選的實(shí)施例中,操作系統(tǒng)為每個(gè)處理保留唯一的處理描述符,即包含與所述處理相關(guān)的信息的數(shù)據(jù)結(jié)構(gòu)。在這一優(yōu)選實(shí)施例中,步驟605獲取執(zhí)行每個(gè)處理描述符的指針,并使用所述處理描述符來(lái)分析每個(gè)處理。步驟605控制步驟606和607的執(zhí)行,并且當(dāng)已經(jīng)分析過(guò)所有的處理時(shí)終止在圖6中描述的操作(步驟608)。在步驟606,檢查與正在分析的處理相關(guān)的頁(yè)幀,并將落在允許范圍外的頁(yè)幀移動(dòng)到允許的范圍。在步驟607,通過(guò)將處理的常駐頁(yè)的所有行讀入高速緩沖存儲(chǔ)器并強(qiáng)制進(jìn)行回寫(xiě)來(lái)解壓縮所述常駐頁(yè)的所有行。圖7圖解說(shuō)明了根據(jù)本發(fā)明優(yōu)選實(shí)施例的步驟606和607。步驟701和702優(yōu)選地執(zhí)行一次。他們可以在步驟601之前執(zhí)行、在步驟601和602之間執(zhí)行、在步驟603和604之間執(zhí)行、或者在步驟604之后但在步驟704之前執(zhí)行。在步驟701中,指針P被初始化為指向CTT中的第一表目。在優(yōu)選的實(shí)施例中,指針P物理地存儲(chǔ)在內(nèi)存控制器的專(zhuān)用寄存器中。在步驟702中,使指針前進(jìn),直到找到第一個(gè)未使用的CTT表目。在一個(gè)優(yōu)選實(shí)施例中,關(guān)于CTT表目使用了還是未使用的信息包含在CTT表目自身中。在另一個(gè)優(yōu)選實(shí)施例中,保存未使用CTT表目的列表,并且在這一情形中,步驟701將指針初始化為指向未使用CTT表目的列表的開(kāi)始,步驟702使指針前進(jìn),直到遇到具有在步驟602中定義的允許范圍內(nèi)的實(shí)際地址的第一個(gè)未使用CTT表目。在當(dāng)前優(yōu)選實(shí)施例的環(huán)境中,步驟703到709是步驟606和607的詳細(xì)解釋。步驟704分析與正在分析的處理相關(guān)的每個(gè)頁(yè)表表目(PTE),并且在處理的所有PTE都已經(jīng)分析過(guò)時(shí)終止(步驟705)。如果PTE將虛擬頁(yè)轉(zhuǎn)化內(nèi)存中的實(shí)際頁(yè),則執(zhí)行下面描述的步驟。步驟706解壓縮頁(yè)的每一行。在優(yōu)選實(shí)施例中(其中內(nèi)存行在高速緩沖存儲(chǔ)器出錯(cuò)時(shí)被解壓縮,并且全部存儲(chǔ)到高速緩沖存儲(chǔ)器中),步驟706將頁(yè)的每一行讀入到高速緩沖存儲(chǔ)器中,并強(qiáng)制進(jìn)行回寫(xiě),因此解壓縮行的內(nèi)容(因?yàn)閴嚎s器在步驟402中被禁止)。在優(yōu)選實(shí)施例中,通過(guò)硬件來(lái)輔助強(qiáng)制的回寫(xiě)為高速緩沖存儲(chǔ)器控制器增加將強(qiáng)制進(jìn)行回寫(xiě)的適當(dāng)電路(例如,將根據(jù)需要設(shè)置修改標(biāo)記的硬件)。在不同的實(shí)施例中,通過(guò)軟件來(lái)完成步驟706通過(guò)程序?qū)?nèi)存行讀入到高速緩沖存儲(chǔ)器中,所述程序還將行中的字節(jié)之一(比方說(shuō)第一個(gè)字節(jié))載入到處理器的寄存器中,并將該字節(jié)回寫(xiě)到高速緩沖存儲(chǔ)器行中的相同位置。利用這一方法,高速緩沖存儲(chǔ)器控制器檢測(cè)向高速緩沖存儲(chǔ)器行的寫(xiě)入、將該行標(biāo)記為已修改,因此當(dāng)從高速緩沖存儲(chǔ)器中收回時(shí),該行被回寫(xiě)。步驟707檢查由PTE轉(zhuǎn)化的頁(yè)的實(shí)際地址。如果實(shí)際地址在允許范圍內(nèi),則通過(guò)步驟704分析下一個(gè)PTE。否則,步驟708將與地址在PTE中的實(shí)際頁(yè)相對(duì)應(yīng)的CTT表目的內(nèi)容復(fù)制到由P指出的未使用CTT表目,并將PTE中的實(shí)際地址改變?yōu)橥ㄟ^(guò)由P指出的CTT表目轉(zhuǎn)化的實(shí)際頁(yè)。不需要將舊的CTT表目添加到未使用表目列表中,因?yàn)槠洳粫?huì)被再次使用。步驟709使指針前進(jìn)到下一個(gè)未使用的CTT表目。在CTT表目中包含它們是否被使用的信息的優(yōu)選實(shí)施例中,簡(jiǎn)單地遞增指針P,直到找到未使用的CTT表目。在未使用的CTT表目屬于一個(gè)列表的優(yōu)選實(shí)施例中,使指針P在該列表中前進(jìn),直到找到與具有允許范圍內(nèi)的地址的實(shí)際頁(yè)相對(duì)應(yīng)的CTT表目。本領(lǐng)域的技術(shù)人員顯而易見(jiàn)的,取決于特定的操作系統(tǒng),可能需要采用其他的步驟來(lái)阻止操作系統(tǒng)在不允許的范圍內(nèi)分配新的頁(yè)幀。在諸如WindowsNT和Windows2000的操作系統(tǒng)中,這不是必需的,因?yàn)椴辉诹慊蛭词褂庙?yè)列表中的所有頁(yè)幀仍然通過(guò)它們所屬于的處理的CTT表目來(lái)指出,或者通過(guò)與它們所屬于的處理相關(guān)的數(shù)據(jù)結(jié)構(gòu)來(lái)指出。在操作系統(tǒng)保存所述數(shù)據(jù)結(jié)構(gòu)的優(yōu)選實(shí)施例中,將使用與圖7中所描述的相同的方法來(lái)分析該數(shù)據(jù)結(jié)構(gòu)。在一個(gè)優(yōu)選實(shí)施例中,在開(kāi)始步驟703之前分析在零列表上的頁(yè)幀,并且如果它們的地址在不允許的范圍內(nèi)則從零列表中移除它們。在另一個(gè)實(shí)施例中,利用步驟707、708和709來(lái)分析和修改所述在零列表上的頁(yè)幀。根據(jù)本發(fā)明的又一個(gè)實(shí)施例,CTT可以安置在物理內(nèi)存中的普通位置,并且可以潛在地細(xì)分為連續(xù)間隔的集合。允許區(qū)域的定義形式是相同的,并且本領(lǐng)域的技術(shù)人員能夠容易地對(duì)確定頁(yè)幀的物理扇區(qū)和實(shí)際地址是否落在允許范圍內(nèi)的測(cè)試做出適當(dāng)?shù)母淖?。圖8描述了本發(fā)明實(shí)現(xiàn)步驟404的優(yōu)選實(shí)施例。步驟801構(gòu)造內(nèi)存扇區(qū)的物理-實(shí)際映射。由于此時(shí)沒(méi)有向?qū)嶋H內(nèi)存添加新的頁(yè)幀并且壓縮被禁止,所以與每個(gè)頁(yè)幀相關(guān)的扇區(qū)現(xiàn)在在物理內(nèi)存中的固定位置,并且它們的位置在計(jì)算期間不會(huì)改變。構(gòu)造物理-實(shí)際映射包括下列步驟1.分配指針數(shù)組A,其對(duì)于允許范圍內(nèi)的每一個(gè)物理內(nèi)存扇區(qū)包含一個(gè)條目。在物理內(nèi)存中具有比在步驟601中定義的閾值T大的地址的部分分配這一指針數(shù)組。2.遍歷(walk)CTT下面的偽碼描述了該操作對(duì)于每個(gè)CTT條目,進(jìn)行對(duì)于CTT條目中的每個(gè)指針P,進(jìn)行將CTT條目的索引復(fù)制到數(shù)組A中與存儲(chǔ)在P中的地址相對(duì)應(yīng)的每個(gè)條目中。完成完成一旦創(chuàng)建了物理-實(shí)際映射,則步驟802例如從CTT的末端開(kāi)始遍歷CTT,并控制附圖中所有后繼步驟的執(zhí)行。本領(lǐng)域的技術(shù)人員將會(huì)明白,能夠容易地修改算法,以便重新排列內(nèi)存的內(nèi)容,從而增大實(shí)際地址。當(dāng)CTT包含由頁(yè)幀使用的CTT表目時(shí),執(zhí)行步驟804至810。當(dāng)CTT不再包含由頁(yè)幀使用的CTT表目時(shí),圖9的方法終止于步驟803。將E作為通過(guò)步驟902選擇的CTT條目。E對(duì)應(yīng)于包含一定量的扇區(qū)的實(shí)際地址范圍。在頁(yè)的大小為4096字節(jié)并且內(nèi)存扇區(qū)的大小為256字節(jié)的優(yōu)選實(shí)施例中,對(duì)應(yīng)于一個(gè)頁(yè)幀的實(shí)際地址范圍包含4096/256=16個(gè)內(nèi)存扇區(qū)。步驟804對(duì)于與對(duì)應(yīng)于E的實(shí)際地址范圍相等的物理地址范圍中的每個(gè)扇區(qū)S應(yīng)用步驟805、806和807。步驟805在物理-實(shí)際映射中查看使用扇區(qū)S的實(shí)際地址,并檢索對(duì)應(yīng)的CTT表目Es。步驟806將扇區(qū)S的內(nèi)容復(fù)制到從未使用扇區(qū)列表中獲得的未使用的扇區(qū)S’中。本領(lǐng)域的技術(shù)人員顯而易見(jiàn)的,可以以任意的順序執(zhí)行步驟805和806。步驟807將S’的地址復(fù)制到包含S的地址的CTT表目Es的指針中。當(dāng)步驟804終止迭代時(shí),可以重寫(xiě)與對(duì)應(yīng)于CTT表目E的實(shí)際地址范圍相對(duì)應(yīng)的物理地址范圍,而不會(huì)損害數(shù)據(jù)的完整性。步驟808在包含由E索引指出的數(shù)據(jù)的內(nèi)存扇區(qū)上進(jìn)行迭代。用S”指示這樣的扇區(qū)。步驟809將包含在S”中的數(shù)據(jù)復(fù)制到具有與S”的實(shí)際地址相等的物理地址的扇區(qū)中。在優(yōu)選實(shí)施例中,用于內(nèi)存壓縮和變化的硬件和軟件在變化期間支持雙向?qū)ぶ纺J?。具體來(lái)說(shuō),通過(guò)頁(yè)表直接訪問(wèn)變化后的范圍內(nèi)的地址(即,已經(jīng)經(jīng)歷了變化處理的地址),而不需要更進(jìn)一步的CTT的間接尋址;通過(guò)由CTT提供的附加間接尋址訪問(wèn)變化范圍外的地址(即,等待進(jìn)行變化的地址)。優(yōu)選地,一旦變化了內(nèi)存中的所有的實(shí)際頁(yè),則通過(guò)下面的優(yōu)選步驟來(lái)終止變化處理將被物理-實(shí)際映射占用的物理地址劃分成頁(yè)幀,所述頁(yè)幀被添加到未使用頁(yè)列表中;將被CTT占用的物理地址劃分成頁(yè)幀,所述頁(yè)幀被添加到未使用頁(yè)列表中。圖9描述了用于將主存的內(nèi)容從非壓縮轉(zhuǎn)化為壓縮,而不需要中斷計(jì)算機(jī)系統(tǒng)的正常操作的方法。根據(jù)這一優(yōu)選方法,當(dāng)I/O緩沖區(qū)駐留在固定頁(yè)中時(shí),操作系統(tǒng)對(duì)于a)內(nèi)核和b)I/O操作控制不可分頁(yè)的范圍。在步驟901中,選擇CTT的大小。在一個(gè)優(yōu)選實(shí)施例中,將CTT的大小靜態(tài)地選擇為等于預(yù)定值。在另一個(gè)實(shí)施例中,當(dāng)回寫(xiě)高速緩沖存儲(chǔ)器行時(shí),壓縮器收集關(guān)于高速緩沖存儲(chǔ)器行的壓縮性的統(tǒng)計(jì),并將該壓縮性信息用于決定CTT的大小。在一個(gè)優(yōu)選的實(shí)施例中,CTT開(kāi)始于預(yù)定的地址。在另一個(gè)實(shí)施例中,可以使用預(yù)定的策略來(lái)選擇CTT的起始地址,并將該起始地址用作壓縮內(nèi)存管理的參數(shù);在該實(shí)施例中,步驟901還使用所述預(yù)定的策略來(lái)選擇CTT的起始地址。在該發(fā)明中,物理地址開(kāi)始于CTT的起始地址、并且具有與CTT相同的大小的范圍稱(chēng)為CTT范圍。步驟902頁(yè)式調(diào)出CTT范圍中的所有頁(yè)幀,并阻止虛擬內(nèi)存管理器再次使用所述頁(yè)幀。在操作系統(tǒng)是WindowsNT,2000或具有類(lèi)似的虛擬內(nèi)存管理的操作系統(tǒng)的優(yōu)選實(shí)施中,步驟902可以通過(guò)下面的示例性處理來(lái)執(zhí)行通過(guò)適當(dāng)?shù)匦薷墓ぷ鲄^(qū)管理器來(lái)阻止內(nèi)存管理器將CTT范圍內(nèi)的頁(yè)幀添加到修改后的備用頁(yè)列表中;分析修改后的頁(yè),備用、未使用和零頁(yè)列表,以識(shí)別CTT范圍內(nèi)的頁(yè)幀;將修改后的頁(yè)列表上的所述識(shí)別出的頁(yè)寫(xiě)入到頁(yè)文件中,并將它們從修改后的頁(yè)列表中移除;將所述識(shí)別出的頁(yè)從備用、未使用和零頁(yè)列表中移除;在處理的頁(yè)表中搜索CTT范圍內(nèi)的頁(yè)幀;和將識(shí)別出的頁(yè)幀寫(xiě)入到所述頁(yè)文件中,并從頁(yè)表中移除它們。最后兩個(gè)任務(wù)可以通過(guò)修改圖7的方法來(lái)實(shí)現(xiàn)。步驟903初始化CTT;步驟904啟用壓縮以及壓縮內(nèi)存管理;和步驟905填充CTT。圖10示出了一個(gè)優(yōu)選的實(shí)施例。在執(zhí)行步驟903、904和905的步驟1001中,將CTT表目的內(nèi)容初始化為一個(gè)當(dāng)在實(shí)際和物理地址之間進(jìn)行CTT表目轉(zhuǎn)化時(shí)從未使用的值。通過(guò)將CTT表目的內(nèi)容與所述值進(jìn)行比較,從而可能確定CTT表目當(dāng)前是否用于實(shí)際和物理地址之間的變化或者其是否從未被使用過(guò)。步驟1002啟用壓縮器,并通過(guò)設(shè)置標(biāo)志以反向變化模式初始化壓縮內(nèi)存管理器。步驟1003將對(duì)應(yīng)于反向變化后的行的CTT表目的數(shù)目計(jì)數(shù)器初始化為零。步驟1004在高速緩沖存儲(chǔ)器寫(xiě)入時(shí)檢查標(biāo)志如果標(biāo)志被設(shè)置為指示反向變化模式,則執(zhí)行步驟1005和1006。在步驟1005,壓縮內(nèi)存管理系統(tǒng)檢查正在回寫(xiě)的行是否在其回寫(xiě)之前被轉(zhuǎn)換了。如果該行未被轉(zhuǎn)化,則步驟1005增大計(jì)數(shù)器,以指示該行當(dāng)前尚未被轉(zhuǎn)換。步驟1007在高速緩沖存儲(chǔ)器寫(xiě)入時(shí)檢查標(biāo)志如果標(biāo)志被設(shè)置為指示反向變化模式,則執(zhí)行步驟1008,其檢查是否已經(jīng)修改了行的CTT表目以及該行是否被轉(zhuǎn)換。如果所述行已經(jīng)被轉(zhuǎn)換,則步驟1011通過(guò)經(jīng)由CTT表目將實(shí)際地址轉(zhuǎn)化為物理地址來(lái)繼續(xù)進(jìn)行讀操作。如果所述行尚未被轉(zhuǎn)換,則步驟1009通過(guò)經(jīng)由CTT表目將實(shí)際地址轉(zhuǎn)化為物理地址來(lái)繼續(xù)進(jìn)行讀操作。為了加速反向變化操作的完成(例如,如在數(shù)據(jù)挖掘任務(wù)中那樣,當(dāng)內(nèi)存內(nèi)容的大部分已經(jīng)被讀取并且極少被寫(xiě)入時(shí)),通過(guò)指示非壓縮地存儲(chǔ)了所述行并通過(guò)將內(nèi)存扇區(qū)指針初始化為指向由該行使用的內(nèi)存扇區(qū)的物理位置,步驟1010修改CTT表目,并增大計(jì)數(shù)器。當(dāng)通過(guò)步驟1005和1010增大了計(jì)數(shù)器時(shí),調(diào)用步驟1006。如果計(jì)數(shù)器等于CTT中表目的數(shù)目,則終止反向變化操作,并重置標(biāo)志。圖11示出了用于動(dòng)態(tài)增大CTT的大小的優(yōu)選實(shí)施例。在步驟1101,計(jì)算出CTT的附加大小。本領(lǐng)域的技術(shù)人員顯而易見(jiàn)的,可以使用適合的控制策略來(lái)確定CTT的附加大小。符號(hào)S被用來(lái)指示這一以內(nèi)存扇區(qū)的數(shù)目來(lái)表示的附加大小,A用來(lái)指示將由CTT使用的地址的間隔。步驟1102阻止落在擴(kuò)展CTT區(qū)域(物理內(nèi)存地址集合A)中的未使用扇區(qū)被添加到未使用扇區(qū)列表中。在優(yōu)選的實(shí)施例中,步驟1102通知負(fù)責(zé)管理未使用扇區(qū)的壓縮內(nèi)存管理模塊,當(dāng)內(nèi)存扇區(qū)未使用時(shí),應(yīng)當(dāng)檢查其地址以便確定其是否落入在A中,那樣的話該內(nèi)存扇區(qū)不應(yīng)被添加到未使用扇區(qū)列表中。步驟1103分析未使用扇區(qū)列表,并從中移除所有具有在A中的地址的扇區(qū)。在一個(gè)優(yōu)選實(shí)施例中,將數(shù)目S減少由步驟1103移除的內(nèi)存扇區(qū)的數(shù)目。步驟1104是一個(gè)迭代器,其目的是控制步驟1105和1106,它們共同從未使用扇區(qū)列表中獲得S個(gè)未利用的內(nèi)存扇區(qū)。當(dāng)收回了S個(gè)未利用的內(nèi)存扇區(qū)時(shí),終止步驟1104。步驟1105從未使用扇區(qū)列表中收回扇區(qū)。為了避免內(nèi)存用盡,如通過(guò)壓縮內(nèi)存管理策略所規(guī)定的,步驟1105總是在未使用扇區(qū)列表中剩余最少量的未使用內(nèi)存扇區(qū)。為了允許步驟1105收集未使用扇區(qū),步驟1106強(qiáng)制進(jìn)行處理工作區(qū)的修剪,其增大未使用扇區(qū)列表的大小。本領(lǐng)域的技術(shù)人員能夠容易的理解,步驟1105和1106可以以任意的順序來(lái)執(zhí)行,并且也可以同時(shí)地執(zhí)行。當(dāng)從未使用扇區(qū)列表中收回S個(gè)扇區(qū)時(shí),步驟1107對(duì)CTT表目進(jìn)行迭代。步驟1107對(duì)CTT中的每個(gè)CTT表目進(jìn)行迭代。步驟1108對(duì)CTT表目的每個(gè)扇區(qū)指針進(jìn)行迭代。如果扇區(qū)在區(qū)域A中,則將該扇區(qū)的內(nèi)容復(fù)制到在步驟1101-1106中收回的S個(gè)扇區(qū)中的一個(gè)中,并且更新指針(步驟1109)。為了防止同空間者的問(wèn)題,可能在掩蔽中斷時(shí)可以自動(dòng)地對(duì)一組(允許空間相配的行的集合)中的所有表目執(zhí)行步驟1107、1108、1109。本領(lǐng)域的技術(shù)人員將會(huì)明白,步驟1104、1105、1106的集合及步驟1107、1108、1109的集合不需要順序地執(zhí)行,而是可以同時(shí)執(zhí)行。當(dāng)已經(jīng)分析過(guò)CTT中所有的表目時(shí),步驟1110擴(kuò)展CTT并初始化其表目。圖12圖示說(shuō)明了用于將壓縮內(nèi)存目錄的大小減小為索引指示M個(gè)頁(yè)幀所需要的大小的方法的優(yōu)選實(shí)施例。可以通過(guò)分析在內(nèi)存中包含的數(shù)據(jù)的壓縮性的動(dòng)態(tài)特性來(lái)選擇頁(yè)幀的數(shù)目M。在步驟1201,阻止壓縮內(nèi)存管理系統(tǒng)分配具有比M乘以非壓縮頁(yè)的大小要大的地址的新頁(yè)幀。步驟1202阻止向修改、備用、未使用和零頁(yè)列表中添加具有比M乘以非壓縮頁(yè)的大小要大的實(shí)際地址的頁(yè)幀。壓縮內(nèi)存管理系統(tǒng)將所述頁(yè)添加到修改頁(yè)列表的表頭、強(qiáng)制進(jìn)行頁(yè)寫(xiě)入、并丟棄頁(yè)幀,而不是向修改列表中添加所述頁(yè)幀。壓縮內(nèi)存管理系統(tǒng)丟棄頁(yè)幀,而不是向備用、未使用和零頁(yè)列表中添加所述頁(yè)幀。步驟1203分析所述列表,搜索具有比M乘以解壓縮頁(yè)的大小要大的實(shí)際地址的頁(yè)幀。當(dāng)在修改列表中找到這樣的頁(yè)幀時(shí),將其移動(dòng)到列表的表頭并發(fā)出寫(xiě)入到磁盤(pán)操作,并且丟棄該頁(yè)幀。在不同的實(shí)施例中,寫(xiě)操作被延遲,直到分析了整個(gè)修改頁(yè)列表。當(dāng)在其他列表中找到這樣的頁(yè)幀時(shí),其被丟棄。步驟204例如使用圖5中的方法將內(nèi)存中頁(yè)幀的數(shù)目減少至M。步驟1205將指針P1設(shè)置為指向內(nèi)存壓縮目錄的開(kāi)始。步驟1206分析依次在計(jì)算機(jī)系統(tǒng)上執(zhí)行的每個(gè)處理。步驟1207分析由在步驟1206中選擇的處理使用的頁(yè)的所有的頁(yè)表表目。步驟1208將通過(guò)在步驟1207中選擇的頁(yè)表表目索引指示的頁(yè)的實(shí)際地址與一個(gè)閾值進(jìn)行比較,該閾值等于M乘以非壓縮的頁(yè)幀的大小。如果地址大于所述閾值,則步驟1209增大指針P1,直到其指向CTT中未使用的表目,步驟1210復(fù)制與在步驟1208中識(shí)別的實(shí)際地址相對(duì)應(yīng)的CTT表目,并且步驟1211將通過(guò)步驟1207選擇的頁(yè)表表目中的所述地址修改為在P1中包含的值。當(dāng)已經(jīng)分析了由步驟1206選擇的處理的最后的PTE時(shí),步驟1207終止(附圖中的完成),而當(dāng)已經(jīng)分析了最后的處理時(shí),步驟1206終止。本領(lǐng)域的普通技術(shù)人員顯而易見(jiàn)的,步驟1206只需要分析在步驟1204的執(zhí)行終止之前已經(jīng)初始化的處理。而且,不需要分析在步驟1206終止之前終止的處理,因?yàn)橐呀?jīng)通過(guò)在步驟1201到1203中初始化的壓縮內(nèi)存管理部件管理了干擾頁(yè)幀。圖13圖示說(shuō)明了用于防止將落在允許范圍之外的內(nèi)存扇區(qū)添加到未使用扇區(qū)列表中的裝置的實(shí)施例。在這一實(shí)施例中,允許范圍包括物理地址間隔的集合。該集合包含至多K個(gè)間隔。每個(gè)間隔通過(guò)其下限和上限來(lái)表示。在這一實(shí)施例中,通過(guò)未使用扇區(qū)列表管理邏輯(1313)以硬件來(lái)管理未使用扇區(qū)列表。通過(guò)信號(hào)1314來(lái)允許將內(nèi)存扇區(qū)添加到未使用扇區(qū)列表中的邏輯部分1313。例如,當(dāng)信號(hào)等于0時(shí),所述邏輯不將內(nèi)存扇區(qū)添加到未使用扇區(qū)列表中,而當(dāng)信號(hào)等于1時(shí),允許該邏輯將內(nèi)存扇區(qū)添加到未使用扇區(qū)列表中。將要添加到未使用扇區(qū)列表中的內(nèi)存扇區(qū)的起始地址存儲(chǔ)在寄存器1301中。允許范圍的第一間隔的起始地址存儲(chǔ)在寄存器1302中,而允許范圍的第一間隔的結(jié)束地址存儲(chǔ)在寄存器1303中。更具體的,該結(jié)束地址是屬于對(duì)應(yīng)間隔的最后一個(gè)內(nèi)存扇區(qū)的起始地址。在這一示例性實(shí)施例中,對(duì)于允許范圍內(nèi)的每一個(gè)間隔使用一對(duì)寄存器(用于起始和結(jié)束地址)。為了舉例說(shuō)明,僅示出了第一間隔和用于最后一個(gè)間隔——間隔K的那些寄存器(即寄存器1307和1308)。對(duì)于每一對(duì)寄存器,所述邏輯包含一對(duì)比較器。第一比較器連接到寄存器1301并連接到包含間隔的起始地址的寄存器。例如,比較器1304比較寄存器1301和1302的值,而比較器1309比較存儲(chǔ)在寄存器1301和1307中的值。如果包含在寄存器1301中的值大于或等于包含在連接到比較器的其他寄存器中的值,這一比較器輸出“1”。第二比較器連接到寄存器1301并連接到包含間隔的結(jié)束地址的寄存器。例如,比較器1305比較寄存器1301和1303的值,而比較器1310比較存儲(chǔ)在寄存器1301和1308中的值。如果包含在寄存器1301中的值小于或等于包含在連接到比較器的其他寄存器中的值,這一比較器輸出“1”然后將兩個(gè)比較器的輸出用作到AND門(mén)的輸入。例如,將比較器1304和1305的輸出用作到AND門(mén)1306的輸入,將比較器1309和1310的輸出用作到AND門(mén)1311的輸入。如果其輸入都等于1,則AND門(mén)1306生成“1”作為輸出,否則生成“0”。因此,如果寄存器1301中包含的值大于或等于寄存器1302中存儲(chǔ)的值并且小于或等于寄存器1303中存儲(chǔ)的值,即只有當(dāng)其起始地址存儲(chǔ)在1301中的內(nèi)存扇區(qū)落在由存儲(chǔ)在1302中的起始地址和存儲(chǔ)在1303中的結(jié)束地址定義的允許范圍的間隔中,AND門(mén)1306生成“1”。根據(jù)這一實(shí)施例,如果由允許范圍實(shí)際使用的間隔數(shù)是k,其中k小于最大值K,則禁用最后一個(gè)K-k寄存器對(duì)的AND門(mén)。在一個(gè)優(yōu)選的實(shí)施例中,這是通過(guò)向每個(gè)寄存器對(duì)添加1位的標(biāo)志來(lái)實(shí)現(xiàn)的,如果寄存器對(duì)應(yīng)于允許范圍的一個(gè)間隔則該標(biāo)志設(shè)置為1,否則設(shè)置為0;然后將這個(gè)1位的標(biāo)志與比較器的輸出一起用作到AND門(mén)的輸入。將所有AND門(mén)的輸出用作到OR門(mén)1312的輸入,如果OR門(mén)1312的至少一個(gè)輸入等于“1”,則該OR門(mén)生成“1”,否則生成“0”。因此,如果地址存儲(chǔ)在寄存器1301中的存儲(chǔ)器扇區(qū)屬于允許范圍的間隔之一,則門(mén)1312的輸出1314等于1。圖14描述了用于從未使用扇區(qū)列表中移除位于允許范圍之外的扇區(qū)的裝置。未使用內(nèi)存扇區(qū)可以位于內(nèi)存1401中的任何物理位置,限制條件為內(nèi)存扇區(qū)中的第一個(gè)字節(jié)的地址是內(nèi)存扇區(qū)大小的倍數(shù)(這里,為了討論的緣故,我們假設(shè)內(nèi)存中第一個(gè)字節(jié)的地址等于1;如果內(nèi)存中第一個(gè)字節(jié)的地址為0,限制條件為通過(guò)使內(nèi)存扇區(qū)的第一字節(jié)的地址模(modulo)內(nèi)存扇區(qū)的大小,得到0)。在這一實(shí)施例中,以鏈表來(lái)組織未使用扇區(qū),如在作為參考文件列出的專(zhuān)利中所述。優(yōu)選地,每個(gè)未使用內(nèi)存扇區(qū)包含一個(gè)指針,其包含未使用列表中的下一個(gè)內(nèi)存扇區(qū)的地址。例如,該指針可以被限制在內(nèi)存扇區(qū)的前4字節(jié)中。如圖14中所示,內(nèi)存扇區(qū)1402在列表的表頭,其指針1406包含第二內(nèi)存扇區(qū)1403的地址。沿該列表繼續(xù)向下,1403中的指針1407包含列表中的第三個(gè)內(nèi)存扇區(qū)1404的地址,其后跟隨有第四個(gè)內(nèi)存扇區(qū)1405,等等。1405的地址存儲(chǔ)于包含在1404中的指針1408中。在這個(gè)實(shí)施例中,使用2個(gè)寄存器1410和1411來(lái)管理未使用扇區(qū)列表。對(duì)于32位的機(jī)器,每個(gè)寄存器都是4字節(jié)長(zhǎng),而對(duì)于64位的機(jī)器,它們將是8字節(jié)長(zhǎng)。寄存器1410包含在未使用扇區(qū)列表表頭的內(nèi)存扇區(qū)的地址。寄存器1411包含緊隨表頭的內(nèi)存扇區(qū)的地址。當(dāng)收到對(duì)于未使用內(nèi)存扇區(qū)的請(qǐng)求,并且列表不空時(shí),返回寄存器1410的內(nèi)容。同時(shí),讀/寫(xiě)單元1412讀取地址在寄存器1411中的內(nèi)存扇區(qū)的前4個(gè)字節(jié)。在該實(shí)施例中,這4個(gè)字節(jié)包含未使用扇區(qū)列表上的下一個(gè)內(nèi)存扇區(qū)的地址。本領(lǐng)域的技術(shù)人員能夠理解,可以如何修改這一方案以適應(yīng)不同長(zhǎng)度的并且具有未使用扇區(qū)列表中的其他位置的指針,并使該方案適合于通過(guò)不是常駐在未使用扇區(qū)自身中的數(shù)據(jù)結(jié)構(gòu)來(lái)管理未使用扇區(qū)列表的情形。用于指示未使用扇區(qū)列表為空并記錄未使用內(nèi)存扇區(qū)數(shù)目的電路是公知的并且沒(méi)有示出。當(dāng)通過(guò)硬件接收到從未使用扇區(qū)列表移除在允許范圍之外的所有內(nèi)存扇區(qū)的命令時(shí),調(diào)用邏輯1413。這一邏輯執(zhí)行下面的操作1.禁止從未使用內(nèi)存扇區(qū)列表分配未使用內(nèi)存扇區(qū)。2.將寄存器1410的值與允許范圍的描述1414進(jìn)行比較。3.如果列表的表頭在允許范圍之外,則通過(guò)將包含在1411中的值復(fù)制到1410來(lái)丟棄該扇區(qū),調(diào)用讀/寫(xiě)單元1412的操作,返回到步驟2。4.允許從未使用內(nèi)存扇區(qū)列表分配未使用內(nèi)存扇區(qū),將1410的值復(fù)制到寄存器1415和將1411的值復(fù)制到寄存器1416,并對(duì)列表控制邏輯1417進(jìn)行控制。注意,禁止從未使用扇區(qū)列表中分配未使用內(nèi)存扇區(qū)通常不會(huì)使機(jī)器的操作停止很長(zhǎng)的時(shí)間。當(dāng)允許范圍外的所有內(nèi)存扇區(qū)都在未使用扇區(qū)列表上并在允許范圍內(nèi)的任意內(nèi)存扇區(qū)之前時(shí)出現(xiàn)最差的情況。回想一下,在這一步驟中僅涉及留出來(lái)用于容納物理-實(shí)際映射并且支持?jǐn)?shù)據(jù)結(jié)構(gòu)的不允許范圍部分與內(nèi)存壓縮使用的CTT和數(shù)據(jù)結(jié)構(gòu)重疊的未使用內(nèi)存扇區(qū)不能在未使用內(nèi)存列表上。允許范圍的描述1414可以由一對(duì)寄存器或寄存器對(duì)的集合來(lái)實(shí)現(xiàn)。當(dāng)1413對(duì)列表清除控制邏輯1417進(jìn)行控制時(shí),寄存器3的內(nèi)容是允許范圍內(nèi)的地址。邏輯1417執(zhí)行下面的操作A.將寄存器3(1415)的值與寄存器1(1410)的值進(jìn)行比較。如果比較成功,則禁止從未使用內(nèi)存扇區(qū)列表分配未使用內(nèi)存扇區(qū);否則允許分配。B.與前一操作并行地,將在寄存器4(1416)中包含的值與允許范圍的描述1414進(jìn)行比較如果1416中包含的值在允許范圍內(nèi),其執(zhí)行下面的操作i.將1416中包含的值復(fù)制到1415中;ii.調(diào)用讀/寫(xiě)單元1412,并在上面的步驟1期間將地址在1416中的內(nèi)存扇區(qū)的前4個(gè)字節(jié)讀入到1416中。如果1416中包含的地址不在允許范圍內(nèi),則1.調(diào)用讀/寫(xiě)單元1412,并在上面的步驟1期間將地址在1416中的內(nèi)存扇區(qū)的前4個(gè)字節(jié)讀入到1416中。2.重復(fù)步驟1,直到1416的內(nèi)容在允許范圍內(nèi)為止。3.使用讀/寫(xiě)單元1412將寄存器4(1416)的內(nèi)容復(fù)制到地址在寄存器3(1415)中的內(nèi)存扇區(qū)的前4個(gè)字節(jié)。4.如果寄存器3(1415)的內(nèi)容等于寄存器1(1410)的內(nèi)容,將寄存器4(1416)的內(nèi)容復(fù)制到寄存器2(1411)。5.返回到步驟B。邏輯1417的特征還在于當(dāng)?shù)竭_(dá)列表的表尾時(shí)適當(dāng)?shù)亟K止操作。當(dāng)邏輯1417有效時(shí),寄存器3總是指向允許范圍內(nèi)的內(nèi)存扇區(qū),而寄存器4的內(nèi)容改變直到其等于允許范圍內(nèi)的地址。通過(guò)將寄存器4的內(nèi)容復(fù)制到地址在1415中的扇區(qū)的前4個(gè)字節(jié),所述邏輯從未使用扇區(qū)列表“分離”位于允許范圍外的那些內(nèi)存扇區(qū)。通過(guò)當(dāng)1415的內(nèi)容等于1410的內(nèi)容時(shí)不允許分發(fā)未使用扇區(qū),將用于控制未使用扇區(qū)列表的表頭的電路的變化減到最小?;陧?yè)式操作系統(tǒng)描述了本發(fā)明的優(yōu)選實(shí)施例,所述頁(yè)式操作系統(tǒng)例如Windows95、Windows98、WindowsNT、Windows2000、Linux、AIX、以及所有其他版本的UNIX、MacOS、IBMOS/400等。本領(lǐng)域的普通技術(shù)人員容易理解,非頁(yè)式操作系統(tǒng)同樣適用于本發(fā)明的實(shí)施例。盡管已經(jīng)參考本發(fā)明的優(yōu)選實(shí)施例示出和描述了本發(fā)明,但是本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)明白,在不背離本發(fā)明的實(shí)質(zhì)的情況下可以在其中做出各種形式和細(xì)節(jié)上的改變。權(quán)利要求1.在具有用于存儲(chǔ)壓縮格式數(shù)據(jù)的主存和用于存儲(chǔ)解壓縮數(shù)據(jù)的處理器高速緩沖存儲(chǔ)器的計(jì)算機(jī)系統(tǒng)中,一種用于將所述主存中的數(shù)據(jù)從壓縮狀態(tài)變換為非壓縮狀態(tài)的方法,包括步驟將所述主存中的使用部分減少至一個(gè)目標(biāo)值;禁止用于壓縮非壓縮數(shù)據(jù)的壓縮器;解壓縮所述主存的所述壓縮數(shù)據(jù);將所述解壓縮的數(shù)據(jù)移動(dòng)到與實(shí)際地址相等的物理地址;和釋放由上述步驟中使用的壓縮內(nèi)存導(dǎo)向器和數(shù)據(jù)結(jié)構(gòu)占用的內(nèi)存。2.如權(quán)利要求1所述的方法,其中減少所述壓縮主存中的使用部分的步驟包括將所述主存中的頁(yè)幀數(shù)目減少至低于閾值的數(shù)目,其中所述閾值乘以頁(yè)的大小等于目標(biāo)值。3.如權(quán)利要求2所述的方法,其中將所述主存中的頁(yè)幀數(shù)目減少至低于閾值的數(shù)目的步驟還包括步驟禁止向?qū)嶋H內(nèi)存空間添加新的頁(yè)幀;從零列表中移除所有的頁(yè)幀;從使用所述主存的處理的工作區(qū)中修剪頁(yè);從所述零列表中移除所述修剪后的頁(yè)。4.如權(quán)利要求2所述的方法,其中所述內(nèi)存中的頁(yè)幀數(shù)目的閾值不大于物理內(nèi)存的大小減去所述壓縮內(nèi)存目錄的大小減去所述數(shù)據(jù)結(jié)構(gòu)的大小。5.如權(quán)利要求1所述的方法,還包括將所述主存劃分成多個(gè)存儲(chǔ)扇區(qū)并使用未使用扇區(qū)列表管理未使用的內(nèi)存扇區(qū),并且其中解壓縮所述主存的所述壓縮數(shù)據(jù)的步驟包括步驟定義實(shí)際地址的允許范圍;從未使用扇區(qū)列表中移除具有在允許范圍之外的物理地址的扇區(qū);將在允許范圍外的實(shí)際地址改變?yōu)樵谠试S范圍內(nèi)的實(shí)際地址;和解壓縮代表壓縮/解壓縮單元的壓縮內(nèi)存行。6.如權(quán)利要求5所述的方法,其中定義允許范圍的步驟包括步驟定義閾值;和將允許范圍調(diào)整為在所述閾值之下的實(shí)際地址減去由所述內(nèi)存目錄使用的物理地址的集合。7.如權(quán)利要求6所述的方法,其中所述閾值大于所述主存的使用部分的所述目標(biāo)值加上所述壓縮內(nèi)存目錄的大小。8.如權(quán)利要求6所述的方法,其中所述閾值小于所述主存的物理大小減去由變化使用的數(shù)據(jù)結(jié)構(gòu)的大小。9.如權(quán)利要求5所述的方法,還包括通過(guò)操作系統(tǒng)管理頁(yè)式的虛擬內(nèi)存;和其中所述對(duì)于由每個(gè)處理使用的內(nèi)存執(zhí)行解壓縮所有壓縮的內(nèi)存行的步驟包括步驟獲取所述處理的頁(yè)表;對(duì)于與所述主存中包含的頁(yè)對(duì)應(yīng)的、所述處理的所述頁(yè)表中的每個(gè)頁(yè)表表目,應(yīng)用下面的步驟將所述頁(yè)的所有內(nèi)存行讀入到高速緩沖存儲(chǔ)器中,和將所述內(nèi)存行的內(nèi)容回寫(xiě)到所述主存中。10.在具有用于存儲(chǔ)壓縮格式數(shù)據(jù)的主存和用于存儲(chǔ)解壓縮數(shù)據(jù)的處理器高速緩沖存儲(chǔ)器的計(jì)算機(jī)系統(tǒng)中,一種用于將所述主存中的數(shù)據(jù)從壓縮狀態(tài)變換為非壓縮狀態(tài)的裝置,包括用于將所述主存中的使用部分減少至一個(gè)目標(biāo)值的部件;用于禁止用來(lái)壓縮非壓縮數(shù)據(jù)的壓縮器的部件;用于解壓縮所述主存的所述壓縮數(shù)據(jù)的部件;用于將所述解壓縮的數(shù)據(jù)移動(dòng)到與實(shí)際地址相等的物理地址的部件;和用于釋放由上述步驟中使用的壓縮內(nèi)存導(dǎo)向器和數(shù)據(jù)結(jié)構(gòu)占用的內(nèi)存的部件。全文摘要在具有用于存儲(chǔ)壓縮格式數(shù)據(jù)的主存和用于存儲(chǔ)解壓縮數(shù)據(jù)的處理器高速緩沖存儲(chǔ)器的計(jì)算機(jī)系統(tǒng)中,一種用于將所述主存中的數(shù)據(jù)從壓縮狀態(tài)變換為非壓縮狀態(tài)的方法,包括步驟將所述主存中的使用部分減少至一個(gè)目標(biāo)值;禁止用于壓縮非壓縮的數(shù)據(jù)的壓縮器;解壓縮所述主存的所述壓縮數(shù)據(jù);將所述解壓縮的數(shù)據(jù)移動(dòng)到與實(shí)際地址相等的物理地址;和釋放由上述步驟中使用的壓縮內(nèi)存導(dǎo)向器和數(shù)據(jù)結(jié)構(gòu)占用的內(nèi)存。文檔編號(hào)G06F12/10GK1799032SQ200380105684公開(kāi)日2006年7月5日申請(qǐng)日期2003年12月5日優(yōu)先權(quán)日2002年12月12日發(fā)明者維多利奧·卡斯特利,彼德·弗拉納茲克,丹·波夫,查爾斯·舒爾茨申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司