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

歡迎訪問 生活随笔!

生活随笔

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

linux

linux虚拟文件系统vfs

發(fā)布時(shí)間:2024/10/12 linux 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux虚拟文件系统vfs 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

linux可以掛載不同的文件系統(tǒng)(EXT2,FAT,NTFS),用同一的樣式呈現(xiàn)給用戶,讀寫操作用起來都一樣,這是怎樣做到的呢?

linux內(nèi)核在各種不同的文件系統(tǒng)格式上做了一個(gè)抽象層,使得文件、目錄、讀寫訪問等概念成為抽象層的概念,因此各種文件系統(tǒng)看起來用起來都一樣,這個(gè)抽象層稱為虛擬文件系統(tǒng)(VFS)。

?

每個(gè)進(jìn)程在PCB(Process Control Block)中都保存著一份文件描述符表,文件描述符就是這個(gè)表的索引,每個(gè)表項(xiàng)都有一個(gè)指向已打開文件的指針,現(xiàn)在我們明確一下:已打開的文件在內(nèi)核中用file結(jié)構(gòu)體表示,文件描述符表中的指針指向file結(jié)構(gòu)體

在file結(jié)構(gòu)體中維護(hù)File Status Flag(file結(jié)構(gòu)體的成員f_flags)和當(dāng)前讀寫位置(file結(jié)構(gòu)體的成員f_pos)。在上圖中,進(jìn)程1和進(jìn)程2都打開同一文件,但是對(duì)應(yīng)不同的file結(jié)構(gòu)體,因此可以有不同的File Status Flag和讀寫位置。file結(jié)構(gòu)體中比較重要的成員還有f_count,表示引用計(jì)數(shù)(Reference Count),后面我們會(huì)講到,dup、fork等系統(tǒng)調(diào)用會(huì)導(dǎo)致多個(gè)文件描述符指向同一個(gè)file結(jié)構(gòu)體,例如有fd1和fd2都引用同一個(gè)file結(jié)構(gòu)體,那么它的引用計(jì)數(shù)就是2,當(dāng)close(fd1)時(shí)并不會(huì)釋放file結(jié)構(gòu)體,而只是把引用計(jì)數(shù)減到1,如果再close(fd2),引用計(jì)數(shù)就會(huì)減到0同時(shí)釋放file結(jié)構(gòu)體,這才真的關(guān)閉了文件。

每個(gè)file結(jié)構(gòu)體都指向一個(gè)file_operations結(jié)構(gòu)體,這個(gè)結(jié)構(gòu)體的成員都是函數(shù)指針,指向?qū)崿F(xiàn)各種文件操作的內(nèi)核函數(shù)。比如在用戶程序中read一個(gè)文件描述符,read通過系統(tǒng)調(diào)用進(jìn)入內(nèi)核,然后找到這個(gè)文件描述符所指向的file結(jié)構(gòu)體,找到file結(jié)構(gòu)體所指向的file_operations結(jié)構(gòu)體,調(diào)用它的read成員所指向的內(nèi)核函數(shù)以完成用戶請(qǐng)求。在用戶程序中調(diào)用lseek、read、write、ioctl、open等函數(shù),最終都由內(nèi)核調(diào)用file_operations的各成員所指向的內(nèi)核函數(shù)完成用戶請(qǐng)求。file_operations結(jié)構(gòu)體中的release成員用于完成用戶程序的close請(qǐng)求,之所以叫release而不叫close是因?yàn)樗灰欢ㄕ娴年P(guān)閉文件,而是減少引用計(jì)數(shù),只有引用計(jì)數(shù)減到0才關(guān)閉文件。對(duì)于同一個(gè)文件系統(tǒng)上打開的常規(guī)文件來說,read、write等文件操作的步驟和方法應(yīng)該是一樣的,調(diào)用的函數(shù)應(yīng)該是相同的,所以圖中的三個(gè)打開文件的file結(jié)構(gòu)體指向同一個(gè)file_operations結(jié)構(gòu)體。如果打開一個(gè)字符設(shè)備文件,那么它的read、write操作肯定和常規(guī)文件不一樣,不是讀寫磁盤的數(shù)據(jù)塊而是讀寫硬件設(shè)備,所以file結(jié)構(gòu)體應(yīng)該指向不同的file_operations結(jié)構(gòu)體,其中的各種文件操作函數(shù)由該設(shè)備的驅(qū)動(dòng)程序?qū)崿F(xiàn)。

