久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

理解linux虛擬文件系統(tǒng)VFS

 Tehero 2015-06-09

當(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),但是有時(shí)應(yīng)用程序也需要考慮底層文件系統(tǒng)限制(比如fat vfat不支持鏈接,,比如各個(gè)文件系統(tǒng)支持最大文件限制不同),。

VFS存在的意義

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

2. 對下,,對文件系統(tǒng)提供一個(gè)標(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)就是只讀,,壓縮。我們要有這樣一個(gè)概念,,文件系統(tǒng)的復(fù)雜來源于寫數(shù)據(jù),刪除,,truncate操作,,目錄添加刪除等,因此一個(gè)只讀文件系統(tǒng)遠(yuǎn)比可讀寫文件系統(tǒng)簡單,。最直觀的方法就是查看cramfs文件系統(tǒng)實(shí)現(xiàn)代碼行數(shù),,只有區(qū)區(qū)兩個(gè)小文件。

Reiserfs 提出了很多文件系統(tǒng)的新概念,,對小文件的讀寫操作做了很大的優(yōu)化,,當(dāng)然新概念過多,也是導(dǎo)致可讀性可理解性差的原因,。此外由于reiserfs的作者Hans reiserfs因?yàn)闅⑵拮锩闪ⅲ詒eiserfs的開發(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. 提供一個(gè)最小的通用模型,使得這個(gè)模型支持的功能是所有文件系統(tǒng)的最小交集

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

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


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


inode

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

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

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

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


鏈接

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

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

硬鏈接是兩個(gè)文件共享同一個(gè)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)來說,這個(gè)對象通常對應(yīng)磁盤上的一個(gè)文件系統(tǒng)控制塊(磁盤super block)

2. inode

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

3. file

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

4. dentry

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

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

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

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


    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多