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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

理解Linux虚拟文件系统VFS

發(fā)布時間:2024/4/14 linux 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 理解Linux虚拟文件系统VFS 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

當(dāng)前,除了linux標(biāo)準(zhǔn)的文件系統(tǒng)Ext2/Ext3/Ext4外,還有很多種文件系統(tǒng),比如reiserfs, xfs, Windows的vfat NTFS,網(wǎng)絡(luò)文件系統(tǒng)nfs 以及flash 文件系統(tǒng)jffs2, yaffs/yaffs2 ubifs。linux通過叫做VFS的中間層對這些文件系統(tǒng)提供了完美的支持。

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

VFS存在的意義

1. 向上,對應(yīng)用層提供一個標(biāo)準(zhǔn)的文件操作接口;

2. 對下,對文件系統(tǒng)提供一個標(biāo)準(zhǔn)的接口,以便其他操作系統(tǒng)的文件系統(tǒng)可以方便的移植到Linux上;

3. VFS內(nèi)部則通過一系列高效的管理機(jī)制,比如inode cache, dentry cache 以及文件系統(tǒng)的預(yù)讀等技術(shù),使得底層文件系統(tǒng)不需沉溺到復(fù)雜的內(nèi)核操作,即可獲得高性能;

4. 此外VFS把一些復(fù)雜的操作盡量抽象到VFS內(nèi)部,使得底層文件系統(tǒng)實(shí)現(xiàn)更簡單。

?

VFS架構(gòu)圖

?

文件系統(tǒng)分類

文件系統(tǒng)一般可以分為以下幾類

1. 磁盤文件系統(tǒng)

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

這類文件系統(tǒng)大部分都是基于塊設(shè)備的文件系統(tǒng),文件系統(tǒng)的數(shù)據(jù)和元數(shù)據(jù)都保存在塊設(shè)備上;flash文件系統(tǒng)略有差別,flash文件系統(tǒng)是位于MTD之上的,

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

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

Reiserfs 提出了很多文件系統(tǒng)的新概念,對小文件的讀寫操作做了很大的優(yōu)化,當(dāng)然新概念過多,也是導(dǎo)致可讀性可理解性差的原因。此外由于reiserfs的作者Hans reiserfs因?yàn)闅⑵拮锩闪?#xff0c;所以reiserfs的開發(fā)也受到了影響。

XFS相當(dāng)?shù)膹?fù)雜,后面我會單獨(dú)開一篇分析

2. 特別的文件系統(tǒng)

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

3. 網(wǎng)絡(luò)文件系統(tǒng)

包括NFS CODA AFS等網(wǎng)絡(luò)文件系統(tǒng)

?

通用文件模型

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

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

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

Linux采用第二種策略來實(shí)現(xiàn)VFS,因此VFS封裝了底層文件系統(tǒng)的所有功能和抽象,VFS負(fù)責(zé)把應(yīng)用層的請求轉(zhuǎn)發(fā)給特定的文件系統(tǒng)。

?

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

?

inode

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

1. 描述文件狀態(tài)的元數(shù)據(jù),文件元數(shù)據(jù)包括文件大小,權(quán)限,類型,時間;

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

inode僅僅是文件在內(nèi)核內(nèi)存中的表現(xiàn)形式,雖然每個文件都有inode,但是并不是每個文件在磁盤上都有對應(yīng)磁盤inode,實(shí)際上有些文件系統(tǒng)并沒有磁盤inode,inode的生成有時要借助文件系統(tǒng)掃描。

?

鏈接

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

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

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

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

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

?

VFS 對象類型

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

1. super block

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

2. inode

存儲一個文件相關(guān)的信息,對于磁盤文件系統(tǒng),這個對象通常對應(yīng)磁盤上的一個文件控制塊(磁盤inode)。每一個inode都對應(yīng)一個編號,可以在文件系統(tǒng)內(nèi)唯一標(biāo)識這個文件。

3. file

file是和進(jìn)程相關(guān)的,file代表一個打開的文件,file和inode之間是多對一的關(guān)系,因?yàn)槎鄠€進(jìn)程可以打開同一個文件,系統(tǒng)會為每一次打開都創(chuàng)建一個file結(jié)構(gòu)。

4. dentry

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

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

1. 磁盤上保存著目錄項(xiàng)

2. 通過磁盤文件的父子關(guān)系重建目錄項(xiàng)

轉(zhuǎn)載于:https://www.cnblogs.com/rama/p/4362678.html

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。