上回我們提到檔案系統中檔案的抽象化(檔案的抽象化),今天就要來談談目錄的抽象化。在儲存個別檔案之外,檔案系統也要提供組織一群檔案的的能力,而這個角色就是目錄。
上回我們提到檔案系統中檔案的抽象化(檔案的抽象化),今天就要來談談目錄的抽象化。在儲存個別檔案之外,檔案系統也要提供組織一群檔案的的能力,而這個角色就是目錄。
目錄的內容會包含一堆檔案或是其他目錄,所以在檔案系統中,目錄要記錄檔案名稱以及這些檔案的FCB資訊。檔名是目錄在搜尋檔案的關鍵,而FCB得以讓檔案系統取得檔案以及檔案的metadata。當使用者要開啟一個檔案時,檔案系統必須蒐尋目錄並找到該檔名,如果找不到,系統就要回應錯誤訊息 (如:file not found);如果找到了,檔案系統則藉由FCB資訊去找到檔案的metadata,接著才能取得該檔案的內容。
要在目錄中維護一堆檔案名稱最簡單的方法就是利用陣列(Array),依序儲存每一筆檔案名稱。但是這種線性儲存的方法在檔案很多的時候會變得很沒有效率,因為每當要尋找一個檔案時,檔案系統必須要搜尋整個array,也就要花費很多時間。比較實務的作法就是將資料排序(Sorting)過,以B-Tree的資料結構來儲存。B-Tree將檔案名稱作為key,讓搜尋更有效率。B-Tree也能記錄很大的數目,所以使得目錄得以儲存很多的檔案。
在目錄的呈現上,**階層化(Hierarchy)**是最自然的表現。這種階層化的功能,簡單來說就是要能夠讓(上層)目錄參考其他(下層)目錄。實作的方式就是要讓目錄中的檔名,可以是其他目錄或是連結。
在此補充一下檔案以及目錄名稱在設計上需要注意的限制,譬如說檔名長度、字元集(Character Set)、檔案數量等等。以目前的檔案系統來說,除了FAT系列之外,其他的限制已經很少了。但是就字元集的部分,一些用來作為表示目錄階層如slash(/)與blackslash(\)仍不被接受,為的是避免檔案系統處理錯誤。現在的檔案系統多朝向支援Unicode來設計,不僅檔名能更有彈性,亦可支援多國語系。
系列文章列表
檔案系統的設計與效能 - 檔案的抽象化
檔案系統的設計與效能 - 關鍵詞的定義
檔案系統的設計與效能 - 基本需求
檔案系統的設計與效能 - 讓磁碟與檔案系統更有彈性的LVM
檔案系統的設計與效能 - 外篇: 磁碟中的MBR與Bootloader
檔案系統的設計與效能 - 磁碟結構對檔案系統效能的影響
檔案系統的設計與效能 - 磁碟系統的運作
檔案系統的設計與效能 - 檔案系統的構成
檔案系統的設計與效能 - 為甚麼要有檔案系統
檔案系統的設計與效能 - Outline.