1. 程式人生 > >VFS(虛擬檔案系統)

VFS(虛擬檔案系統)



一、虛擬檔案系統介紹

        對於一個作業系統來說,程序管理和檔案系統是非常重要的兩部分。“檔案系統”是一種特定的檔案格式。除Linux本身的檔案系統Ext2外,如何使Linux支援其它各

種不同檔案系統呢?那麼就要將對各種檔案系統的操作和管理納入到一個統一的框架中。讓核心中的檔案系統介面成為一條檔案系統“匯流排”,使得使用者程式可以通

過同一個檔案系統操作介面(即同一組系統呼叫,對各種不同的檔案系統(以及檔案)進行操作。這樣就可以對使用者程式隱去各種不同檔案系統的實現細節,為使用者程

序提供一個統一的、抽象的、虛擬的檔案系統介面),這就是所謂的“虛擬檔案系統”(VFS: Virtual Filesystem System)。這個抽象的介面主要是由一組標準的、抽象的檔案操作構成,以系統呼叫的形式提供於使用者程式,如read()、write()、lseek()等。這樣使用者程式就可以把所有的檔案都看成一致的、抽象的VFS,通過這些系統呼叫對檔案進行操作而無需關心具體的檔案屬於什麼檔案系統以及具體檔案系統的設計和實現。

二、file 和 inode 結構體

        file和inode是vfs中兩個重要的結構體。

        file結構體代表一個開啟的檔案(裝置對應於裝置檔案) ,系統中每個開啟的檔案在核心空間都有一個關聯的 struct file。它由核心在開啟檔案時建立,並傳遞給在檔案上進行操作的任何函式。在檔案的所有例項都關閉後,核心釋放這個資料結構。在核心和驅動原始碼中,struct file 的指標通常被命名為 file 或 filp(即 file pointer)。

        VFS inode 包含檔案訪問許可權、屬主、組、大小、生成時間、訪問時間、最後修改時間等資訊。它是 Linux 管理檔案系統的最基本單位,也是檔案系統連線任何子目錄、檔案的橋樑,