每個(gè)file結(jié)構(gòu)體都有一個(gè)指向dentry結(jié)構(gòu)體的指針,“dentry”是directory entry(目錄項(xiàng))的縮寫。我們傳給open、stat等函數(shù)的參數(shù)的是一個(gè)路徑,例如/home/akaedu/a,需要根據(jù)路徑找到文件的inode。為了減少讀盤次數(shù),內(nèi)核緩存了目錄的樹狀結(jié)構(gòu),稱為dentry cache,其中每個(gè)點(diǎn)是一個(gè)dentry結(jié)構(gòu)體,只要沿著路徑各部分的dentry搜索即可,從根目錄/找到home目錄,然后找到akaedu目錄,然后找到文件a。dentry cache只保存最近訪問過的目錄項(xiàng),如果要找的目錄項(xiàng)在cache中沒有,就要從磁盤讀到內(nèi)存中。

每個(gè)dentry結(jié)構(gòu)體都有一個(gè)指針指向inode結(jié)構(gòu)體。inode結(jié)構(gòu)體保存著從磁盤inode讀上來的信息。在上圖的例子中,有兩個(gè)dentry,分別表示/home/akaedu/a和/home/akaedu/b,它們都指向同一個(gè)inode,說明這兩個(gè)文件互為硬鏈接。inode結(jié)構(gòu)體中保存著從磁盤分區(qū)的inode讀上來信息,例如所有者、文件大小、文件類型和權(quán)限位等。每個(gè)inode結(jié)構(gòu)體都有一個(gè)指向inode_operations結(jié)構(gòu)體的指針,后者也是一組函數(shù)指針指向一些完成文件目錄操作的內(nèi)核函數(shù)。和file_operations不同,inode_operations所指向的不是針對(duì)某一個(gè)文件進(jìn)行操作的函數(shù),而是影響文件和目錄布局的函數(shù),例如添加刪除文件和目錄、跟蹤符號(hào)鏈接等等,屬于同一文件系統(tǒng)的各inode結(jié)構(gòu)體可以指向同一個(gè)inode_operations結(jié)構(gòu)體。

inode結(jié)構(gòu)體有一個(gè)指向super_block結(jié)構(gòu)體的指針。super_block結(jié)構(gòu)體保存著從磁盤分區(qū)的超級(jí)塊讀上來的信息,例如文件系統(tǒng)類型、塊大小等。super_block結(jié)構(gòu)體的s_root成員是一個(gè)指向dentry的指針,表示這個(gè)文件系統(tǒng)的根目錄被mount到哪里,在上圖的例子中這個(gè)分區(qū)被mount到/home目錄下。

file、dentry、inode、super_block這幾個(gè)結(jié)構(gòu)體組成了VFS的核心概念。對(duì)于ext2文件系統(tǒng)來說,在磁盤存儲(chǔ)布局上也有inode和超級(jí)塊的概念,所以很容易和VFS中的概念建立對(duì)應(yīng)關(guān)系。

而另外一些文件系統(tǒng)格式來自非UNIX系統(tǒng)(例如Windows的FAT32、NTFS),可能沒有inode或超級(jí)塊這樣的概念,但為了能mount到Linux系統(tǒng),也只好在驅(qū)動(dòng)程序中硬湊一下,在Linux下看FAT32和NTFS分區(qū)會(huì)發(fā)現(xiàn)權(quán)限位是錯(cuò)的,所有文件都是rwxrwxrwx,因?yàn)樗鼈儽緛砭蜎]有inode和權(quán)限位的概念,這是硬湊出來的。

