嵌入式 Linux根文件系統(tǒng)移植之Linux文件系統(tǒng)簡介

學(xué)號:16020311003? ? 姓名:楊虎成

【嵌牛導(dǎo)讀】Linux支持多種文件系統(tǒng)翔始,文件系統(tǒng)接口實現(xiàn)為分層的體系結(jié)構(gòu)滥嘴,將用戶接口層售碳、文件系統(tǒng)實現(xiàn)和操作存儲設(shè)備的驅(qū)動程序分隔開

【嵌牛鼻子】Linux的每個文件系統(tǒng)的所有細(xì)節(jié)進(jìn)行抽象匈勋,使得不同的文件系統(tǒng)在Linux核心以及系統(tǒng)中運行的其他進(jìn)程看來,都是相同的庆揩,這種抽象的結(jié)構(gòu)就是通用文件模型

【嵌牛提問】Linux文件系統(tǒng)如何移植設(shè)備上的數(shù)據(jù)

【嵌牛正文】

嵌入式ARM

一俐东、文件系統(tǒng)的體系結(jié)構(gòu)

文件系統(tǒng)是對存儲設(shè)備上的數(shù)據(jù)和元數(shù)據(jù)進(jìn)行組織的機制,便于用戶和操作系統(tǒng)的交互订晌。Linux支持多種文件系統(tǒng)虏辫,文件系統(tǒng)接口實現(xiàn)為分層的體系結(jié)構(gòu),將用戶接口層锈拨、文件系統(tǒng)實現(xiàn)和操作存儲設(shè)備的驅(qū)動程序分隔開砌庄。

用戶空間包含一些應(yīng)用程序(例如,文件系統(tǒng)的使用者)和 GNU C庫(glibc),為文件系統(tǒng)調(diào)用(打開娄昆、讀取佩微、寫和關(guān)閉)提供用戶接口。系統(tǒng)調(diào)用接口的作用就像是交換器萌焰,將系統(tǒng)調(diào)用從用戶空間發(fā)送到內(nèi)核空間中的適當(dāng)端點哺眯。

VFS 是底層文件系統(tǒng)的主要接口,會導(dǎo)出一組接口扒俯,抽象到各個文件系統(tǒng)奶卓。有兩個針對文件系統(tǒng)對象的緩存(inode 和 dentry),用于緩存最近使用過的文件系統(tǒng)對象撼玄。

每個文件系統(tǒng)的實現(xiàn)(比如 ext2夺姑、yaffs2等等)導(dǎo)出一組通用接口,供VFS使用掌猛。緩沖區(qū)緩存會緩存文件系統(tǒng)和相關(guān)塊設(shè)備之間的請求瑟幕。例如,對底層設(shè)備驅(qū)動程序的讀寫請求會通過緩沖區(qū)緩存來傳遞留潦,允許在緩沖區(qū)緩存請求,減少訪問物理設(shè)備的次數(shù)辣往,加快訪問速度兔院。以最近使用(LRU)列表的形式管理緩沖區(qū)緩存。但是站削,可以使用sync命令將緩沖區(qū)緩存中的請求發(fā)送到存儲媒體(迫使所有未寫的數(shù)據(jù)發(fā)送到設(shè)備驅(qū)動程序坊萝,進(jìn)而發(fā)送到存儲設(shè)備)。

二许起、虛擬文件系統(tǒng)層

VFS 作為文件系統(tǒng)接口的根層十偶。VFS 記錄當(dāng)前支持的文件系統(tǒng)以及當(dāng)前掛裝的文件系統(tǒng)。VFS并不是一種實際的文件系統(tǒng)园细,只存在于內(nèi)存中惦积,不存在于任何外存空間。VFS在系統(tǒng)啟動時建立猛频,在系統(tǒng)關(guān)閉時消亡狮崩。

