專利名稱::用于持久和穩(wěn)固的存儲(chǔ)管理的系統(tǒng)和方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及計(jì)算機(jī)存儲(chǔ)方法和系統(tǒng),更具體地涉及用于穩(wěn)固動(dòng)態(tài)存儲(chǔ)分配的方法和系統(tǒng)。許多計(jì)算機(jī)需要?jiǎng)討B(tài)地分配存儲(chǔ)器。操作系統(tǒng)使用動(dòng)態(tài)存儲(chǔ)分配為執(zhí)行程序而分配存儲(chǔ)器。動(dòng)態(tài)存儲(chǔ)分配的另一個(gè)例子可以包括用于存儲(chǔ)網(wǎng)絡(luò)數(shù)據(jù)的網(wǎng)絡(luò)服務(wù)器。在很多情況下,在發(fā)出請(qǐng)求之前,所請(qǐng)求的存儲(chǔ)尺寸是不知道的。動(dòng)態(tài)分配的存儲(chǔ)塊的生命周期也是不知道的。已經(jīng)花費(fèi)了相當(dāng)多的精力來開發(fā)主存儲(chǔ)器的有效動(dòng)態(tài)存儲(chǔ)分配算法。但對(duì)盤上的有效動(dòng)態(tài)存儲(chǔ)分配算法的開發(fā)所花費(fèi)精力卻少得多。有多種理由說明盤上的有效動(dòng)態(tài)存儲(chǔ)分配的重要性。在很多情況下,主要的是具有能在時(shí)間上持久的即使在關(guān)機(jī)后也持久的數(shù)據(jù)。盤存儲(chǔ)器提供持久存儲(chǔ)。盤存儲(chǔ)器也提供容錯(cuò)存儲(chǔ);當(dāng)系統(tǒng)垮臺(tái)以致主存儲(chǔ)器內(nèi)容丟失之后,經(jīng)常仍能保持存于盤上的信息。盤存儲(chǔ)器的另一個(gè)優(yōu)點(diǎn)是有可能以比主存儲(chǔ)器更合理的價(jià)格提供更多的盤存儲(chǔ)器。因此它可用于存儲(chǔ)主存儲(chǔ)器內(nèi)存放不下的信息。參照?qǐng)D1,最初適配系統(tǒng)分配找到的第一塊足夠大的能滿足存儲(chǔ)請(qǐng)求的存儲(chǔ)塊(的全部或一部分)。對(duì)于“7”的存儲(chǔ)請(qǐng)求,最初適配返回B1,因?yàn)檫@是遇到的能夠滿足請(qǐng)求的第一塊。最佳適配系統(tǒng)分配足夠大以能滿足存儲(chǔ)請(qǐng)求的最小存儲(chǔ)塊(的全部或一部分)。圖1中,由于“7”在塊B3(它的容量為8)中適配得最佳,因此返回B3。參照?qǐng)D2,在二進(jìn)制伙伴系統(tǒng)中,塊尺寸為2的冪(例如4和4,8和8等)。許多動(dòng)態(tài)存儲(chǔ)分配器(DSA)保持一個(gè)或多個(gè)空塊表。這類表稱為空表,例如空塊表。不同尺寸的塊有不同的空表。也存在用于分配其他尺寸的塊的伙伴系統(tǒng)。在1996年10月在ProceedingsofIEEEFrontiers′96上刊登的ArunIyengar所著的名為“動(dòng)態(tài)存儲(chǔ)分配算法的可改變規(guī)模性”的文章以及本說明書所附參考文獻(xiàn)中都很好地回顧了動(dòng)態(tài)存儲(chǔ)分配的現(xiàn)有技術(shù)。動(dòng)態(tài)存儲(chǔ)分配器(DSA)能夠使用不同方法來匯并鄰近空塊。一個(gè)方案是使用立即匯并,其中在釋放塊時(shí)立即將該釋放塊與鄰近空塊匯并,如圖3所示。在圖3中,在每塊中都標(biāo)明塊尺寸。正的尺寸值標(biāo)明空塊,而負(fù)的尺寸值標(biāo)明分配塊。參照?qǐng)D4,另一個(gè)方案包括延遲匯并。當(dāng)使用延遲匯并時(shí),在釋放后鄰近的空塊并不自動(dòng)地合并。相反,到一定時(shí)候(例如當(dāng)無法分配一個(gè)足夠大能滿足請(qǐng)求的塊時(shí)),DSA將掃描存儲(chǔ)設(shè)備中的各塊以及如圖4中所示地將鄰近塊合并。存儲(chǔ)碎塊是DSA浪費(fèi)的存儲(chǔ)區(qū)。內(nèi)部存儲(chǔ)碎塊是當(dāng)使用大于所請(qǐng)求尺寸的空塊來滿足請(qǐng)求時(shí)(例如使用尺寸為32的塊來滿足對(duì)尺寸為25的塊的請(qǐng)求時(shí))損失的存儲(chǔ)區(qū)。當(dāng)空塊與分配塊交織時(shí)出現(xiàn)外部存儲(chǔ)碎塊。在這種情況下,即使有大于b字節(jié)的空間也無法滿足對(duì)b字節(jié)的分配請(qǐng)求,因?yàn)樽畲蟮倪B續(xù)空塊小于b字節(jié)。以上引用的“動(dòng)態(tài)存儲(chǔ)分配算法的可改變規(guī)模性”文章中所描述的多空表適配Ⅰ(MFLFⅠ)使用多個(gè)按照尺寸組織的空表。小塊的空表稱為快表。大塊的空表稱為雜表。當(dāng)保持單個(gè)雜表時(shí),MFLFⅠ退化為稱為快適配的存儲(chǔ)分配系統(tǒng)。參照?qǐng)D5,其中顯示快適配技術(shù)。在此系統(tǒng)中,尺寸為16以下的塊放在快表中;可以改變快表數(shù)量以便針對(duì)不同請(qǐng)求分布將性能優(yōu)化。在此例中,當(dāng)2≤s≤16(2是最小塊尺寸)時(shí),通過檢查尺寸為s的快表來分配尺寸為s的塊。如此表不空,則表中第一塊可用于滿足請(qǐng)求。注意到可能有對(duì)應(yīng)于單元尺寸的倍數(shù)的塊尺寸的快表。例如,在圖2中,單元尺寸是1。如果單元尺寸是1000,則可以使用塊尺寸為1000、2000、3000、…、16000的快表(總共有16個(gè)快表)。MFLFⅠ使用延遲匯并。存儲(chǔ)區(qū)分為工作存儲(chǔ)區(qū)12和尾區(qū)14,如圖5中所示。工作存儲(chǔ)區(qū)12包括釋放塊和空表中的塊。尾區(qū)14包括存儲(chǔ)區(qū)一端的未分配存儲(chǔ)區(qū)中的連續(xù)塊。最初,在分配任何塊之前,尾區(qū)包括所有可分配存儲(chǔ)區(qū),及空表是空的??毡戆毂砗碗s表,其中雜表用于較大存儲(chǔ)塊。塊13包括一個(gè)尺寸(由塊13中的數(shù)目所標(biāo)示)。當(dāng)檢查一個(gè)或多個(gè)空表后發(fā)現(xiàn)無法滿足請(qǐng)求時(shí),可從尾區(qū)14中分配從而滿足請(qǐng)求。尾區(qū)指針(tailptr.)標(biāo)示尾區(qū)14的始端。當(dāng)釋放已分配塊時(shí)即將它填放入空表。為滿足對(duì)于快表無法滿足的過大塊的請(qǐng)求,快適配對(duì)雜表進(jìn)行最初適配搜索。搜索大塊可能需要多條指令。為減少此開銷,MFLFⅠ可以使用多個(gè)雜表而不是如快適配中那樣只用一個(gè)表,如圖6中所示。在圖6中,尺寸為17-25的塊13有一個(gè)雜表,尺寸為26-40的塊13有另一個(gè)雜表,而尺寸為41-60的塊則還有一個(gè)雜表。可用不同準(zhǔn)則來滿足請(qǐng)求,包括圖7A和7B中所示的一個(gè)準(zhǔn)則來使用MFLFⅠ分配“84”。當(dāng)分配84的請(qǐng)求得到滿足時(shí),圖7A顯示存儲(chǔ)區(qū)的“以前”簡(jiǎn)況,而圖7B顯示“以后”簡(jiǎn)況。在圖7A和7B中,系統(tǒng)將表L2中的第一塊進(jìn)行分配以便滿足請(qǐng)求,它劃分尺寸為“90”的塊并且將多余的尺寸“6”送回至空表。系統(tǒng)檢查L(zhǎng)2而不是L1,因?yàn)長(zhǎng)2所允許的最小塊的尺寸為89。因此,不需要在L2的第一塊之外再進(jìn)行搜索來滿足對(duì)其尺寸小于或等于89的請(qǐng)求。雖然以上所述技術(shù)對(duì)于許多應(yīng)用場(chǎng)合已經(jīng)夠用,但直接將主存儲(chǔ)器的動(dòng)態(tài)存儲(chǔ)分配算法使用于盤系統(tǒng)中時(shí)往往會(huì)導(dǎo)致不良性能,因?yàn)樵L問盤和寫盤的等待時(shí)間比主存儲(chǔ)器大得多。因此,需要盤存儲(chǔ)器的動(dòng)態(tài)存儲(chǔ)分配方法,用于減少訪問盤或?qū)懕P的次數(shù)。還需要存儲(chǔ)分配和釋放方法,用于提供更有效的存儲(chǔ)和更快的訪問時(shí)間。一種根據(jù)本發(fā)明的用于管理包括主存儲(chǔ)器和至少一個(gè)盤存儲(chǔ)設(shè)備在內(nèi)的存儲(chǔ)系統(tǒng)中持久存儲(chǔ)器的方法包括以下步驟在持久存儲(chǔ)器中為多個(gè)塊保持首部,其中每塊的首部包括該塊的塊尺寸和分配狀態(tài),以及在主存儲(chǔ)器內(nèi)保持至少一個(gè)數(shù)據(jù)結(jié)構(gòu),用于分配和釋放持久存儲(chǔ)器。使用以下步驟分配存儲(chǔ)塊通過在主存儲(chǔ)器內(nèi)采用至少一個(gè)數(shù)據(jù)結(jié)構(gòu)來標(biāo)識(shí)存儲(chǔ)塊,修改主存儲(chǔ)器內(nèi)的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)以及為盤上的塊賦予一個(gè)分配狀態(tài)。在盤上為該塊賦予一個(gè)分配狀態(tài)及在主存儲(chǔ)器內(nèi)修改至少一個(gè)數(shù)據(jù)結(jié)構(gòu)來釋放存儲(chǔ)塊。在其他方法中,該方法可能包括在系統(tǒng)根據(jù)持久存儲(chǔ)器的多個(gè)首部重新啟動(dòng)后確定主存儲(chǔ)器內(nèi)的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)的步驟。在系統(tǒng)重新啟動(dòng)后確定主存儲(chǔ)器內(nèi)的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)的步驟可能包括持久存儲(chǔ)器的至少一個(gè)盤訪問操作,其中單個(gè)盤訪問操作讀入多個(gè)字節(jié)。該方法可能還包括以下步驟在系統(tǒng)關(guān)機(jī)之前自主存儲(chǔ)器的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)中輸出信息至持久存儲(chǔ)器中,以及在系統(tǒng)根據(jù)輸出的信息重新啟動(dòng)之后確定主存儲(chǔ)器中的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)。在持久存儲(chǔ)器中保持首部的步驟可能包括提供存于持久存儲(chǔ)器的連續(xù)區(qū)內(nèi)的多個(gè)首部。在持久存儲(chǔ)器中保持首部的步驟可能包括保持具有一個(gè)指向持久存儲(chǔ)器內(nèi)的一個(gè)位置的指針域的首部。該方法可能還包括以下步驟使用各首部?jī)?nèi)的指針域來保持持久存儲(chǔ)器內(nèi)的塊表以及在主存儲(chǔ)器內(nèi)保持至少一個(gè)指向塊表表首的當(dāng)今指針。在又一個(gè)方法中,可以包括以下步驟在持久存儲(chǔ)器內(nèi)建立一個(gè)新塊,在持久存儲(chǔ)器內(nèi)為新塊設(shè)置一個(gè)指向主存儲(chǔ)器內(nèi)至少一個(gè)當(dāng)今指針p的值的指針域及將p設(shè)置為指向新塊??梢允褂脝蝹€(gè)寫塊操作將新塊首部初始化。該方法可能包括周期地將持久存儲(chǔ)器內(nèi)至少一個(gè)表首更新為對(duì)應(yīng)于來自主存儲(chǔ)器內(nèi)至少一個(gè)當(dāng)今指針的表的步驟。該表可能包括多個(gè)表和這些表還包括對(duì)應(yīng)于連續(xù)地保持于持久存儲(chǔ)器內(nèi)的多個(gè)表的表首,及該方法可能還包括在單個(gè)寫塊操作中更新這些表首的步驟。第一存儲(chǔ)塊和第二存儲(chǔ)塊可能包括相同塊。一種用于管理包括主存儲(chǔ)器和至少一個(gè)盤存儲(chǔ)設(shè)備在內(nèi)的存儲(chǔ)系統(tǒng)中持久存儲(chǔ)器的方法包括以下步驟在持久存儲(chǔ)器中為多個(gè)塊保持首部,其中每塊的首部包括該塊的塊尺寸、分配狀態(tài)及指針,以及在主存儲(chǔ)器內(nèi)保持至少一個(gè)數(shù)據(jù)結(jié)構(gòu),用于分配和釋放至持久存儲(chǔ)器,以及將多塊中的第一存儲(chǔ)塊進(jìn)行分配。分配步驟包括以下步驟通過在主存儲(chǔ)器內(nèi)采用至少一個(gè)數(shù)據(jù)結(jié)構(gòu)來標(biāo)識(shí)第一存儲(chǔ)塊,修改主存儲(chǔ)器內(nèi)的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)以及為持久存儲(chǔ)器內(nèi)的第一存儲(chǔ)塊賦予一個(gè)分配狀態(tài),通過以下步驟釋放多塊中的第二存儲(chǔ)塊在持久存儲(chǔ)器內(nèi)為第二存儲(chǔ)塊賦予一個(gè)分配狀態(tài),為第二存儲(chǔ)塊更新盤上的指針域及在主存儲(chǔ)器內(nèi)修改至少一個(gè)數(shù)據(jù)結(jié)構(gòu)。在其他方法中,可能包括使用各首部?jī)?nèi)的指針域來保持持久存儲(chǔ)器內(nèi)的塊表以及在主存儲(chǔ)器內(nèi)保持至少一個(gè)指向塊表表首的當(dāng)今指針的步驟。該方法可能包括響應(yīng)于故障而檢查塊表以便清除已分配塊的步驟。該方法可能包括當(dāng)找到塊表上的空塊時(shí)結(jié)束檢查步驟的步驟。主存儲(chǔ)器內(nèi)至少一個(gè)數(shù)據(jù)結(jié)構(gòu)可能包括對(duì)應(yīng)于持久存儲(chǔ)器內(nèi)塊表的至少一個(gè)空塊表。該方法還可能包括周期地將持久存儲(chǔ)器內(nèi)至少一個(gè)表首更新為對(duì)應(yīng)于來自主存儲(chǔ)器內(nèi)至少一個(gè)當(dāng)今指針的塊表的步驟。該塊表可能包括多個(gè)表和連續(xù)地保持于持久存儲(chǔ)器內(nèi)的多個(gè)首部,及還包括在單個(gè)寫塊操作中更新這些表首的步驟。在又一個(gè)方法中,更新指針域的步驟可能包括將指針域中的指針設(shè)置為指向主存儲(chǔ)器內(nèi)空塊的至少一個(gè)表L的表首的步驟,以及釋放步驟可能還包括將第二存儲(chǔ)塊加至主存儲(chǔ)器內(nèi)L的表首的步驟??梢允褂脝蝹€(gè)寫塊操作將第二存儲(chǔ)塊的首部更新。該方法可能還包括根據(jù)持久存儲(chǔ)器內(nèi)的多個(gè)首部將系統(tǒng)重新啟動(dòng)后確定主存儲(chǔ)器內(nèi)的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)的步驟。在系統(tǒng)重新啟動(dòng)后確定主存儲(chǔ)器內(nèi)該至少一個(gè)數(shù)據(jù)結(jié)構(gòu)的步驟可能包括訪問盤操作,其中單個(gè)訪問盤操作讀入多個(gè)字節(jié)。該方法可能包括以下步驟在系統(tǒng)關(guān)機(jī)之前自主存儲(chǔ)器的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)中輸出信息至持久存儲(chǔ)器中,以及在系統(tǒng)根據(jù)輸出的信息重新啟動(dòng)之后確定主存儲(chǔ)器中的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)。該方法可能包括在持久存儲(chǔ)器的連續(xù)區(qū)內(nèi)存儲(chǔ)多個(gè)首部的步驟。第一存儲(chǔ)塊和第二存儲(chǔ)塊可能包括相同塊。另一個(gè)用于管理持久存儲(chǔ)系統(tǒng)內(nèi)的存儲(chǔ)器的方法包括以下步驟在主存儲(chǔ)器內(nèi)保持至少一個(gè)數(shù)據(jù)結(jié)構(gòu),用于分配和釋放持久存儲(chǔ)器,完全自至少一個(gè)數(shù)據(jù)結(jié)構(gòu)中分配和釋放持久存儲(chǔ)器而不訪問或?qū)懼脸志么鎯?chǔ)器,周期地對(duì)存儲(chǔ)分配信息進(jìn)行檢查點(diǎn)操作并且送至持久存儲(chǔ)器以及在根據(jù)檢查點(diǎn)操作的信息重新啟動(dòng)之后在主存儲(chǔ)器內(nèi)確定至少一個(gè)數(shù)據(jù)結(jié)構(gòu)。又一個(gè)用于管理持久存儲(chǔ)系統(tǒng)內(nèi)的存儲(chǔ)器的方法包括以下步驟在主存儲(chǔ)器內(nèi)保持至少一個(gè)數(shù)據(jù)結(jié)構(gòu),用于分配和釋放持久存儲(chǔ)器,完全自至少一個(gè)數(shù)據(jù)結(jié)構(gòu)中分配和釋放持久存儲(chǔ)器而不訪問或?qū)懼脸志么鎯?chǔ)器,在系統(tǒng)關(guān)機(jī)之前自主存儲(chǔ)器的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)中輸出信息至持久存儲(chǔ)器中,以及在系統(tǒng)根據(jù)所述輸出信息重新啟動(dòng)之后確定主存儲(chǔ)器中的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)。此處描述的這些方法及其步驟可以在可在可由機(jī)器讀取的程序存儲(chǔ)設(shè)備上實(shí)施,它所確實(shí)地實(shí)施的程序指令可由機(jī)器執(zhí)行來完成所述這些方法的步驟。通過結(jié)合附圖閱讀以下本發(fā)明的闡述性實(shí)施例的詳細(xì)說明,將能清楚地了解本發(fā)明的這些和其他目的、特征和優(yōu)點(diǎn)。下面將參照附圖在優(yōu)選實(shí)施例的說明中詳細(xì)地描述本發(fā)明,附圖中圖1是用于闡述性地顯示最初適配分配和最佳適配分配的原理圖;圖2是用于闡述性地顯示根據(jù)現(xiàn)有技術(shù)的二進(jìn)制伙伴系統(tǒng)的原理圖;圖3是用于闡述性地顯示存儲(chǔ)塊的立即匯并的原理圖;圖4是用于闡述性地顯示存儲(chǔ)塊的延遲匯并的原理圖;圖5是用于顯示根據(jù)現(xiàn)有技術(shù)的多個(gè)空表適配的特殊情況的快適配的例子的原理圖;圖6是用于顯示根據(jù)現(xiàn)有技術(shù)的多個(gè)空表適配(MFLFⅠ)的例子的原理圖;圖7A和7B闡述根據(jù)現(xiàn)有技術(shù)的使用MFLFⅠ分配大塊的例子的“以前”和“以后”簡(jiǎn)況;圖8是用于顯示根據(jù)本發(fā)明的多個(gè)空表適配分配(MFLFⅢ)的框圖/流程圖;圖9是用于顯示根據(jù)本發(fā)明的分配大塊的多個(gè)空表適配(MFLFⅢ)分配的框圖/流程圖;圖10是用于顯示根據(jù)本發(fā)明將鄰近空塊匯并的框圖/流程圖;圖11是用于顯示根據(jù)本發(fā)明使用存儲(chǔ)管理方法Ⅰ的分配的框圖/流程圖;圖12是用于顯示根據(jù)本發(fā)明使用存儲(chǔ)管理方法Ⅰ的釋放的框圖/流程圖;圖13是用于闡述根據(jù)本發(fā)明的存儲(chǔ)管理方法Ⅱ的框圖/流程圖;圖14是根據(jù)本發(fā)明的存儲(chǔ)管理方法Ⅱ的闡述性例子;圖15是用于闡述根據(jù)本發(fā)明使用存儲(chǔ)管理方法Ⅲ的框圖/流程圖;圖16是根據(jù)本發(fā)明的存儲(chǔ)管理方法Ⅲ的闡述性例子;圖17是用于闡述根據(jù)本發(fā)明使用存儲(chǔ)管理方法Ⅳ的框圖/流程圖;圖18是根據(jù)本發(fā)明的用于管理尾區(qū)分配和釋放的框圖/流程圖19是一個(gè)實(shí)施例的根據(jù)本發(fā)明的相對(duì)于根據(jù)現(xiàn)有技術(shù)的闡述性測(cè)試結(jié)果的圖表;及圖20是一個(gè)實(shí)施例的根據(jù)本發(fā)明的相對(duì)于根據(jù)現(xiàn)有技術(shù)的闡述性測(cè)試結(jié)果的另一個(gè)圖表。本發(fā)明涉及存儲(chǔ)管理及分配的系統(tǒng)和方法。此處提出的這些系統(tǒng)和方法與現(xiàn)有技術(shù)比較能提供改進(jìn)的性能,及本發(fā)明對(duì)盤存儲(chǔ)器特別有用?,F(xiàn)有技術(shù)中用于持久地在盤上存儲(chǔ)信息的技術(shù)包括使用文件系統(tǒng)和數(shù)據(jù)庫(kù)。使用本發(fā)明,可以比使用現(xiàn)有技術(shù)少得多的開銷將信息存于盤上。還有,使用本發(fā)明可以存儲(chǔ)大量對(duì)象。許多文件系統(tǒng)受可以存于一個(gè)目錄中的文件數(shù)所限制;而本發(fā)明對(duì)于所存對(duì)象的數(shù)量并無限制。在一個(gè)實(shí)施例中,提供一種方法,它設(shè)計(jì)用于使塊的劃分減至最少而不會(huì)顯著地浪費(fèi)多余存儲(chǔ)空間。本發(fā)明的使用可以延伸至盤分配和主存儲(chǔ)器分配兩者。本發(fā)明提供一種新的和有用的動(dòng)態(tài)存儲(chǔ)分配方法,它類似于MFLFⅠ,但包括可用于顯著地改進(jìn)存儲(chǔ)管理和盤性能的修改。一項(xiàng)修改包括減少塊的劃分?jǐn)?shù)量。當(dāng)例如盤分配中不希望劃分塊時(shí),減少塊劃分?jǐn)?shù)量就顯得重要。應(yīng)該理解,圖8-19中所示元件可用硬件、軟件或它們的組合的不同形式來實(shí)施。這些元件最好實(shí)施于一個(gè)或多個(gè)具有處理器和存儲(chǔ)器和輸入/輸出接口的合適地編程的通用數(shù)字計(jì)算機(jī)中的存儲(chǔ)設(shè)備上。應(yīng)該理解,在公開本發(fā)明時(shí),熟悉技術(shù)的人能夠如下所述地選配多個(gè)普通使用的存儲(chǔ)分配算法來實(shí)施本發(fā)明。因此不應(yīng)認(rèn)為下面用于闡述本發(fā)明實(shí)施例是對(duì)本發(fā)明施加任何限制。本發(fā)明中采用的內(nèi)存或主存儲(chǔ)器系指易失性存儲(chǔ)器,例如隨機(jī)存取存儲(chǔ)器或高速緩存,當(dāng)然也可采用其他類型的存儲(chǔ)器。盤或盤存儲(chǔ)器系指持久性存儲(chǔ)器,它可包括硬盤、軟盤、光盤、DVD、盤陣列或其他持久性存儲(chǔ)設(shè)備。如上所述,MFLFⅠ在分配期間有時(shí)將空塊劃分以便分配一部分塊及退回另一部分至空存儲(chǔ)區(qū)。與MFLFⅠ比較,本發(fā)明能夠有利地減少劃分的塊數(shù)。這是分配盤存儲(chǔ)器的一項(xiàng)重要參數(shù),因?yàn)閯澐謮K能夠造成盤的額外操作(其中操作是讀或?qū)?。本發(fā)明因此在分配時(shí)比MFLFⅠ劃分得少。本發(fā)明可用于分配主存儲(chǔ)器以及盤存儲(chǔ)器?,F(xiàn)參照附圖,其中相同數(shù)字表示相同或類似元件,先參照?qǐng)D8和9,這些是用于顯示盤的分配和存儲(chǔ)管理的系統(tǒng)/方法的框圖。表(例如快表、雜表或空表)通常具有最小(min)和最大(max)尺寸,它們表示可在表中存儲(chǔ)的最小和最大塊(對(duì)于其單元尺寸為1的快表而言,其min和max尺寸可以相等)。在具有最大塊尺寸的系統(tǒng)中,最后的雜表的max尺寸可以是最大塊尺寸。在沒有最大塊尺寸的系統(tǒng)中,最后的雜表不能有最大尺寸。設(shè)s為所請(qǐng)求尺寸。在框807內(nèi)判斷s是否大于用于存儲(chǔ)最大塊的表的min尺寸。如果是,則處理過程進(jìn)至圖9的框905。如果不是,則處理過程進(jìn)至框805。在框805中,系統(tǒng)選擇一個(gè)合適的表來檢查。選擇其最小min尺寸為1min(其中1min≥s)的表L。在選擇表時(shí)也可使用其他準(zhǔn)則。處理過程進(jìn)至框810。在框810中,判斷表L是否為空。如果是,則從尾區(qū)中分配一塊尺寸為1min的塊并且用它來滿足框815中的請(qǐng)求。如果表L不空,則在框820中用表L中的第一塊滿足請(qǐng)求而不劃分任何存儲(chǔ)塊。當(dāng)表L包括不同尺寸的塊時(shí),對(duì)于熟悉技術(shù)的人而言,直截了當(dāng)?shù)姆磻?yīng)是對(duì)表L作某些搜索,以便得到更好的適配塊和/或劃分所選塊以便分配從而減少內(nèi)部碎塊。參照?qǐng)D9,顯示一種根據(jù)本發(fā)明的用于分配大塊的策略。設(shè)L為用于存儲(chǔ)大塊的雜表。在框905中,檢查L(zhǎng)來分配第一塊其尺寸≥s但≤s+a(閾值)的塊(例如acceptable_waste)。acceptable_waste是一個(gè)參數(shù),它在某些分配的情況下用于劃分塊以便減少內(nèi)部碎塊。如果找到一塊合適塊,則在框910中分配該塊而不必劃分。如果找不到這種塊,則有兩種可能性。如果在L上沒有能夠滿足請(qǐng)求的足夠大的塊,則在框930中從尾區(qū)中分配尺寸為s的塊。如果L包括足夠大的塊,則在L上的其尺寸大于s的最小塊劃分為其尺寸分別為s和r的碎塊f1和f2(框935)。f1用于滿足請(qǐng)求。f2被放置于對(duì)應(yīng)于它自己尺寸的空表的開始處。acceptable_waste參數(shù)可以動(dòng)態(tài)地變動(dòng)。一個(gè)直截了當(dāng)?shù)淖儎?dòng)方案是使用函數(shù)來替代acceptable_waste參數(shù),該函數(shù)可以接受例如請(qǐng)求尺寸作為參量。根據(jù)本發(fā)明的釋放是直截了當(dāng)?shù)?。各釋放塊放置于對(duì)應(yīng)于它們尺寸的空表的開始處。在一個(gè)實(shí)施例中采用延遲匯并。當(dāng)將本發(fā)明用于主存儲(chǔ)器分配時(shí),匯并是直截了當(dāng)?shù)?。本發(fā)明包括能完成用于管理盤存儲(chǔ)器的動(dòng)態(tài)存儲(chǔ)分配器(DSA)的延遲匯并的新潁方法,它可以與許多不同方法一起使用,包括但不限于最初適配、最佳適配、伙伴系統(tǒng)、MFLF系統(tǒng)等。存儲(chǔ)塊包括首部。首部包括塊尺寸以及用于標(biāo)示塊是空的還是已分配的標(biāo)記。首部信息保持于盤上以便在系統(tǒng)垮臺(tái)或關(guān)機(jī)時(shí)能夠保存住。首部信息也可高速緩存于主存儲(chǔ)器中以供快速存取之用。首部信息也可用不同方式保持于盤上。一個(gè)方法是將塊的指定字節(jié)(例如初始字節(jié))用于首部信息。另一個(gè)方法可以是在連續(xù)存儲(chǔ)區(qū)的單塊中存儲(chǔ)多塊的首部信息。參照?qǐng)D10,其中顯示一個(gè)用于將鄰近空塊匯并的優(yōu)選方法。在框1005中將匯并所需數(shù)據(jù)結(jié)構(gòu)初始化。例如,許多DSA利用空表。這些DSA使用框1005來將空表初始化(例如將一個(gè)或多個(gè)空表騰空)???010、1020和1025形成一個(gè)循環(huán),其中系統(tǒng)掃描首部塊及合并鄰近空塊。該系統(tǒng)從存儲(chǔ)區(qū)一端處的塊開始,讀取對(duì)應(yīng)于第一塊的首部。系統(tǒng)接著順序地掃描首部以及將鄰近空塊合并。對(duì)于利用空表的存儲(chǔ)系統(tǒng)而言,在空塊已經(jīng)匯并之后,將它們加至合適的空表中。在框1025中,系統(tǒng)將匯并操作進(jìn)入持久性存儲(chǔ)設(shè)備中的地方記錄下來,從而對(duì)匯并操作進(jìn)行檢查點(diǎn)操作。檢查點(diǎn)操作的一個(gè)目的是減少系統(tǒng)故障時(shí)所需工作量。本發(fā)明采用檢查點(diǎn)操作來更新過時(shí)信息。在系統(tǒng)故障的情況下,很可能損失主存儲(chǔ)器內(nèi)容而可能保持盤存儲(chǔ)器內(nèi)容。在系統(tǒng)故障的情況下,檢查點(diǎn)操作可以不再需要重新再做大部分或全部早已完成的匯并工作。相反,現(xiàn)有技術(shù)中的方法在故障后要求從頭重新掃描首部。有利的是,通過提供對(duì)首部的順序掃描和檢查點(diǎn)操作,可以提供一個(gè)更為穩(wěn)固和持久的存儲(chǔ)系統(tǒng)。此外,可以減少或節(jié)省故障后重新匯并時(shí)浪費(fèi)的時(shí)間,例如可以節(jié)省50%或更多的匯并時(shí)間,在很多情況下可以節(jié)省100%的匯并時(shí)間??梢院线m地改變進(jìn)行檢查點(diǎn)操作的頻度,例如可以根據(jù)事務(wù)數(shù)量來進(jìn)行或者在預(yù)先設(shè)定的時(shí)間過去后進(jìn)行檢查點(diǎn)操作。頻繁的檢查點(diǎn)操作可以減少故障后需要重新進(jìn)行的工作量。在框1015中完成最后清除和整理操作。例如,如果工作存儲(chǔ)區(qū)的尾端包括一個(gè)空塊,則可以在此步中將該空塊加至尾區(qū)中?,F(xiàn)在將要更詳細(xì)地描述根據(jù)本發(fā)明的用于有效地分配和釋放持久性存儲(chǔ)器的方法。本發(fā)明可與不同DSA一起使用,它們包括但不限于MFLF系統(tǒng)、最初適配、最佳適配等。在第一闡述性存儲(chǔ)管理方法(為簡(jiǎn)化起見,此后稱為方法Ⅰ)中,盤保持首部,它們包括塊尺寸以及用于標(biāo)示該塊是空的還是已分配的標(biāo)志。存儲(chǔ)器中保持用于分配和釋放的空表數(shù)據(jù)結(jié)構(gòu)。參照?qǐng)D11,其中顯示根據(jù)本發(fā)明的存儲(chǔ)管理方法Ⅰ的分配操作。應(yīng)該注意到,圖11中所示各框可以按照任何順序完成或執(zhí)行。在框1105中使用存儲(chǔ)器內(nèi)數(shù)據(jù)結(jié)構(gòu)來尋找合適空塊。一旦找到該塊,在框1110中通過修改合適的存儲(chǔ)器內(nèi)數(shù)據(jù)結(jié)構(gòu)和將盤上的首部標(biāo)志標(biāo)為“已分配”而分配該塊。如果不劃分塊,則分配操作只耗費(fèi)單個(gè)盤操作周期。參照?qǐng)D12,其中顯示根據(jù)本發(fā)明的存儲(chǔ)管理方法Ⅰ的釋放操作。修改合適的存儲(chǔ)器內(nèi)數(shù)據(jù)結(jié)構(gòu)來釋放塊。此外,在框1205中將盤上的首部標(biāo)志標(biāo)為“已釋放”。如果不進(jìn)行匯并,則釋放操作只耗費(fèi)單個(gè)盤操作周期。當(dāng)在故障或正常關(guān)機(jī)之后重新啟動(dòng)系統(tǒng)時(shí),可以通過掃描存于盤上的首部來構(gòu)造DSA所用存儲(chǔ)器內(nèi)數(shù)據(jù)結(jié)構(gòu)(例如空表)??梢栽谛枰獣r(shí)逐步地讀取這類數(shù)據(jù)而不必一次全部讀取,當(dāng)然也可一次全部讀取。在一個(gè)實(shí)施例中,可以通過在盤存儲(chǔ)器的一個(gè)或多個(gè)連續(xù)塊中保持多個(gè)首部字而減少用于從盤上讀取信息的時(shí)間。當(dāng)連續(xù)塊b1滿時(shí),可以將新塊b2鏈接至b1以便包括附加首部??梢员群懿贿B續(xù)的信息快得多地讀取盤上存儲(chǔ)區(qū)的連續(xù)塊。例如,一個(gè)(或小量)塊讀取操作可用于讀取數(shù)個(gè)連續(xù)首部。即使不使用塊讀取,從彼此緊靠的盤區(qū)中的多個(gè)讀取也可能只需少量移動(dòng)盤頭。這能節(jié)省時(shí)間。在能夠在正常關(guān)機(jī)之后改進(jìn)啟動(dòng)時(shí)間的另一個(gè)實(shí)施例中,就在關(guān)機(jī)之前由DSA將主存儲(chǔ)器數(shù)據(jù)結(jié)構(gòu)(例如空表)輸出至盤存儲(chǔ)器的一個(gè)或多個(gè)連續(xù)塊中。在重新啟動(dòng)時(shí),DSA從就在關(guān)機(jī)之前所寫的存儲(chǔ)塊中讀取數(shù)據(jù)結(jié)構(gòu)。這可能比從首部獲得信息要快得多。如上所述,這些實(shí)施例可用于以下所述的存儲(chǔ)管理方法以及用于存儲(chǔ)管理方法Ⅰ。參照?qǐng)D13,其中顯示一個(gè)根據(jù)本發(fā)明的用于管理盤上持久存儲(chǔ)區(qū)的闡述性存儲(chǔ)管理方法。為簡(jiǎn)化起見,此方法今后稱為方法Ⅱ或存儲(chǔ)管理方法Ⅱ。應(yīng)該注意到,圖13中所示各框可以按照任何順序完成或執(zhí)行。該系統(tǒng)保持至少一個(gè)盤上塊的表(它可能包括空塊和已分配塊中的一個(gè)或它們兩者)(框1305)??梢栽谑撞恐斜3直碇羔樁3衷摫?。分配操作(框1310)采取的方式如圖11中所示及在相伴文本中加以描述。然而方法Ⅱ所保持的存儲(chǔ)器內(nèi)數(shù)據(jù)結(jié)構(gòu)可能與方法Ⅰ所用的不同(見例如圖14)。釋放操作(框1320)采取的方式如圖12中所示及在相伴文本中加以描述??赡苄枰⑿碌拇鎯?chǔ)塊(框1315)。當(dāng)在MFLF算法中從尾區(qū)中分配一塊時(shí)可能會(huì)如此。在將一塊劃分后也可能如此。當(dāng)建立新存儲(chǔ)塊b時(shí),在框1315中將其盤首部初始化,這包括塊的分配狀態(tài)和塊尺寸及指向表中下一塊的指針。為使盤操作最少,可以將這些首部域保持于盤存儲(chǔ)區(qū)的連續(xù)字節(jié)中。以此方式,可以有效地將首部更新,例如通過單個(gè)寫塊操作或多個(gè)寫塊操作但卻很少移動(dòng)盤頭。b加至空表的表首。也可在主存儲(chǔ)器中保持head_of_list指針;如果這樣,則將它更新為指向b。為將盤操作減至最少,可以不在框1315中更新指向表首的盤指針。這意味著指向表首的盤指針可能成為過時(shí)。為更新這些盤指針,在框1325中系統(tǒng)周期地進(jìn)行檢查點(diǎn)操作。例如,系統(tǒng)可能每隔n個(gè)事務(wù)之后就進(jìn)行檢查點(diǎn)操作,其中n是系統(tǒng)參數(shù)。事務(wù)可以包括分配、釋放或者其他存儲(chǔ)操作。選代地,系統(tǒng)可以每當(dāng)建立了m個(gè)新塊之后就進(jìn)行檢查點(diǎn)操作,其中m是系統(tǒng)參數(shù)。在正常運(yùn)行的情況下通常在關(guān)機(jī)之前進(jìn)行檢查點(diǎn)操作。在執(zhí)行框1325中的步驟期間,根據(jù)保持于主存儲(chǔ)器中的head_of_list指針來更新盤的head_of_list指針。在具有多個(gè)盤表的系統(tǒng)中,希望在盤上的連續(xù)存儲(chǔ)位置中保持盤head_of_list指針以便有效地更新head_of_list指針,例如通過完成單個(gè)寫塊操作或多個(gè)寫塊操作但很少移動(dòng)盤頭。參照?qǐng)D14,其中顯示用于闡述在隨機(jī)存取存儲(chǔ)器(RAM)和盤之間使用存儲(chǔ)管理方法Ⅱ的存儲(chǔ)分配的闡述性例子。存儲(chǔ)管理方法Ⅱ可與MFLF算法一起使用。如果如此,則為快表和雜表保持存儲(chǔ)器內(nèi)數(shù)據(jù)結(jié)構(gòu)。雖然在存儲(chǔ)器內(nèi)表與盤表之間存在著一一對(duì)應(yīng)關(guān)系,但并不要求如此。當(dāng)在故障或正常關(guān)機(jī)之后重新啟動(dòng)系統(tǒng)時(shí),可以掃描存于盤上的首部,進(jìn)而或者如存儲(chǔ)管理方法Ⅰ中那樣檢查塊尺寸和分配狀態(tài),或者檢查存于盤上的表,以便構(gòu)造DSA所用存儲(chǔ)器內(nèi)數(shù)據(jù)結(jié)構(gòu)(例如空表)。可以在需要時(shí)逐步地讀取這類數(shù)據(jù)而不必一次全部讀取,當(dāng)然也可一次全部讀取。如圖14中所示,闡述了采用本發(fā)明的用于多個(gè)不同存儲(chǔ)操作的存儲(chǔ)管理過程。這些過程由隨機(jī)存取存儲(chǔ)器1404和盤1406分擔(dān)。存儲(chǔ)塊1408被闡述為矩形。存儲(chǔ)塊1408包括位于塊中第一位置1410處的用于表示尺寸的數(shù)字,其正值表示空塊而負(fù)值表示已分配。主存儲(chǔ)器(RAM1404)的存儲(chǔ)塊1409標(biāo)有地址,例如a1,a2,a3,…a5,其中對(duì)應(yīng)的塊位于盤1406上。表首指向盤1406的表上第一存儲(chǔ)塊的位置。盤上塊1408的地址由塊1408的第二位置1412中的地址標(biāo)記所標(biāo)示。地址標(biāo)記1412是為便于解釋而標(biāo)出的,這類地址標(biāo)記并不需要存于盤上。塊1408的最后位置1414指向表中下一個(gè)存儲(chǔ)塊,或者“#”意味著NIL或者表或集合的末端。參照?qǐng)D13描述圖14例子中的存儲(chǔ)操作。RAM1404只包括空塊。保持盤上塊的表(框1305)。根據(jù)框1310完成對(duì)(25)的分配。根據(jù)框1320完成對(duì)(a2)的釋放。根據(jù)框1315完成對(duì)(90)的分配。注意到,由于分配來自向盤上表的前端移動(dòng)的尾區(qū),以致表首a1成為過時(shí)。如圖14中所示,根據(jù)框1325的檢查點(diǎn)操作將表首更新為a5。參照?qǐng)D15,其中闡述用于管理盤上持久性存儲(chǔ)的存儲(chǔ)管理方法Ⅲ。應(yīng)該注意到,圖15中所示各框可以按照任何順序完成或執(zhí)行。在框1505中系統(tǒng)保持至少一個(gè)空塊表。可通過保持首部中表指針而保持該表。此表的表首可能成為過時(shí),但可在框1520中檢查點(diǎn)操作期間得到更新。在主存儲(chǔ)器中保持此表的最新版本。當(dāng)從表的第一成員中進(jìn)行分配時(shí)此方法特別有用。對(duì)于MFLF方法而言,從所有快表及從除最后雜表以外的雜表中進(jìn)行分配時(shí)可從表的第一單元開始,所以這些表本身很適用于存儲(chǔ)管理方法Ⅲ。在框1515中,自空表首端分配一塊。將存儲(chǔ)器內(nèi)數(shù)據(jù)結(jié)構(gòu)更新。此外,將該塊標(biāo)為已在盤上分配。然而,為減少盤操作,可讓盤上表指針過時(shí)。在框1510中,通過將塊加至合適的空表的首端及將存儲(chǔ)器內(nèi)數(shù)據(jù)結(jié)構(gòu)更新即可將塊釋放。該塊標(biāo)為已在盤上分配及其首部更新為指向空表中下一塊。為使將此盤更新操作的開銷減至最小,可將分配狀態(tài)標(biāo)記和指向下一個(gè)表單元的指針彼此緊靠地存于盤上。為有利地減少盤操作,可允許指向表首的盤指針成為過時(shí)。為更新盤上head_of_list指針,在框1520中系統(tǒng)周期地進(jìn)行檢查點(diǎn)操作。例如,系統(tǒng)可能每隔n個(gè)事務(wù)之后就進(jìn)行檢查點(diǎn)操作,其中n是系統(tǒng)參數(shù)。此外,通常在系統(tǒng)關(guān)機(jī)之前完成檢查點(diǎn)操作。在框1520的步驟期間,使用存儲(chǔ)器中保持的表指針來更新盤空表指針。在具有多個(gè)空表的系統(tǒng)中,最好在盤上連續(xù)存儲(chǔ)位置中保持盤空表指針,以便有效地更新這些指針,例如通過單個(gè)寫塊操作或多個(gè)寫塊操作但卻很少移動(dòng)盤頭。注意到如果當(dāng)盤上一個(gè)或多個(gè)空表不正確時(shí)系統(tǒng)出故障,則這些空表可能包括已分配塊。在框1525中,在故障之后將這些空表固定。系統(tǒng)檢查盤上由存儲(chǔ)管理方法Ⅲ管理的每個(gè)空表及消除已分配塊。系統(tǒng)通過從頭掃描空表及檢查首部來做到此點(diǎn)。一旦系統(tǒng)遇到空表中的空塊時(shí),系統(tǒng)即停止檢查該表,因?yàn)楸砩鲜S鄩K應(yīng)該也是空的。參照?qǐng)D16,其中顯示存儲(chǔ)管理方法Ⅲ的闡述性例子。如圖16中所示,闡述了采用本發(fā)明的用于多個(gè)不同存儲(chǔ)操作的存儲(chǔ)管理過程。這些過程由隨機(jī)存取存儲(chǔ)器1604和盤1606分擔(dān)。存儲(chǔ)塊1608被闡述為矩形。存儲(chǔ)塊1608包括位于塊中第一位置1610處的用于表示尺寸的數(shù)字,其正值表示空塊而負(fù)值表示已分配。主存儲(chǔ)器(RAM1604)的存儲(chǔ)塊1611包括一個(gè)空表1607,它包括一個(gè)表示具有尺寸例如此例中的“3”的塊的索引1609。一個(gè)地址,例如a1,a2,a3,a4包括于表1607中,其中在盤1606上分配一塊相應(yīng)塊。盤上塊1608的地址由塊1608的位置1612中的地址標(biāo)記所標(biāo)示。地址標(biāo)記1612是為便于解釋而標(biāo)出的,這類地址標(biāo)記并不需要存于盤上。塊1608的位置1614指向表中下一個(gè)存儲(chǔ)塊,或者“#”意味著NIL或者表的末端。參照?qǐng)D15描述圖16例子中的存儲(chǔ)操作。保持盤上塊的表(框1505)。根據(jù)框1515完成對(duì)(3)的分配并且送回指針至a1。同時(shí)再根據(jù)框1515同樣地完成對(duì)(3)的分配。根據(jù)框1510完成對(duì)(a3)的釋放。用指向塊地址a3的地址a2和a4將塊1608標(biāo)記。這由檢查點(diǎn)操作所固定。根據(jù)框1520的檢查點(diǎn)操作將空表1609更新以便將具有地址a4和a3的塊保持于空表中。參照?qǐng)D17,其中闡述存儲(chǔ)管理方法的另一個(gè)實(shí)施例,為簡(jiǎn)化起見,該方法稱為存儲(chǔ)方法Ⅳ。應(yīng)該注意到,圖17中所示各框可以按照任何順序完成或執(zhí)行。系統(tǒng)保持用于管理存儲(chǔ)器的存儲(chǔ)器內(nèi)數(shù)據(jù)結(jié)構(gòu)。這類存儲(chǔ)器內(nèi)數(shù)據(jù)結(jié)構(gòu)可以包括表。在框1705中通過修改存儲(chǔ)器內(nèi)數(shù)據(jù)結(jié)構(gòu)而完成分配操作和釋放操作。通常在框1705中不進(jìn)行盤操作。通常分配操作和釋放操作可以是快的。在框1710中系統(tǒng)周期地對(duì)送至存儲(chǔ)器的信息進(jìn)行檢查點(diǎn)操作。例如,系統(tǒng)可能每隔n個(gè)事務(wù)之后就進(jìn)行檢查點(diǎn)操作,其中n是系統(tǒng)參數(shù)。此外,通常在系統(tǒng)關(guān)機(jī)之前完成檢查點(diǎn)操作。就在正常關(guān)機(jī)之前,系統(tǒng)可以在盤上存儲(chǔ)附加信息(例如存儲(chǔ)區(qū)中空表結(jié)構(gòu),假定系統(tǒng)正在使用空表),以備稍后讀進(jìn)從而減少啟動(dòng)時(shí)間。這類檢查點(diǎn)操作允許系統(tǒng)在正常關(guān)機(jī)或故障之后重新啟動(dòng)。就在正常關(guān)機(jī)之前,系統(tǒng)可以在盤上存儲(chǔ)那些在正常檢查點(diǎn)操作期間系統(tǒng)可能不存儲(chǔ)的信息??梢陨院笞x進(jìn)這類輔助信息從而減少啟動(dòng)時(shí)間。當(dāng)設(shè)計(jì)者在選擇最適合于性能需要的存儲(chǔ)管理方法時(shí),可以考慮不同存儲(chǔ)管理方法之間的折衷情況。此處所描述的各種存儲(chǔ)管理方法提供超過現(xiàn)有技術(shù)的許多優(yōu)點(diǎn)。存儲(chǔ)管理方法Ⅰ比存儲(chǔ)管理方法Ⅱ和存儲(chǔ)管理方法Ⅲ需要較少首部空間。此外,存儲(chǔ)管理方法Ⅰ在分配操作和釋放操作中所執(zhí)行的寫盤操作比存儲(chǔ)管理方法Ⅱ和存儲(chǔ)管理方法Ⅲ少。對(duì)于存儲(chǔ)管理方法Ⅰ而言,盤上信息始終是最新的,并且不需要檢查點(diǎn)操作。存儲(chǔ)管理方法Ⅱ允許在盤上保持多個(gè)表,它們可以在啟動(dòng)期間使用比存儲(chǔ)管理方法Ⅰ少的盤讀取操作來分配特定尺寸的塊。檢查點(diǎn)操作采用于存儲(chǔ)管理方法Ⅱ,以及盤上表首并不始終是當(dāng)今值。存儲(chǔ)管理方法Ⅲ采用多個(gè)空表,以及從空表首端進(jìn)行所有分配操作從而得到最佳性能。方法Ⅲ可在啟動(dòng)期間用于分配特定尺寸的空塊,因而使用比方法Ⅰ和Ⅱ更少的讀取操作,因?yàn)榉椒á蟛捎枚鄠€(gè)表。不像存儲(chǔ)管理方法Ⅱ,方法Ⅲ的表只包括空塊(假定為正常關(guān)機(jī))。采用檢查點(diǎn)操作,可能需要更新盤上的表,以及在故障之后可能需要固定盤上的表。存儲(chǔ)管理方法Ⅳ完成分配操作和釋放操作而不需盤操作!然而,方法Ⅳ可能比其他方法(例如方法Ⅰ-Ⅲ)更多地包括檢查點(diǎn)操作過程。此外,在故障的情況下,使用方法Ⅳ比使用其他方法更可能使盤存儲(chǔ)區(qū)過時(shí)。現(xiàn)在將要闡述性地描述另一個(gè)根據(jù)本發(fā)明的用于分配存儲(chǔ)的方法(管理方法Ⅴ)。當(dāng)系統(tǒng)通過保持和更新指向第一空字節(jié)的指針(尾指針)而從盤存儲(chǔ)器的大塊(例如圖5中的尾區(qū))中分配存儲(chǔ)時(shí),此方法特別有用。參照?qǐng)D18,在框1805中系統(tǒng)為各塊在盤上保持包括至少一個(gè)稱為代碼字節(jié)的字節(jié)的首部。應(yīng)該注意到,圖18中所示各框可以按照任何順序完成或執(zhí)行。該系統(tǒng)也在存儲(chǔ)區(qū)內(nèi)保持用于標(biāo)示當(dāng)今尾指針和盤上尾指針的變量。盤上尾指針可能是過時(shí)的。在框1810中系統(tǒng)從尾區(qū)中分配一塊b1。此步驟存于首部中的信息包括一個(gè)已分配標(biāo)記、塊尺寸及一個(gè)或多個(gè)代碼字節(jié)。盤上尾指針通常不在此步驟中更新。其理由是尾指針可能與盤上b1的首部距離甚遠(yuǎn)。更新盤上尾指針可能會(huì)使用一個(gè)額外盤操作。相反,b1的首部字節(jié)可以保持于盤上鄰近處,因而通常只用少數(shù)(在很多情況下,一個(gè)即已足夠)盤操作來完成對(duì)首部的所有更新。存于代碼字節(jié)中的特殊信息標(biāo)示該塊已不再是尾區(qū)的一部分。也可能將用于其他目的的首部字節(jié)也用作代碼字節(jié),從而減少或節(jié)省由代碼字節(jié)引起的開銷。例如,存儲(chǔ)管理方法Ⅱ和Ⅲ使用首部字節(jié)來存儲(chǔ)塊尺寸和表指針。這些字節(jié)也可用作代碼字節(jié)。存儲(chǔ)區(qū)中的尾指針(但不是盤上的)在框1810中更新。在框1825中將塊b1釋放至尾區(qū)。將代碼字節(jié)修改以便標(biāo)示b1現(xiàn)在是尾區(qū)的一部分。如果盤上尾指針已經(jīng)高速緩存于存儲(chǔ)器內(nèi)以備檢查而不必訪問盤及其值是當(dāng)今值,則將尾指針更新以使它在將b1釋放至尾區(qū)之后仍然保持當(dāng)今值。否則允許盤上尾指針依然成為過時(shí)。在框1820中周期地將更新的尾指針通過檢查點(diǎn)操作送至盤上。例如,系統(tǒng)可能每隔n個(gè)事務(wù)之后就進(jìn)行檢查點(diǎn)操作,其中n是系統(tǒng)參數(shù)。選代地,可以在上一次更新盤上尾指針之后的p次更新至尾區(qū)的操作之后由系統(tǒng)進(jìn)行檢查點(diǎn)操作,其中p是系統(tǒng)參數(shù)。在正常運(yùn)行期間通常在系統(tǒng)關(guān)機(jī)之前完成檢查點(diǎn)操作。因此,更新盤上尾指針的費(fèi)用可以分?jǐn)傆跀?shù)個(gè)分配和/釋放操作之中。本發(fā)明可以與先前描述的發(fā)明一起使用,例如參照?qǐng)D8和9描述的方法或者存儲(chǔ)管理方法Ⅰ、Ⅱ和Ⅲ。如果與存儲(chǔ)管理方法Ⅱ和Ⅲ一起使用,則尾區(qū)的檢查點(diǎn)操作可與空表的檢查點(diǎn)操作合并。例如,假設(shè)一個(gè)MFLF系統(tǒng)需要對(duì)尾指針和空表指針進(jìn)行檢查點(diǎn)操作。盤上的尾指針在存儲(chǔ)時(shí)可以與空表指針鄰近。以此方式,可以使用單個(gè)寫塊操作或少量寫塊操作而不需盤頭移動(dòng)來對(duì)尾指針和空表進(jìn)行檢查點(diǎn)操作。如果發(fā)生系統(tǒng)故障,則存于盤上的尾指針可能不是當(dāng)今值???815試圖在故障后校正尾指針。設(shè)t為尾指針的存儲(chǔ)值。系統(tǒng)檢查對(duì)應(yīng)于在t處開始的塊的首部中的代碼字節(jié)。如果這些代碼字節(jié)標(biāo)示t對(duì)應(yīng)于一塊,則根據(jù)首部來確定塊尺寸s。將尾指針增量至t+s,再使該過程一直繼續(xù),直至檢查到標(biāo)示存儲(chǔ)區(qū)不對(duì)應(yīng)于一塊的代碼字節(jié)。更新的尾指針然后存于盤上。在一個(gè)闡述性例子中,假設(shè)使用存儲(chǔ)管理方法Ⅱ。尺寸和指針首部?jī)烧叨伎捎米鞔a字節(jié)。在框1815中對(duì)有效代碼字節(jié)的測(cè)試可能包括證實(shí)尺寸字節(jié)存儲(chǔ)了合法尺寸及指針指向?qū)儆诤线m的尺寸類的塊。圖18實(shí)施一個(gè)概率恢復(fù)算法。有可能在框1815中將尾指針不必要地向前移。通過合適地使用代碼字節(jié),此概率可以減至任意低的值。在最壞情況下,可能會(huì)損失某些尾存儲(chǔ)區(qū),但已分配的存儲(chǔ)區(qū)不會(huì)被錯(cuò)誤地釋放。有可能將圖18的方法與若干個(gè)使用類似尾區(qū)的數(shù)據(jù)結(jié)構(gòu)的不同DSA例如MFLF算法一起使用。并不是始終必須使用框1825來將塊釋放至尾區(qū)。例如,MFLF算法可能不會(huì)正常地嘗試將最近釋放的塊加至尾區(qū)。相反,MFLF算法可能會(huì)將釋放的塊加至空表。在匯并時(shí)可能將存儲(chǔ)區(qū)加至尾區(qū)。參照?qǐng)D19,發(fā)明者把使用存儲(chǔ)管理方法Ⅰ的MFLFⅢ與DB2TM對(duì)照來測(cè)試性能特性,其中DB2TM可從IBM買到。對(duì)于5300個(gè)各具有100字節(jié)尺寸的項(xiàng)目完成讀取和寫操作。所報(bào)告的時(shí)間包括初始化時(shí)間。測(cè)試運(yùn)行包括以下-(A)在一次執(zhí)行中進(jìn)行所有測(cè)試,包括單功能測(cè)試。-(R)每個(gè)項(xiàng)目從數(shù)據(jù)庫(kù)中讀取一次(鍵控查表)。-(Wp)將每個(gè)項(xiàng)目寫一次至空數(shù)據(jù)庫(kù)中(將數(shù)據(jù)庫(kù)準(zhǔn)備好)。-(Wn)將每個(gè)項(xiàng)目寫一次至滿數(shù)據(jù)庫(kù)中(在準(zhǔn)備好的數(shù)據(jù)庫(kù)中替代每個(gè)項(xiàng)目)。-(I)對(duì)于數(shù)據(jù)庫(kù)中每個(gè)項(xiàng)目執(zhí)行迭代操作(非鍵控查表)。注意到由于測(cè)試A的初始化時(shí)間加上額外功能測(cè)試,(R+Wp+Wn+I)加起來還不到A。數(shù)據(jù)庫(kù)包括一個(gè)具有帶索引的主鍵(串)和數(shù)據(jù)對(duì)象(LOB)的表。只有在完成所有更新之后才更新基本測(cè)試。如圖19中所示,在每次更新或每五次更新之后實(shí)行輔助更新。每五次更新就需要對(duì)DB2實(shí)際地進(jìn)行測(cè)試,及DB2需要數(shù)個(gè)調(diào)諧參數(shù)來完成測(cè)試。基本測(cè)試結(jié)果顯示于圖19中。以秒表示的標(biāo)以1900的本發(fā)明測(cè)試時(shí)間顯示出比標(biāo)以1902的DB2測(cè)試時(shí)間的顯著改進(jìn)。在大部分情況下,能夠獲得一個(gè)數(shù)量級(jí)的改進(jìn)。參照?qǐng)D20,DB2用數(shù)種模式運(yùn)行。例如,如圖20中所示,可以手動(dòng)執(zhí)行、自動(dòng)執(zhí)行或每隔五次更新執(zhí)行對(duì)DB2的測(cè)試。本發(fā)明的Wp和Wn測(cè)試的操作時(shí)間(以秒計(jì))大于一個(gè)數(shù)量級(jí)及在某些情況下大于兩個(gè)數(shù)量級(jí)。熟悉技術(shù)的人可以對(duì)本發(fā)明作出各種不同改變。例如,DSA可以并行地進(jìn)行以便并發(fā)地處理多個(gè)事務(wù)。這對(duì)于盤陣列而言可能是合適的。以下參考資料中描述了完成并行處理的技術(shù)1)1992年12月ArunIyengar,MassachusettsInstituteofTechnologyLaboratoryforComputerScience的TR-560(博士論文)“多處理器上的動(dòng)態(tài)存儲(chǔ)分配”;及2)1996年10月在ProceedingsofIEEEFrontiers′96上ArunIyengar的“動(dòng)態(tài)存儲(chǔ)分配算法的可改變規(guī)模性”。已經(jīng)描述了用于持久和穩(wěn)固存儲(chǔ)分配的系統(tǒng)和方法的優(yōu)選實(shí)施例(它們只是闡述性而不是限制性的)之后,注意到,熟悉技術(shù)的人可以考慮到以上原理而作出修改和變動(dòng)。因此應(yīng)該理解,可以在由所附權(quán)利要求書所規(guī)定的范圍和實(shí)質(zhì)之內(nèi)對(duì)本發(fā)明的具體實(shí)施例作出改變。已經(jīng)按照專利法所要求的細(xì)節(jié)和具體性描述了本發(fā)明,在所附權(quán)利要求書中將提出權(quán)利要求和希望得到保護(hù)的內(nèi)容。權(quán)利要求1.一種在包括主存儲(chǔ)器和至少一個(gè)盤存儲(chǔ)設(shè)備在內(nèi)的存儲(chǔ)系統(tǒng)中用于管理持久存儲(chǔ)器的方法,包括以下步驟在持久存儲(chǔ)器中為多塊保持首部,其中每塊的首部包括該塊的塊尺寸和分配狀態(tài);在主存儲(chǔ)器內(nèi)保持至少一個(gè)數(shù)據(jù)結(jié)構(gòu),用于分配和釋放持久存儲(chǔ)器;通過以下步驟分配第一存儲(chǔ)塊通過在主存儲(chǔ)器內(nèi)采用該至少一個(gè)數(shù)據(jù)結(jié)構(gòu)來標(biāo)識(shí)第一存儲(chǔ)塊;修改主存儲(chǔ)器內(nèi)的該至少一個(gè)數(shù)據(jù)結(jié)構(gòu)以及為持久存儲(chǔ)器內(nèi)的塊賦予一個(gè)分配狀態(tài);通過為第二存儲(chǔ)塊在持久存儲(chǔ)器內(nèi)賦予一個(gè)分配狀態(tài)而釋放第二存儲(chǔ)塊;及在主存儲(chǔ)器內(nèi)修改至少一個(gè)數(shù)據(jù)結(jié)構(gòu)。2.權(quán)利要求1中所述方法,還包括在系統(tǒng)根據(jù)持久存儲(chǔ)器的多個(gè)首部重新啟動(dòng)后確定主存儲(chǔ)器內(nèi)的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)的步驟。3.權(quán)利要求2中所述方法,其中在系統(tǒng)重新啟動(dòng)后確定主存儲(chǔ)器內(nèi)的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)的步驟包括持久存儲(chǔ)器的至少一個(gè)盤訪問操作,其中單個(gè)盤訪問操作讀入多個(gè)字節(jié)。4.權(quán)利要求1中所述方法,還包括以下步驟在系統(tǒng)關(guān)機(jī)之前自主存儲(chǔ)器的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)中輸出信息至持久存儲(chǔ)器中;及在系統(tǒng)根據(jù)輸出的信息重新啟動(dòng)之后確定主存儲(chǔ)器中的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)。5.權(quán)利要求1中所述方法,其中在持久存儲(chǔ)器中保持首部的步驟包括提供存于持久存儲(chǔ)器的連續(xù)區(qū)內(nèi)的多個(gè)首部。6.權(quán)利要求1中所述方法,其中在持久存儲(chǔ)器中保持首部的步驟包括保持具有一個(gè)指向持久存儲(chǔ)器內(nèi)的一個(gè)位置的指針域的首部。7.權(quán)利要求6中所述方法,還包括以下步驟使用各首部?jī)?nèi)的指針域來保持持久存儲(chǔ)器內(nèi)的塊表;及在主存儲(chǔ)器內(nèi)保持至少一個(gè)指向塊表表首的當(dāng)今指針。8.權(quán)利要求7中所述方法,還包括以下步驟在持久存儲(chǔ)器內(nèi)建立一個(gè)新塊;在持久存儲(chǔ)器內(nèi)為新塊設(shè)置一個(gè)指向主存儲(chǔ)器內(nèi)至少一個(gè)當(dāng)今指針p的值的指針域;及將p設(shè)置為指向新塊。9.權(quán)利要求8中所述方法,其中使用單個(gè)寫塊操作將新塊首部初始化。10.權(quán)利要求7中所述方法,還包括以下步驟周期地將持久存儲(chǔ)器內(nèi)至少一個(gè)表首更新為對(duì)應(yīng)于來自主存儲(chǔ)器內(nèi)至少一個(gè)當(dāng)今指針的表。11.權(quán)利要求10中所述方法,其中該表包括多個(gè)表和這些表包括對(duì)應(yīng)于連續(xù)地保持于持久存儲(chǔ)器內(nèi)的多個(gè)表的表首,及該方法還包括在單個(gè)寫塊操作中更新這些表首的步驟。12.權(quán)利要求1中所述方法,其中第一存儲(chǔ)塊和第二存儲(chǔ)塊包括相同塊。13.一種可由機(jī)器讀取的程序存儲(chǔ)設(shè)備,其中明確地實(shí)施可由機(jī)器執(zhí)行以便用于管理包括主存儲(chǔ)器和至少一個(gè)盤存儲(chǔ)設(shè)備在內(nèi)的存儲(chǔ)系統(tǒng)中持久存儲(chǔ)器的方法步驟的程序指令,該方法包括以下步驟在持久存儲(chǔ)器中為多個(gè)塊保持首部,其中每塊的首部包括該塊的塊尺寸和分配狀態(tài);在主存儲(chǔ)器內(nèi)保持至少一個(gè)數(shù)據(jù)結(jié)構(gòu),用于分配和釋放持久存儲(chǔ)器;通過以下步驟分配第一存儲(chǔ)塊通過在主存儲(chǔ)器內(nèi)采用該至少一個(gè)數(shù)據(jù)結(jié)構(gòu)來標(biāo)識(shí)第一存儲(chǔ)塊;修改主存儲(chǔ)器內(nèi)的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)及為持久存儲(chǔ)器內(nèi)的該塊賦予一個(gè)分配狀態(tài);通過在持久存儲(chǔ)器內(nèi)為第二存儲(chǔ)塊賦予一個(gè)分配狀態(tài)而釋放第二存儲(chǔ)塊;及修改主存儲(chǔ)器內(nèi)至少一個(gè)數(shù)據(jù)結(jié)構(gòu)。14.權(quán)利要求13中所述程序存儲(chǔ)設(shè)備,還包括根據(jù)持久存儲(chǔ)器內(nèi)的多個(gè)首部將系統(tǒng)重新啟動(dòng)之后確定主存儲(chǔ)器內(nèi)的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)的步驟。15.權(quán)利要求14中所述程序存儲(chǔ)設(shè)備,其中在系統(tǒng)重新啟動(dòng)后確定主存儲(chǔ)器內(nèi)該至少一個(gè)數(shù)據(jù)結(jié)構(gòu)的步驟包括持久存儲(chǔ)器內(nèi)的訪問盤操作,其中單個(gè)訪問盤操作讀入多個(gè)字節(jié)。16.權(quán)利要求13中所述程序存儲(chǔ)設(shè)備,還包括以下步驟在系統(tǒng)關(guān)機(jī)之前自主存儲(chǔ)器的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)中輸出信息至持久存儲(chǔ)器中;及在系統(tǒng)根據(jù)輸出的信息重新啟動(dòng)之后確定主存儲(chǔ)器中的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)。17.權(quán)利要求13中所述程序存儲(chǔ)設(shè)備,其中在持久存儲(chǔ)器內(nèi)保持首部的步驟包括提供在持久存儲(chǔ)器的連續(xù)區(qū)內(nèi)存儲(chǔ)的多個(gè)首部的步驟。18.權(quán)利要求13中所述程序存儲(chǔ)設(shè)備,其中在持久存儲(chǔ)器內(nèi)保持首部的步驟包括一個(gè)具有指向持久存儲(chǔ)器內(nèi)一個(gè)位置的指針域的首部。19.權(quán)利要求18中所述程序存儲(chǔ)設(shè)備,還包括以下步驟使用各首部?jī)?nèi)的指針域來保持持久存儲(chǔ)器內(nèi)的塊表;及在主存儲(chǔ)器內(nèi)保持至少一個(gè)指向塊表表首的當(dāng)今指針。20.權(quán)利要求19中所述程序存儲(chǔ)設(shè)備,還包括以下步驟在持久存儲(chǔ)器內(nèi)建立一個(gè)新塊;在持久存儲(chǔ)器內(nèi)為新塊設(shè)置一個(gè)指向主存儲(chǔ)器內(nèi)至少一個(gè)當(dāng)今指針p的值的指針域;及將p設(shè)置為指向新塊。21.權(quán)利要求20中所述程序存儲(chǔ)設(shè)備,其中使用單個(gè)寫塊操作將新塊首部初始化。22.權(quán)利要求19中所述程序存儲(chǔ)設(shè)備,還包括以下步驟周期地將持久存儲(chǔ)器內(nèi)至少一個(gè)表首更新為對(duì)應(yīng)于來自主存儲(chǔ)器內(nèi)至少一個(gè)當(dāng)今指針的表。23.權(quán)利要求22中所述程序存儲(chǔ)設(shè)備,其中該表包括多個(gè)表和對(duì)應(yīng)于連續(xù)地保持于持久存儲(chǔ)器內(nèi)的多個(gè)表的各表首,及還包括在單個(gè)寫塊操作中更新這些表首的步驟。24.權(quán)利要求13中所述程序存儲(chǔ)設(shè)備,其中第一存儲(chǔ)塊和第二存儲(chǔ)塊包括相同塊。25.一種在包括主存儲(chǔ)器和至少一個(gè)盤存儲(chǔ)設(shè)備在內(nèi)的存儲(chǔ)系統(tǒng)中用于管理持久存儲(chǔ)器的方法,包括以下步驟在持久存儲(chǔ)器中為多個(gè)塊保持首部,其中每塊的首部包括該塊的塊尺寸、分配狀態(tài)以及一個(gè)指針;在主存儲(chǔ)器內(nèi)保持至少一個(gè)數(shù)據(jù)結(jié)構(gòu),用于分配和釋放至持久存儲(chǔ)器;將多塊中的第一存儲(chǔ)塊進(jìn)行分配。分配步驟包括以下步驟通過在主存儲(chǔ)器內(nèi)使用該至少一個(gè)數(shù)據(jù)結(jié)構(gòu)來標(biāo)識(shí)第一存儲(chǔ)塊;修改主存儲(chǔ)器內(nèi)的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)以及為持久存儲(chǔ)器內(nèi)的第一存儲(chǔ)塊賦予一個(gè)分配狀態(tài);通過在持久存儲(chǔ)器內(nèi)為第二存儲(chǔ)塊賦予一個(gè)分配狀態(tài)而釋放多塊中的第二存儲(chǔ)塊;為第二存儲(chǔ)塊更新盤上的指針域;及在主存儲(chǔ)器內(nèi)修改至少一個(gè)數(shù)據(jù)結(jié)構(gòu)。26.權(quán)利要求25中所述方法,還包括以下步驟使用各首部?jī)?nèi)的指針域來保持持久存儲(chǔ)器內(nèi)的塊表;及在主存儲(chǔ)器內(nèi)保持至少一個(gè)指向塊表表首的當(dāng)今指針。27.權(quán)利要求26中所述方法,還包括以下步驟響應(yīng)于故障而檢查塊表以便移去已分配塊。28.權(quán)利要求27中所述方法,還包括當(dāng)找到塊表上的空塊時(shí)結(jié)束檢查步驟的步驟。29.權(quán)利要求26中所述方法,其中主存儲(chǔ)器內(nèi)至少一個(gè)數(shù)據(jù)結(jié)構(gòu)包括對(duì)應(yīng)于持久存儲(chǔ)器內(nèi)塊表的至少一個(gè)空塊表。30.權(quán)利要求26中所述方法,還包括以下步驟周期地將持久存儲(chǔ)器內(nèi)至少一個(gè)表首更新為對(duì)應(yīng)于來自主存儲(chǔ)器內(nèi)至少一個(gè)當(dāng)今指針的塊表。31.權(quán)利要求30中所述方法,其中該塊表包括多個(gè)表和連續(xù)地保持于持久存儲(chǔ)器內(nèi)的多個(gè)首部,及還包括在單個(gè)寫塊操作中更新這些表首的步驟。32.權(quán)利要求25中所述方法,其中更新指針域的步驟包括將指針域中的指針設(shè)置為指向主存儲(chǔ)器內(nèi)空塊的至少一個(gè)表L的表首的步驟,以及釋放步驟還包括將第二存儲(chǔ)塊加至主存儲(chǔ)器內(nèi)L的表首的步驟。33.權(quán)利要求25中所述方法,其中使用單個(gè)寫塊操作將第二存儲(chǔ)塊的首部更新。34.權(quán)利要求25中所述方法,還包括根據(jù)持久存儲(chǔ)器內(nèi)的多個(gè)首部將系統(tǒng)重新啟動(dòng)后確定主存儲(chǔ)器內(nèi)的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)的步驟。35.權(quán)利要求34中所述方法,其中在系統(tǒng)重新啟動(dòng)后確定主存儲(chǔ)器內(nèi)該至少一個(gè)數(shù)據(jù)結(jié)構(gòu)的步驟包括訪問盤操作,其中單個(gè)訪問盤操作讀入多個(gè)字節(jié)。36.權(quán)利要求25中所述方法,還包括以下步驟在系統(tǒng)關(guān)機(jī)之前自主存儲(chǔ)器的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)中輸出信息至持久存儲(chǔ)器中;及在系統(tǒng)根據(jù)輸出的信息重新啟動(dòng)之后確定主存儲(chǔ)器中的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)。37.權(quán)利要求25中所述方法,還包括在持久存儲(chǔ)器的連續(xù)區(qū)內(nèi)存儲(chǔ)多個(gè)首部的步驟。38.權(quán)利要求25中所述方法,其中第一存儲(chǔ)塊和第二存儲(chǔ)塊包括相同塊。39.一種可由機(jī)器讀取的程序存儲(chǔ)設(shè)備,其中明確地實(shí)施可由機(jī)器執(zhí)行以便完成方法步驟來管理包括主存儲(chǔ)器和至少一個(gè)盤存儲(chǔ)設(shè)備在內(nèi)的存儲(chǔ)系統(tǒng)中持久存儲(chǔ)器的程序指令,該方法包括以下步驟在持久存儲(chǔ)器中為多個(gè)塊保持首部,其中每塊的首部包括該塊的塊尺寸、分配狀態(tài)和一個(gè)指針;在主存儲(chǔ)器內(nèi)保持至少一個(gè)數(shù)據(jù)結(jié)構(gòu),用于分配和釋放至持久存儲(chǔ)器;通過以下步驟分配第一存儲(chǔ)塊通過在主存儲(chǔ)器內(nèi)使用該至少一個(gè)數(shù)據(jù)結(jié)構(gòu)來標(biāo)識(shí)第一存儲(chǔ)塊;修改主存儲(chǔ)器內(nèi)的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)及為持久存儲(chǔ)器內(nèi)的第一存儲(chǔ)塊賦予分配狀態(tài);通過在持久存儲(chǔ)器內(nèi)為第二存儲(chǔ)塊賦予一個(gè)分配狀態(tài)而釋放多塊中的第二存儲(chǔ)塊;為第二存儲(chǔ)塊更新盤上指針域;及修改主存儲(chǔ)器內(nèi)至少一個(gè)數(shù)據(jù)結(jié)構(gòu)。40.權(quán)利要求39中所述程序存儲(chǔ)設(shè)備,還包括以下步驟使用各首部?jī)?nèi)的指針域來保持持久存儲(chǔ)器內(nèi)的塊表;及在主存儲(chǔ)器內(nèi)保持至少一個(gè)指向塊表表首的當(dāng)今指針。41.權(quán)利要求40中所述程序存儲(chǔ)設(shè)備,還包括響應(yīng)于故障而檢查塊表以便移去已分配塊。42.權(quán)利要求41中所述程序存儲(chǔ)設(shè)備,還包括當(dāng)找到塊表上的空塊時(shí)結(jié)束檢查步驟的步驟。43.權(quán)利要求40中所述程序存儲(chǔ)設(shè)備,其中主存儲(chǔ)器內(nèi)至少一個(gè)數(shù)據(jù)結(jié)構(gòu)包括對(duì)應(yīng)于持久存儲(chǔ)器內(nèi)塊表的至少一個(gè)空塊表。44.權(quán)利要求40中所述程序存儲(chǔ)設(shè)備,還包括以下步驟周期地將持久存儲(chǔ)器內(nèi)至少一個(gè)表首更新為對(duì)應(yīng)于來自主存儲(chǔ)器內(nèi)至少一個(gè)當(dāng)今指針的塊表。45.權(quán)利要求44中所述程序存儲(chǔ)設(shè)備,其中該塊表包括多個(gè)表和連續(xù)地保持于持久存儲(chǔ)器內(nèi)的多個(gè)首部,及還包括在單個(gè)寫塊操作中更新這些表首的步驟。46.權(quán)利要求39中所述程序存儲(chǔ)設(shè)備,其中更新指針域的步驟包括將指針域中的指針設(shè)置為指向主存儲(chǔ)器內(nèi)空塊的至少一個(gè)表L的表首的步驟,以及釋放步驟還包括將第二存儲(chǔ)塊加至主存儲(chǔ)器內(nèi)L的表首的步驟。47.權(quán)利要求39中所述程序存儲(chǔ)設(shè)備,其中使用單個(gè)寫塊操作將第二存儲(chǔ)塊的首部更新。48.權(quán)利要求39中所述程序存儲(chǔ)設(shè)備,還包括根據(jù)持久存儲(chǔ)器內(nèi)的多個(gè)首部將系統(tǒng)重新啟動(dòng)后確定主存儲(chǔ)器內(nèi)的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)的步驟。49.權(quán)利要求48中所述程序存儲(chǔ)設(shè)備,其中在系統(tǒng)重新啟動(dòng)后確定主存儲(chǔ)器內(nèi)該至少一個(gè)數(shù)據(jù)結(jié)構(gòu)的步驟包括訪問盤操作,其中單個(gè)訪問盤操作讀入多個(gè)字節(jié)。50.權(quán)利要求39中所述程序存儲(chǔ)設(shè)備,還包括以下步驟在系統(tǒng)關(guān)機(jī)之前自主存儲(chǔ)器的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)中輸出信息至持久存儲(chǔ)器中;及在根據(jù)輸出的信息重新啟動(dòng)系統(tǒng)之后確定主存儲(chǔ)器中的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)。51.權(quán)利要求39中所述程序存儲(chǔ)設(shè)備,還包括在持久存儲(chǔ)器的連續(xù)區(qū)內(nèi)存儲(chǔ)多個(gè)首部的步驟。52.權(quán)利要求39中所述程序存儲(chǔ)設(shè)備,其中第一存儲(chǔ)塊和第二存儲(chǔ)塊包括相同塊。53.一種用于管理持久存儲(chǔ)系統(tǒng)中存儲(chǔ)器的方法,包括以下步驟在主存儲(chǔ)器內(nèi)保持至少一個(gè)數(shù)據(jù)結(jié)構(gòu),用于分配和釋放持久存儲(chǔ)器;完全自至少一個(gè)數(shù)據(jù)結(jié)構(gòu)中分配和釋放持久存儲(chǔ)器而不訪問或?qū)懼脸志么鎯?chǔ)器;周期地對(duì)存儲(chǔ)分配信息進(jìn)行檢查點(diǎn)操作并且送至持久存儲(chǔ)器;及在根據(jù)檢查點(diǎn)操作的信息重新啟動(dòng)之后在主存儲(chǔ)器內(nèi)確定至少一個(gè)數(shù)據(jù)結(jié)構(gòu)。54.一種可由機(jī)器讀取的程序存儲(chǔ)設(shè)備,其中明確地實(shí)施可由機(jī)器執(zhí)行以便完成如權(quán)利要求53中所述方法步驟的程序指令。55.一種用于管理持久存儲(chǔ)系統(tǒng)中存儲(chǔ)器的方法,包括以下步驟在主存儲(chǔ)器內(nèi)保持至少一個(gè)數(shù)據(jù)結(jié)構(gòu),用于分配和釋放持久存儲(chǔ)器;完全自至少一個(gè)數(shù)據(jù)結(jié)構(gòu)中分配和釋放持久存儲(chǔ)器而不訪問或?qū)懼脸志么鎯?chǔ)器;在系統(tǒng)關(guān)機(jī)之前自主存儲(chǔ)器的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)中輸出信息至持久存儲(chǔ)器中;及在系統(tǒng)根據(jù)所述輸出信息重新啟動(dòng)之后確定主存儲(chǔ)器中的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)。56.一種可由機(jī)器讀取的程序存儲(chǔ)設(shè)備,其中明確地實(shí)施可由機(jī)器執(zhí)行以便完成如權(quán)利要求55中所述方法步驟的程序指令。全文摘要一種根據(jù)本發(fā)明的用于管理包括主存儲(chǔ)器和至少一個(gè)盤存儲(chǔ)設(shè)備在內(nèi)的存儲(chǔ)系統(tǒng)中持久存儲(chǔ)器的方法包括以下步驟:在持久存儲(chǔ)器中為多個(gè)塊保持首部,其中每塊的首部包括該塊的塊尺寸和分配狀態(tài),以及在主存儲(chǔ)器內(nèi)保持至少一個(gè)數(shù)據(jù)結(jié)構(gòu),用于分配和釋放持久存儲(chǔ)器。使用以下步驟分配存儲(chǔ)塊:通過在主存儲(chǔ)器內(nèi)采用至少一個(gè)數(shù)據(jù)結(jié)構(gòu)來標(biāo)識(shí)存儲(chǔ)塊,修改主存儲(chǔ)器內(nèi)的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)以及為盤上的塊賦予一個(gè)分配狀態(tài)。在盤上為該塊賦予一個(gè)分配狀態(tài)及在主存儲(chǔ)器內(nèi)修改至少一個(gè)數(shù)據(jù)結(jié)構(gòu)來釋放存儲(chǔ)塊。文檔編號(hào)G06F12/02GK1309353SQ01104510公開日2001年8月22日申請(qǐng)日期2001年2月14日優(yōu)先權(quán)日2000年2月15日發(fā)明者詹姆斯·R.H.·查林杰,阿魯·K·利恩格爾申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司