最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

一文講解虛擬文件系統(tǒng)(Virtual File System,VFS)

2022-09-11 14:50 作者:補(bǔ)給站Linux內(nèi)核  | 我要投稿

Linux虛擬文件系統(tǒng)

Linux包含一個(gè)通用的、強(qiáng)有力的文件處理機(jī)制,該機(jī)制利用虛擬文件系統(tǒng)(Virtual File System,VFS)來(lái)支持大量的文件管理系統(tǒng)和文件結(jié)構(gòu)。


VFS向用戶進(jìn)程提供了一個(gè)簡(jiǎn)單的,統(tǒng)一的文件系統(tǒng)接口。

VFS定義了一個(gè)能代表任何可想到的文件系統(tǒng)的通用特征和行為的通用文件模型。

VFS認(rèn)為文件是計(jì)算機(jī)大容量存儲(chǔ)器上的對(duì)象。這些計(jì)算機(jī)大容量存儲(chǔ)器具有共同的特征,這與目標(biāo)文件系統(tǒng)或底層的處理器硬件無(wú)關(guān)。

文件有一個(gè)符號(hào)名,以便在一個(gè)文件系統(tǒng)的特定目錄下能唯一地標(biāo)識(shí)該文件。

同時(shí)文件有一個(gè)所有者、對(duì)未授權(quán)的訪問(wèn)或修改的保護(hù)和其他一系列屬性。

文件可以被創(chuàng)建、從中讀、向它寫或刪除。

對(duì)于任何特定文件系統(tǒng),需要一個(gè)映射模塊來(lái)轉(zhuǎn)換實(shí)際文件系統(tǒng)的特征到虛擬文件系統(tǒng)所期望的特征。

圖12.17展示了Linux文件系統(tǒng)策略的關(guān)鍵組成成分。


用戶進(jìn)程通過(guò)使用VFS文件方案來(lái)發(fā)起文件系統(tǒng)調(diào)用。

VFS通過(guò)特定文件系統(tǒng)的一個(gè)映射函數(shù)轉(zhuǎn)換該系統(tǒng)調(diào)用到內(nèi)部的一個(gè)特定文件系統(tǒng)的功能調(diào)用(例如IBM的JFS)。

在很多情況下,映射函數(shù)僅僅是一個(gè)方案的文件系統(tǒng)功能調(diào)用到另一個(gè)方案的文件系統(tǒng)功能調(diào)用的映射。

在某些情況下,映射函數(shù)會(huì)比較復(fù)雜。例如,一些文件系統(tǒng)使用存儲(chǔ)目錄樹中每個(gè)文件位置的文件分配表。在這些文件系統(tǒng)中,目錄并不是文件。這些文件系統(tǒng)的映射函數(shù)必要時(shí)必須能動(dòng)態(tài)創(chuàng)建與目錄相對(duì)應(yīng)的文件。在任何情況下,原來(lái)用戶的文件系統(tǒng)調(diào)用必須轉(zhuǎn)換成目標(biāo)文件系統(tǒng)的調(diào)用。這樣就調(diào)用了目標(biāo)文件系統(tǒng)的相應(yīng)功能去完成在文件或目錄上的相應(yīng)請(qǐng)求,該操作的結(jié)果以類似的方式返回給用戶進(jìn)程。




VFS在 Linux內(nèi)核中所起的作用如圖12.18所示。當(dāng)進(jìn)程發(fā)起一個(gè)面向文件的系統(tǒng)調(diào)用時(shí),內(nèi)核調(diào)用VFS 中的一個(gè)函數(shù)。該函數(shù)處理完與具體文件系統(tǒng)無(wú)關(guān)的操作后,調(diào)用目標(biāo)文件系統(tǒng)中的相應(yīng)函數(shù)。這個(gè)調(diào)用通過(guò)一個(gè)轉(zhuǎn)換VFS的調(diào)用到目標(biāo)文件系統(tǒng)調(diào)用的映射函數(shù)來(lái)實(shí)現(xiàn)。VFS獨(dú)立于任何具體文件系統(tǒng)。因此映射函數(shù)的實(shí)現(xiàn)是文件系統(tǒng)在Linux上的實(shí)現(xiàn)的一部分。目標(biāo)文件系統(tǒng)轉(zhuǎn)換文件系統(tǒng)請(qǐng)求到面向設(shè)備的指令。