可以使用一組注冊函數(shù)在Linux中動態(tài)地添加或刪除文件系統(tǒng)。kernel保存當(dāng)前支持的文件系統(tǒng)的列表鹿寻,可以通過 /proc 文件系統(tǒng)在用戶空間中查看這個列表睦柴。proc虛擬文件系統(tǒng)還顯示當(dāng)前與所支持文件系統(tǒng)相關(guān)聯(lián)的設(shè)備。在Linux中添加新文件系統(tǒng)的方法是調(diào)用register_filesystem毡熏,函數(shù)的參數(shù)定義一個文件系統(tǒng)結(jié)構(gòu)(file_system_type)的引用坦敌,文件系統(tǒng)結(jié)構(gòu)定義了文件系統(tǒng)的名稱、一組屬性和兩個超級塊函數(shù)。register_filesystem函數(shù)也可以注銷文件系統(tǒng)狱窘。

在注冊新的文件系統(tǒng)時杜顺,會把要注冊的新文件系統(tǒng)及其相關(guān)信息添加到 file_systems鏈表中(linux/include/linux/fs.h)。file_systems列表定義可以支持的文件系統(tǒng)训柴。在命令行上輸入cat /proc/filesystems哑舒,就可以查看當(dāng)前l(fā)inux系統(tǒng)支持的文件系統(tǒng)類型。

VFS 中維護(hù)的另一個結(jié)構(gòu)是掛載的文件系統(tǒng)幻馁,提供當(dāng)前掛載的文件系統(tǒng)(見 linux/include/linux/mount.h)洗鸵,鏈接超級塊結(jié)構(gòu)。

三仗嗦、文件的結(jié)構(gòu)

VFS對Linux的每個文件系統(tǒng)的所有細(xì)節(jié)進(jìn)行抽象膘滨,使得不同的文件系統(tǒng)在Linux核心以及系統(tǒng)中運行的其他進(jìn)程看來,都是相同的稀拐,這種抽象的結(jié)構(gòu)就是通用文件模型火邓,由超級塊(superblock)、inode德撬、dentry 和文件組成铲咨。超級塊在每個文件系統(tǒng)的根上,用于描述和維護(hù)文件系統(tǒng)的狀態(tài)蜓洪。文件系統(tǒng)中管理的每個文件(文件纤勒、目錄、設(shè)備隆檀,linux中一切皆是文件)在 Linux 中表示為一個 inode摇天。inode 包含管理文件系統(tǒng)中的文件所需的所有元數(shù)據(jù)(包括可以在文件上執(zhí)行的操作)。dentry用來實現(xiàn)文件名稱和inode之間的映射恐仑,有一個目錄緩存用來保存最近使用的dentry泉坐。dentry還維護(hù)目錄和文件之間的關(guān)系,從而支持文件在文件系統(tǒng)中移動裳仆。VFS文件表示一個打開的文件(保存打開的文件的狀態(tài)腕让,比如寫偏移量等等)。

1歧斟、超級塊

超級塊結(jié)構(gòu)表示一個文件系統(tǒng)记某,包含管理文件系統(tǒng)所需的信息,包括文件系統(tǒng)名稱(比如 ext2)构捡、文件系統(tǒng)的大小和狀態(tài)液南、塊設(shè)備的引用和元數(shù)據(jù)信息(比如空閑列表等等)。超級塊通常存儲在存儲媒體上勾徽,但是如果超級塊不存在滑凉,也可以實時創(chuàng)建它。可以在 ./linux/include/linux/fs.h 中找到超級塊結(jié)構(gòu)畅姊。

1.? 超級塊中的一個重要元素是超級塊操作的定義super_operations咒钟,super_operations結(jié)構(gòu)定義一組用來管理文件系統(tǒng)中的 inode 的函數(shù)。例如若未,可以用alloc_inode分配 inode朱嘴,用destroy_inode刪除inode〈趾希可以用read_inode和 write_inode讀寫inode萍嬉,用sync_fs執(zhí)行文件系統(tǒng)同步∠毒危可以在 /linux/include/linux/fs.h 中找到 super_operations 結(jié)構(gòu)壤追。每個文件系統(tǒng)提供自己的inode方法,這些方法實現(xiàn)操作并向 VFS 層提供通用的抽象供屉。

