複製鏈接
請複製以下鏈接發送給好友

分配文件

鎖定
分配文件是一個非常大,而且無法訪問的文件,負責跟蹤宗卷中所有塊的分配情況。 [1] 
中文名
分配文件
外文名
allocate file
定    義
跟蹤宗卷中所有塊的分配情況
類    型
位圖形式
系    統
計算機
應用學科
計算機原理

分配文件技術簡介

分配文件設計為一個簡單的位圖形式,其中每一個位表示一個數據塊,如果對應的數據塊被使用了(或者可能為一個壞塊),那麼這個位會被置位。分配文件的大小直接取決於宗卷大小和塊大小,可以通過(宗卷大小/塊大小)/8直接計算得到,其中宗捲包含了(宗卷大小/塊大小)個數據塊,而每一個數據塊都對應一個位。
由於分配文件本身也是一個文件,因此可能會碎片化。如果宗卷被擴大了,那麼分配文件也會增長,因此實現了非常可擴展的方案。分配文件通常是連續的,而且包含在單獨一個extent中,因為分配文件是在創建文件系統時通過mkfs程序創建的。此外,文件系統中分配塊大小的動態變化也比較容易實現。
最新版本的HFS(在Lion中)引入了一個基於紅黑樹的分配器(#ifdef CONFIG_HFS_ALLOC_RBTREE)。這個分配器有一點類似於XFS分配數據塊的方法,當磁盤碎片化越來越嚴重時,提供更高效的基於紅黑樹的分配機制可以快速找到連續的數據塊。有一個內核線程運行hfs_initialize_allocator()函數從宗卷的位圖創建兩個紅黑樹(一個用於元數據區域,另一個用於宗卷中剩下的其他部分)。注意,這些樹創建在內存中,沒有對應的磁盤存儲形式,因此不需要對文件系統的磁盤結構進行修改。 [1] 

分配文件HFS優勢

與HFS使用一個稱為“卷位圖”的特殊區域存儲分配塊的信息不同,HFS+使用一個“分配文件”來表明卷中每個分配塊是否已經分配給文件使用。分配文件是一個位圖文件,這個位圖文件中的每個bit對應該卷中的一個分配塊,如果某個位進行了設置,則説明它所對應的分配塊已經被文件系統中的文件所使用;如果某個位為空,説明還沒有被使用。
HFS+卷使用分配文件有以下幾點優勢:
1.使用文件允許分配文件為其自身分配存儲塊,這種方式相對簡單得多,因為這樣卷就只有一種塊類型——分配塊。HFS之所以複雜是因為它使用扇區來存儲分配位圖,用分配塊來存儲文件。
2.分配文件可以是不連續的,允許分配信息和用户數據交叉存取。許多現代的文件系統都採取這種方式以減少文件增大的過程中的磁頭運動行程。
3.分配文件可以擴展。因為分配文件的可擴展性,所以很容易增加磁盤上的分配塊的數量。這無論是對於想減小分配塊的大小還是擴大整個磁盤的空間都是非常有用的。
4.分配文件的可收縮性。可以為不同大小的卷創建適當的鏡像,回寫至磁盤時,即便磁盤很大,也可以建立足夠的分配文件數據;如果寫入較小的磁盤,分配文件又可以收縮至適當的大小。
5.分配文件中的每個字節可以描述8個分配塊的狀態。文件中偏移X處的字節包
含分配塊(x*8)至(x*8+7)這8個分配塊的狀態。在每個字節內部,最高位用來描述這個字節所描述的分配塊中塊號最低的分配塊,最低位用來描述分配塊號最高的分配塊。 [2] 

分配文件分配文件大小

(1)分配文件的大小依賴於卷中分配塊的數量。也就是磁盤上扇區的數量和卷的分配塊的大小(每分配塊的扇區數)。例如:一個大小為1GB的磁盤上的卷,如果分配塊大小為4KB,則需要大小為256Kb(32KB,即8個分配塊)的分配文件。因此分配塊文件本身也需要佔用分配塊,它總是佔用整數個分配塊。
(2)對於一個給定大小的卷,分配文件的大小可以大於這個卷所需要的最小分配文件字節數。位圖中所有未使用的位必須全部設置為0。
(3)因為用32bit來描述分配文件的大小,它的上限可以達到512MB,這從根本上突破了HFS卷中8KB的限制。
(4)另外,因為整個卷都由分配塊來記錄是否已被分配使用,卷頭、備份卷頭以及保留扇區(開始的兩個扇區和最後的一個扇區】必須被標記為“已分配”。
實際標記的已分配塊數因分配塊大小的不同而有所變化。例如:
1.如果分配塊大小為512字節,則開始的三個分配塊和最後的兩個分配塊被標記為已分配。
2.如果分配塊大小為1024字節,則開始的兩個分配塊和最後的一個分配塊被標記為已分配。
3.如果分配塊的大小更大些,則只有開始的一個分配塊和最後的一個分配塊被標記為已分配。 [2] 
參考資料
  • 1.    (美)JONATHAN LEVIN著;鄭思遙,房佩慈譯,深入解析 MAC OS X & IOS 操作系統,清華大學出版社,2014.03,第581頁
  • 2.    馬林編著,數據重現:文件系統原理精解與數據恢復最佳實踐,清華大學出版社,2009.04,363-364