日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

理解linux虚拟文件系统VFS - 概述

發布時間:2025/3/21 linux 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 理解linux虚拟文件系统VFS - 概述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

當前,除了Linux標準的文件系統Ext2/Ext3/Ext4外,還有很多種文件系統,比如reiserfs, xfs, Windows的vfat NTFS,網絡文件系統nfs 以及flash 文件系統jffs2, yaffs/yaffs2 ubifs。linux通過叫做VFS的中間層對這些文件系統提供了完美的支持。

對于用戶來說,這些文件系統幾乎是透明的,在大部分情況下,用戶通過libc和kernel的VFS交互,不需要關心底層文件系統的具體實現,但是有時應用程序也需要考慮底層文件系統限制(比如fat vfat不支持鏈接,比如各個文件系統支持最大文件限制不同)。

VFS存在的意義

1. 向上,對應用層提供一個標準的文件操作接口;

2. 對下,對文件系統提供一個標準的接口,以便其他操作系統的文件系統可以方便的移植到Linux上;

3. VFS內部則通過一系列高效的管理機制,比如inode cache, dentry cache 以及文件系統的預讀等技術,使得底層文件系統不需沉溺到復雜的內核操作,即可獲得高性能;

4. 此外VFS把一些復雜的操作盡量抽象到VFS內部,使得底層文件系統實現更簡單。


VFS架構圖



文件系統分類

文件系統一般可以分為以下幾類

1. 磁盤文件系統

這類文件系統數目最多,最常見:ext2/ext3/ext4文件系統;resierfs文件系統 SGI的XFS文件系統;jffs2 yaffs ubifs等flash文件系統;crasmfs squashfs等只讀文件系統;fat vfa ntfs等windows文件系統;

這類文件系統大部分都是基于塊設備的文件系統,文件系統的數據和元數據都保存在塊設備上;flash文件系統略有差別,flash文件系統是位于MTD之上的,

flash文件系統需要處理壞快,垃圾收集,磨損平衡等復雜的功能。f隨著SD/MMC卡的普及,以及flash文件系統在可擴展性,啟動速度上的先天不足。flash文件系統已經慢慢退出了嵌入式舞臺。

cramfs squashfs存在的意義在于簡單,高效,穩定(簡單的東西自然穩定),在文件系統只讀的場景,仍然會被用到。二者的共同特點就是只讀,壓縮。我們要有這樣一個概念,文件系統的復雜來源于寫數據,刪除,truncate操作,目錄添加刪除等,因此一個只讀文件系統遠比可讀寫文件系統簡單。最直觀的方法就是查看cramfs文件系統實現代碼行數,只有區區兩個小文件。

Reiserfs 提出了很多文件系統的新概念,對小文件的讀寫操作做了很大的優化,當然新概念過多,也是導致可讀性可理解性差的原因。此外由于reiserfs的作者Hans reiserfs因為殺妻罪名成立,所以reiserfs的開發也受到了影響。

XFS相當的復雜,后面我會單獨開一篇分析

2. 特別的文件系統

此類文件系統也很常用,他們不是提供常規文件的存儲和訪問,文件系統建立在內存之上,提供特殊的文件系統功能。如proc文件系統,pipe文件系統,以及tmpfs

3. 網絡文件系統

包括NFS CODA AFS等網絡文件系統


通用文件模型

VFS為底層文件系統提供了抽象,有兩種策略提供這種抽象。

1. 提供一個最小的通用模型,使得這個模型支持的功能是所有文件系統的最小交集

2. 提供一個盡量大的通用模型,使得這個模型包含所有文件系統功能的合集。

Linux采用第二種策略來實現VFS,因此VFS封裝了底層文件系統的所有功能和抽象,VFS負責把應用層的請求轉發給特定的文件系統。


在處理文件時,應用空間和內核空間使用的對象是不同的。對應用程序來說,文件描述符用來表示一個文件,這個文件描述符是打開文件時內核分配給這個文件的一個整數,注意,這個文件描述符只在本進程內有效;而對于內核來說,則使用一個inode來表示一個文件,這個inode可能對應著應用層多個進程內的多個文件描述符。


inode

內核中的每一個文件或者目錄都有一個inode,inode由兩個主要部分組成:

1. 描述文件狀態的元數據,文件元數據包括文件大小,權限,類型,時間;

2. 文件數據描述,則用來定義文件數據在磁盤上的存放位置。

inode僅僅是文件在內核內存中的表現形式,雖然每個文件都有inode,但是并不是每個文件在磁盤上都有對應磁盤inode,實際上有些文件系統并沒有磁盤inode,inode的生成有時要借助文件系統掃描。


鏈接

鏈接是unix特有的概念,又分為軟鏈接和硬鏈接

軟鏈接又稱為符號鏈接,軟鏈接文件內容指向一個文件路徑,也就是文件真實位置,軟鏈接指向的文件也可以是軟鏈接

硬鏈接是兩個文件共享同一個inode,

并不是所有的文件系統都支持符號鏈接和硬鏈接,比如fat, yaffs等文件系統并不支持符號鏈接。一般來說,沒有磁盤目錄結構的文件系統肯定不支持硬鏈接,而沒有磁盤inode的肯定不支持鏈接。

軟硬鏈接雖然為linux/unix操作管理帶來了很多便利,但是在很多軟件實現上,往往引入很大的復雜性。


VFS 對象類型

VFS通用模型包含以下類型對象:

1. super block

存儲文件系統相關的信息,對于磁盤文件系統來說,這個對象通常對應磁盤上的一個文件系統控制塊(磁盤super block)

2. inode

存儲一個文件相關的信息,對于磁盤文件系統,這個對象通常對應磁盤上的一個文件控制塊(磁盤inode)。每一個inode都對應一個編號,可以在文件系統內唯一標識這個文件。

3. file

file是和進程相關的,file代表一個打開的文件,file和inode之間是多對一的關系,因為多個進程可以打開同一個文件,系統會為每一次打開都創建一個file結構。

4. dentry

底層文件系統的許多操作嚴重依賴文件的inode,在進行文件操作前,我們需要根據路徑名找到文件對應的inode。我們知道文件系統是樹狀結構的,因此需要從根目錄通過目錄樹找到要操作的文件或目錄,這個遍歷過程涉及到磁盤操作,非常耗時。根據局部性原理,很有必要把這個查找過程cache起來,dentry就是為了加快目錄遍歷操作引入的數據結構。

每一個基于磁盤的文件系統,都有特定的方法用來構建目錄樹。一般來說有兩種方式:

1. 磁盤上保存著目錄項

2. 通過磁盤文件的父子關系重建目錄項

總結

以上是生活随笔為你收集整理的理解linux虚拟文件系统VFS - 概述的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。