Linux檔案系統的設計

2021-09-06 16:34:32 字數 2427 閱讀 7858

總論:

linux的檔案系統設計非常優秀,總的來講有兩大部分,第一部分就是樹形的組織結構,第二部分就是vfs,樹形的組織結構組織了檔案系統的表象,使用者非常方便的使用,而vfs是檔案系統的實現機理,它處於核心態,不但實現了樹形結構的mount機制,並且還提供了乙個統一的介面用來訪問裝置。

一、linux檔案系統概述

1、linux檔案系統組織

linux中使用樹來組織檔案系統。整個檔案系統構成了一顆樹,這棵樹以/為根。整個系統有且僅僅有這一顆檔案樹。這棵樹描寫敘述了檔案系統的拓撲結構,沒有不論什麼檔案系統的型別資訊。

2、mount機制

linux使用mount機制擴充套件檔案系統,使不同型別的檔案系統能夠掛載在系統的檔案樹的不論什麼位置。mount機制使檔案樹有了型別屬性,支援了不同型別的檔案系統的掛載。

如圖所看到的。

能夠看到假設不考慮掛載點,整個檔案系統就是一棵樹,假設考慮了掛載點,這棵樹原來是嫁接而成的,能夠包括各種不同種類的檔案系統。正如橋片擴充套件了匯流排一樣,掛載點擴充套件了檔案樹,和擴充套件匯流排不同的是,隨意資料夾都能夠是掛載點,可是不是隨意晶元都是能夠作為橋的。(網橋/交換機擴充套件乙太網也是一樣的道理,和mount機制更加相似一些,由於你僅僅須要插入乙個多port網絡卡就能夠作為乙個網橋了。)

3、mount機制的優點

mount能夠遮蔽檔案系統的型別,全部型別的檔案系統共享一棵樹,可是實現卻能夠不同樣。使用者程序能夠使用同樣的系統呼叫介面訪問全部的檔案系統,而不必在意訪問的檔案是什麼型別的。mount機制使一棵檔案樹得以多樣化,然而又能夠向使用者遮蔽這樣的多樣化。這樣的多樣化是通過vfs實現的。

4、單棵樹組織+mount擴充套件

linux的檔案系統和磁碟並不繫結,檔案系統就是一棵樹,是乙個虛擬的概念,沒有介質,沒有容量,沒有讀寫規則,唯獨在掛載(mount)發生的時候,也就是詳細的檔案系統掛載的時候,某個掛載點才和介質建立聯絡,然而此時對於檔案系統來講仍然沒有容量的概念,容量不過掛載於此資料夾的磁碟裝置的屬性,假設磁碟空間滿了,仍然能夠通過在此磁碟的乙個資料夾上mount乙個新的檔案系統來解決,而新的檔案系統在一塊新的磁碟上。

5、和windows檔案系統的對照

windows顯式的分離了各種檔案系統,儘管windows在操作介面上也吸取了unix中「一切皆檔案」的思想。在介面級別,windows也使用同樣的api來訪問各類檔案,比方readfile,writefile等,然而在操作級別,windows卻沒有實現一致性,在操作級別,windows的檔案系統主要指以磁碟為介質的檔案系統,因此windows沒有必要用一棵樹包括全部的檔案,而是區分成了各個碟符,然而這樣的方式有個弊端,那就是不易擴充套件,由於單個碟符限制了容量,磁碟直接和檔案系統繫結。因此,windows不以單棵樹樹來組織檔案系統,windows非常難用mount來擴充套件檔案系統。

二、vfs概述

1、vfs

虛擬檔案系統或者虛擬檔案插口,叫做插口更合適,也是官方的叫法,vfs向上和使用者程序檔案訪問系統呼叫介面,如open,read,write等,向下和詳細不同檔案系統的實現介面,如read,write的不同實現。例如以下圖所看到的:

2、vfs的重要性

vfs遮蔽了詳細檔案的實現細節,向上提供統一的操作介面。通過vfs能夠實現隨意的檔案系統,這些檔案系統通過檔案訪問系統呼叫都能夠訪問。在作業系統核心中,vfs是對離使用者態近期的一層,由於它的存在,linux的使用才變得方便。實際上,正是vfs實現了樹形的檔案系統組織,然而vfs的作用還不止這些,裝置的檔案抽象也是通過vfs來實現的。

3、vfs舉例

3.1、procfs

3.2、sysfs

3.3、cpusetfs

3.4、ntfs

3.5、extx

3.6、隨意你想實現的。

須要做什麼呢?僅僅須要在一大堆switch函式例程中實現你的邏輯就可以,就是說實現file_operations函式集合就可以。注意,在linux中,檔案和儲存沒有必定關係,實際上沒有不論什麼關係,也就是說linux中的檔案有的不須要被儲存,比方proc資料夾中的檔案,僅僅有在你read它的時候,資料才從核心出來,這個資料是核心邏輯提供的,而是可能實時變化,linux根本沒有必要在還有乙個地方再儲存它。

4、乙個重要結論

由於linux的樹形檔案系統是全然抽象的,因此它不和不論什麼介質進行繫結,僅存在於核心其中,核心僅僅要起來,這個虛擬的樹就存在了,僅僅是此時僅僅有樹根,然而linux此時卻能夠掛載隨意型別的檔案系統到這個樹根,這樣就能夠實現非常方便的定製,linux能夠在initrd中掛載隨意檔案系統到樹根,這是由於核心和檔案系統是分離的概念,核心啟動並不依賴不論什麼檔案系統。

Linux檔案系統的設計

總論 linux的檔案系統設計非常優秀,總的來講有兩大部分,第一部分就是樹形的組織結構,第二部分就是vfs,樹形的組織結構組織了檔案系統的表象,使用者很方便的使用,而vfs是檔案系統的實現機理,它處於核心態,不但實現了樹形結構的mount機制,而且還提供了乙個統一的介面用來訪問裝置。一 linux檔...

Linux檔案系統的設計

總論 linux的檔案系統設計非常優秀,總的來講有兩大部分,第一部分就是樹形的組織結構,第二部分就是vfs,樹形的組織結構組織了檔案系統的表象,使用者很方便的使用,而vfs是檔案系統的實現機理,它處於核心態,不但實現了樹形結構的mount機制,而且還提供了乙個統一的介面用來訪問裝置。一 linux檔...

Linux檔案系統的設計

總論 linux的檔案系統設計非常優秀,總的來講有兩大部分,第一部分就是樹形的組織結構,第二部分就是vfs,樹形的組織結構組織了檔案系統的表象,使用者很方便的使用,而vfs是檔案系統的實現機理,它處於核心態,不但實現了樹形結構的mount機制,而且還提供了乙個統一的介面用來訪問裝置。一 linux檔...