專(zhuān)利名稱(chēng):用于文件系統(tǒng)存儲(chǔ)設(shè)備的分層分配的制作方法
用于文件系統(tǒng)存儲(chǔ)設(shè)備的分層分配
背景技術(shù):
除了其他方面,文件系統(tǒng)負(fù)責(zé)管理存儲(chǔ)設(shè)備的空閑空間。為此,文件系統(tǒng)可以維持與存儲(chǔ)設(shè)備上的空間相對(duì)應(yīng)的全局線性位圖。位圖的每個(gè)比特可以對(duì)應(yīng)于存儲(chǔ)設(shè)備上的空間組塊(chunk)。如果比特被設(shè)置,則這可以指示相應(yīng)的空間組塊被使用。如果該比特沒(méi)有被設(shè)置,則這可以指示相應(yīng)的空間組塊沒(méi)有被使用。隨著存儲(chǔ)設(shè)備日益增大的大小,這個(gè)方案變得效率低下。在此請(qǐng)求保護(hù)的主題不限于解決諸如上述環(huán)境中的任何缺陷或僅操作在諸如上述環(huán)境中的實(shí)施例。相反,僅提供這個(gè)背景來(lái)闡明其中可以實(shí)踐在此描述的一些實(shí)施例的一種示例技術(shù)領(lǐng)域。
發(fā)明內(nèi)容
簡(jiǎn)略地,在此描述的主題的各方面涉及存儲(chǔ)空間分配(storage allocation)。在各方面,分層數(shù)據(jù)結(jié)構(gòu)用于跟蹤利用文件系統(tǒng)管理的存儲(chǔ)空間(storage)的分配數(shù)據(jù)。分層數(shù)據(jù)結(jié)構(gòu)可以具有多個(gè)級(jí)別(level),其中每個(gè)級(jí)別具有與不同的存儲(chǔ)空間的粒度有關(guān)的數(shù)據(jù)。分層數(shù)據(jù)結(jié)構(gòu)的各部分可以與分層數(shù)據(jù)結(jié)構(gòu)的其他部分無(wú)關(guān)地進(jìn)行鎖定。分層數(shù)據(jù)結(jié)構(gòu)可以指示存儲(chǔ)空間的一個(gè)或多個(gè)部分用于文件系統(tǒng)對(duì)象的獨(dú)家使用。在預(yù)期后續(xù)操作中可以在分配的空間中預(yù)留額外空間。分配請(qǐng)求器可以從與分層數(shù)據(jù)結(jié)構(gòu)的不同級(jí)別相關(guān)聯(lián)的區(qū)域中獲得存儲(chǔ)空間分配。提供這個(gè)發(fā)明內(nèi)容部分來(lái)簡(jiǎn)略地標(biāo)識(shí)下面在具體描述部分中進(jìn)一步描述的主題的一些方面。這個(gè)內(nèi)容部分既不打算標(biāo)識(shí)所請(qǐng)求保護(hù)的主題的關(guān)鍵特征或基本特征,也不打算用于限制所請(qǐng)求保護(hù)的主題的范圍。除非上下文另有明確指示,否則短語(yǔ)“在此描述的主題”指的是在具體描述部分中描述的主題。術(shù)語(yǔ)“方面”將被解讀為“至少一個(gè)方面”。標(biāo)識(shí)在具體描述部分中描述的主題的方面不打算標(biāo)識(shí)所請(qǐng)求保護(hù)的主題的關(guān)鍵特征或基本特征。
上述的方面以及在此描述的主題的其他方面通過(guò)示例來(lái)闡明而不在附圖中進(jìn)行限制,其中在附圖中相同的參考數(shù)字指示相似的元素,且其中
圖I是代表其中可以合并在此描述的主題的各方面的示例的通用計(jì)算環(huán)境的框圖2是顯示根據(jù)在此描述的主題的方面的部分分配數(shù)據(jù)結(jié)構(gòu)的框圖3是通常代表可以用于根據(jù)在此描述的主題的方面跟蹤區(qū)域的分配數(shù)據(jù)的示例數(shù)據(jù)結(jié)構(gòu)的框圖4是代表根據(jù)在此描述的主題的方面配置的系統(tǒng)的框圖;和圖5-6是通常代表可以根據(jù)在此描述的主題的方面發(fā)生的動(dòng)作的流程圖。
具體實(shí)施方式
如在此使用的,術(shù)語(yǔ)“包括”及其變體將被解讀為意味著“包括但不限于”的開(kāi)放式術(shù)語(yǔ)。除非上下文另有明確指示,否則術(shù)語(yǔ)“或”將被解讀為“和/或”。術(shù)語(yǔ)“基于”將被解讀為“至少部分基于”。術(shù)語(yǔ)“一個(gè)實(shí)施例”和“實(shí)施例”將被解讀為“至少一個(gè)實(shí)施例”。術(shù)語(yǔ)“另一實(shí)施例”將被解讀為“至少一個(gè)其他實(shí)施例”。在下文可以包括顯式或隱式的其他定義。示例操作環(huán)塏
圖I顯示其上可以實(shí)現(xiàn)在此描述的主題的各方面的合適的計(jì)算系統(tǒng)環(huán)境100的示例。計(jì)算系統(tǒng)環(huán)境100只是合適的計(jì)算環(huán)境的一個(gè)示例,并且不打算提議關(guān)于在此描述的主題的各方面的使用或功能的范圍的任何限制。計(jì)算環(huán)境100也不應(yīng)被解釋為具有與示例操作環(huán)境100中示出的組件之中的任何一個(gè)或其組合有關(guān)的任何依賴(lài)或要求。在此描述的主題的各方面可利用眾多其他的通用或?qū)S糜?jì)算系統(tǒng)環(huán)境或配置來(lái)操作??赡苓m合于與在此描述的主題的各方面一起使用的眾所周知的計(jì)算系統(tǒng)、環(huán)境或配置的示例包括個(gè)人計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、手持式或膝上型設(shè)備、多處理器系統(tǒng)、基于微控制器的系統(tǒng)、機(jī)頂盒、可編程消費(fèi)類(lèi)電子設(shè)備、網(wǎng)絡(luò)PC、小型計(jì)算機(jī)、大型計(jì)算機(jī)、個(gè)人數(shù)字助理(PDA)、游戲設(shè)備、打印機(jī)、包括機(jī)頂盒的電器、媒體中心或其他電器、汽車(chē)嵌入式或附著式計(jì)算設(shè)備、其他移動(dòng)設(shè)備、包括任何上述系統(tǒng)或設(shè)備的分布式計(jì)算環(huán)境等等。在此描述的主題的各方面可以在計(jì)算機(jī)執(zhí)行的計(jì)算機(jī)可執(zhí)行指令諸如程序模塊的通用上下文中進(jìn)行描述。通常,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類(lèi)型的例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等等。在此描述的主題的各方面也可以在其中利用通過(guò)通信網(wǎng)絡(luò)鏈接的遠(yuǎn)程處理設(shè)備執(zhí)行任務(wù)的分布式計(jì)算環(huán)境中進(jìn)行實(shí)踐。在分布式計(jì)算環(huán)境中,程序模塊可能位于包括記憶存儲(chǔ)設(shè)備的本地和遠(yuǎn)程計(jì)算機(jī)存儲(chǔ)媒體二者中。參考圖1,用于實(shí)現(xiàn)在此描述的主題的各方面的示例系統(tǒng)包括采用計(jì)算機(jī)110的形式的通用計(jì)算設(shè)備。計(jì)算機(jī)可以包括能夠執(zhí)行指令的任何電子設(shè)備。計(jì)算機(jī)110的組件可以包括處理單元120、系統(tǒng)存儲(chǔ)器130以及將包括系統(tǒng)存儲(chǔ)器的各種系統(tǒng)組件耦合至處理單元120的系統(tǒng)總線121。系統(tǒng)總線121可以是包括存儲(chǔ)器總線或存儲(chǔ)控制器、外設(shè)總線以及使用各種總線架構(gòu)中的任何一種的本地總線的若干種類(lèi)型的總線結(jié)構(gòu)中的任何一種。通過(guò)示例而非限制,這樣的架構(gòu)包括Industry Standard Architecture (工業(yè)標(biāo)準(zhǔn)架構(gòu))(ISA)總線、Micro Channel Architecture (微通道架構(gòu))(MCA)總線、Enhanced (增強(qiáng)型)ISA (EISA)總線、Video Electronics Standard Association (視頻電子學(xué)標(biāo)準(zhǔn)協(xié)會(huì))(VESA)本地總線、也被稱(chēng)為 Mezzanine 總線的 Peripheral Component Interconnect (外設(shè)組件互連)(PCI)總線、Peripheral Component Interconnect Extended (外設(shè)組件互連擴(kuò)展)(PCI-X)總線、Advanced Graphics Port (高級(jí)圖形端口) (AGP)以及 PCI express(PCIe)。計(jì)算機(jī)110 —般包括各種計(jì)算機(jī)可讀媒體。計(jì)算機(jī)可讀媒體能夠是任何的可用媒體,其能夠被計(jì)算機(jī)110訪問(wèn)并且包括易失性和非易失性媒體以及可移除和不可移除媒體二者。通過(guò)示例而非限制,計(jì)算機(jī)可讀媒體可以包括計(jì)算機(jī)存儲(chǔ)媒體和通信媒體。計(jì)算機(jī)存儲(chǔ)媒體包括以任何的用于存儲(chǔ)諸如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù)之類(lèi)的信息的方法或技術(shù)來(lái)實(shí)現(xiàn)的易失性和非易失性以及可移除和不可移除媒體二者。計(jì)算機(jī)存儲(chǔ)媒體包括RAM、R0M、EEPR0M、閃存或其他存儲(chǔ)技術(shù)、CD-ROM、數(shù)字多用途盤(pán)(DVD)或其他光盤(pán)存儲(chǔ)設(shè)備、磁帶盒、磁帶、磁盤(pán)存儲(chǔ)設(shè)備或其他磁存儲(chǔ)設(shè)備或任何其他的能夠用于存儲(chǔ)期望信息并且能夠被計(jì)算機(jī)11訪問(wèn)的介質(zhì)。通信媒體一般收錄(embody)計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或調(diào)制數(shù)據(jù)信號(hào)諸如載波或其他傳輸機(jī)制中的其他數(shù)據(jù),并且包括任何的信息傳遞媒體。術(shù)語(yǔ)“調(diào)制數(shù)據(jù)信號(hào)”意味著其一個(gè)或多個(gè)特性采用諸如編碼信號(hào)中的信息的方式來(lái)設(shè)置或改變的信號(hào)。 通過(guò)示例而非限制,通信媒體包括有線媒體諸如有線網(wǎng)絡(luò)或直接連線連接以及無(wú)線媒體諸如聲學(xué)、RF、紅外和其他無(wú)線媒體。上述的任何的組合也應(yīng)該被包括在計(jì)算機(jī)可讀媒體的范圍內(nèi)。系統(tǒng)存儲(chǔ)器130包括采用易失性和/或非易失性存儲(chǔ)器諸如只讀存儲(chǔ)器(R0M)131和隨機(jī)存取存儲(chǔ)器(RAM) 132的形式的計(jì)算機(jī)存儲(chǔ)媒體。一般在ROM 131中存儲(chǔ)基本輸入/輸出系統(tǒng)133 (BIOS),其包含有助于諸如在啟動(dòng)期間在計(jì)算機(jī)110內(nèi)的各元素之間傳遞信息的基本例程。RAM 132—般包含由處理單元120立即可訪問(wèn)和/或目前對(duì)其操作的數(shù)據(jù)和/或程序模塊。通過(guò)示例而非限制,圖I顯示操作系統(tǒng)134、應(yīng)用程序135、其他程序模塊136和程序數(shù)據(jù)137。計(jì)算機(jī)110也可以包括其他的可移除/不可移除、易失性/非易失性計(jì)算機(jī)存儲(chǔ)媒體。僅通過(guò)示例,圖I顯示從中讀取或?qū)懭氩豢梢瞥姆且资源琶襟w的硬盤(pán)驅(qū)動(dòng)器141、從中讀取或?qū)懭肟梢瞥姆且资源疟P(pán)152的磁盤(pán)驅(qū)動(dòng)器151以及從中讀取或?qū)懭肟梢瞥姆且资怨獗P(pán)156諸如CD-ROM或其他光學(xué)媒體的光盤(pán)驅(qū)動(dòng)器155。能夠在示例操作環(huán)境中使用的其他的可移除/不可移除的易失性/非易失性計(jì)算機(jī)存儲(chǔ)媒體包括磁帶盒、閃存卡、數(shù)字多用途盤(pán)、其他光盤(pán)、數(shù)字錄像帶、固態(tài)RAM、固態(tài)ROM等等。硬盤(pán)驅(qū)動(dòng)器141 一般通過(guò)諸如接口 140之類(lèi)的不可移除的存儲(chǔ)器接口連接到系統(tǒng)總線121,而磁盤(pán)驅(qū)動(dòng)器151和光盤(pán)驅(qū)動(dòng)器155—般利用諸如接口 150之類(lèi)的可移除的存儲(chǔ)器接口連接到系統(tǒng)總線121。上述的且在圖I中顯示的驅(qū)動(dòng)器及其相關(guān)聯(lián)的計(jì)算機(jī)存儲(chǔ)媒體為計(jì)算機(jī)110提供計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊以及其他數(shù)據(jù)的存儲(chǔ)。在圖I中,例如,硬盤(pán)驅(qū)動(dòng)器141被顯示為存儲(chǔ)操作系統(tǒng)144、應(yīng)用程序145、其他程序模塊146和程序數(shù)據(jù)147。注意這些組件能夠與操作系統(tǒng)134、應(yīng)用程序135、其他程序模塊136以及程序數(shù)據(jù)137相同或不同。在此對(duì)于操作系統(tǒng)144、應(yīng)用程序145、其他程序模塊146以及程序數(shù)據(jù)147給予不同的編號(hào),以闡明在最低程度上它們是不同的拷貝。用戶(hù)可以通過(guò)輸入設(shè)備諸如鍵盤(pán)162以及通常被稱(chēng)為鼠標(biāo)、軌跡球或觸摸板的指示設(shè)備161將命令和信息輸入計(jì)算機(jī)110。其他輸入設(shè)備(未顯示)可以包括麥克風(fēng)、搖桿、游戲手柄、衛(wèi)星天線、掃描儀、觸敏屏幕、書(shū)寫(xiě)板等等。這些和其他輸入設(shè)備通常通過(guò)耦合到系統(tǒng)總線的用戶(hù)輸入接口 160連接到處理單元120,但是可以利用其他接口和總線結(jié)構(gòu)諸如并行端口、游戲端口或通用串行總線(USB )來(lái)連接。監(jiān)視器191或其他類(lèi)型的顯示設(shè)備也經(jīng)由接口諸如視頻接口 190連接到系統(tǒng)總線121。除了監(jiān)視器之外,計(jì)算機(jī)還可以包括其他的外設(shè)輸出設(shè)備,諸如揚(yáng)聲器197和打印機(jī)196,這些外設(shè)輸出設(shè)備可以通過(guò)輸出外設(shè)接口 195來(lái)連接。計(jì)算機(jī)110可以操作在使用至一個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī)諸如遠(yuǎn)程計(jì)算機(jī)180的邏輯連接的聯(lián)網(wǎng)環(huán)境中。遠(yuǎn)程計(jì)算機(jī)180可以是個(gè)人計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對(duì)等設(shè)備或其他共同網(wǎng)絡(luò)節(jié)點(diǎn)并且一般包括上面相對(duì)于計(jì)算機(jī)110描述的元素中的許多或所有元素,盡管在圖I中僅示出了記憶存儲(chǔ)設(shè)備181。圖I所描繪的邏輯連接包括局域網(wǎng)(LAN)171和廣域網(wǎng)(WAN)173,但是也可以包括其他網(wǎng)絡(luò)。這樣的聯(lián)網(wǎng)環(huán)境在辦公室、企業(yè)范圍內(nèi)的計(jì)算機(jī)網(wǎng)絡(luò)、內(nèi)部網(wǎng)和因特網(wǎng)中是司空見(jiàn)慣的。當(dāng)在LAN聯(lián)網(wǎng)環(huán)境中使用時(shí),計(jì)算機(jī)110通過(guò)網(wǎng)絡(luò)接口或適配器170連接到LAN171。當(dāng)在WAN聯(lián)網(wǎng)環(huán)境中使用時(shí),計(jì)算機(jī)110可以包括用于通過(guò)諸如因特網(wǎng)之類(lèi)的WAN 173建立通信的調(diào)制解調(diào)器172或其他裝置。可以是內(nèi)部或外部的調(diào)制解調(diào)器172可以經(jīng)由用戶(hù)輸入接口 160或其他適當(dāng)機(jī)制而連接到系統(tǒng)總線121。在聯(lián)網(wǎng)環(huán)境中,相對(duì)于計(jì)算機(jī)110描繪的程序模塊或其部分可以存儲(chǔ)在遠(yuǎn)程記憶存儲(chǔ)設(shè)備中。通過(guò)示例而非限制,圖I將遠(yuǎn)程應(yīng)用程序185顯示為駐留在存儲(chǔ)設(shè)備181上。將意識(shí)到所顯示的網(wǎng)絡(luò)連接是示例性的,并且可以使用在計(jì)算機(jī)之間建立通信鏈路的其他裝置。存儲(chǔ)管理
如前所述,將全局線性位圖用于在文件系統(tǒng)上分配存儲(chǔ)空間可能變得效率低下。圖2是顯示根據(jù)在此描述的主題的各方面的部分分配數(shù)據(jù)結(jié)構(gòu)的框圖。分配數(shù)據(jù)結(jié)構(gòu)205是分層的,并且可以包括任何數(shù)量的級(jí)別。如所示的,分配數(shù)據(jù)結(jié)構(gòu)包括三個(gè)級(jí)別210-212。級(jí)別210可以被假設(shè)為高于級(jí)別211,而級(jí)別211可以被假設(shè)為高于級(jí)別212。每一個(gè)級(jí)別可以包括指示用于不同的存儲(chǔ)空間的粒度(例如,大小)的分配數(shù)據(jù)的一個(gè)或多個(gè)節(jié)點(diǎn)。例如,級(jí)別210可以包括依照吉字節(jié)來(lái)指示分配數(shù)據(jù)的一個(gè)或多個(gè)節(jié)點(diǎn),級(jí)別211可以包括依照兆字節(jié)來(lái)指示分配數(shù)據(jù)的一個(gè)或多個(gè)節(jié)點(diǎn),而級(jí)別212可以包括依照千字節(jié)來(lái)指示分配數(shù)據(jù)的一個(gè)或多個(gè)節(jié)點(diǎn)。注意吉字節(jié)、兆字節(jié)和千字節(jié)的使用僅是示例性的,并且不打算將在此描述的主題的各方面僅限于這些大小。類(lèi)似地,即使顯示三個(gè)級(jí)別,但是在其他的實(shí)施例中可以具有兩個(gè)、四個(gè)或更多的級(jí)別。每一個(gè)節(jié)點(diǎn)可以根據(jù)位圖、陣列、范圍映射(range map)或具有代表節(jié)點(diǎn)的分配狀態(tài)的數(shù)據(jù)的其他數(shù)據(jù)結(jié)構(gòu)來(lái)指示分配數(shù)據(jù)。例如,如果存儲(chǔ)空間的大小是1000吉字節(jié),節(jié)點(diǎn)215可以包括包含1000比特的位圖,其中一個(gè)比特用于每個(gè)吉字節(jié)的存儲(chǔ)空間。類(lèi)似地,如果利用級(jí)別211上的節(jié)點(diǎn)代表的區(qū)域的大小是I吉字節(jié)并且級(jí)別211上的分配單元的大小是I兆字節(jié),那么節(jié)點(diǎn)216可以包括1024個(gè)比特來(lái)代表1024兆字節(jié)的存儲(chǔ)空間。類(lèi)似地,如果利用級(jí)別212上的節(jié)點(diǎn)代表的區(qū)域的大小是I兆字節(jié)并且級(jí)別212上的分配單元的大小是I千字節(jié),那么節(jié)點(diǎn)217和218各自可以包括1024比特來(lái)代表1024千字節(jié)的存儲(chǔ)空間。圖3是一般代表可以用于根據(jù)在此描述的主題的各方面跟蹤區(qū)域的分配數(shù)據(jù)的示例數(shù)據(jù)結(jié)構(gòu)的框圖。數(shù)據(jù)結(jié)構(gòu)可以對(duì)應(yīng)于圖2的節(jié)點(diǎn)。數(shù)據(jù)結(jié)構(gòu)305包括標(biāo)題310和位圖315。例如,標(biāo)題310可以包括以下的一個(gè)或多個(gè)1)指示與數(shù)據(jù)結(jié)構(gòu)相對(duì)應(yīng)的區(qū)域駐留在物理存儲(chǔ)空間上的位置的值;2)區(qū)域的大??;3)位圖315中的比特的數(shù)量;4)利用每一個(gè)比特代表的字節(jié)的數(shù)量或其他存儲(chǔ)測(cè)量(也被稱(chēng)為分配單元的分配大小);5)位圖315中的空閑比特的數(shù)量,其指示用于數(shù)據(jù)結(jié)構(gòu)的未分配空間;6)位圖315中的比特的最大連續(xù)數(shù)量,其指示用于數(shù)據(jù)結(jié)構(gòu)的未分配空間的最大連續(xù)大小;7)與區(qū)域是否位于卷(volume)的一個(gè)或多個(gè)快照(snapshot)內(nèi)以及(一個(gè)或多個(gè))快照的(一個(gè)或多個(gè))標(biāo)識(shí)符有關(guān)的數(shù)據(jù);8)其他數(shù)據(jù),等等。返回到圖2,從一個(gè)級(jí)別到另一個(gè)級(jí)別的“扇出(fan out)”在各級(jí)別之間可能是相同的或不同的。扇出指的是對(duì)于高級(jí)別的單個(gè)分配單元而言較低級(jí)別節(jié)點(diǎn)具有的分配單元的數(shù)量。例如,高級(jí)別節(jié)點(diǎn)可以利用I比特代表吉字節(jié),而正好在高級(jí)別節(jié)點(diǎn)下方的節(jié)點(diǎn)可以將吉字節(jié)分成N個(gè)區(qū)域并且利用N個(gè)比特來(lái)代表這N個(gè)區(qū)域。在實(shí)現(xiàn)中,利用高級(jí)別上的節(jié)點(diǎn)代表的區(qū)域的大小可以被正好位于高級(jí)別節(jié)點(diǎn)下方的節(jié)點(diǎn)所代表的區(qū)域的大小整除(例如,沒(méi)有余數(shù))。在一種實(shí)現(xiàn)中,存儲(chǔ)空間的分配可以利用單片(monolithic)分配器來(lái)執(zhí)行,其中單片分配器使用諸如分配數(shù)據(jù)結(jié)構(gòu)205之類(lèi)的數(shù)據(jù)結(jié)構(gòu)來(lái)確定存儲(chǔ)設(shè)備的空閑部分(有時(shí)被稱(chēng)為未分配部分)并由此分配(這些空閑部分)。在另一種實(shí)現(xiàn)中,存儲(chǔ)空間的分配可以利用一組分層對(duì)象(有時(shí)被稱(chēng)為分配器)來(lái)執(zhí)行,其中這些對(duì)象可以負(fù)責(zé)分配存儲(chǔ)空間中的特定大小的分配單元。在這種實(shí)現(xiàn)中,分配器可以被指派來(lái)管理利用分配數(shù)據(jù)結(jié)構(gòu)的一個(gè)或多個(gè)節(jié)點(diǎn)代表的存儲(chǔ)空間。每一個(gè)分配器可以負(fù)責(zé)維持用于該分配器管理的存儲(chǔ)空間的分配數(shù)據(jù)。在這種實(shí)現(xiàn)中,分配數(shù)據(jù)結(jié)構(gòu)205可以利用分配器管理的數(shù)據(jù)結(jié)構(gòu)的集合(collection)來(lái)代表。分配器可以包括一個(gè)或多個(gè)分配存儲(chǔ)器以及解除分配存儲(chǔ)器的組件或由這一個(gè)或多個(gè)組件組成。在一個(gè)實(shí)施例中,每一個(gè)分配器可以作為單獨(dú)的軟件對(duì)象來(lái)實(shí)現(xiàn)。在另一實(shí)施例中,一個(gè)或多個(gè)組件可以實(shí)現(xiàn)多個(gè)分配器或單個(gè)單片分配器。如在此使用的,術(shù)語(yǔ)組件將被解讀為包括設(shè)備的所有或一部分、一個(gè)或多個(gè)軟件模塊的集合或其部分、一個(gè)或多個(gè)軟件模塊或其部分和一個(gè)或多個(gè)設(shè)備或其部分的某種組合等等。從概念性觀點(diǎn)來(lái)看,可能更容易可視化分配器的分層而非單片分配器。雖然在此描述主題的各方面時(shí)有時(shí)使用這個(gè)觀點(diǎn),但是并沒(méi)有將在此描述的主題的各方面限于分配各塊的多個(gè)分立分配器的意圖。實(shí)際上,在此,如果引用多個(gè)分配器,那么這些引用在其他實(shí)施例中也將被解釋為覆蓋執(zhí)行所指示的動(dòng)作的單個(gè)單片分配器。因而,分配器的“分層”可以指的是以與分配器的分層相類(lèi)似的方式來(lái)分配存儲(chǔ)空間的各個(gè)塊的單個(gè)單片分配器。當(dāng)分配器接收到分配請(qǐng)求時(shí),分配器可以搜索與分配器管理的一個(gè)或多個(gè)區(qū)域相對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu),以找到足夠的存儲(chǔ)空間來(lái)滿(mǎn)足該請(qǐng)求。如果分配器無(wú)法在這些區(qū)域中找到足夠的總的空閑存儲(chǔ)空間乃至足夠“合適的”空閑存儲(chǔ)空間,該分配器可以提出更高級(jí)別分配器的分配請(qǐng)求。“合適的”存儲(chǔ)空間可以指的是具有滿(mǎn)足鄰近(contiguity)標(biāo)準(zhǔn)的塊、滿(mǎn)足位置標(biāo)準(zhǔn)的塊或滿(mǎn)足某種其他標(biāo)準(zhǔn)的塊的存儲(chǔ)空間。鄰近標(biāo)準(zhǔn)指的是存儲(chǔ)空間的塊彼此的接近度(closeness)。對(duì)于盤(pán)驅(qū)動(dòng)器和其他存儲(chǔ)設(shè)備來(lái)說(shuō),具有彼此一個(gè)挨著一個(gè)或者至少緊鄰的塊可以加速對(duì)這些塊的訪問(wèn)。嚴(yán)格的鄰近標(biāo)準(zhǔn)是使得所有被分配的塊在物理存儲(chǔ)設(shè)備上是物理上鄰近的。更放松的鄰近標(biāo)準(zhǔn)是使得分配的塊是“接近”鄰近的,其中相鄰的塊位于彼此的設(shè)定閾值內(nèi)。在一個(gè)示例的接近鄰近的標(biāo)準(zhǔn)中,將要分配的每一個(gè)塊與分配的相鄰塊相距可能不超過(guò)X個(gè)塊。鄰近標(biāo)準(zhǔn)可以指的是與將分配用于分配請(qǐng)求的塊有關(guān)的平均值和均值標(biāo)準(zhǔn)。例如,相鄰塊之間的平均距離可能不超過(guò)所選擇的平均值和/或均值。位置標(biāo)準(zhǔn)可以指的位于或靠近指定的存儲(chǔ)空間的物理位置的塊。例如,一些應(yīng)用可能尋求分配來(lái)自存儲(chǔ)空間的特定物理部分的塊。這些應(yīng)用可以提供存儲(chǔ)空間上用于分配空間的期望位置的“提示”。作為響應(yīng),可以在分層數(shù)據(jù)結(jié)構(gòu)的一個(gè)或多個(gè)級(jí)別上進(jìn)行現(xiàn)有空閑空間的搜索。該搜索可以通過(guò)依照與“提示的”(例如,期望的)位置的接近性搜索足夠
8大的區(qū)域來(lái)進(jìn)行。分配器隨后可以提供與期望位置最靠近的空閑空間的指示。上述的標(biāo)準(zhǔn)并不打算是在嘗試分配存儲(chǔ)空間時(shí)可以應(yīng)用的詳盡的或窮舉的標(biāo)準(zhǔn)?;谠诖说慕虒?dǎo),本領(lǐng)域技術(shù)人員可以認(rèn)識(shí)到其他的可能有助于分配存儲(chǔ)空間的標(biāo)準(zhǔn)而不偏離在此描述的主題的各方面的精神或范圍。當(dāng)較高級(jí)別分配器接收到來(lái)自較低級(jí)別分配器的分配請(qǐng)求時(shí),較高級(jí)別分配器可以搜索與較高級(jí)別分配器所管理的一個(gè)或多個(gè)區(qū)域相對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu),分配該區(qū)域中的存儲(chǔ)空間,更新數(shù)據(jù)結(jié)構(gòu)來(lái)指示該分配,并向較低級(jí)別分配器提供針對(duì)所分配的存儲(chǔ)空間的句柄(handle)。該句柄可以包括或引用至少指示所分配的存儲(chǔ)空間的位置的數(shù)據(jù)。連同接收句柄,較低級(jí)別分配器可以初始化數(shù)據(jù)結(jié)構(gòu),以考慮(account for)從親代(parent)分配器分配的空間,并且可以由此開(kāi)始分配空間。例如,如果與節(jié)點(diǎn)217相對(duì)應(yīng)的分配器無(wú)法找到足夠的空閑空間來(lái)滿(mǎn)足分配請(qǐng)求,該分配器可以向與節(jié)點(diǎn)216相對(duì)應(yīng)的分配器發(fā)送分配請(qǐng)求。作為響應(yīng),這個(gè)親代分配器可以找到可用存儲(chǔ)空間的區(qū)域,將該存儲(chǔ)空間標(biāo)記為被分配,并向請(qǐng)求分配器返回針對(duì)該存儲(chǔ)空間的句柄。作為響應(yīng),請(qǐng)求分配器可以初始化與所返回的存儲(chǔ)空間相對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)(例如,另一節(jié)點(diǎn))以指示該存儲(chǔ)空間是空閑的,可以根據(jù)該分配器管理的包括返回的存儲(chǔ)空間以及該分配器管理的其他存儲(chǔ)空間在內(nèi)的任何空閑的存儲(chǔ)空間來(lái)滿(mǎn)足任何的未決分配請(qǐng)求,并且可以酌情更新(一個(gè)或多個(gè))數(shù)據(jù)結(jié)構(gòu)。如果較高級(jí)別分配器無(wú)法找到足夠的存儲(chǔ)空間,它可以發(fā)出更高級(jí)別分配器的分配請(qǐng)求,以此類(lèi)推,直至或找到足夠的存儲(chǔ)空間或確定沒(méi)有足夠的存儲(chǔ)空間可用于滿(mǎn)足分配請(qǐng)求。釋放空間與分配空間類(lèi)似地但是在相反的方向進(jìn)行。例如,在釋放區(qū)域中的空間(例如刪除或截短文件)時(shí),分配器可以將該空間返回給親代分配器,可以在預(yù)期后續(xù)分配請(qǐng)求中持有(hold onto)該空間,或可以采取某種其他動(dòng)作。如果返回的空間使得包括該空間的親代的區(qū)域是完全空閑的話,那么親代可以將空閑區(qū)域返回給其親代(如果有的話),以此類(lèi)推,直至到達(dá)與分層數(shù)據(jù)結(jié)構(gòu)的最高級(jí)別相關(guān)聯(lián)的分配器。在一個(gè)實(shí)施例中,存儲(chǔ)空間消耗方(consumer)可以顯式地從分層數(shù)據(jù)結(jié)構(gòu)的任何級(jí)別中請(qǐng)求存儲(chǔ)空間。例如,需要大量存儲(chǔ)空間(例如,吉字節(jié))的存儲(chǔ)空間消耗方可以發(fā)出利用與節(jié)點(diǎn)215相關(guān)聯(lián)的分配器直接滿(mǎn)足的分配請(qǐng)求。作為另一示例,消耗方可以顯式地請(qǐng)求從與節(jié)點(diǎn)216相關(guān)聯(lián)的分配器中分配存儲(chǔ)空間。在另一實(shí)施例中,存儲(chǔ)空間消耗方可以提供期望的分配大小并允許分配管理器(或單片存儲(chǔ)空間分配器)確定從中分配存儲(chǔ)空間的適當(dāng)級(jí)別。例如,存儲(chǔ)空間消耗方可以請(qǐng)求10千字節(jié)的存儲(chǔ)空間而不指定將從中分配存儲(chǔ)空間的特定級(jí)別。作為響應(yīng),分配管理器可以確定用于為該請(qǐng)求分配存儲(chǔ)空間的分層數(shù)據(jù)結(jié)構(gòu)的級(jí)別,并且可以向適當(dāng)分配器發(fā)送分配存儲(chǔ)空間的請(qǐng)求。在單片存儲(chǔ)空間分配器的情況中,單片存儲(chǔ)空間分配器可以遍歷(traverse)分配數(shù)據(jù)結(jié)構(gòu)205來(lái)確定從中分配存儲(chǔ)空間的適當(dāng)級(jí)別,并且可以響應(yīng)于分配請(qǐng)求來(lái)由此分配存儲(chǔ)空間。確定適當(dāng)級(jí)別可以基于分配請(qǐng)求所請(qǐng)求的存儲(chǔ)空間的大小、每一個(gè)級(jí)別的存儲(chǔ)空間的可用性、在每一個(gè)級(jí)別上可用的存儲(chǔ)空間的鄰近度、其他標(biāo)準(zhǔn)等等。例如,對(duì)于數(shù)吉字節(jié)的請(qǐng)求,適當(dāng)級(jí)別可以是級(jí)別210。作為另一示例,對(duì)于幾個(gè)兆字節(jié)的請(qǐng)求,適當(dāng)級(jí)別可以是級(jí)別211。作為另一示例,對(duì)于500兆字節(jié)的請(qǐng)求,適當(dāng)級(jí)別可以是級(jí)別210或級(jí)別211。被分配給最終消耗方(例如,諸如應(yīng)用)的級(jí)別的分配空間可能在數(shù)據(jù)結(jié)構(gòu)205的較低級(jí)別中沒(méi)有附加信息。例如,如果直接從級(jí)別210中給應(yīng)用分配10吉字節(jié),則這可以利用節(jié)點(diǎn)215中的數(shù)據(jù)來(lái)指示并且在級(jí)別211-212的節(jié)點(diǎn)中可能沒(méi)有附加信息。在某級(jí)別的空間被分配給在較低級(jí)別上的節(jié)點(diǎn)時(shí),那個(gè)空間的分配可以進(jìn)一步利用在較低級(jí)別上的數(shù)據(jù)來(lái)定義。例如,在位置220上的數(shù)據(jù)指示就涉及節(jié)點(diǎn)215而言,分配與位置220相對(duì)應(yīng)的存儲(chǔ)空間。換句話說(shuō),與位置220相對(duì)應(yīng)的存儲(chǔ)空間的整個(gè)塊不可以分配給另一分配請(qǐng)求器,直至那個(gè)存儲(chǔ)空間已被釋放并被返回到節(jié)點(diǎn)215。此外,即使已從特定級(jí)別上的特定節(jié)點(diǎn)分配了存儲(chǔ)空間,這也不意味著所分配的所有存儲(chǔ)空間當(dāng)前被分配給存儲(chǔ)空間的最終消耗方。例如,位置220所指示的分配進(jìn)一步利用級(jí)別211的節(jié)點(diǎn)216中的數(shù)據(jù)來(lái)定義。節(jié)點(diǎn)216指示存儲(chǔ)空間的部分從節(jié)點(diǎn)216的角度來(lái)分配,并且存儲(chǔ)空間的其他部分未被分配。再次,被分配給較低級(jí)別分配器的諸如在位置221和222上的部分可以進(jìn)一步利用較低級(jí)別中的數(shù)據(jù)來(lái)定義。節(jié)點(diǎn)215-218中的標(biāo)簽“A”和“F”指示與節(jié)點(diǎn)215-218相關(guān)聯(lián)的存儲(chǔ)空間的分配狀態(tài)。例如,“F”可以對(duì)應(yīng)于空閑的存儲(chǔ)空間上的鄰近區(qū)域,而“A”可以對(duì)應(yīng)于被部分或完全分配的存儲(chǔ)空間上的鄰近區(qū)域。如果某區(qū)域已被分配給一個(gè)或多個(gè)較低級(jí)別分配器并且在該區(qū)域中仍然剩余未分配的空間,那么該區(qū)域被部分分配。如果某區(qū)域已被分配給最終消耗方,或者如果該區(qū)域已被分配給一個(gè)或多個(gè)較低級(jí)別分配器并且較低級(jí)別分配器中的所有空間已被分配給最終消耗方,則該區(qū)域被完全分配。標(biāo)簽“A”和“F”僅僅為了方便起見(jiàn),并且利用這些標(biāo)簽所指示的信息可以利用位圖或其他數(shù)據(jù)來(lái)代表,如前所述?!﹨^(qū)域可以是專(zhuān)用的,并且可以?xún)H被分配給某些文件系統(tǒng)對(duì)象或其部分。例如,在一個(gè)實(shí)施例中,一個(gè)或多個(gè)區(qū)域可以被指派給目錄。當(dāng)在該目錄中創(chuàng)建或擴(kuò)展文件時(shí),可以從該目錄專(zhuān)有的區(qū)域中分配空間。如果在指派給目錄的(一個(gè)或多個(gè))專(zhuān)用區(qū)域中沒(méi)有足夠的空間,那么可以從較高級(jí)別分配器中指派一個(gè)或多個(gè)附加區(qū)域給該目錄。一旦被指派給該目錄,這些附加的(一個(gè)或多個(gè))區(qū)域也可以變成該目錄專(zhuān)用的。為其他實(shí)體創(chuàng)建或擴(kuò)展的文件無(wú)法訪問(wèn)被指派給該目錄的(一個(gè)或多個(gè))專(zhuān)用區(qū)域。區(qū)域中的空間可以被預(yù)留用于未來(lái)的與該區(qū)域有關(guān)的操作。例如,在寫(xiě)時(shí)拷貝技術(shù)中,可以在修改數(shù)據(jù)之前制作數(shù)據(jù)的拷貝。作為另一示例,可能已知某些文件隨時(shí)間而增長(zhǎng)。在區(qū)域中預(yù)留空間可以使得這些和其他操作更為有效。在區(qū)域中預(yù)留空間尤其在該區(qū)域是專(zhuān)用的時(shí)候也可以避免爭(zhēng)用。將要預(yù)留的空間量可以依照百分比、塊的數(shù)量、大小或以某一其他方式來(lái)指定。在分配區(qū)域中的空閑空間時(shí),可以在分層數(shù)據(jù)結(jié)構(gòu)的一部分上獲取鎖定。例如,在分配與節(jié)點(diǎn)217相關(guān)聯(lián)的區(qū)域中的空閑空間時(shí),對(duì)于與節(jié)點(diǎn)217相關(guān)聯(lián)的數(shù)據(jù)可以獲取鎖定。雖然這種鎖定可以阻止另一分配請(qǐng)求器同時(shí)分配與節(jié)點(diǎn)217相關(guān)聯(lián)的空間,但是它并沒(méi)有阻止分配器分配與其他節(jié)點(diǎn)相關(guān)聯(lián)的區(qū)域中的空間。圖4是代表根據(jù)在此描述的主題的各方面配置的系統(tǒng)的框圖。圖4所示的組件是示例性的,并且不意味著可能需要或包括的所有詳盡的組件。在其他實(shí)施例中,結(jié)合圖4描述的組件和/或功能可以包括在其他組件(顯示或未顯示)中或置于子組件中而不偏離在此描述的主題的各方面的精神或范圍。在一些實(shí)施例中,結(jié)合圖4描述的組件和/或功能可以分布在多個(gè)設(shè)備上。轉(zhuǎn)到圖4,系統(tǒng)405可以包括分配請(qǐng)求器410、分配組件415、存儲(chǔ)裝置450和其他組件(未顯示)。分配組件415可以包括空閑空間管理器420、元數(shù)據(jù)管理器425、存儲(chǔ)管理器430、分配器435、預(yù)留管理器440、鎖定管理器445和其他組件(未顯示)。系統(tǒng)405可以在一個(gè)或多個(gè)計(jì)算機(jī)上或利用一個(gè)或多個(gè)計(jì)算機(jī)(例如,圖I的計(jì)算機(jī)110)來(lái)實(shí)現(xiàn)。分配組件415中的一個(gè)或多個(gè)的動(dòng)作可以利用一個(gè)或多個(gè)進(jìn)程來(lái)執(zhí)行。如在此使用的術(shù)語(yǔ)“進(jìn)程(process)”及其變體可以包括一個(gè)或多個(gè)執(zhí)行任務(wù)的傳統(tǒng)進(jìn)程、線程、組件、庫(kù)、對(duì)象等等。進(jìn)程可以在硬件、軟件或軟硬件的組合中實(shí)現(xiàn)。在實(shí)施例中,進(jìn)程是任何的計(jì)算機(jī)機(jī)制,然而,盡管如此稱(chēng)謂,其能夠執(zhí)行動(dòng)作或在執(zhí)行動(dòng)作中使用。進(jìn)程可以分布在多個(gè)設(shè)備或單個(gè)設(shè)備上。在一個(gè)實(shí)施例中,分配組件415可以作為分配器對(duì)象的方法來(lái)實(shí)現(xiàn)。在另一實(shí)施例中,分配組件415中的一個(gè)或多個(gè)可以作為一個(gè)或多個(gè)函數(shù)來(lái)實(shí)現(xiàn)。如在此使用的術(shù)語(yǔ)“函數(shù)(function)”可以被視為執(zhí)行一個(gè)或多個(gè)任務(wù)的代碼的一部分。雖然函數(shù)可以包括返回?cái)?shù)據(jù)的代碼塊,但是其并不限于返回?cái)?shù)據(jù)的代碼塊。函數(shù)也可以執(zhí)行特定任務(wù)而不返回任何數(shù)據(jù)。此外,函數(shù)可能具有或可能不具有輸入?yún)?shù)。函數(shù)可以包括子例程、子程序、過(guò)程、方法、例程等等。分配請(qǐng)求器410是尋求從分配組件415獲得存儲(chǔ)空間的任何實(shí)體。一些示例的實(shí)體包括應(yīng)用、操作系統(tǒng)組件、數(shù)據(jù)庫(kù)、分配器(在具有多個(gè)分配器的實(shí)現(xiàn)中)等等。分配請(qǐng)求器410可以駐留在托管分配組件415中的一個(gè)或多個(gè)的設(shè)備上或可以駐留在不同的設(shè)備上。存儲(chǔ)裝置450包括任何的能夠存儲(chǔ)文件并利用文件系統(tǒng)來(lái)管理的存儲(chǔ)媒體。存儲(chǔ)裝置450可以是外部的、內(nèi)部的或包括對(duì)于系統(tǒng)405而言是內(nèi)部和外部二者的組件。如在此使用的術(shù)語(yǔ)文件包括目錄、文件、其他文件系統(tǒng)對(duì)象等等。如在此使用的,文件包括數(shù)據(jù)。術(shù)語(yǔ)數(shù)據(jù)將被廣義解讀為包括可以利用一個(gè)或多個(gè)計(jì)算機(jī)存儲(chǔ)元素來(lái)代表的任何事。在邏輯上,數(shù)據(jù)可以被表示為易失性或非易失性存儲(chǔ)器中的一系列I和O。在具有非二進(jìn)制存儲(chǔ)介質(zhì)的計(jì)算機(jī)中,數(shù)據(jù)可以根據(jù)存儲(chǔ)介質(zhì)的能力來(lái)代表。數(shù)據(jù)可以被組織成不同類(lèi)型的數(shù)據(jù)結(jié)構(gòu),其包括簡(jiǎn)單數(shù)據(jù)類(lèi)型諸如數(shù)字、字母等等、分層的、鏈接的或其他相關(guān)的數(shù)據(jù)類(lèi)型、包括多個(gè)其他數(shù)據(jù)結(jié)構(gòu)或簡(jiǎn)單數(shù)據(jù)類(lèi)型的數(shù)據(jù)結(jié)構(gòu)等等。數(shù)據(jù)的一些示例包括信息、程序代碼、程序狀態(tài)、程序數(shù)據(jù)、其他數(shù)據(jù)等等??臻e空間管理器425可用于搜索節(jié)點(diǎn)的分配數(shù)據(jù),以找到存儲(chǔ)設(shè)備上的空閑空間來(lái)分配給分配請(qǐng)求。如前所述,分配數(shù)據(jù)可以被安排在分層數(shù)據(jù)結(jié)構(gòu)中,其中分層數(shù)據(jù)結(jié)構(gòu)指示在分層數(shù)據(jù)結(jié)構(gòu)的不同級(jí)別上的節(jié)點(diǎn)配對(duì)之間(例如,分層)的關(guān)系。兩個(gè)直接相關(guān)的節(jié)點(diǎn)(例如,具有親代/子代關(guān)系的節(jié)點(diǎn))指示用于不同粒度級(jí)別的一些存儲(chǔ)空間的分配數(shù)據(jù)。例如,參考結(jié)合圖2所述的示例,節(jié)點(diǎn)215可以包括指示在I吉字節(jié)粒度上的分配數(shù)據(jù)的分配數(shù)據(jù)(例如,在位置220上),其中I吉字節(jié)粒度上的分配數(shù)據(jù)對(duì)應(yīng)于指示用于相同的I吉字節(jié)但是在I兆字節(jié)粒度上的分配數(shù)據(jù)的分配數(shù)據(jù)(例如,節(jié)點(diǎn)216的分配數(shù)據(jù))。此外,注意被顯示用于每一個(gè)節(jié)點(diǎn)的分配數(shù)據(jù)可以代表與這些節(jié)點(diǎn)相關(guān)聯(lián)的存儲(chǔ)空間的鄰近區(qū)域。例如,在緊挨著位置221的位置上的分配數(shù)據(jù)可以代表在存儲(chǔ)設(shè)備上可用的物理上與位置221所代表的存儲(chǔ)空間相鄰近的存儲(chǔ)空間。也如前所述,用于每一個(gè)節(jié)點(diǎn)的分配數(shù)據(jù)指示是否與該節(jié)點(diǎn)相關(guān)聯(lián)的區(qū)域的部分被分配(從該節(jié)點(diǎn)的角度來(lái)看)。元數(shù)據(jù)管理器425可操作來(lái)更新節(jié)點(diǎn)的分配數(shù)據(jù),以響應(yīng)與該節(jié)點(diǎn)相關(guān)聯(lián)的存儲(chǔ)空間被分配給分配請(qǐng)求器(或由分配請(qǐng)求器釋放)。如前所述,元數(shù)據(jù)管理器425也可以更新位圖或其他分配表示數(shù)據(jù)來(lái)反映分配狀態(tài)和其他分配數(shù)據(jù)(例如,標(biāo)題中的數(shù)據(jù))。存儲(chǔ)管理器430可用于存儲(chǔ)和提供對(duì)于存儲(chǔ)設(shè)備的文件的訪問(wèn)。存儲(chǔ)管理器430可以包括能夠與存儲(chǔ)設(shè)備的硬件通信的低級(jí)例程。分配器435可用于利用空閑空間管理器420來(lái)為分配請(qǐng)求找到空閑空間。分配器可以進(jìn)一步可用于利用元數(shù)據(jù)管理器425,以便結(jié)合為分配請(qǐng)求分配空間來(lái)更新分配數(shù)據(jù)。在一個(gè)實(shí)施例中,空閑空間管理器420和元數(shù)據(jù)管理器425的功能可以包括在分配器自身中。預(yù)留管理器440可用于為分配請(qǐng)求預(yù)留附加空間。例如,預(yù)留管理器440可以增加分配請(qǐng)求所請(qǐng)求的空間,以確保附加空間可用于牽涉前述的分配空間的后續(xù)操作。在一個(gè)實(shí)施例中,在可以省略分配空間和預(yù)留服務(wù)器440時(shí),分配器435可以自動(dòng)地預(yù)留附加空間。鎖定管理器445可用于結(jié)合為分配請(qǐng)求分配空間來(lái)鎖定分層分配數(shù)據(jù)結(jié)構(gòu)的部分。在鎖定分層數(shù)據(jù)結(jié)構(gòu)的一個(gè)部分中,鎖定管理器445可以允許分層數(shù)據(jù)結(jié)構(gòu)的其他部分與鎖定的部分同時(shí)地、獨(dú)立地進(jìn)行鎖定(例如,對(duì)于其他分配請(qǐng)求)。在其中具有一個(gè)以上的分配器的實(shí)施例中,分配組件415中的一個(gè)或多個(gè)可以被復(fù)制,以便與分配器一起使用。雖然上述的環(huán)境包括各種數(shù)量的實(shí)體,但是將認(rèn)識(shí)到可以采用這些實(shí)體和其他實(shí)體之中更多、更少的實(shí)體或不同的組合而不偏離在此描述的主題的各方面的精神或范圍。此外,如本領(lǐng)域技術(shù)人員將明白的,這些實(shí)體可以采用各種方式來(lái)配置而不偏離在此描述的主題的各方面的精神或范圍。圖5-6是一般代表可以根據(jù)在此描述的主題的各方面而發(fā)生的動(dòng)作的流程圖。為了解釋的簡(jiǎn)單起見(jiàn),結(jié)合圖5-6描述的方法作為一系列動(dòng)作來(lái)描繪和描述。將明白和意識(shí)到在此描述的主題的各方面并不受所示的動(dòng)作的限制和/或并不受動(dòng)作的順序的限制。在一個(gè)實(shí)施例中,這些動(dòng)作按照如下所述的順序發(fā)生。然而,在其他實(shí)施例中,這些動(dòng)作可以并行發(fā)生、按照另一順序發(fā)生和/或與在此沒(méi)有呈現(xiàn)和描述的其他動(dòng)作一起發(fā)生。此外,并不是所有示出的動(dòng)作都是實(shí)現(xiàn)根據(jù)在此描述的主題的各方面的方法所需要的。此外,本領(lǐng)域技術(shù)人員將明白和意識(shí)到該方法能夠或者經(jīng)由狀態(tài)圖表示為一系列相關(guān)的狀態(tài)或表示為事件。轉(zhuǎn)到圖5,在方框505,這些動(dòng)作開(kāi)始。在方框510,存儲(chǔ)空間可以被格式化。例如,參考圖4,存儲(chǔ)管理器430可以格式化存儲(chǔ)裝置450。連同格式化存儲(chǔ)空間,在存儲(chǔ)空間上可以創(chuàng)建和存儲(chǔ)分層數(shù)據(jù)結(jié)構(gòu)(例如,諸如圖2所示的分層數(shù)據(jù)結(jié)構(gòu))。在被首先創(chuàng)建時(shí),分層數(shù)據(jù)結(jié)構(gòu)可以具有代表存儲(chǔ)空間中的空閑空間的最高級(jí)別中的一個(gè)或多個(gè)節(jié)點(diǎn)。其他級(jí)別可以具有零個(gè)節(jié)點(diǎn),直至這些級(jí)別中的存儲(chǔ)空間被分配。
在方框515,分配請(qǐng)求被接收。例如,參考圖4,可以從分配請(qǐng)求器410接收分配請(qǐng)求。分配請(qǐng)求是分配利用文件系統(tǒng)管理的存儲(chǔ)裝置中的存儲(chǔ)空間的請(qǐng)求。分配請(qǐng)求可以連同處于期望位置上的提示一起到來(lái),其中將分配來(lái)自或靠近期望位置的存儲(chǔ)空間。在方框520,如果合適的話,該分配所請(qǐng)求的大小可以被增大預(yù)留量。例如,參考圖4,預(yù)留管理器440可以增大該分配所請(qǐng)求的大小,以確保附加空間被預(yù)留用于后續(xù)操作,如前所述。如果附加信息的預(yù)留不是所期望的,那么可以省略這個(gè)方框的動(dòng)作。在方框525,分層數(shù)據(jù)結(jié)構(gòu)被訪問(wèn)。例如,參考圖2-3,數(shù)據(jù)結(jié)構(gòu)205可以被訪問(wèn)。數(shù)據(jù)結(jié)構(gòu)205可以包括圖3的數(shù)據(jù)結(jié)構(gòu)305中的多個(gè)。如前所述,分層數(shù)據(jù)結(jié)構(gòu)包括與存儲(chǔ)空間上的分配空間和未分配空間有關(guān)的數(shù)據(jù)。這個(gè)數(shù)據(jù)指示存儲(chǔ)空間的多個(gè)區(qū)域。該數(shù)據(jù)進(jìn)一步指示在分層數(shù)據(jù)結(jié)構(gòu)的不同級(jí)別上的節(jié)點(diǎn)配對(duì)之間的關(guān)系。如前所述,兩個(gè)直接相關(guān)的節(jié)點(diǎn)(例如,親代和子代節(jié)點(diǎn))指示用于在不同粒度級(jí)別上的存儲(chǔ)空間中的一些的分配數(shù)據(jù)。在方框530,為該請(qǐng)求的分配空間確定分層數(shù)據(jù)結(jié)構(gòu)的級(jí)別。例如,參考圖2和4,分配器435可以確定使用級(jí)別216來(lái)滿(mǎn)足針對(duì)多個(gè)兆字節(jié)的存儲(chǔ)空間的請(qǐng)求。作為另一示例,如果分配請(qǐng)求器顯式地請(qǐng)求某個(gè)級(jí)別,那么分配器435可以但并不要求使用那個(gè)級(jí)別。在方框535,搜索所確定的級(jí)別的一個(gè)或多個(gè)節(jié)點(diǎn)以查找空閑空間。例如,參考圖2,可以搜索級(jí)別211的一個(gè)或多個(gè)節(jié)點(diǎn),以查找合適的空閑空間。如果沒(méi)有足夠的空閑空間是可用的,那么可以從親代節(jié)點(diǎn)分配附加空間。隨后,包括從附加空間獲得的空間在內(nèi)的空間可以被分配,以滿(mǎn)足分配請(qǐng)求。在方框540,空閑空間被分配給分配請(qǐng)求。例如,參考圖2,來(lái)自節(jié)點(diǎn)217的空間可以被分配,以滿(mǎn)足分配請(qǐng)求。在方框545,分配數(shù)據(jù)被更新,以指示空閑空間已被分配。例如,參考圖3,位圖或其他數(shù)據(jù)結(jié)構(gòu)可以被更新,以指示空閑空間已被分配。在方框550,可以執(zhí)行其他動(dòng)作,如果有的話。轉(zhuǎn)到圖6,在方框605,這些動(dòng)作開(kāi)始。在方框610,接收格式化文件系統(tǒng)的存儲(chǔ)空間的請(qǐng)求。例如,參考圖4,文件系統(tǒng)可以接收格式化存儲(chǔ)裝置450的卷的請(qǐng)求。在方框615,響應(yīng)于該請(qǐng)求,創(chuàng)建分層數(shù)據(jù)結(jié)構(gòu)。該分層數(shù)據(jù)結(jié)構(gòu)包括與存儲(chǔ)空間有關(guān)的分配數(shù)據(jù)。如前所述,分層數(shù)據(jù)結(jié)構(gòu)能夠指示在不同粒度級(jí)別上的存儲(chǔ)空間的區(qū)域的分配。分層數(shù)據(jù)結(jié)構(gòu)包括與存儲(chǔ)空間的區(qū)域相關(guān)聯(lián)的一個(gè)或多個(gè)節(jié)點(diǎn),其中每一個(gè)節(jié)點(diǎn)包括與存儲(chǔ)空間的相關(guān)聯(lián)區(qū)域有關(guān)的分配數(shù)據(jù)。節(jié)點(diǎn)的分配數(shù)據(jù)是獨(dú)立于另一節(jié)點(diǎn)的分配數(shù)據(jù)而可鎖定的。例如,參考圖2,與分層數(shù)據(jù)結(jié)構(gòu)205相類(lèi)似的分層數(shù)據(jù)結(jié)構(gòu)可以被創(chuàng)建。在初始創(chuàng)建分層數(shù)據(jù)結(jié)構(gòu)時(shí),由于在格式化之后存儲(chǔ)空間可能沒(méi)有分配的存儲(chǔ)空間,所以它可能只有一個(gè)級(jí)別。如果在格式化期間創(chuàng)建根目錄,那么在根目錄消耗存儲(chǔ)空間中的空間時(shí),可以創(chuàng)建多個(gè)級(jí)別。在方框620,分層數(shù)據(jù)結(jié)構(gòu)可以存儲(chǔ)在存儲(chǔ)空間上。例如,參考圖4,在創(chuàng)建分層數(shù)據(jù)結(jié)構(gòu)之后,分層數(shù)據(jù)結(jié)構(gòu)可以存儲(chǔ)在存儲(chǔ)裝置450上。在方框625,分層數(shù)據(jù)結(jié)構(gòu)可以被更新。例如,與節(jié)點(diǎn)相關(guān)聯(lián)的區(qū)域可以被標(biāo)記用于文件系統(tǒng)的目錄的獨(dú)家使用。作為另一示例,在一個(gè)級(jí)別中的子代節(jié)點(diǎn)可以被創(chuàng)建,親代節(jié)點(diǎn)的分配數(shù)據(jù)可以被修改以指示已將存儲(chǔ)空間分配給子代節(jié)點(diǎn),并且在子代節(jié)點(diǎn)中可以初始化分配數(shù)據(jù)以指示分配給子代節(jié)點(diǎn)的存儲(chǔ)空間是經(jīng)由子代節(jié)點(diǎn)可分配的。如前所述,這可能牽涉更新位圖或其他適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)。作為另一示例,用于分層數(shù)據(jù)結(jié)構(gòu)的每一個(gè)節(jié)點(diǎn)的標(biāo)題信息可以被更新,以包括指示節(jié)點(diǎn)的區(qū)域在存儲(chǔ)空間上的物理位置的值、指示區(qū)域的大小的值以及指示位圖中代表該區(qū)域的分配數(shù)據(jù)的比特的數(shù)量的值。例如,標(biāo)題信息也可以利用指示節(jié)點(diǎn)的區(qū)域的未分配空間數(shù)量的值以及指示節(jié)點(diǎn)的區(qū)域中最大鄰近的未分配空間的值來(lái)更新。在方框630,可以執(zhí)行其他動(dòng)作,如果有的話。如從以上的詳細(xì)描述中能夠看出的,已描述了與存儲(chǔ)空間分配有關(guān)的各方面。雖然在此描述的主題的各方面易受各種修改和替換構(gòu)造的影響,但是其中的某些示出的實(shí)施例顯示在附圖中并且在上面具體進(jìn)行描述了。然而,應(yīng)該明白并沒(méi)有將所請(qǐng)求保護(hù)的主題局限于所公開(kāi)的具體形式的意圖,而恰恰相反,意圖旨在覆蓋落入在此描述的主題的各個(gè)方面的精神和范圍內(nèi)的所有修改、替換構(gòu)造以及等價(jià)物。
權(quán)利要求
1.一種至少部分利用計(jì)算機(jī)實(shí)現(xiàn)的方法,所述方法包括 接收分配利用文件系統(tǒng)管理的存儲(chǔ)空間的請(qǐng)求; 響應(yīng)于所述請(qǐng)求,訪問(wèn)包括與存儲(chǔ)空間上的分配空間和未分配空間有關(guān)的數(shù)據(jù)的分層數(shù)據(jù)結(jié)構(gòu),所述數(shù)據(jù)指示存儲(chǔ)空間的多個(gè)區(qū)域,所述數(shù)據(jù)進(jìn)一步指示在分層數(shù)據(jù)結(jié)構(gòu)的不同級(jí)別上的節(jié)點(diǎn)配對(duì)之間的關(guān)系,其中兩個(gè)直接相關(guān)的節(jié)點(diǎn)指示在不同粒度級(jí)別上的存儲(chǔ)空間中的一些的分配數(shù)據(jù); 確定用于為所述請(qǐng)求分配空間的分層數(shù)據(jù)結(jié)構(gòu)的級(jí)別; 使用所述級(jí)別的一個(gè)或多個(gè)節(jié)點(diǎn)來(lái)搜索分層數(shù)據(jù)結(jié)構(gòu),以查找空閑空間; 為所述請(qǐng)求分配空閑空間; 更新分層數(shù)據(jù)結(jié)構(gòu),以指示空閑空間已被分配。
2.權(quán)利要求I的方法,其中使用所述級(jí)別的一個(gè)或多個(gè)節(jié)點(diǎn)來(lái)搜索分層數(shù)據(jù)結(jié)構(gòu)以查找空閑空間包括訪問(wèn)分層數(shù)據(jù)結(jié)構(gòu)中的標(biāo)題和位圖,所述標(biāo)題與一個(gè)或多個(gè)節(jié)點(diǎn)之中的一個(gè)節(jié)點(diǎn)相關(guān)聯(lián),所述標(biāo)題包括一個(gè)或多個(gè)節(jié)點(diǎn)中的所述一個(gè)節(jié)點(diǎn)的分配單元的分配大小、指示與一個(gè)或多個(gè)節(jié)點(diǎn)中的所述一個(gè)節(jié)點(diǎn)相對(duì)應(yīng)的存儲(chǔ)空間的物理位置的值以及所述位圖中比特的數(shù)量,所述位圖指示與一個(gè)或多個(gè)節(jié)點(diǎn)中的所述一個(gè)節(jié)點(diǎn)相對(duì)應(yīng)的存儲(chǔ)空間的分配狀態(tài)。
3.權(quán)利要求2的方法,其中訪問(wèn)標(biāo)題包括訪問(wèn)所述標(biāo)題中的附加數(shù)據(jù),所述附加數(shù)據(jù)指示與一個(gè)或多個(gè)節(jié)點(diǎn)中的所述一個(gè)節(jié)點(diǎn)相關(guān)聯(lián)的未分配空間的大小以及與一個(gè)或多個(gè)節(jié)點(diǎn)中的所述一個(gè)節(jié)點(diǎn)相關(guān)聯(lián)的未分配空間的最大鄰近大小。
4.權(quán)利要求I的方法,進(jìn)一步包括接收指示在存儲(chǔ)空間上用于分配空間的期望物理位置的提示,根據(jù)與期望物理位置的接近性來(lái)搜索分層數(shù)據(jù)結(jié)構(gòu)以查找所述區(qū)域的空閑空間,以及提供與期望物理位置最靠近的空閑空間的指示。
5.權(quán)利要求I的方法,其中接收分配利用文件系統(tǒng)管理的存儲(chǔ)空間的請(qǐng)求包括接收在目錄內(nèi)創(chuàng)建或擴(kuò)展文件的請(qǐng)求,以及其中為所述請(qǐng)求分配空閑空間包括分配所述目錄專(zhuān)用的一個(gè)或多個(gè)區(qū)域中的空閑空間。
6.權(quán)利要求I的方法,進(jìn)一步包括預(yù)留附加空閑空間,用于與被分配用于所述請(qǐng)求的空閑空間有關(guān)的后續(xù)操作。
7.權(quán)利要求I的方法,其中為所述請(qǐng)求分配空閑空間包括在分層數(shù)據(jù)結(jié)構(gòu)的一部分上獲取鎖定,同時(shí)允許在分層數(shù)據(jù)結(jié)構(gòu)的其他部分上獲取其他鎖定。
8.一種計(jì)算機(jī)存儲(chǔ)介質(zhì),其具有計(jì)算機(jī)可執(zhí)行指令,所述計(jì)算機(jī)可執(zhí)行指令在被運(yùn)行時(shí)執(zhí)行包括以下的動(dòng)作 接收格式化文件系統(tǒng)的存儲(chǔ)空間的請(qǐng)求; 響應(yīng)于所述請(qǐng)求,創(chuàng)建包括與存儲(chǔ)空間有關(guān)的分配數(shù)據(jù)的分層數(shù)據(jù)結(jié)構(gòu),所述分層數(shù)據(jù)結(jié)構(gòu)能夠指示在不同粒度級(jí)別上的存儲(chǔ)空間的區(qū)域的分配,所述分層數(shù)據(jù)結(jié)構(gòu)包括與存儲(chǔ)空間的所述區(qū)域相關(guān)聯(lián)的一個(gè)或多個(gè)節(jié)點(diǎn),每一個(gè)節(jié)點(diǎn)包括與存儲(chǔ)空間的相關(guān)聯(lián)區(qū)域有關(guān)的分配數(shù)據(jù),一個(gè)節(jié)點(diǎn)的分配數(shù)據(jù)是獨(dú)立于另一節(jié)點(diǎn)的分配數(shù)據(jù)而可鎖定的; 將分層數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)在存儲(chǔ)空間上。
9.權(quán)利要求8的計(jì)算機(jī)存儲(chǔ)介質(zhì),進(jìn)一步包括修改分層數(shù)據(jù)結(jié)構(gòu),以指示與節(jié)點(diǎn)相關(guān)聯(lián)的區(qū)域僅用于文件系統(tǒng)的目錄的獨(dú)家使用。
10.權(quán)利要求8的計(jì)算機(jī)存儲(chǔ)介質(zhì),進(jìn)一步包括創(chuàng)建分層數(shù)據(jù)結(jié)構(gòu)的子代節(jié)點(diǎn),修改子代節(jié)點(diǎn)的親代節(jié)點(diǎn)的分配數(shù)據(jù)來(lái)指示親代節(jié)點(diǎn)的區(qū)域的一部分已被分配給子代節(jié)點(diǎn),以及修改子代節(jié)點(diǎn)的分配數(shù)據(jù)來(lái)指示所述區(qū)域的所述部分是經(jīng)由子代節(jié)點(diǎn)而可分配的。
11.權(quán)利要求8的計(jì)算機(jī)存儲(chǔ)介質(zhì),進(jìn)一步包括利用標(biāo)題信息來(lái)更新一個(gè)或多個(gè)節(jié)點(diǎn)中的每一個(gè)節(jié)點(diǎn),所述標(biāo)題信息包括指示所述節(jié)點(diǎn)的區(qū)域在存儲(chǔ)空間上的物理位置的值、指示所述區(qū)域的大小的值以及指示代表所述區(qū)域的分配數(shù)據(jù)的位圖中的比特?cái)?shù)量的值。
12.一種在計(jì)算環(huán)境中的系統(tǒng),包括 存儲(chǔ)管理器,可用于存儲(chǔ)和提供針對(duì)存儲(chǔ)設(shè)備的文件的訪問(wèn); 空閑空間管理器,可用于搜索節(jié)點(diǎn)的分配數(shù)據(jù),以找到存儲(chǔ)設(shè)備上的空閑空間,以便為存儲(chǔ)設(shè)備的存儲(chǔ)空間的分配請(qǐng)求而分配,所述分配數(shù)據(jù)被安排在分層數(shù)據(jù)結(jié)構(gòu)中,所述分層數(shù)據(jù)結(jié)構(gòu)指示在分層數(shù)據(jù)結(jié)構(gòu)的不同級(jí)別上的節(jié)點(diǎn)配對(duì)之間的關(guān)系,其中兩個(gè)直接相關(guān)的節(jié)點(diǎn)指示在不同粒度級(jí)別上的存儲(chǔ)空間中的一些的分配數(shù)據(jù); 元數(shù)據(jù)管理器,可用于更新所述節(jié)點(diǎn)的分配數(shù)據(jù),所述分配數(shù)據(jù)指示與所述節(jié)點(diǎn)相關(guān)聯(lián)的存儲(chǔ)設(shè)備的鄰近區(qū)域,所述分配數(shù)據(jù)也指示是否所述區(qū)域的部分被分配; 分配器,可用于利用空閑空間管理器來(lái)為分配請(qǐng)求找到空閑空間,所述分配器進(jìn)一步可用于利用元數(shù)據(jù)管理器來(lái)結(jié)合為分配請(qǐng)求分配空間而更新分配數(shù)據(jù)。
13.權(quán)利要求12的系統(tǒng),進(jìn)一步包括鎖定管理器,其可用于結(jié)合為分配請(qǐng)求分配空間來(lái)鎖定分層數(shù)據(jù)結(jié)構(gòu)的第一部分,所述分層數(shù)據(jù)結(jié)構(gòu)的至少第二部分是獨(dú)立于第一部分而可鎖定的。
14.權(quán)利要求12的系統(tǒng),進(jìn)一步包括預(yù)留管理器,其可用于為分配請(qǐng)求預(yù)留附加空間。
15.權(quán)利要求12的系統(tǒng),其中元數(shù)據(jù)管理器進(jìn)一步可用于更新分配數(shù)據(jù),其中分配數(shù)據(jù)指示所述區(qū)域中的空閑空間的大小以及所述區(qū)域中的最大鄰近空閑空間。
全文摘要
在此描述的主題的各方面涉及存儲(chǔ)空間分配。在各方面,分層數(shù)據(jù)結(jié)構(gòu)用于跟蹤利用文件系統(tǒng)管理的存儲(chǔ)空間的分配數(shù)據(jù)。分層數(shù)據(jù)結(jié)構(gòu)可以具有多個(gè)級(jí)別,其中每個(gè)級(jí)別具有與不同的存儲(chǔ)空間的粒度有關(guān)的數(shù)據(jù)。分層數(shù)據(jù)結(jié)構(gòu)的各部分可以獨(dú)立于分層數(shù)據(jù)結(jié)構(gòu)的其他部分被鎖定。分層數(shù)據(jù)結(jié)構(gòu)可以指示存儲(chǔ)空間的一個(gè)或多個(gè)部分用于目錄的獨(dú)家使用。在預(yù)期后續(xù)操作中可以在分配的空間中預(yù)留額外空間。分配請(qǐng)求器可以從與分層數(shù)據(jù)結(jié)構(gòu)的不同級(jí)別相關(guān)聯(lián)的區(qū)域中獲得存儲(chǔ)空間分配。
文檔編號(hào)G06F12/02GK102934094SQ201180029558
公開(kāi)日2013年2月13日 申請(qǐng)日期2011年6月3日 優(yōu)先權(quán)日2010年6月16日
發(fā)明者T.J.米勒, J.M.卡吉爾, W.R.蒂普頓, S.費(fèi)爾馬 申請(qǐng)人:微軟公司