轉(zhuǎn)自:akaedu教材

推薦參考:

http://www.ibm.com/developerworks/cn/linux/l-vfs/

http://www.cnblogs.com/yuyijq/archive/2013/02/24/2923855.html

轉(zhuǎn)載于:https://www.cnblogs.com/embedded-linux/p/5663176.html

總結(jié)

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

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

主站蜘蛛池模板: 成熟妇人a片免费看网站 | 毛片无遮挡高清免费观看 | 欧美激情啪啪 | 成人av高清 | 欧美日韩亚洲在线观看 | 国产av无码专区亚洲精品 | 日韩精品中文字幕一区二区 | 日本国产网站 | 无码熟妇αⅴ人妻又粗又大 | 男女洗澡互摸私密部位视频 | 91福利视频网站 | 制中文字幕音影 | 瑟瑟在线视频 | 色久av| 欧美在线va | 午夜精品久久久久久久91蜜桃 | 少妇与公做了夜伦理 | 国产男女网站 | 韩日av片 | 国产毛片精品国产一区二区三区 | 亚洲一区二区精华 | juliaannxxxxx高清| 日韩av在线播放网址 | 激情黄色av| 日韩一级av毛片 | 亚洲AV无码国产精品播放在线 | 国产麻豆精品一区二区 | 午夜一级黄色片 | 亚洲最大在线视频 | 国产色爽| 成年人在线观看视频免费 | 色老头在线一区二区三区 | 少妇被躁爽到高潮无码人狍大战 | 欧美在线你懂的 | 成年女人18级毛片毛片免费 | 欧美乱妇视频 | 97夜色 | 亚洲综合视频在线播放 | 91精品国自产在线观看 | 午夜操一操 | 亚洲成a人v | 亚洲av色区一区二区三区 | 永久av在线 | 好吊色在线观看 | 国产三级精品三级在线观看 | 麻豆一区二区三区在线观看 | 国产熟女高潮一区二区三区 | 特黄aaaaaaaaa毛片免 | 成人在线观看免费爱爱 | 亚洲综合久久av一区二区三区 | 91麻豆视频| 免费看国产曰批40分钟粉红裤头 | 五月婷婷久久综合 | 国产ts网站 | 精品国产亚洲一区二区麻豆 | 亚洲成年人网 | 成人羞羞免费 | 污漫在线观看 | 九九亚洲视频 | 成人av观看| 人妻人人澡人人添人人爽 | 欧美日韩一区二区三区视频 | 久久久久久五月天 | 成人国产精品一区二区 | 久草视频资源 | 欧美xxxx888 | 国产乡下妇女做爰视频 | 久久国产精品免费观看 | 欧美色婷婷 | 欧美一级片网址 | 欧洲一区二区三区在线 | 欧美老肥婆性猛交视频 | 91精品视频免费观看 | 深爱综合网| 国产山村乱淫老妇女视频 | 人人草网| 久草青青视频 | 综合色婷婷 | 日韩高清影视在线观看 | 真实人妻互换毛片视频 | 6090伦理 | 无码不卡av东京热毛片 | 在线观看免费视频 | 国产精品久久久久桃色tv | 双性皇帝高h喷汁呻吟 | 丰满雪白极品少妇流白浆 | 4444亚洲人成无码网在线观看 | 色欲AV无码精品一区二区久久 | 日本一级黄色大片 | 国产成人亚洲综合 | 久久久亚洲一区 | 国产精品中文无码 | 欧美浪妇xxxx高跟鞋交 | 99成人在线观看 | 国产精品一区久久久 | 精品少妇一区二区三区免费观 | 精品国产乱码久久 | 在线观看香蕉视频 | 亚洲av乱码一区二区 |