專利名稱:用于管理和編輯文件系統中文件的方法和裝置的制作方法
技術領域:
本發明涉及存儲裝置,例如個人視頻錄像機(Personal VideoRecorder/PVR)。具 體而言,本發明涉及用于管理和編輯文件系統中文件的方法和裝置。
背景技術:
當前,個人視頻錄像機應用在機頂盒(Set Top Box)中廣泛采用。用戶有時需要編 輯其視頻記錄,例如,用戶需要刪除文件以除去商業廣告(commercials)。但是,商業廣告有 可能位于視頻記錄的任何位置,因此用戶就需要從視頻記錄文件的各個位置刪除數據。艮口, 用戶可能需要從視頻記錄文件的開始、中間或尾部位置刪除商業廣告。圖1是傳統文件系統的實例,例如FAT 32或者EXT 2。在此文件系統中,文件通 常存儲在多個塊(block)中。在圖1中,使用10個塊來存儲文件。塊是最小的配置單位 (allocation unit),并包含16個扇區(sector)。一個扇區中有512個字節(byte),因此 通常一個塊具有8K字節。在順序文件(sequential file)中,通過文件管理系統將全部塊 連接(link)在一起。對于每個塊,連接信息可以包括前指數(例如當前塊之前塊的編號) 和后指數(例如當前塊之后塊的編號)。通常文件管理系統知道文件從哪里開始(即起始 塊號)以及文件占據的空間長度(即使用多少塊來存儲此文件)。文件的實際長度有可能 小于文件占據的空間長度。在此傳統文件系統中,從文件尾部刪除數據(例如除去商業廣告)比較容易。如果 是在文件尾部進行刪除,則刪除的數據將被直接釋放。但是,很難從文件的中部、特別是從 某些塊的部分刪除數據。如果從塊的某些部分刪除數據,則該塊將不是一個完整的塊(非 完整塊),即該塊中的數據小于8K。在這種條件下,傳統處理方法是將后續塊的數據移動以 填充(fill)非完整塊。這樣做的原因是,在傳統文件系統中,文件管理系統只記錄起始塊 號和文件長度(即使用了多少個塊來存儲文件),因此即使將某些數據從塊中刪除,還需要 一定時間對塊的該部分進行讀出。但是,移動后續塊以填補非完整塊將需要處理時間,特別 是對于比較大的文件。為了解決傳統文件系統中存在的問題,JP 2003 052006公開了一種信息編輯控 制器,通過減少在編輯視頻和音頻數據過程中對介質的讀/寫訪問帶來的復制操作(copy operation)而實現高速編輯。
發明內容
本發明的第一方面提供了一種用于管理文件系統中的文件數據的方法。在所述文 件系統中,將用于存儲文件數據的存儲空間分為多個大小相同并且順序編號的塊。所述塊 設置在順序編號的組塊(chunk)中,并且每個組塊包括至少一個塊。對于一個組塊,所述方 法包括下述步驟在刪除文件中的數據的步驟之后,利用第一管理數據和第二管理數據記 錄每個組塊中的第一塊的頭部和最后塊的尾部中未被數據占據的空間大小,所述空間大小 小于塊的大小。
根據一個實施方式,所述刪除步驟包括從所述組塊的頭部或者尾部刪除數據。根據一個實施方式,連接(link)包含給定文件的數據的組塊,連接信息記錄在文 件系統管理數據中。另外,如果一個組塊被完全刪除,釋放用于所述刪除的組塊的存儲空間并連接被 刪除的組塊的前面和后面的組塊。本發明的第二方面提供了一種用于管理文件系統中的文件數據的方法。在所述文 件系統中,將用于存儲文件數據的存儲空間分為多個大小相同并且順序編號的塊。所述塊 設置在順序編號的組塊中,并且每個組塊包括至少一個塊。對于一個組塊,所述方法包括下 述步驟在刪除文件中的數據的步驟之后,利用第一管理數據和第二管理數據記錄每個組 塊中的第一塊的頭部和最后塊的尾部中未被數據占據的空間大小,所述空間大小小于塊的 大小。當文件部分被刪除并且刪除起始位置和尾部位置沒有位于相同的塊中但是位于相 同的組塊中時,所述組塊被分為第一新組塊和第二新組塊。在此情況下,采用第三管理數 據和第四管理數據分別記錄第二新組塊的第一塊的頭部以及最后塊的尾部中的空閑空間 (empty space),并且連接第一新組塊和第二新組塊以保持文件的連續性。根據一個實施方式,采用刪除之前原組塊號對第一新組塊進行編號,緊隨文件系 統中最初的最后組塊號對第二新組塊進行編號。根據一個實施方式,如果一個塊中的數據被完全刪除,釋放該塊的空間。本發明的第三方面提供了 一種用于管理文件系統中的文件數據的方法。在所述文 件系統中,將用于存儲文件數據的存儲空間分為多個大小相同并且順序編號的塊。所述塊 設置在順序編號的組塊中,并且每個組塊包括至少一個塊。對于一個組塊,所述方法包括下 述步驟在刪除文件中的數據的步驟之后,利用第一管理數據和第二管理數據記錄每個組 塊中的第一塊的頭部和最后塊的尾部中未被數據占據的空間大小,所述空間大小小于塊的 大小。當從組塊的塊的中部刪除文件的某些數據時,將所述塊中被刪除的數據之后的剩余 的第二半部數據移動到緊隨塊中數據的第一半部數據之后的位置,并且將發生刪除的塊和 組塊中該塊之前的塊重組為第一新組塊,并且如果在發生刪除的塊之后還有塊,將這些之 后的塊重組為第二新組塊,利用第三管理數據和第四管理數據分別記錄第二新組塊中第一 塊的頭部和最后塊的尾部中的空閑空間的大小,并連接第一新組塊與第二新組塊。根據一個實施方式,采用刪除之前初始組塊號對第一新組塊進行編號,緊隨文件 系統中最初的最后組塊號對第二新組塊進行編號。根據另外一個實施方式,將組塊之間的連接信息記錄在文件系統管理數據中。本發明的第四方面提供了一種文件系統。在所述文件系統中,將用于存儲文件數 據的存儲空間分為多個大小相同并且順序編號的塊。所述塊設置在順序編號的組塊中,并 且每個組塊包括至少一個塊。所述文件系統包括用于每個組塊的管理數據,用于指示組塊 的頭部和/或尾部中空閑空間大小,其中所述空閑存儲空間的大小小于塊的大小。根據一個實施方式,利用第一管理數據和第二管理數據記錄組塊中的第一塊的頭 部和最后塊的尾部中的空間大小。根據另外一個實施方式,連接用于文件的全部組塊以保持文件的連續性,并且將 連接信息存儲在文件系統管理數據中。本發明的第五方面提供了 一種包括上述文件系統的存儲裝置。
圖1是傳統文件系統的示意圖;圖2是根據本發明的實施方式的文件系統的示意圖;圖3是根據本發明的另一實施方式的文件系統的示意圖;圖4是利用根據本發明實施方式的文件系統進行讀出操作時計算組塊中的數據 實際大小的流程圖;圖5是根據本發明的文件系統的讀出操作的流程圖;圖6是利用根據本發明實施方式的文件系統進行寫入操作時計算組塊中的數據 實際大小的流程圖;圖7是根據本發明的文件系統的寫入操作的流程圖;圖8是根據本發明的文件系統的數據刪除操作的流程圖;圖9是從組塊的開始切除數據的數據刪除操作的示意圖;圖10是從組塊的尾部切除數據的數據刪除操作的示意圖;圖11是從組塊的中部切除數據的數據刪除操作的流程圖;圖12是從組塊的中部切除數據的數據刪除操作的示意圖。
具體實施例方式下面對本發明的優選實施方式進行詳細說明,但是這些實施方式不構成對本發明 范圍的任何限制。在圖2所示的實施方式中,文件具有8個塊,每個塊包含8K字節的數據。在文 件管理系統中,屬于一個文件的塊通過組塊來管理。組塊包含一組塊(至少一個塊)。 在圖2中,組塊0包括塊0-2,組塊1包括塊10-11,組塊2包括塊12-14。雖然在本實 施方式中所有組塊中的塊的數量均不同,但在其他實施方式中數量可以相同。根據本 實施方式,采用6個描述符來描述每個組塊。所述6個描述符為StartBl0CkNumber、 TotalBlockNumber、PreviousChunkNumber、NextChunkNumber、UnusedSizeInFirstBlock 禾口 UnusedSizelnLastBlockοStartBlockNumber表示組塊的起始塊號,TotalBlockNumber表示組塊中塊的總 數,PreviousChunkNumber表示當前組塊之前的組塊號,NextChunkNumber表示當前組塊之 后的組塊號,UnusedSizelnFirstBlock表示組塊的第一塊中未用空間量(未被數據占據的 空間的比特數hUnusedSizelnLastBlock表示組塊的最后塊中未用空間量(未被數據占據 的空間的比特數)。采用最后兩個描述符的原因在于,在組塊被從中部刪除數據之后,最后 塊中的未用空間通常出現在刪除開始的塊,而第一塊中的未用空間通常出現在刪除結束的 塊。請參看圖2,將組塊 0-2 分別描述為(0,3,-1,1,0,0)、(10,2,0,2,0,0),和(12,3, 1,-1,0,0)ο第一組塊的描述符為(0,3,-1,1,0,0),其中第一描述符“O”表示當前組塊從塊 O開始,第二描述符“3”表示當前組塊中有3個塊,第三描述符“_1”表示當前組塊之前組塊 為“空(NULL) ”,第四描述符“1”表示當前組塊之后的組塊為組塊1,第五和第六描述符“O” 分別表示當前組塊的第一塊中的未用空間為O字節和當前組塊的最后塊中的未用空間為O字節,即組塊0中全部塊都包含8K字節數據。組塊1和2中的描述符與組塊0中描述符類 似。在本實施方式中,采用“NULL”來表示當前組塊的前一組塊或后一組塊是無效的,這意 味著當前組塊是文件的第一組塊或者最后組塊。例如,組塊0的前一組塊的系數為“NULL”, 組塊2的后一組塊的系數為“NULL”。在圖3所示另外一個實例中,文件中有3個組塊組塊0、組塊1和組塊2,用(10, 2,_1,1,1024,2048)、(20,4,0,2,0,0)和(28,6,1, -1,0,0)分別表示這三個組塊。從三個 組塊的描述符可以看出,組塊0開始于塊10,其長度是2個塊,每個塊為8K (8*1024)字節, 組塊0的第一塊中未使用空間的量為IK (8*1024)字節,組塊0的最后塊中未使用空間的量 為2K (8*1024)字節;組塊1開始于塊20,其長度是4個塊,每個塊為8K (8*1024)字節,組 塊1的第一塊和最后塊中未使用空間的量為0,這表示組塊1中為滿數據;組塊2開始于塊 28,其長度是6個塊,每個塊為8K (8*1024)字節,組塊2的第一塊和最后塊中未使用空間的 量為0。圖4和圖5說明了根據本發明實施方式的讀出操作的詳細流程。圖4示出了計算組塊中數據大小的實際長度的流程。流程開始于步驟410。在步 驟 420,計算組塊中數據的實際長度 ChunkLength,ChunkLength = TotalBlockNumber^Blo ckSize-UnusedSizeInFirstBlock-UnusedSizeInLastBlock,其中 TotalBlockNumber 是當 前組塊中塊總數。用每個塊的大小BlockSize (字節)乘以TotalBlockNumber,可以獲得當 前組塊占據的字節總數,而需要從當前組塊占據的字節總數除去UnusedSizelnLastBlock 和UnusedSizelnFirstBlock的大小,因為這些空間實際上是空閑的。當在步驟430確定當 前組塊不是文件中的最后組塊時,獲得當前組塊中數據的實際長度。流程終止于步驟460。 例如,組塊 O 的 ChunkLength 為 2*8K_1K_2K = 13Kbytes。但是,如果在步驟430確定當前組塊是文件中的最后組塊時,流程前進至步驟 440,以進一步確定占據當前組塊的當前文件的數據實際長度。此步驟用于排除最后組塊中 的保留空間(reserved space)。當向文件系統中寫入某些數據時,將分配更多空間以適應 這些數據,從而當在當前數據之后將另外的數據寫入相同文件時不會發生空間的再分配。 步驟440的目的是除去保留空間。在步驟440,確定ChunkLength是否大于FileLength與 ChunkStartPosition之間的差。FileLength是指示當前文件具有多少字節數據的參數, ChimkStartPosition指示當前組塊從何處開始或者當前組塊之前有多少字節數據。在圖3 中以組塊2為例。組塊長度為6*8K = 48Κ。FileLength為(4+6+2) *8Κ_3Κ = 93Κ。組塊2的 起始位置ChunkStartPosition為2*8K+4*8K_1K_2K = 45Κ字節,即存儲在組塊2的文件部 分從文件開始處偏移45Κ的位置開始。如果在步驟440的判斷結果為“是”,即ChunkLength 大于FileLength與ChunkStartPosition之間的差,則只讀出ChunkLength的數據,而此時 并不考慮剩余的數據。圖5是示意性讀出步驟的流程圖。讀出步驟開始于步驟510。在步驟511確定數據長度是否大于0,該步驟為有效性 檢驗。如果判斷結果為“否”,表示沒有數據可以讀出。然后流程前進至步驟512并結束。如 果存在可以讀出的數據,流程前進至步驟513以計算讀出所述文件所需的參數。在步驟513 中,首先計算出OffsetInChimk,該參數是指示讀出操作在當前組塊中的偏移的指針。例如, 組塊中第一可用數據字節的偏移量是“0”字節,組塊中第二可用數據字節的偏移量是“1”
7字節,等等。OffsetInChunk = FilePosition-ChunkStartPosition。文件位置是文件中的 偏移。例如,文件中第一可用數據字節的偏移量是“0”字節,文件中第二可用數據字節的偏 移量是“1”字節,等等。在圖3中還以組塊0為例進行說明。從組塊0的第一數據字節讀 出文件。對于組塊0中數據的第一字節并且也是文件的數據的第一字節,FilePosition為 0,ChunkStartPosition為0,因此OffsetInChunk也是0。如果文件是從數據的第五字節讀 出,則 FilePosition 為 5 字節并且 ChunkStartPosition 為 O 字節。因此 OffsetInChunk 為 5字節。則計算出組塊1中數據的第一字節的物理位置,即ReadOffset = ChunkStartAddr essInHardDisk+OffsetlnChunk+UnusedSizelnFirstBlockοChunkStartAddressInHardDisk 是硬盤上當前組塊的地址。因此對于組塊1,UnusedSizelnFirstBlock為IK字節,并且 ReadOffset為ChunkStartAddressHardDisk加上1KB,這表示應用程序首先找到組塊1的 物理位置,然后移動1KB的偏移量并到達將被讀出的數據的實際位置。還要判斷從當前組 土夬中可以讀出多少數據=AvailableSizeInChunk = ChunkLength-OffsetInChunk。對于組 塊 1,AvailableSizeInChunk 為 13K 字節。在步驟514進一步判斷將要讀出的數據量Length_to_Read是否大于當前組塊 中的可用數據AvailableSizelnChunk。此步驟用于判斷從當前組塊讀出數據是否已經足 夠。如果需要讀出更多數據,即步驟514判斷結果為“是”,則需要首先讀出當前組塊中的全 部數據。在步驟 515 設置 ReadSizeInChunk = AvailableSizelnChunk。如果步驟 514 判 斷結果為“否”,即需要讀出比當前組塊中可用數據量少的數據,則流程前進至步驟516,將 Length_to_Read設置為ReadSizelnChunk。在步驟515和516之后,流程前進至步驟517 以進行讀出操作,從位置ReadOffset讀出ReadSizelnChunk數據。在讀出操作之后,流程 前進至步驟518以更新參數Length_to_Read和FilePosition,其中Length_to_Read被更 新為 Length_to_Read-ReadSizeInChunk,因為根據上述流程已經讀出 ReadSizelnChunk 數 據,并且 FilePosition = FilePosition+ReadSizelnChunk。另外,在步驟519判斷文件的數據是否已經被完全讀出。如果判斷結果為“是”,即 更新的Length_to_Read大于0,則當前文件的某些數據還未讀出,應用程序前進至下一組 塊以在步驟520和521進行后續的讀出操作。在步驟521,ChunkStartPosition被更新為 前一 ChunkStartPosition 力口上前一 ChunkLength,艮口下一組塊的 ChunkStartPosition。如 果步驟519的判斷結果為“否”,即當前文件的全部數據均已經被讀出,則流程前進至步驟 522。請參看圖6和圖7,其示出了示例性寫入操作。圖6和圖7中的符號/標記/標識 符都與圖4和圖5類似,此處不再詳細說明。圖6是計算可以在組塊中寫入數據的自由空間量的流程圖。此流程開始于步 驟601。在步驟602,判斷當前組塊中數據的實際長度,該步驟與圖4的讀出步驟過程中 的操作類似,此處不再詳細說明。隨后在步驟603,判斷當前組塊是否為文件的最后組 塊。如果判斷結果為“否”,流程前進至步驟605并結束。如果判斷結果為“是”,流程前進 至步驟604,其中當前組塊中可用空閑空間是步驟602獲得的值加上文件的最后組塊的值 UnusedSizeInLastBlockο圖7示出了詳細的寫入操作。所述寫入操作開始于步驟710并進入步驟712,在該步驟判斷將寫入的數據長度是否有效。如果判斷結果為“否”,流程前進至步驟712并結束。如果判斷結果為 “是”,流程前進至步驟713,以計算在當前組塊寫入的位置、映射至硬盤的位置以及在當 前組塊中能夠寫入多少字節的數據。上述三個數值由OffsetlnChunk、WriteOffset和 AvailableWriteSizeInChunk表示。此處對OffsetlnChunk的計算與讀出操作過程相同。 但是,此處OffsetlnChunk用于計算寫入操作在當前組塊中開始的位置。WriteOffset表 示寫入當前文件的實際物理位置,其計算過程與圖4所示讀出操作過程中的ReadOffset相 似。AvailableWriteSizelnChunk顯示了在當前組塊中可以寫入的大小,其計算與讀出操作 中的AvailableSizeInChunk相似,不同之處是利用圖6所示步驟計算ChunkLength。在步 驟714,判斷當前組塊中是否有空間可以寫入數據,即AvailableWriteSizelnChunk是否大 于0。如果判斷結果為“否”,流程前進至步驟720以進一步考慮利用下一組塊的可能性。如 果步驟714的判斷結果為“是”,則在步驟715判斷寫入的數據長度Length_t0_Write是否 大于可以用于寫入操作的大小AvailableWriteSizelnChunk。如果步驟715的判斷結果為 “是”,即當前組塊中可以寫入的大小不足以進行數據寫入,因此需要更多組塊。然后流程前 進至步驟 716,AvailableWriteSizelnChunk 大小的數據被設置在 WriteSizelnChunk,用于 步驟718的寫入操作。如果判斷結果為“否”,即當前組塊具有足夠的空間來寫入數據。在 步驟717,將Length_to_Write設置為WriteSizelnChunk并且流程前進至步驟718,其中從 位置 WriteOffset 寫入 WriteSizelnChunk 的 data。然后,原始FilePosition 移動至由原始 FilePosition+ffriteSizelnChunk 所確定的位置。將要寫入的文件的剩余數據大小變為原始Length_t0_Write減去 WriteSizelnChunk (已經寫入組塊)。由于根據步驟715的判斷結果后續寫入操作有可能需要更多組塊,則在步驟 720判斷是否仍需要寫入某些數據。如果該步驟的判斷結果為“是”,則移動至下一組 塊以進行寫入操作,如步驟721和722所示。在步驟724,UnusedSizelnFirstBlock和 UnusedSizelnLastBlock被初始化為O并移動至下一組塊。將寫入操作開始的位置的指針 修改為 ChunkStartPosition = ChunkStartPosition+ChunkLength。從文件系統中刪除數據也是重要的流程。該流程示于圖8至圖11中。圖8示出了示例性刪除操作的流程圖。此流程開始于步驟801。在步驟802,進行判 斷以找到刪除開始的位置。該步驟為有效性檢驗。其后,判斷將被刪除的數據長度是否為有 效值(步驟803)。如果判斷結果為“否”,流程前進至步驟805并結束。如果判斷結果為“是”, 在步驟804確定刪除開始的位置OffsetlnChunk以及從當前組塊中刪除的數據的長度。利 用公式 Off setlnChunk = Fi lePosition-ChunkStartPosition 來計算 OffsetlnChunk,利用 ^ J^AvailableDeleteSize = ChunkLength—Offset InChunk 來計算 Avai lab IeDe IeteSize0 然后流程前進至步驟806,判斷將刪除的數據長度Length_t0_Delete是否大于當前組塊中 可用數據的大小。如果步驟806的判斷結果為“否”,表示當前組塊中具有足夠數據可供刪 除。則流程前進至步驟813-816以執行刪除操作。在步驟813,判斷OffsetlnChunk是否等于0。此步驟用于確定刪除操作是否從 組塊數據的第一字節開始。如果判斷結果為“否”,即當前組塊的刪除操作從組塊的中部開 始,則流程前進至步驟815,從由OffsetlnChunk指示的位置開始刪除當前組塊的數據。同 時,由于步驟806的判斷結果為“否”,因此相對于需要刪除的數據長度而言當前組塊中有更多的可用數據,因此在當前組塊中應該留有某些數據。在這種情況下,在步驟815只刪 除當前組塊的中部,并且流程結束于步驟816。如果步驟813的判斷結果為“是”,即刪除 操作從當前組塊的頭部開始。由于步驟806的判斷結果為“否”,相對于將刪除的數據而言 具有更多可用數據,則在步驟814刪除當前組塊的頭部。當從當前組塊的頭部開始進行刪 除操作時,剩余塊中的第一塊的頭部可能被部分刪除。則該塊變成了部分填充的塊,換言 之其未對齊(aligned)。采用新的UnusedSizelnFirstBlock描述當前組塊的剩余第一塊 的未用頭部。采用下述公式計算新的 UnusedSizelnFirstBlock :UnusedSizeInFirstBlock =(Length_to_Delete+UnusedSizeInFirstBlock) % BlockSize0 (Length_to_ Delete+UnusedSizelnFirstBlock)表示將釋放的區域長度。“ % ”運算對應于獲得除法的 補數(arithmetical complement)。如果補數不為零,表示在刪除之后剩余組塊的第一塊的 頭部中還有未被數據占據的空間。圖9示出了一個實施例。在圖9中,當前組塊中有5個塊,即塊1-5。在塊1的頭部有3K字節的未用空 間,在塊5的尾部有2K的未用空間。S卩,當前組塊的UnusedSizelnFirstBlock為3K字 節,當前組塊的UnusedSizelnLastBlock為2K字節。刪除從塊1的第一數據開始,將刪 除18K字節的數據。因此Length_t0_Delete為18K字節。在刪除之后,塊1-2將被釋 放,因為它們被完全刪除。刪除之后的組塊的UnusedSizelnLastBlock將與刪除之前原 組塊的 UnusedSizelnLastBlock 相同,UnusedSizelnFirstBlock 將變為(Length_to_ Delete+UnusedSizelnFirstBlock) % BlockSize = (18+3) % 8 = 5K 字節。如果步驟806的判斷結果為“是”,刪除整個當前組塊也不夠。在這種情況 下,流程前進至步驟807,判斷對當前組塊的刪除將從頭部還是中部開始。如果該判 斷結果為“否”,刪除操作從中部的某個位置開始進行,流程前進至步驟808,以從位置 OffsetInChunk開始刪除組塊中的空間。因為步驟806的判斷結果為“是”,表示應當 刪除從OfTsetInChimk開始的數據,而組塊頭部的某些數據仍然存在,如果當前組塊的 UnusedSizelnFirstBlock和數據的大小OffsetInChunk的總數不構成完整塊(滿8K字 節),在當前組塊的尾部將存在某些未用空間,因此在步驟808,利用下面的公式計算當前 組塊的新 UnusedSizelnLastBlock :UnusedSiζeInLastBlock = BlockSize- (OffsetlnChun k+UnusedSizelnFirstBlock) % BlockSize。此處,“OffsetlnChunk+UnusedSizelnFirstBlo ck”表示某些數據仍然存在于組塊中。“% ”運算獲得除法的補數。在“% ”運算之后,獲得 新的最后塊中剩余數據量。從BlockSize中減去剩余數據量以獲得最后塊中的未用大小。 圖10是說明該流程的實施例。在圖10中,當前組塊有5個塊,即塊1-5。在塊1的頭部有5K字節的未用空間, 在塊5的尾部有2K的未用空間。S卩,當前組塊的UnusedSizelnFirstBlock為5K字節, 當前組塊的UnusedSizelnLastBlock為3K字節。刪除操作從塊3中6K字節開始,將刪 除15K字節的數據。OffsetInChimk為17K字節。在刪除之后,釋放塊4_5,當前組塊的 UnusedSizelnFirstBlock 將不變,因此將有新 UnusedSizelnLastBlock 值。該新值為 Blo ckSize-(OffsetInChunk+UnusedSizeInFirstBlock) % BlockSize = 8K_((17+5) % 8)Κ = 8Κ-6Κ = 2Κ 字節。但是,如果步驟807的判斷結果為“是”,則刪除操作從當前組塊的頭部開始。因為 步驟806的判斷結果對于步驟807為“是”,在步驟809刪除整個組塊。在此操作之后流程
10前進至下一組塊并返回步驟803。如果圖8所示刪除是刪除了組塊的中部,即在步驟815處理,組塊被分為兩個組 塊。圖11示出了處理這種情況的操作。流程開始于步驟1111。在步驟1112,通過公式Offset =OffsetlnChunk+UnusedSizelnChunk 計算描述符 “Offset”。隨后在步驟 1113 判斷是 否在組塊中的相同塊上進行了刪除,即刪除組塊的中部。判斷方法是判斷是否(Offset/ BlockSize) = (Offset+Length_to_Delete)/BlockSize。此處“/”是獲得結果的整數部分 的運算。如果步驟1113的判斷結果為“否”,表示從當前組塊的中部刪除了組塊的某些整塊 并且當前組塊被分為兩個組塊。如果步驟1113的判斷結果為“是”,表示從塊的中部進行刪 除操作。流程前進至步驟1114,拷貝塊的后部以重寫被刪除的內容,將Offset的數值更新 為 Offset 的原始值加上(BlockSize-(Offset+Length_to_Delete) % BlockSize)。在步驟 1115的處理之后,在步驟1116和1117更新某些標識符的數值。在步驟1116和1117將設置新組塊的描述符并改變原組塊的描述符。下面將參照圖12進一步說明步驟1116和1117的過程。在圖12中,當前組 土夬(例如組塊5)具有6個塊,StartBlockNumer為塊10,TotalBlockNumber為6個塊, PreviousChunkNumber 為組塊 4, NextChunkNumber 為組塊 6, UnusedSizeInFirstBlock 為 3K 字節,UnusedSizelnLastBlock 為 4K 字節。在進行刪除操作時,OffsetInChunk為 15K 字節,Length_to_Delete 為 2IK 字 節,即從15K字節之后的位置開始刪除21K字節數據。因此Offset為OffsetInChunk+Un usedSizelnFirstBlock = 15K+3K = 18K 字節。根據步驟 1113,因為(Offset/Block)= (18K/8K) Φ ((Offset) +Length_to_Delete) = ((18K+21K)/8K),刪除未發生在單一組塊 中。在刪除操作之后,原組塊5將變為新組塊5和另一組塊(如果在原始文件系統中有7個 組塊,則為組塊8)。對于新組塊5,StartBlockNumer未變。由于在步驟1116中(Offset% BlockSize) = (18K % 8K) = 2 乒 0,新組塊 5 的 TotalBlockNumber 將等于((Offset/ BlockSize)+l),即變為3個塊。新組塊5的PreviousChunkNumber與原組塊5的相同。 NextChunkNumber變為組塊8。新組塊5的UnusedSizelnFirstBlock與原組塊5的相同。 新組塊 5 的 UnusedSizelnLastBlock 為 BlockSize-(Offset% BlockSize) = 8K-(18% 8) K = 8Κ-2Κ = 6Κ 字節。對于新組塊 8,StartBlockNumer 為新組塊 5 的 StartBlockNumber 力口 上 (Offset+Length_to_Delete)/BlockSize,等于 10+(18K+21K)/8K = 10+4 = 14,即為塊 14。 TotalBlockNumber 為新組塊 5 的 TotelBlockNumber 減去(Offset+Length_to_Delete)/ BlockSize,等于6-4 = 2,即新組塊8中有2個塊。組塊8的PreviousChunkNumber為組 塊 5,NextChunkNumber 為組塊 6。組塊 8 的 UnusedSizelnFirstBlock 為(Offset+Length_ to_Delete) % BlockSize = (18+21) % 8 = 7K 字節,UnusedSizelnLastBlock 與原組塊 5 具有相同大小,即4K字節。塊13被從文件系統中完全刪除,因此其空間被釋放。上述的文件系統可以是機頂盒(Set Top Box)和其他裝置中的PVR文件系統。上面說明了本發明的幾個實施方式。可以理解,對上述實施方式可以進行各種修 改。另外,本領域普通技術人員可以理解,對于說明書中說明的結構和方法,可以使用具有 實質上相同的功能、采用實質上相同的方式并獲得實質上相同的效果的其他結構和方法來 替代進行實施。因此,本說明書所述實施方式以及上述相同的實施方式都屬于權利要求所
11限定的保護范圍。
權利要求
一種用于管理文件系統中的文件數據的方法,其中將用于存儲文件數據的存儲空間分為多個大小相同并且順序編號的塊,其特征在于,所述塊設置在順序編號的組塊中,并且每個組塊包括至少一個塊,對于一個組塊,所述方法包括下述步驟在刪除文件中的數據的步驟之后,利用第一管理數據和第二管理數據記錄每個組塊中的第一塊的頭部和最后塊的尾部中未被數據占據的空間大小,所述空間大小小于塊的大小。
2.根據權利要求1所述的方法,其中所述刪除步驟包括從所述組塊的頭部或者尾部刪 除數據。
3.根據權利要求1或2所述的方法,其中連接包含給定文件的數據的組塊,并且將連接 信息記錄在文件系統管理數據中。
4.根據權利要求1至3其中任一所述的方法,其中如果一個組塊被完全刪除,釋放用于 所述刪除的組塊的存儲空間并連接被刪除的組塊的前面和后面的組塊。
5.根據權利要求1所述的方法,還包括下述步驟當文件部分被刪除并且刪除起始位置和結束位置沒有位于相同的塊中但是位于相同 的組塊中時,所述組塊被分為第一新組塊和第二新組塊;采用第三管理數據和第四管理數據分別記錄第二新組塊的第一塊的頭部以及最后塊 的尾部中的空閑空間;并且連接第一新組塊和第二新組塊以保持文件的連續性。
6.根據權利要求5所述的方法,其中采用刪除之前原組塊號對第一新組塊進行編號, 緊隨文件系統中最初的最后組塊號對第二新組塊進行編號。
7.根據權利要求5或6所述的方法,其中如果一個組塊被完全刪除,釋放該塊的空間。
8.根據權利要求1所述的方法,還包括下述步驟當從組塊的塊的中部刪除某些數據時,將所述塊中被刪除的數據之后的剩余的第二半部數據移動到緊隨塊中數據的第一半 部數據之后的位置,將發生刪除的塊和組塊中該塊之前的塊重組為第一新組塊,并且如果在發生刪除的塊 之后還有塊,將這些之后的塊重組為第二新組塊,利用第三管理數據和第四管理數據以分別記錄第二新組塊中第一塊的頭部和最后塊 的尾部中的空閑空間的大小,并且連接第一新組塊與第二新組塊。
9.根據權利要求8所述的方法,其中采用刪除之前初始組塊號對第一新組塊進行編 號,緊隨文件系統中最初的最后組塊號對第二新組塊進行編號。
10.根據權利要求8或9所述的方法,其中將組塊之間的連接信息記錄在文件系統管理 數據中。
11.一種文件系統,其中將用于存儲文件數據的存儲空間分為多個大小相同并且順序 編號的塊,其特征在于,所述塊設置在順序編號的組塊中,并且每個組塊包括至少一個塊, 所述文件系統包括用于每個組塊的管理數據,用于指示組塊的頭部和/或尾部中空閑存儲 空間的大小,其中所述空閑存儲空間的大小小于塊的大小。
12.根據權利要求11所述的文件系統,其中利用第一管理數據和第二管理數據記錄組塊中的第一塊的頭部和最后塊的尾部中的空間大小。
13.根據權利要求12所述的文件系統,其中連接用于文件的全部組塊以保持文件的連 續性,并且將連接信息存儲在文件系統管理數據中。
14.一種包括權利要求11-13中任一所述文件系統的存儲裝置。
全文摘要
本發明提供了用于管理和編輯文件系統中文件的方法和裝置。在管理文件系統中的文件數據的方法中,將用于存儲文件數據的存儲空間分為多個大小相同并且順序編號的塊。所述塊設置在順序編號的組塊中,并且每個組塊包括至少一個塊。對于一個組塊,所述方法包括下述步驟在刪除文件中的數據的步驟之后,利用第一管理數據和第二管理數據記錄每個組塊中的第一塊的頭部和最后塊的尾部中未被數據占據的空間大小,所述空間大小小于塊的大小。
文檔編號G11B27/034GK101911198SQ200880122672
公開日2010年12月8日 申請日期2008年11月19日 優先權日2007年12月27日
發明者張曉龍, 胡建強 申請人:湯姆遜許可公司