亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Linux虛擬文件系統(tǒng)對物理文件的管理

        2011-06-22 08:19:48侯旗陳慈發(fā)艾偉
        關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu)進(jìn)程內(nèi)存

        侯旗,陳慈發(fā),艾偉

        (三峽大學(xué),宜昌443002)

        引 言

        隨著嵌入式技術(shù)的發(fā)展,越來越多的嵌入式設(shè)備采用Linux作為其操作系統(tǒng)。Linux支持各種物理文件系統(tǒng),而不同物理文件系統(tǒng)具有不同的組織結(jié)構(gòu)和不同的處理方式。為了兼容支持不同的文件系統(tǒng),Linux設(shè)計了在系統(tǒng)啟動時由系統(tǒng)在內(nèi)存創(chuàng)建的文件系統(tǒng),即虛擬文件系統(tǒng)(Virtual File System,VFS)。該文件系統(tǒng)對不同的物理文件系統(tǒng)的所有特性進(jìn)行抽象,屏蔽各種文件系統(tǒng)的差別,向Linux內(nèi)核和進(jìn)程提供了一個處理各種物理文件系統(tǒng)的公共接口,從而實現(xiàn)了對不同文件系統(tǒng)的支持。而且,Linux系統(tǒng)把一切的設(shè)備也當(dāng)作文件來處理。理解Linux虛擬文件系統(tǒng)機制對于學(xué)習(xí)Linux運行原理起著重要的作用。本文對Linux虛擬文件系統(tǒng)原理進(jìn)行了較為詳盡的分析。

        1 Linux VFS基本原理

        Linux以EXT2作為基本的文件系統(tǒng),組成虛擬文件系統(tǒng)的超級塊、索引節(jié)點、目錄項等數(shù)據(jù)結(jié)構(gòu),兼容于各種文件系統(tǒng)的相應(yīng)數(shù)據(jù)結(jié)構(gòu),從而實現(xiàn)了對多種文件系統(tǒng)的透明調(diào)用。

        1.1 Linux所支持的文件系統(tǒng)的一般結(jié)構(gòu)

        Linux繼承了Uinx,把文件名和文件控制信息分開管理。一個Linux所支持的物理文件系統(tǒng)使用的塊設(shè)備上的一個獨立邏輯分區(qū)可大致分為:引導(dǎo)塊、超級塊、inode塊、data塊4部分[1]。超級塊是描述文件系統(tǒng)整體信息的數(shù)據(jù)結(jié)構(gòu),在系統(tǒng)運行期間被讀入內(nèi)存,在內(nèi)存中建立一個超級塊的映像。Linux所支持的文件系統(tǒng)的一般結(jié)構(gòu)如圖1所示。

        圖1 Linux所支持的文件系統(tǒng)的一般結(jié)構(gòu)

        1.2 VFS對物理文件系統(tǒng)的管理

        Linux VFS采用超級塊(super_block)和索引節(jié)點(inode)來描述文件系統(tǒng)。這里的super_block和inode不同于物理文件系統(tǒng)中的super_block和inode數(shù)據(jù)結(jié)構(gòu),VFS super_block是VFS把不同文件系統(tǒng)中的整體組織和結(jié)構(gòu)信息進(jìn)行抽象后形成的,兼顧不同文件系統(tǒng)的統(tǒng)一的超級塊結(jié)構(gòu)。在安裝文件系統(tǒng)時,由系統(tǒng)在內(nèi)存中建立,其內(nèi)容主要由文件系統(tǒng)的超級塊數(shù)據(jù)來填充。inode則是在系統(tǒng)打開文件時,由系統(tǒng)在內(nèi)存動態(tài)建立,其內(nèi)容主要由文件系統(tǒng)的inode節(jié)點的數(shù)據(jù)來填充。

        Linux VFS除了沒有存儲文件內(nèi)容的data塊外,文件系統(tǒng)的結(jié)構(gòu)與物理文件系統(tǒng)基本相似,如圖2所示。

        圖2 Linux VFS文件系統(tǒng)結(jié)構(gòu)

        Linux進(jìn)程通過VFS中相應(yīng)的超級塊和索引節(jié)點中的信息,準(zhǔn)確地訪問操作目的磁盤文件系統(tǒng)中的相應(yīng)文件。

        2 Linux VFS的實現(xiàn)

        為了區(qū)分文件系統(tǒng)中的inode,這里把VFS中的inode稱為vnode。

        Linux系統(tǒng)支持文件系統(tǒng)目錄樹機制,根據(jù)路徑名,如/home/xyz/work/test.c,就 可 以 在 磁 盤 上 找 到 文 件test.c的目錄項和索引節(jié)點。在路徑/home/xyz/work/test.c中,目錄/、home、xyz、work以及普通文件test.c都對應(yīng)一個目錄項對象。目錄項在磁盤文件系統(tǒng)中的數(shù)據(jù)結(jié)構(gòu)是dir_entry,VFS在遍歷路徑名的過程中將其解析成內(nèi)存目錄項對象(dentry對象)和vnode對象。

        vnode與某個文件的對應(yīng)關(guān)系是通過設(shè)備號i_dev與inode號i_ino建立的,它們唯一地指定了某個設(shè)備上的一個文件或目錄。vnode是設(shè)備上的文件或目錄的inode在內(nèi)存中的統(tǒng)一對應(yīng)結(jié)構(gòu),并且給出了不同文件系統(tǒng)特有的信息,即各種文件系統(tǒng)的inode在內(nèi)存中的映像。

        如前所述,Linux繼承了Uinx,把文件名和文件控制信息分開管理,由目錄項(dir_entry)管理文件名,索引節(jié)點(inode)管理文件控制信息,并且通過dir_entry結(jié)構(gòu)中的d_inode域指向文件的inode節(jié)點,建立與文件索引節(jié)點的聯(lián)系。文件的索引節(jié)點(inode)結(jié)構(gòu)體包含了關(guān)于文件的組織信息和管理信息,根據(jù)其中的i_info查找存儲文件內(nèi)容的數(shù)據(jù)塊,根據(jù)i_op指向的inode_operations結(jié)構(gòu),通過其中的指針函數(shù)調(diào)用各自的inode操作函數(shù)。

        系統(tǒng)進(jìn)程使用文件由表示進(jìn)程當(dāng)前打開的所有文件的數(shù)據(jù)結(jié)構(gòu)files_struct建立進(jìn)程與文件系統(tǒng)的關(guān)系。指針fd和fd_array都指向代表打開文件對象數(shù)組。進(jìn)程調(diào)用文件操作函數(shù),依據(jù)文件路徑打開文件,文件操作函數(shù)返回一整數(shù),即文件描述符,例如int open(const char*pathname,int flages)[2]。之后,進(jìn)程便用文件描述符來表示一個打開的文件,該整數(shù)文件描述符就是files_struct中file數(shù)組fd的下標(biāo)。

        圖3描述了進(jìn)程使用文件時用到的VFS中主要數(shù)據(jù)結(jié)構(gòu)的關(guān)系。

        圖3 VFS中主要數(shù)據(jù)結(jié)構(gòu)關(guān)系圖

        dentry結(jié)構(gòu)描述的是邏輯意義上的文件,記錄的是其邏輯上的屬性。只要是有效的dentry結(jié)構(gòu),則其指針d_inode必定指向一個inode結(jié)構(gòu)。而inode結(jié)構(gòu)所代表的是物理意義上的文件,記錄的是其物理上的屬性。一個inode結(jié)構(gòu)可能對應(yīng)著不只一個dentry結(jié)構(gòu),因為一個物理意義上的文件可以被鏈接(link)其他路徑名。

        所以,在inode結(jié)構(gòu)中有個隊列i_dentry,凡是代表著這個文件的所有目錄項(普通文件也是目錄文件的一種)都是通過dentry結(jié)構(gòu)中的d_alias掛入相應(yīng)的inode結(jié)構(gòu)中的i_dentry隊列。

        結(jié) 語

        本文主要從數(shù)據(jù)結(jié)構(gòu)的角度出發(fā),對Linux虛擬文件系統(tǒng)的實現(xiàn)技術(shù)作了簡要的分析。Linux系統(tǒng)把一切設(shè)備都作為文件看待,深入探究Linux虛擬文件系統(tǒng)的文件組織方式,可以為系統(tǒng)軟件設(shè)計和嵌入式Linux驅(qū)動開發(fā)提供一定參考價值。

        [1]毛德操.Linux內(nèi)核源代碼情景分析(上)[M].杭州:浙江大學(xué)出版社,2009:428-430.

        [2]韓超,魏治宇,寥文江.嵌入式linux上的C語言編程實踐[M].北京:電子工業(yè)出版社,2009:163-164.

        猜你喜歡
        數(shù)據(jù)結(jié)構(gòu)進(jìn)程內(nèi)存
        債券市場對外開放的進(jìn)程與展望
        中國外匯(2019年20期)2019-11-25 09:54:58
        “春夏秋冬”的內(nèi)存
        “翻轉(zhuǎn)課堂”教學(xué)模式的探討——以《數(shù)據(jù)結(jié)構(gòu)》課程教學(xué)為例
        高職高專數(shù)據(jù)結(jié)構(gòu)教學(xué)改革探討
        中國市場(2016年45期)2016-05-17 05:15:48
        TRIZ理論在“數(shù)據(jù)結(jié)構(gòu)”多媒體教學(xué)中的應(yīng)用
        社會進(jìn)程中的新聞學(xué)探尋
        《數(shù)據(jù)結(jié)構(gòu)》教學(xué)方法創(chuàng)新探討
        河南科技(2014年5期)2014-02-27 14:08:57
        基于內(nèi)存的地理信息訪問技術(shù)
        我國高等教育改革進(jìn)程與反思
        Linux僵死進(jìn)程的產(chǎn)生與避免
        人人妻人人澡av| 国模吧无码一区二区三区| 男ji大巴进入女人的视频小说| 亚洲精品成人区在线观看| 亚洲午夜无码久久yy6080 | 亚洲国产精品综合久久网各| 中文字幕亚洲乱码熟女在线萌芽| 啊v在线视频| 亚洲av极品尤物不卡在线观看| 蜜桃视频在线观看免费亚洲| 色天使综合婷婷国产日韩av| 无遮挡边吃摸边吃奶边做| 久久国产精品免费一区六九堂| 亚洲av免费看一区二区三区| 亚洲中文字幕精品乱码2021| 无人区一码二码三码四码区| 久久久无码一区二区三区| 亚洲成a人片在线观看中| 一个人午夜观看在线中文字幕| 免费a级毛片无码免费视频首页| 亚洲女初尝黑人巨高清| 图图国产亚洲综合网站| 国产一级一片内射在线| 好看的日韩精品视频在线| 夜夜春亚洲嫩草影院| 午夜不卡久久精品无码免费| 国内视频一区| 99久久婷婷国产精品综合网站| 亚洲开心婷婷中文字幕| 亚洲aⅴ在线无码播放毛片一线天 中国国语毛片免费观看视频 | 久久综合给合久久97色| 被灌醉的日本人妻中文字幕| 国产精品毛片无遮挡| 成熟人妻av无码专区| 无码三级国产三级在线电影| 国产一区二区三区 在线观看| 三年片免费观看影视大全视频 | 免费看美女被靠到爽的视频| 中文字幕乱伦视频| 国产精品亚洲国产| 亚洲av本道一本二本三区 |