檔案系統實作

索引配置(indexed allocation)

想想一本書後面的索引。你不必一頁一頁翻去找某個主題出現的每一處,而是翻到一頁,它依序列出所有相關頁碼,讓你直接跳到任何一頁。索引配置給每個檔案一份自己的小索引:一個單獨的區塊,叫做索引區塊,裡面存著一張有序清單,列出組成此檔案的所有磁碟區塊位址。

建立檔案時,檔案系統會為它撥出一個索引區塊。索引區塊的第 0 格放檔案第一個資料區塊的位址,第 1 格放第二個,依此類推;空的格子(常用特殊的空值表示)標記尚未使用的區塊。要讀檔案的第 i 個區塊,只要看索引區塊的第 i 格然後直接過去——真正的隨機存取,沒有鏈可走。目錄項目只指向索引區塊即可。這既把所有指標放在一起(像 FAT),又是每個檔案一份(不像 FAT 那張巨表),所以開檔時,這個檔案需要的指標會一起被載入。

索引配置一次治好鏈結配置的兩大毛病:沒有外部碎裂(區塊可放任何地方)、隨機存取快(一次查找,不必走鏈)。它自己的問題在於索引區塊的大小。小檔案會浪費索引區塊的大部分(內部浪費),而非常大的檔案可能需要的指標比一個索引區塊裝得下的還多。對於後一個問題,經典的 Unix 解法是把索引做成多層——加入間接區塊——這就是下一個概念。

一個 3 區塊的檔案,索引區塊是 14。區塊 14 裡面:slot[0]=9、slot[1]=16、slot[2]=1,其餘為空。要讀此檔的最後一個區塊,作業系統讀索引區塊 14,取 slot[2]=1,直接前往磁碟區塊 1——多一次讀取,之後即可直接存取任何區塊。

每個檔案一個索引區塊,列出它所有資料區塊的位址,提供真正的隨機存取。

索引配置以一點空間(那個對極小檔案幾乎全空的索引區塊)換取快速隨機存取與「無外部碎裂」——而單一索引區塊會限制檔案最大尺寸,除非改用多層。

又稱
indexed file allocationindex block索引式配置索引區塊