VFS是一個(gè)面向?qū)ο蟮姆桨浮R驗(yàn)閂FS不是用支持面向?qū)ο蟮恼Z(yǔ)言(如C++和 Java)來(lái)實(shí)現(xiàn)的,而是使用C語(yǔ)言來(lái)實(shí)現(xiàn)的,因此VFS的對(duì)象可以簡(jiǎn)單地實(shí)現(xiàn)為C語(yǔ)言的結(jié)構(gòu)。每一個(gè)對(duì)象包含數(shù)據(jù)和函數(shù)指針。這些函數(shù)指針指向操作這些數(shù)據(jù)的文件系統(tǒng)的實(shí)現(xiàn)函數(shù)。VFS主要的四個(gè)對(duì)象如下:


超級(jí)塊對(duì)象:代表一個(gè)特定的已掛接的文件系統(tǒng)。

索引節(jié)點(diǎn)對(duì)象:代表一個(gè)特定的文件。

目錄對(duì)象:代表一個(gè)特定的目錄項(xiàng)。

文件對(duì)象:代表一個(gè)與進(jìn)程相關(guān)的打開的文件。

這個(gè)方案是基于UNIX文件系統(tǒng)中所使用的概念的。


UNIX文件系統(tǒng)的關(guān)鍵概念如下。一個(gè)文件系統(tǒng)由層次目錄組成。目錄的概念和許多非UNIX平臺(tái)中的文件夾是一樣的,可以包含文件和其他目錄。由于一個(gè)目錄可能包含其他目錄,因此就形成了一個(gè)樹結(jié)構(gòu)。在樹結(jié)構(gòu)中從根開始的路徑由一系列目錄項(xiàng)組成,最后以目錄項(xiàng)或文件名結(jié)束。在UNIX中,目錄是用一個(gè)列出了該目錄所包含的文件名和目錄的文件來(lái)實(shí)現(xiàn)的。因此,文件操作能同時(shí)應(yīng)用于文件或目錄。


【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【891587639】整理了一些個(gè)人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書、實(shí)戰(zhàn)項(xiàng)目及代碼)??

超級(jí)塊對(duì)象

超級(jí)塊存儲(chǔ)了描述特定文件系統(tǒng)的信息。通常,超級(jí)塊對(duì)象對(duì)應(yīng)了位于磁盤上特定扇區(qū)的文件系統(tǒng)超級(jí)塊或文件系統(tǒng)控制塊。


超級(jí)塊對(duì)象由許多數(shù)據(jù)項(xiàng)組成,如下所示:


該文件系統(tǒng)所掛接的設(shè)備。

文件系統(tǒng)的基本塊大小。

臟標(biāo)志,表示超級(jí)塊已經(jīng)修改過(guò),但還沒(méi)有寫回到磁盤。

文件系統(tǒng)類型。

標(biāo)志,如只讀標(biāo)志。

指向文件系統(tǒng)根目錄的指針。

打開文件列表。

控制訪問(wèn)該文件系統(tǒng)的信號(hào)量。

操作超級(jí)塊的函數(shù)指針數(shù)組的指針。

上面列出的最后一項(xiàng)是一個(gè)包含在超級(jí)塊對(duì)象中的操作對(duì)象。該操作對(duì)象定義了內(nèi)核可在超級(jí)塊對(duì)象上調(diào)用的對(duì)象方法(函數(shù))。為超級(jí)塊對(duì)象定義的方法包括:


read_inode:從一個(gè)已掛接的文件系統(tǒng)上讀一個(gè)特定的索引節(jié)點(diǎn)。

wrie_inode:把給定的索引節(jié)點(diǎn)寫回到磁盤。

put_inode:釋放索引節(jié)點(diǎn)。

delete_inode:從磁盤上刪除索引節(jié)點(diǎn)。

notify _inode:當(dāng)索引節(jié)點(diǎn)的屬性發(fā)生變化時(shí)調(diào)用。