2行冰、inode結(jié)構(gòu)

inode 表示文件系統(tǒng)中的一個對象,具有惟一標(biāo)識符伶丐。各個文件系統(tǒng)提供將文件名映射為惟一inode標(biāo)識符和inode引用的方法悼做。inode結(jié)構(gòu)中的inode_operations 和 file_operations是重要的操作方法成員。inode_operations 定義直接在inode上執(zhí)行的操作哗魂,而file_operations定義與文件和目錄相關(guān)的方法(標(biāo)準(zhǔn)系統(tǒng)調(diào)用)肛走。

3、目錄項dentry

? ? 目錄項是描述文件的邏輯屬性啡彬,只存在于內(nèi)存中,并沒有實際對應(yīng)的磁盤上的描述故硅,更確切的說是存在于內(nèi)存的目錄項緩存庶灿,為了提高查找性能而設(shè)計。所有的文件吃衅,都是屬于目錄項往踢,所有的目錄項在一起構(gòu)成一顆龐大的目錄樹。

1.? ? ? ? inode 和目錄緩存分別保存最近使用的 inode 和 dentry徘层。注意峻呕,對于 inode 緩存中的每個 inode,在目錄緩存中都有一個對應(yīng)的 dentry趣效。

4瘦癌、file文件對象

文件對象是已打開的文件在內(nèi)存中的表示,主要用于建立進(jìn)程和磁盤上的文件的對應(yīng)關(guān)系跷敬,由sys_open() 現(xiàn)場創(chuàng)建讯私,由sys_close()銷毀。文件對象和物理文件的關(guān)系有點像進(jìn)程和程序的關(guān)系一樣。

四斤寇、緩沖區(qū)緩存

各個文件系統(tǒng)的實現(xiàn)在linux/fs中桶癣,文件系統(tǒng)層的底部是緩沖區(qū)緩存。緩沖區(qū)緩存跟蹤來自文件系統(tǒng)實現(xiàn)和物理設(shè)備(通過設(shè)備驅(qū)動程序)的讀寫請求娘锁。為了提高效率牙寞,Linux 對請求進(jìn)行緩存,避免將所有請求發(fā)送到物理設(shè)備莫秆。緩存中緩存最近使用的緩沖區(qū)(頁面)间雀,可以快速提供給各個文件系統(tǒng)使用。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末馏锡,一起剝皮案震驚了整個濱河市雷蹂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌杯道,老刑警劉巖匪煌,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異党巾,居然都是意外死亡萎庭,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門齿拂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來驳规,“玉大人,你說我怎么就攤上這事署海÷鸸海” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵砸狞,是天一觀的道長捻勉。 經(jīng)常有香客問我,道長刀森,這世上最難降的妖魔是什么踱启? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮研底,結(jié)果婚禮上埠偿,老公的妹妹穿的比我還像新娘。我一直安慰自己榜晦,他們只是感情好冠蒋,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著乾胶,像睡著了一般浊服。 火紅的嫁衣襯著肌膚如雪统屈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天牙躺,我揣著相機與錄音愁憔,去河邊找鬼。 笑死孽拷,一個胖子當(dāng)著我的面吹牛吨掌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播脓恕,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼膜宋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了炼幔?” 一聲冷哼從身側(cè)響起秋茫,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎乃秀,沒想到半個月后肛著,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡跺讯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年枢贿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刀脏。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡局荚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出愈污,到底是詐尸還是另有隱情耀态,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布暂雹,位于F島的核電站首装,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏擎析。R本人自食惡果不足惜簿盅,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一挥下、第九天 我趴在偏房一處隱蔽的房頂上張望揍魂。 院中可真熱鬧,春花似錦棚瘟、人聲如沸现斋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽庄蹋。三九已至瞬内,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間限书,已是汗流浹背虫蝶。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留倦西,地道東北人能真。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像扰柠,于是被迫代替她去往敵國和親粉铐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容