磁盤文件系統,如 ext4、ext3 等;
特殊文件系統,如 proc、sysfs、ramfs、tmpfs 等。
實現以上這些文件系統並在 Linux 下共存的基礎就是 Linux VFS(Virtual File System 又稱 Virtual Filesystem Switch),即虛擬文件系統。VFS 作為一個通用的文件系統,抽象了文件系統的四個基本概念:文件、目錄項 (dentry)、索引節點 (inode) 及掛載點,其在內核中為用戶空間層的文件系統提供了相關的接口(見 圖 3.所示 VFS 在 Linux 系統的架構)。VFS 實現了 open()、read() 等系統調並使得 cp 等用戶空間程序可跨文件系統。VFS 真正實現了上述內容中:在 Linux 中除進程之外一切皆是文件。
VFS 在系統中的架構:
Linux VFS 存在四個基本對象:超級塊對象 (superblock object)、索引節點對象 (inode object)、目錄項對象 (dentry object) 及文件對象 (file object)。超級塊對象代表一個已安裝的文件系統;索引節點對象代表一個文件;目錄項對象代表一個目錄項,如設備文件 event5 在路徑 /dev/input/event5 中,其存在四個目錄項對象:/ 、dev/ 、input/ 及 event5。文件對象代表由進程打開的文件。這四個對象與進程及磁盤文件間的關系如圖 4. 所示,其中 d_inode 即為硬鏈接。為文件路徑的快速解析,Linux VFS 設計了目錄項緩存(Directory Entry Cache,即 dcache)。
VFS 的對象之間的處理: