
68
|
第二章
VFS 這個抽象機制,係透過一個
共同檔案模型
(
common file model
)來實作,共同檔案
模型是 Linux 中所有檔案系統的基礎。經由函式指標以及各種物件導向的做法,
9
共同檔
案模型為 Linux 核心的檔案系統提供了一個必須遵循的框架。這讓 VFS 得以全面進行檔
案系統的要求。此框架提供了掛勾以便支援讀取、建立連結、同步等等功能。然後每種
檔案系統可以註冊其特有的函式,以便處理其有所能進行的操作。
此做法讓各種檔案系統之間,具有一定程度的共同性。例如,VFS 會用到的 inode(資
訊節點)、superblock(超級區塊)以及 directory entry(目錄項目)等物件。然而,一
個非源自 Unix 的檔案系統,可能會欠缺 Unix-like 的概念(例如 inode),必須予以克
服。的確克服了:Linux 支援 FAT 和 NTFS 之類的檔案系統,而不會有問題。
VFS 的好處多多。單一系統呼叫可以讀取
任何
儲存媒體上的
任何
檔案系統;單一公用程
式可以從一個檔案系統複製到任何其他檔案系統。所有檔案系統均支援相同的概念、相
同的介面以及相同的呼叫。這一切都能夠運作—而且運作地很好。
當一個應用程式進行
read()
系統呼叫時,它會經歷一個有趣的旅程。C 程式庫所提供
的系統呼叫定義,在編譯期間會被轉換成適當的 trap 陳述(statement)。當一個用戶
空間行程陷入(trapped into)核心後,控制權會透過系統呼叫處理程序(system call