總論:
linux的文件系統(tǒng)設(shè)計(jì)非常優(yōu)秀,總的來(lái)講有兩大部分,第一部分就是樹(shù)形的組織結(jié)構(gòu),第二部分就是vfs,樹(shù)形的組織結(jié)構(gòu)組織了文件系統(tǒng)的表象,用戶非常方便的使用,而vfs是文件系統(tǒng)的實(shí)現(xiàn)機(jī)理,它處于內(nèi)核態(tài),不但實(shí)現(xiàn)了樹(shù)形結(jié)構(gòu)的mount機(jī)制,并且還提供了一個(gè)統(tǒng)一的接口用來(lái)訪問(wèn)設(shè)備。
一、Linux文件系統(tǒng)概述
1、Linux文件系統(tǒng)組織
Linux中使用樹(shù)來(lái)組織文件系統(tǒng)。整個(gè)文件系統(tǒng)構(gòu)成了一顆樹(shù),這棵樹(shù)以/為根。整個(gè)系統(tǒng)有且僅僅有這一顆文件樹(shù)。這棵樹(shù)描寫(xiě)敘述了文件系統(tǒng)的拓?fù)浣Y(jié)構(gòu),沒(méi)有不論什么文件系統(tǒng)的類(lèi)型信息。
2、mount機(jī)制
linux使用mount機(jī)制擴(kuò)展文件系統(tǒng),使不同類(lèi)型的文件系統(tǒng)能夠掛載在系統(tǒng)的文件樹(shù)的不論什么位置。mount機(jī)制使文件樹(shù)有了類(lèi)型屬性,支持了不同類(lèi)型的文件系統(tǒng)的掛載。
如圖所看到的。
能夠看到假設(shè)不考慮掛載點(diǎn),整個(gè)文件系統(tǒng)就是一棵樹(shù),假設(shè)考慮了掛載點(diǎn),這棵樹(shù)原來(lái)是嫁接而成的,能夠包括各種不同種類(lèi)的文件系統(tǒng)。正如橋片擴(kuò)展了總線一樣,掛載點(diǎn)擴(kuò)展了文件樹(shù),和擴(kuò)展總線不同的是,隨意文件夾都能夠是掛載點(diǎn),可是不是隨意芯片都是能夠作為橋的。(網(wǎng)橋/交換機(jī)擴(kuò)展以太網(wǎng)也是一樣的道理,和mount機(jī)制更加相似一些,由于你僅僅須要插入一個(gè)多port網(wǎng)卡就能夠作為一個(gè)網(wǎng)橋了。)
3、mount機(jī)制的優(yōu)點(diǎn)
mount能夠屏蔽文件系統(tǒng)的類(lèi)型,全部類(lèi)型的文件系統(tǒng)共享一棵樹(shù),可是實(shí)現(xiàn)卻能夠不同樣。用戶進(jìn)程能夠使用同樣的系統(tǒng)調(diào)用接口訪問(wèn)全部的文件系統(tǒng),而不必在意訪問(wèn)的文件是什么類(lèi)型的。mount機(jī)制使一棵文件樹(shù)得以多樣化,然而又能夠向用戶屏蔽這樣的多樣化。這樣的多樣化是通過(guò)vfs實(shí)現(xiàn)的。
4、單棵樹(shù)組織+mount擴(kuò)展
Linux的文件系統(tǒng)和磁盤(pán)并不綁定,文件系統(tǒng)就是一棵樹(shù),是一個(gè)虛擬的概念,沒(méi)有介質(zhì),沒(méi)有容量,沒(méi)有讀寫(xiě)規(guī)則,唯獨(dú)在掛載(mount)發(fā)生的時(shí)候,也就是詳細(xì)的文件系統(tǒng)掛載的時(shí)候,某個(gè)掛載點(diǎn)才和介質(zhì)建立聯(lián)系,然而此時(shí)對(duì)于文件系統(tǒng)來(lái)講仍然沒(méi)有容量的概念,容量不過(guò)掛載于此文件夾的磁盤(pán)設(shè)備的屬性,假設(shè)磁盤(pán)空間滿了,仍然能夠通過(guò)在此磁盤(pán)的一個(gè)文件夾上mount一個(gè)新的文件系統(tǒng)來(lái)解決,而新的文件系統(tǒng)在一塊新的磁盤(pán)上。
5、和Windows文件系統(tǒng)的對(duì)照
Windows顯式的分離了各種文件系統(tǒng),盡管Windows在操作接口上也吸取了Unix中“一切皆文件”的思想。在接口級(jí)別,windows也使用同樣的API來(lái)訪問(wèn)各類(lèi)文件,比方ReadFile,WriteFile等,然而在操作級(jí)別,windows卻沒(méi)有實(shí)現(xiàn)一致性,在操作級(jí)別,windows的文件系統(tǒng)主要指以磁盤(pán)為介質(zhì)的文件系統(tǒng),因此windows沒(méi)有必要用一棵樹(shù)包括全部的文件,而是區(qū)分成了各個(gè)盤(pán)符,然而這樣的方式有個(gè)弊端,那就是不易擴(kuò)展,由于單個(gè)盤(pán)符限制了容量,磁盤(pán)直接和文件系統(tǒng)綁定。因此,Windows不以單棵樹(shù)樹(shù)來(lái)組織文件系統(tǒng),windows非常難用mount來(lái)擴(kuò)展文件系統(tǒng)。
二、VFS概述
1、VFS
虛擬文件系統(tǒng)或者虛擬文件插口,叫做插口更合適,也是官方的叫法,vfs向上和用戶進(jìn)程文件訪問(wèn)系統(tǒng)調(diào)用接口,如open,read,write等,向下和詳細(xì)不同文件系統(tǒng)的實(shí)現(xiàn)接口,如read,write的不同實(shí)現(xiàn)。例如以下圖所看到的:
2、VFS的重要性
VFS屏蔽了詳細(xì)文件的實(shí)現(xiàn)細(xì)節(jié),向上提供統(tǒng)一的操作接口。通過(guò)VFS能夠?qū)崿F(xiàn)隨意的文件系統(tǒng),這些文件系統(tǒng)通過(guò)文件訪問(wèn)系統(tǒng)調(diào)用都能夠訪問(wèn)。在操作系統(tǒng)內(nèi)核中,vfs是對(duì)離用戶態(tài)近期的一層,由于它的存在,linux的使用才變得方便。實(shí)際上,正是vfs實(shí)現(xiàn)了樹(shù)形的文件系統(tǒng)組織,然而vfs的作用還不止這些,設(shè)備的文件抽象也是通過(guò)vfs來(lái)實(shí)現(xiàn)的。
3、VFS舉例
3.1、procfs
3.2、sysfs
3.3、cpusetfs
3.4、ntfs
3.5、extX
3.6、隨意你想實(shí)現(xiàn)的。
須要做什么呢??jī)H僅須要在一大堆switch函數(shù)例程中實(shí)現(xiàn)你的邏輯就可以,就是說(shuō)實(shí)現(xiàn)file_operations函數(shù)集合就可以。注意,在linux中,文件和存儲(chǔ)沒(méi)有必定關(guān)系,實(shí)際上沒(méi)有不論什么關(guān)系,也就是說(shuō)linux中的文件有的不須要被存儲(chǔ),比方proc文件夾中的文件,僅僅有在你read它的時(shí)候,數(shù)據(jù)才從內(nèi)核出來(lái),這個(gè)數(shù)據(jù)是內(nèi)核邏輯提供的,而是可能實(shí)時(shí)變化,linux根本沒(méi)有必要在還有一個(gè)地方再存儲(chǔ)它。
4、一個(gè)重要結(jié)論
由于linux的樹(shù)形文件系統(tǒng)是全然抽象的,因此它不和不論什么介質(zhì)進(jìn)行綁定,僅存在于內(nèi)核其中,內(nèi)核僅僅要起來(lái),這個(gè)虛擬的樹(shù)就存在了,僅僅是此時(shí)僅僅有樹(shù)根,然而linux此時(shí)卻能夠掛載隨意類(lèi)型的文件系統(tǒng)到這個(gè)樹(shù)根,這樣就能夠?qū)崿F(xiàn)非常方便的定制,linux能夠在initrd中掛載隨意文件系統(tǒng)到樹(shù)根,這是由于內(nèi)核和文件系統(tǒng)是分離的概念,內(nèi)核啟動(dòng)并不依賴(lài)不論什么文件系統(tǒng)。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
