1. 使用者空間檔案系統
使用者空間檔案系統位十核心之外,實現為一個使用者進程或者一個運行庫。在使用者空間開發檔案系統的主要原因是,開發工作相對比較簡單。這種方法避免了核心編程的複雜性,極大的簡化了開發工作。使用者級檔案系統的另一個優點是,檔案系統可以由使用者自己安裝,不需要系統管理員的參與,這給使用者使用檔案系統提供了很大的靈活性。一個運行在使用者空間的檔案系統這樣與使用者進程和作業系統進行互動(以讀檔案操作為樣本):
1. 一個使用者進程發出一個讀檔案的請求。
2. 這個請求被轉換為一個核心系統調用,核心調用使用者級檔案系統。
3. 使用者級檔案系統產生另一個核心調用,從儲存介質中提取讀操作要求的資料。
4. 核心將資料返回給使用者級檔案系統。
5. 使用者級檔案系統再次調用核心操作,準備把資料返回給使用者進程。
6. 核心將資料傳給使用者進程完成讀操作。
這類檔案系統的典型例子有以FUSE為模板開發出的各種檔案系統。FUSE是一個使用者空間檔案系統的模板,它有一組檔案操作例如read(), write(), lseek0)的介面,只要實現這些介面就能構建一個使用者空間檔案系統。例如,在這些介面中加入加密功能,就能實現加密檔案系統,加入壓縮功能,就能實現壓縮檔系統。使用者空間檔案系統的主要缺點是效能不高,因為需要多次環境切換。
2. 核心檔案系統
核心檔案系統是最典型的檔案系統開發方式,常見的基十磁招‘的檔案系統都是以這種形式實現的,如EXT2和JF S。實現一個核心檔案系統通常要考慮如下細節:
1. 設計一合適的資料格式。這將決定檔案系統的效率和磁碟的空間利用率。一般來說沒有一種通用的資料格式可以適合所有的應用需求,有些格式適合儲存大量的小檔案,Ifu有些格式儲存大檔案具有更好的效能。
2. 如何保證檔案系統的一致性。當電腦系統非正常終止時,很可能有存在於緩衝中的資料還沒有寫入磁招‘,這可能會導致檔案系統出現不一致的中繼資料。EXT3使用口志來保證一致性。
3. 提供使用者工具。核心檔案系統通常需要提供格式化、參數調整和磁碟磁碟重組等使用者工具。
開發一個核心檔案系統要複雜的多,因為檔案系統直接和存放裝置的驅動程式互動,這要求開發人員深入理解作業系統的內部結構。這種方法沒有充分利用以前的開發成果,要重新設計檔案系統的所有功能。
核心檔案系統的主要優點是它的效能比使用者空間檔案系統要好得多,因為它作為核心特權模式運行,沒有使用者空間檔案系統的附加的環境切換操作。
3. 可堆疊檔案系統
可堆疊檔案系統是利用vnode堆疊技術實現的。vnode是指Unix系統在虛擬檔案系統層用來表示一個開啟的檔案或目錄的對象,具體到Linux來說vnode就是指VFS中的mode對象。vnode介面抽象出了核心其它部分能對一個檔案系統進行的操作,隱藏了檔案系統對檔案操作的具體實現,從Ifu允許系統可以透明的訪問一個檔案系統,Ifu不用關心其具體類型。vnode節點概念的一個改進是vnode分層堆疊。這種技術讓一個vnode介面調用另一個,從而使檔案系統功能設計模組化。有了vnode分層堆疊後,可以有多個vnode並b_它們按順序被調用。可堆疊檔案系統實現了堆疊式的vnode介面,從Ifu可以工作在另一個檔案系統之上,利用下層檔案系統進行基本的資料訪問,並在其之增加新的特性(如提供密和壓縮功能)。
可堆疊檔案系統實現了VFS定義的介面,因此可以象不同檔案系統一樣掛載在VFS之下工作,但與基十塊裝置的檔案系統(如EXT2)或者網路檔案系統(NFS)不同,可堆疊檔案系統本身並不提供基本的檔案資料存放區,Ifu是依賴底層的檔案系統來實現。它的基本工作原理是:接收檔案系統相關的系統調用,對參數進行相關處理,然後轉寄到下層檔案系統擷取返回結果,進一步處理並返回最終結果。可堆疊檔案系統可以在大部分Unix系統中實現。