【正文】
個 VFS存在。Linux的 VFS隨系統(tǒng)的初啟而建立,隨系統(tǒng)的關(guān)閉而消逝。 ? 為了管理所有安裝的文件系統(tǒng), VFS通過使用描述整個 VFS的一組數(shù)據(jù)結(jié)構(gòu),以及描述實際安裝的文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu),來處理實際文件系統(tǒng)之間的各種差別,達到管理的目的。 虛擬文件系統(tǒng) VFS的數(shù)據(jù)結(jié)構(gòu) 1.超級塊( super_block) 2.索引節(jié)點( inode) 3. file結(jié)構(gòu) 4. flies_struct結(jié)構(gòu) 5. vfsmount結(jié)構(gòu) f d _ an ay [0 ] f d _ an ay [1 ] f d _ an ay [3 1 ] t as k _ s t ru ct f i l e … … … … f d _ an ay [ ] 的 32 個元素 f i l e f _ m o d e … f _ o p f i l es _ s t ru ct f i l e_ o p era t i o n s read w ri t e … … 文件操作入口 圖 820 task_struct、 files_struct、 file、 file_operations之間的關(guān)系 m n t _ d ev n am e m n t _ n ex t m n t _ s b v f s m o u n t 1 m n t _ d ev n am e m n t _ n ex t m n t _ s b v f s m o u n t 2 v f s m n t l i s t v f s m n t t ai l s _ b l o ck s i ze s _ t y p e s _ d ev s u p er_ b l o ck 1 s _ b l o ck s i ze s _ t y p e s _ d ev s u p er_ b l o ck 2 … … … … 圖 821 vfsmount單鏈表的結(jié)構(gòu) Linux的設(shè)備管理 ? 在 Linux里,把 I/O設(shè)備都當作文件來處理,稱它們?yōu)樘貏e文件或設(shè)備文件。 Linux設(shè)備管理概述 進程 設(shè)備 設(shè)備驅(qū)動程序 文件系統(tǒng)層 應(yīng)用層 f i l e 結(jié)構(gòu) 設(shè)備文件 i n o d e 節(jié)點: 設(shè)備驅(qū)動層 物理設(shè)備層 圖 822 Linux設(shè)備驅(qū)動的分層結(jié)構(gòu)示意 外部設(shè)備分類 1.字符設(shè)備( character device) 2.塊設(shè)備( block device) 3.網(wǎng)絡(luò)設(shè)備( device) Linux對字符設(shè)備的管理 ? Linux為了對字符設(shè)備進行管理 , 設(shè)置了如下的一些數(shù)據(jù)結(jié)構(gòu) 。 1. device_struct結(jié)構(gòu) 2. chrdevs結(jié)構(gòu)數(shù)組 設(shè)備文件 的 inode 節(jié)點 chrdevs [0] : chrdevs [ i ] : chrdevs [ n ] : 主設(shè)備號: chrdevs 數(shù)組 f ile _operations 結(jié)構(gòu) i nam e *f ops nam e *f ops nam e *f ops … … 一個 devic e_s truct 結(jié)構(gòu) 一個 devic e_s truct 結(jié)構(gòu) lse ek ( ) read ( ) wr ite ( ) readdir ( ) select ( ) open ( ) relea s e ( ) … 圖 823 字符設(shè)備數(shù)據(jù)結(jié)構(gòu)間的關(guān)系示意 Linux對塊設(shè)備的管理 1.塊設(shè)備管理的數(shù)據(jù)結(jié)構(gòu) ( 1) device_struct結(jié)構(gòu) ( 2) blkdevs結(jié)構(gòu)數(shù)組 2.對塊設(shè)備輸入 /輸出請求管理的 數(shù)據(jù)結(jié)構(gòu) ( 1)緩沖區(qū)與 buffer_head結(jié)構(gòu) ( 2) request結(jié)構(gòu) ( 3) blk_dev_struct結(jié)構(gòu)和 blk_dev數(shù)組 b u f f er_ h ead n ex t b h t ai l bh … … req u es t 結(jié)構(gòu) n ex t b h t ai l bh … … req u es t 結(jié)構(gòu) … b u f f er_ h ead … b u f f er_ h ead … 對塊設(shè)備操作的請求隊列 對塊設(shè)備相同操作的緩沖隊列 圖 824 request結(jié)構(gòu)與 buffer_head結(jié)構(gòu)的關(guān)系示意 b u f f er_ h ea d … b u f f er_ h ea d … b u f f er_ h ea d … req u es t _ q u eu e req u es t _ q u eu e … … … b l k _ d ev 數(shù)組 一個 b l k _ d ev _ s t ru ct 結(jié)構(gòu) 一個 b l k _ d ev _ s t ru ct 結(jié)構(gòu) 另一個 req u es t 隊列 req u es t 結(jié)構(gòu) n ex t b h t ai l … … bh 另一個 req u es t 結(jié)構(gòu) 圖 825 塊設(shè)備 I/O諸數(shù)據(jù)結(jié)構(gòu)間的關(guān)系示意