putauper:當(dāng)VFS卸載一個(gè)給定的超級(jí)塊時(shí)調(diào)用。

write_super:當(dāng)VFS決定把超級(jí)塊寫回到磁盤時(shí)調(diào)用。

statfs:獲取文件系統(tǒng)的統(tǒng)計(jì)信息。

remount_fa:當(dāng)文件系統(tǒng)重新掛接時(shí)調(diào)用。

clear_inode:釋放索引節(jié)點(diǎn),同時(shí)清除任何包含相關(guān)數(shù)據(jù)的頁(yè)。

索引節(jié)點(diǎn)對(duì)象

一個(gè)索引節(jié)點(diǎn)與一個(gè)文件相關(guān)聯(lián)。索引節(jié)點(diǎn)對(duì)象包含一個(gè)命名文件的除了該文件的文件名和該文件的實(shí)際數(shù)據(jù)內(nèi)容外的所有信息。索引節(jié)點(diǎn)中包含由所有者、組、權(quán)限、文件的訪問(wèn)時(shí)間、數(shù)據(jù)長(zhǎng)度和鏈接數(shù)等信息。


索引節(jié)點(diǎn)對(duì)象包含一個(gè)描述VFS 能在該索引節(jié)點(diǎn)上調(diào)用的文件系統(tǒng)的實(shí)現(xiàn)函數(shù)的索引節(jié)點(diǎn)操作對(duì)象。索引節(jié)點(diǎn)操作對(duì)象中定義了如下的函數(shù):


create:為與某一目錄下的目錄項(xiàng)對(duì)象相關(guān)聯(lián)的普通文件創(chuàng)建一個(gè)新的索引節(jié)點(diǎn)。

lookup:為對(duì)應(yīng)于一個(gè)文件名的索引節(jié)點(diǎn)查找一個(gè)目錄。

mkdir:為與某一目錄下的目錄項(xiàng)對(duì)象相關(guān)聯(lián)的目錄創(chuàng)建一個(gè)新的索引節(jié)點(diǎn)。

目錄項(xiàng)對(duì)象

目錄項(xiàng)(directory entry,dentry)對(duì)象是一個(gè)路徑上的一個(gè)特定的組成。該組成或者是一個(gè)目錄名或文件名。目錄對(duì)象為訪問(wèn)文件和目錄提供了方便。目錄項(xiàng)對(duì)象包括一個(gè)指向索引節(jié)點(diǎn)的指針和超級(jí)塊。它還包括一個(gè)指向父目錄的指針和指向子目錄的指針。


文件對(duì)象

文件對(duì)象代表一個(gè)進(jìn)程所打開的一個(gè)文件。文件對(duì)象在系統(tǒng)調(diào)用open()時(shí)創(chuàng)建,在系統(tǒng)調(diào)用close()時(shí)銷毀。文件對(duì)象包含如下一些數(shù)據(jù)項(xiàng):


與該文件相關(guān)聯(lián)的目錄對(duì)象。

包含該文件的文件系統(tǒng)。

文件對(duì)象使用計(jì)數(shù)。

用戶ID。

用戶組ID。

文件指針,指向下–個(gè)文件操作所要作用到的位置。

文件對(duì)象包含一個(gè)描述VFS能在該文件對(duì)象上調(diào)用的文件系統(tǒng)的實(shí)現(xiàn)函數(shù)的文件操作對(duì)象。該對(duì)象包含的函數(shù)有read、write、open、release和lock。


原文作者:rsh_whu





一文講解虛擬文件系統(tǒng)(Virtual File System,VFS)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
山阳县| 宁武县| 临澧县| 保康县| 沙雅县| 丰顺县| 周口市| 阜康市| 林周县| 姜堰市| 郯城县| 本溪市| 龙里县| 高州市| 大荔县| 班玛县| 胶州市| 麻阳| 长乐市| 巫山县| 新蔡县| 牟定县| 闻喜县| 太和县| 柘城县| 资中县| 栾城县| 南雄市| 都安| 扶风县| 祁东县| 广汉市| 龙州县| 乌恰县| 湘西| 桐庐县| 福清市| 凤冈县| 荆州市| 河北区| 科技|