檔案系統實作
鏈結配置(linked allocation)
想像一場尋寶遊戲,每一條線索都告訴你下一條藏在哪裡。你從第一條線索開始,它指向公園另一頭的某處,那裡放著第二條線索和指向第三條的指標,如此一路下去,直到最後一條說「遊戲結束」。鏈結配置就是這樣存放檔案的:檔案的各個區塊可以放在磁碟上任何地方,而每個區塊在資料旁邊還含有一個指向該檔案「下一個區塊」的指標。
檔案的目錄項目(或索引節點)只需記住兩件事:第一個區塊的位址,通常還有最後一個區塊。要讀整個檔案,你從第一個區塊開始,用它尾端的指標找到第二個,再順著這條鏈一直走到結尾(用一個特殊的結束標記,像 -1,來收尾)。檔案要長大也出奇地容易:抓任何一個空閒區塊、寫進資料、把原本的最後一個區塊改成指向它即可——不需要一整段連續的空閒空間,所以外部碎裂根本不會發生。
代價就藏在這份彈性裡。要讀第 500 個區塊,得先走過前面 499 個才能找到它,所以隨機存取很慢——鏈結配置其實只適合循序讀取。更糟的是,指標和資料混在一起,於是一個能用的資料區塊不再是乾淨的二的次方大小;而且只要一個指標損壞,檔案後面就全毀了。這些弱點正是檔案配置表(FAT)被發明出來的原因:它把所有指標從資料區塊裡抽出來,集中到一張表中。
一個 4 區塊的檔案,依序住在磁碟區塊 9、16、1、25。目錄說「從 9 開始」。區塊 9 的資料尾端帶著指標 16;區塊 16 指向 1;區塊 1 指向 25;區塊 25 尾端是 -1。要讀第 3 個區塊(也就是磁碟區塊 1),得先一路跳 9 -> 16 -> 1。
區塊散落各處,每個指向下一個——好擴充,卻難以定位跳讀。
鏈結配置沒有外部碎裂、擴充極易,但隨機存取與可靠性都差——一個遺失的指標就能讓檔案後半段全部失聯。
又稱
另見