問;然而,后續(xù)塊可能并不是實際上具有與可以計算為屬于其它文件的地址相比較的唯一地址。稍后將在圖4c中將其詳細地描述為當兩個文件所包含的塊在外部觀察者看起來是重疊塊時結合了稀疏編址的重新編址解決方案。
[0048]在相對于圖1的示例性實施方式中,非易失性存儲設備160可發(fā)送已破碎文件的存儲器已被重新編址的響應330,但是響應被發(fā)送回去不是必要的。例如,非易失性存儲設備160可僅接收用以對已破碎文件進行重新編址的命令,并且如果非易失性尺寸設備160正在正常地操作,則操作系統(tǒng)130、文件系統(tǒng)140、設備驅動器150或碎片整理應用120將假設其已成功地完成。
[0049]例如,參考圖1,用以對存儲器重新編址的命令可來自文件系統(tǒng)140、設備驅動器150或非易失性存儲設備160。在實施例中,可在計算設備110中存在另一操作系統(tǒng)部件,其向非易失性存儲設備160提供命令。在另一實施例中,在操作系統(tǒng)130與非易失性存儲器之間可存在單獨部件,其向非易失性存儲設備160提供命令。碎片整理應用120可存在于計算設備110、操作系統(tǒng)130、文件系統(tǒng)140和設備驅動器150中的一個或多個中。碎片整理從哪里發(fā)起的選擇留給系統(tǒng)的設計者,其可基于各種供應商如何實現重新編址解決方案的質量和成本來選擇要部署哪個應用模型。
[0050]在相對于圖1的示例性實施方式中,用以對存儲器重新編址的命令被非易失性存儲設備160接收到。然而,命令可能不指定需要對哪些已破碎文件重新編址。例如,該命令可以是到非易失性存儲設備160的碎片整理請求的一部分。在這種情況下,非易失性存儲設備160可基于文件的破碎程度來確定要重新編址的最可能候選文件,并選擇該文件進行重新編址。然而,要重新編址的已破碎文件不需要是最破碎的文件。例如,非易失性存儲設備160可基于文件被操作系統(tǒng)訪問的頻率、文件的物理存儲器地址的位置或任何其它準則來確定最可能候選文件??梢杂晌募到y(tǒng)140或者按設備驅動器150或操作系統(tǒng)130或者甚至碎片整理應用120所跟蹤的來為非易失性存儲設備160提供具有碎片的所有文件的列表。
[0051]非易失性存儲設備160可使用本文公開的任何方法來執(zhí)行重新編址,但不限于那些方法??蓤?zhí)行對在非易失性存儲設備上的用于已破碎文件的存儲器重新編址的任何方法。
[0052]示例6—示例性虛擬映射
圖4a和4b是示出了對物理存儲器地址重新編址的示例的圖。在本示例中,已破碎文件的文件碎片跨多個非相鄰物理地址散布。例如,假設已破碎文件位于存儲器地址1、3、4和7處。一旦存儲設備接收到用以將已破碎文件重新編址到相鄰物理存儲器地址的命令,則存儲設備確定將在哪些物理存儲器地址處對文件進行重新編址。在本示例中,從存儲器地址I處開始對文件重新編址,但是可替代地從任何物理存儲器地址處開始對文件重新編址。
[0053]在本示例中,將舊的存儲器地址3重新編址到新的存儲器地址2。然而,舊的存儲器地址2可能包含其它數據。因此,存儲器地址被交換,即舊的存儲器地址3被重新編址到新的存儲器地址2,并且舊的存儲器地址2被重新編址到新的存儲器地址3。針對已破碎文件的所有其余存儲器地址重復此。最終結果是舊的存儲器地址3、4和7被重新編址到新的存儲器地址2、3和4,從而允許現在在相鄰物理存儲器地址處對已破碎文件的存儲器進行尋址,并且舊的存儲器地址2被重新編址到新的存儲器地址7。在其中由文件系統(tǒng)140管理的簇或扇區(qū)尺寸與存儲設備160中的塊尺寸是緊密的1:1關系的情形中,本實施方式與圖4a所示的非常類似。應認識到的是,對于在實際上并不拷貝數據的情況下對存儲位置重新編址以便與實踐中已存的碎片整理解決方案相比以較少的數據拷貝和寫入來執(zhí)行碎片整理的基本原理而言,文件系統(tǒng)140所管理的扇區(qū)尺寸和簇尺寸不必要是1:1關系。
[0054]然而,不一定需要交換物理存儲器地址,而是替代地可以將其重新編址到未使用的存儲器地址。例如,在圖4b中,可將舊的存儲器地址2重新編址到可用存儲器地址100(例如,空的可用存儲器地址)。已破碎文件的其它存儲器地址然后能夠被重新編址到相鄰物理地址。
[0055]圖4c描述了保持用于文件的原始唯一起始塊地址的重新編址機制的替換實施例。在本實施例中,重新編址使得在起始地址之后尋址的所有后續(xù)存儲塊連續(xù),使得其在文件系統(tǒng)140或操作系統(tǒng)130看起來是順序訪問;然而,第二和后續(xù)塊可能實際上并不具有與可以計算為屬于其它文件的地址相比較的唯一地址(例如,第二和后續(xù)塊可能具有可共享的物理存儲器地址)。由于僅使用唯一起始地址和特定塊長度來檢索文件,并且由于其始終是順序訪問,所以在初始唯一塊地址之后的內容流可以被明確地尋址。例如在圖4c中,頂部的塊集合示出了重新編址之前的狀態(tài);并且示出了文件“a.txt”,其在塊I處開始,并且包含塊3和5處的附加碎片達3個塊的總長度(分別地如碎片a.txt^a.txt2、a.txt3所示)。該系統(tǒng)還可具有文件“b.txt",其在塊2處開始且具有作為碎片存儲在塊4和6中的內容(分別地示為b.txtn b.txt2、b.txt3)0用于文件“a.txt”的重新編址命令可以由文件系統(tǒng)140發(fā)送并命令對于塊1、3、5處的文件的重新編址成為順序的,即在塊I處開始達到3個塊的長度。此重新編址將使塊I處的內容不改變,但是然后將塊3重新編址為塊2(僅當其在塊I讀取之后時)并將塊5重新編址為塊3 (僅當其在塊I和2的讀取之后時)。因此,在重新編址之后,文件“a.txt”在被從外部源順序地訪問時被存儲在塊1、2和3中(如圖4c的下半部上所示)。如果文件系統(tǒng)140將嘗試針對單長度塊而讀取塊2或3時,非易失性存儲設備160將報告錯誤,因為其知道系統(tǒng)必須僅通過讀取塊I和其后可選地讀取塊2和3作為單個順序訪問的一部分來檢索文件。倘若使用在塊I處開始的具有3的長度的命令順序地尋址內容,內容被唯一地提供給文件系統(tǒng)40和存儲驅動器150。文件系統(tǒng)140還命令對在塊2處開始且包含塊4和6的文件“b.txt”重新編址,假設其將使用如圖4c中所示的類似機制變成塊2、3、4。諸如文件系統(tǒng)140之類的外部觀察者可計算到“a.txt”和“b.txt”兩者的起始地址和長度共享塊2和3中的內容,并且因此內容正在占用相同的存儲塊。然而,情況可能并非如此,因為非易失性存儲設備160理解由于對“a.txt”和“b.txt”的訪問始終是在唯一地址處開始的順序訪問,所以存儲部分將在其接收到在塊I處開始的3個塊長的訪問時輸送僅被映射到文件“a.txt”的唯一內容,并且其將在其接收到在塊2處開始的3個塊長的請求時僅檢索針對文件“b.txt”的內容。非易失性存儲設備160將不向任何其它文件提供塊地址I或2,并且在某些實施例中,文件系統(tǒng)140僅知道使用起始地址來訪問文件,而不仔細檢查重疊的文件和訪問塊。并且,在某些實施例中,文件系統(tǒng)140將不會接收到具有塊3、4、5或6的起始地址的起始存儲塊,因為這些塊實際上在被文件“a.txt”和“b.txt”使用。替換實施例可提供塊3、4、5或6的起始地址;然而,提供給文件系統(tǒng)140的總地址塊將不超過非易失性存儲設備160的存儲容量。此外,圖4c示出了對空閑塊7重新編址以提供3的可用起始塊地址。假設文件系統(tǒng)140將存儲新文件“c.txt”作為到地址3的I塊寫入,然后其將預期在其讀取在地址2處開始的3塊訪問時接收到文件“b.txt”內容,并且預期將在其發(fā)布在地址3處開始的單塊讀取時獲得“c.txt”內容。在某些實施例中,將僅對被以順序方式讀取的文件執(zhí)行此類重新編址。在某些實施例中,文件系統(tǒng)140可以設定屬性以不尋找以這種方式重新編址的這些種類的文件。
[0056]應認識到的是,圖4a_4c的示例全部示出了用于被文件系統(tǒng)140跟蹤的文件碎片(即,簇)的離散存儲單元與存儲塊(由非易失性存儲設備160提供的離散存儲單元,即,塊或扇區(qū))之間的1:1映射;然而,對于本文所描述的實施例而言,可以容易地顯示文件碎片占用存儲塊的子部分以及存儲在每個簇中的文件碎片跨多個可尋址存儲塊映射。也就是說,文件碎片(簇)和存儲塊(扇區(qū))比可以是1:1、2:1、1:2、1:16、16:1等。簡單地擴展了重新編址原理以確保在當需要移動部分頁面時在重新編址處理期間進行最少的數據拷貝的情況下為存儲提供唯一地址。并且,在重新編址之前和之后,由文件“a.txt”和“b.txt”消耗的存儲空間將保持恒定,并且消耗非易失性存儲設備160的6個塊。
[0057]在不移動非易失性存儲設備160中的存儲器的物位置的情況下執(zhí)行物理存儲器地址的重新編址(例如,如上文參考圖4a和4b所描述)。圖5a和5b是示出如何在不移動存儲器的物理位置的情況下執(zhí)行圖4a和4b中所描述的重新編址操作的圖。舉先前的示例,舊的存儲器地址1、3、4和7被重新編址到新的存儲器地址1、2、3和4。然而,存儲器設備上的已破碎文件的文件碎片的實際物理位置未被移動。參考本示例,圖5a描繪了重新編址之前的存儲器地址1、3、4和7。如圖5a中所描繪的,非易失性存儲設備160將對應于存儲器地址1、3、4和7的文件碎片存儲在