Directory Implementation

Directory 是 file name → FCB / inode / MFT record 的 lookup table。資料結構會影響 pathname lookup、create/delete、ls 與 recovery。


Linear List

每個 entry 保存 file name 與 FCB identifier。Create 時線性搜尋確認無同名,再插入 entry;delete 時搜尋後把 entry 標成 unused、接到 free-entry list,或用最後一筆覆蓋。

  • 優點:簡單、metadata 小、容易 recovery。
  • 缺點:lookup O(n);大型 directory 很慢。
  • 若保持 sorted,可 binary search,但 insert/delete 要搬 entries。

Hash Table

用 file name hash 到 bucket,再找 bucket 內 entry。

file name → hash → bucket → directory entry
  • 優點:lookup / insert / delete 通常比 linear list 快。
  • 代價:collision handling、rehash、metadata 損壞時 recovery 較複雜。

小 directory 用 linear list 加 cache 通常夠;大型 source tree、maildir、package cache 常需要 hash/tree/indexed directory。