虚拟文件系统(Virtual File System,VFS)
Linux虛擬文件系統
Linux包含一個通用的、強有力的文件處理機制,該機制利用虛擬文件系統(Virtual File System,VFS)來支持大量的文件管理系統和文件結構。
- VFS向用戶進程提供了一個簡單的,統一的文件系統接口。
- VFS定義了一個能代表任何可想到的文件系統的通用特征和行為的通用文件模型。
- VFS認為文件是計算機大容量存儲器上的對象。這些計算機大容量存儲器具有共同的特征,這與目標文件系統或底層的處理器硬件無關。
- 文件有一個符號名,以便在一個文件系統的特定目錄下能唯一地標識該文件。
- 同時文件有一個所有者、對未授權的訪問或修改的保護和其他一系列屬性。
- 文件可以被創建、從中讀、向它寫或刪除。
- 對于任何特定文件系統,需要一個映射模塊來轉換實際文件系統的特征到虛擬文件系統所期望的特征。
圖12.17展示了Linux文件系統策略的關鍵組成成分。
- 用戶進程通過使用VFS文件方案來發起文件系統調用。
- VFS通過特定文件系統的一個映射函數轉換該系統調用到內部的一個特定文件系統的功能調用(例如IBM的JFS)。
- 在很多情況下,映射函數僅僅是一個方案的文件系統功能調用到另一個方案的文件系統功能調用的映射。
- 在某些情況下,映射函數會比較復雜。例如,一些文件系統使用存儲目錄樹中每個文件位置的文件分配表。在這些文件系統中,目錄并不是文件。這些文件系統的映射函數必要時必須能動態創建與目錄相對應的文件。在任何情況下,原來用戶的文件系統調用必須轉換成目標文件系統的調用。這樣就調用了目標文件系統的相應功能去完成在文件或目錄上的相應請求,該操作的結果以類似的方式返回給用戶進程。
VFS在 Linux內核中所起的作用如圖12.18所示。當進程發起一個面向文件的系統調用時,內核調用VFS 中的一個函數。該函數處理完與具體文件系統無關的操作后,調用目標文件系統中的相應函數。這個調用通過一個轉換VFS的調用到目標文件系統調用的映射函數來實現。VFS獨立于任何具體文件系統。因此映射函數的實現是文件系統在Linux上的實現的一部分。目標文件系統轉換文件系統請求到面向設備的指令。
VFS是一個面向對象的方案。因為VFS不是用支持面向對象的語言(如C++和 Java)來實現的,而是使用C語言來實現的,因此VFS的對象可以簡單地實現為C語言的結構。每一個對象包含數據和函數指針。這些函數指針指向操作這些數據的文件系統的實現函數。VFS主要的四個對象如下:
- 超級塊對象:代表一個特定的已掛接的文件系統。
- 索引節點對象:代表一個特定的文件。
- 目錄對象:代表一個特定的目錄項。
- 文件對象:代表一個與進程相關的打開的文件。
這個方案是基于UNIX文件系統中所使用的概念的。
UNIX文件系統的關鍵概念如下。一個文件系統由層次目錄組成。目錄的概念和許多非UNIX平臺中的文件夾是一樣的,可以包含文件和其他目錄。由于一個目錄可能包含其他目錄,因此就形成了一個樹結構。在樹結構中從根開始的路徑由一系列目錄項組成,最后以目錄項或文件名結束。在UNIX中,目錄是用一個列出了該目錄所包含的文件名和目錄的文件來實現的。因此,文件操作能同時應用于文件或目錄。
超級塊對象
超級塊存儲了描述特定文件系統的信息。通常,超級塊對象對應了位于磁盤上特定扇區的文件系統超級塊或文件系統控制塊。
超級塊對象由許多數據項組成,如下所示:
- 該文件系統所掛接的設備。
- 文件系統的基本塊大小。
- 臟標志,表示超級塊已經修改過,但還沒有寫回到磁盤。
- 文件系統類型。
- 標志,如只讀標志。
- 指向文件系統根目錄的指針。
- 打開文件列表。
- 控制訪問該文件系統的信號量。
- 操作超級塊的函數指針數組的指針。
上面列出的最后一項是一個包含在超級塊對象中的操作對象。該操作對象定義了內核可在超級塊對象上調用的對象方法(函數)。為超級塊對象定義的方法包括:
- read_inode:從一個已掛接的文件系統上讀一個特定的索引節點。
- wrie_inode:把給定的索引節點寫回到磁盤。
- put_inode:釋放索引節點。
- delete_inode:從磁盤上刪除索引節點。
- notify _inode:當索引節點的屬性發生變化時調用。
- putauper:當VFS卸載一個給定的超級塊時調用。
- write_super:當VFS決定把超級塊寫回到磁盤時調用。
- statfs:獲取文件系統的統計信息。
- remount_fa:當文件系統重新掛接時調用。
- clear_inode:釋放索引節點,同時清除任何包含相關數據的頁。
索引節點對象
一個索引節點與一個文件相關聯。索引節點對象包含一個命名文件的除了該文件的文件名和該文件的實際數據內容外的所有信息。索引節點中包含由所有者、組、權限、文件的訪問時間、數據長度和鏈接數等信息。
索引節點對象包含一個描述VFS 能在該索引節點上調用的文件系統的實現函數的索引節點操作對象。索引節點操作對象中定義了如下的函數:
- create:為與某一目錄下的目錄項對象相關聯的普通文件創建一個新的索引節點。
- lookup:為對應于一個文件名的索引節點查找一個目錄。
- mkdir:為與某一目錄下的目錄項對象相關聯的目錄創建一個新的索引節點。
目錄項對象
目錄項(directory entry,dentry)對象是一個路徑上的一個特定的組成。該組成或者是一個目錄名或文件名。目錄對象為訪問文件和目錄提供了方便。目錄項對象包括一個指向索引節點的指針和超級塊。它還包括一個指向父目錄的指針和指向子目錄的指針。
文件對象
文件對象代表一個進程所打開的一個文件。文件對象在系統調用open()時創建,在系統調用close()時銷毀。文件對象包含如下一些數據項:
- 與該文件相關聯的目錄對象。
- 包含該文件的文件系統。
- 文件對象使用計數。
- 用戶ID。
- 用戶組ID。
- 文件指針,指向下–個文件操作所要作用到的位置。
文件對象包含一個描述VFS能在該文件對象上調用的文件系統的實現函數的文件操作對象。該對象包含的函數有read、write、open、release和lock。
總結
以上是生活随笔為你收集整理的虚拟文件系统(Virtual File System,VFS)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: latex数学符号加粗_latex 数学
- 下一篇: java信息管理系统总结_java实现科