青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Prayer

在一般中尋求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

Linux 文件系統(tǒng)剖析

Posted on 2009-07-28 13:45 Prayer 閱讀(216) 評論(0)  編輯 收藏 引用 所屬分類: LINUX/UNIX/AIX
在文件系統(tǒng)方面,Linux® 可以算得上操作系統(tǒng)中的 “瑞士軍刀”。Linux 支持許多種文件系統(tǒng),從日志型文件系統(tǒng)到集群文件系統(tǒng)和加密文件系統(tǒng)。對于使用標準的和比較奇特的文件系統(tǒng)以及開發(fā)文件系統(tǒng)來說,Linux 是極好的平臺。本文討論 Linux 內核中的虛擬文件系統(tǒng)(VFS,有時候稱為虛擬文件系統(tǒng)交換器),然后介紹將文件系統(tǒng)連接在一起的主要結構。

基本的文件系統(tǒng)體系結構

Linux 文件系統(tǒng)體系結構是一個對復雜系統(tǒng)進行抽象化的有趣例子。通過使用一組通用的 API 函數(shù),Linux 可以在許多種存儲設備上支持許多種文件系統(tǒng)。例如,read 函數(shù)調用可以從指定的文件描述符讀取一定數(shù)量的字節(jié)。read 函數(shù)不了解文件系統(tǒng)的類型,比如 ext3 或 NFS。它也不了解文件系統(tǒng)所在的存儲媒體,比如 AT Attachment Packet Interface(ATAPI)磁盤、Serial-Attached SCSI(SAS)磁盤或 Serial Advanced Technology Attachment(SATA)磁盤。但是,當通過調用 read 函數(shù)讀取一個文件時,數(shù)據(jù)會正常返回。本文講解這個機制的實現(xiàn)方法并介紹 Linux 文件系統(tǒng)層的主要結構。





回頁首


什么是文件系統(tǒng)?

首先回答最常見的問題,“什么是文件系統(tǒng)”。文件系統(tǒng)是對一個存儲設備上的數(shù)據(jù)和元數(shù)據(jù)進行組織的機制。由于定義如此寬泛,支持它的代碼會很有意思。正如前面提到的,有許多種文件系統(tǒng)和媒體。由于存在這么多類型,可以預料到 Linux 文件系統(tǒng)接口實現(xiàn)為分層的體系結構,從而將用戶接口層、文件系統(tǒng)實現(xiàn)和操作存儲設備的驅動程序分隔開。

文件系統(tǒng)作為協(xié)議
另一種看待文件系統(tǒng)的方式是把它看作一個協(xié)議。網絡協(xié)議(比如 IP)規(guī)定了互聯(lián)網上傳輸?shù)臄?shù)據(jù)流的意義,同樣,文件系統(tǒng)會給出特定存儲媒體上數(shù)據(jù)的意義。

掛裝

在 Linux 中將一個文件系統(tǒng)與一個存儲設備關聯(lián)起來的過程稱為掛裝(mount)。使用 mount 命令將一個文件系統(tǒng)附著到當前文件系統(tǒng)層次結構中(根)。在執(zhí)行掛裝時,要提供文件系統(tǒng)類型、文件系統(tǒng)和一個掛裝點。

為了說明 Linux 文件系統(tǒng)層的功能(以及掛裝的方法),我們在當前文件系統(tǒng)的一個文件中創(chuàng)建一個文件系統(tǒng)。實現(xiàn)的方法是,首先用 dd 命令創(chuàng)建一個指定大小的文件(使用 /dev/zero 作為源進行文件復制)—— 換句話說,一個用零進行初始化的文件,見清單 1。


清單 1. 創(chuàng)建一個經過初始化的文件
            $ dd if=/dev/zero of=file.img bs=1k count=10000
            10000+0 records in
            10000+0 records out
            $
            

現(xiàn)在有了一個 10MB 的 file.img 文件。使用 losetup 命令將一個循環(huán)設備與這個文件關聯(lián)起來,讓它看起來像一個塊設備,而不是文件系統(tǒng)中的常規(guī)文件:

$ losetup /dev/loop0 file.img
            $
            

這個文件現(xiàn)在作為一個塊設備出現(xiàn)(由 /dev/loop0 表示)。然后用 mke2fs 在這個設備上創(chuàng)建一個文件系統(tǒng)。這個命令創(chuàng)建一個指定大小的新的 ext2 文件系統(tǒng),見清單 2。


清單 2. 用循環(huán)設備創(chuàng)建 ext2 文件系統(tǒng)
            $ mke2fs -c /dev/loop0 10000
            mke2fs 1.35 (28-Feb-2004)
            max_blocks 1024000, rsv_groups = 1250, rsv_gdb = 39
            Filesystem label=
            OS type: Linux
            Block size=1024 (log=0)
            Fragment size=1024 (log=0)
            2512 inodes, 10000 blocks
            500 blocks (5.00%) reserved for the super user
            ...
            $
            

使用 mount 命令將循環(huán)設備(/dev/loop0)所表示的 file.img 文件掛裝到掛裝點 /mnt/point1。注意,文件系統(tǒng)類型指定為 ext2。掛裝之后,就可以將這個掛裝點當作一個新的文件系統(tǒng),比如使用 ls 命令,見清單 3。


清單 3. 創(chuàng)建掛裝點并通過循環(huán)設備掛裝文件系統(tǒng)
            $ mkdir /mnt/point1
            $ mount -t ext2 /dev/loop0 /mnt/point1
            $ ls /mnt/point1
            lost+found
            $
            

如清單 4 所示,還可以繼續(xù)這個過程:在剛才掛裝的文件系統(tǒng)中創(chuàng)建一個新文件,將它與一個循環(huán)設備關聯(lián)起來,再在上面創(chuàng)建另一個文件系統(tǒng)。


清單 4. 在循環(huán)文件系統(tǒng)中創(chuàng)建一個新的循環(huán)文件系統(tǒng)
            $ dd if=/dev/zero of=/mnt/point1/file.img bs=1k count=1000
            1000+0 records in
            1000+0 records out
            $ losetup /dev/loop1 /mnt/point1/file.img
            $ mke2fs -c /dev/loop1 1000
            mke2fs 1.35 (28-Feb-2004)
            max_blocks 1024000, rsv_groups = 125, rsv_gdb = 3
            Filesystem label=
            ...
            $ mkdir /mnt/point2
            $ mount -t ext2 /dev/loop1 /mnt/point2
            $ ls /mnt/point2
            lost+found
            $ ls /mnt/point1
            file.img lost+found
            $
            

通過這個簡單的演示很容易體會到 Linux 文件系統(tǒng)(和循環(huán)設備)是多么強大??梢园凑障嗤姆椒ㄔ谖募嫌醚h(huán)設備創(chuàng)建加密的文件系統(tǒng)??梢栽谛枰獣r使用循環(huán)設備臨時掛裝文件,這有助于保護數(shù)據(jù)。





回頁首


文件系統(tǒng)體系結構

既然已經看到了文件系統(tǒng)的構造方法,現(xiàn)在就看看 Linux 文件系統(tǒng)層的體系結構。本文從兩個角度考察 Linux 文件系統(tǒng)。首先采用高層體系結構的角度。然后進行深層次討論,介紹實現(xiàn)文件系統(tǒng)層的主要結構。





回頁首


高層體系結構

盡管大多數(shù)文件系統(tǒng)代碼在內核中(后面討論的用戶空間文件系統(tǒng)除外),但是圖 1 所示的體系結構顯示了用戶空間和內核中與文件系統(tǒng)相關的主要組件之間的關系。


圖 1. Linux 文件系統(tǒng)組件的體系結構
圖 1. Linux 文件系統(tǒng)組件的體系結構

用戶空間包含一些應用程序(例如,文件系統(tǒng)的使用者)和 GNU C 庫(glibc),它們?yōu)槲募到y(tǒng)調用(打開、讀取、寫和關閉)提供用戶接口。系統(tǒng)調用接口的作用就像是交換器,它將系統(tǒng)調用從用戶空間發(fā)送到內核空間中的適當端點。

VFS 是底層文件系統(tǒng)的主要接口。這個組件導出一組接口,然后將它們抽象到各個文件系統(tǒng),各個文件系統(tǒng)的行為可能差異很大。有兩個針對文件系統(tǒng)對象的緩存(inode 和 dentry)。它們緩存最近使用過的文件系統(tǒng)對象。

每個文件系統(tǒng)實現(xiàn)(比如 ext2、JFS 等等)導出一組通用接口,供 VFS 使用。緩沖區(qū)緩存會緩存文件系統(tǒng)和相關塊設備之間的請求。例如,對底層設備驅動程序的讀寫請求會通過緩沖區(qū)緩存來傳遞。這就允許在其中緩存請求,減少訪問物理設備的次數(shù),加快訪問速度。以最近使用(LRU)列表的形式管理緩沖區(qū)緩存。注意,可以使用 sync 命令將緩沖區(qū)緩存中的請求發(fā)送到存儲媒體(迫使所有未寫的數(shù)據(jù)發(fā)送到設備驅動程序,進而發(fā)送到存儲設備)。

什么是塊設備?
塊設備就是以塊(比如磁盤扇區(qū))為單位收發(fā)數(shù)據(jù)的設備,它們支持緩沖和隨機訪問(不必順序讀取塊,而是可以在任何時候訪問任何塊)等特性。塊設備包括硬盤、CD-ROM 和 RAM 盤。與塊設備相對的是字符設備,字符設備沒有可以進行物理尋址的媒體。字符設備包括串行端口和磁帶設備,只能逐字符地讀取這些設備中的數(shù)據(jù)。

這就是 VFS 和文件系統(tǒng)組件的高層情況?,F(xiàn)在,討論實現(xiàn)這個子系統(tǒng)的主要結構。

主要結構

Linux 以一組通用對象的角度看待所有文件系統(tǒng)。這些對象是超級塊(superblock)、inode、dentry 和文件。超級塊在每個文件系統(tǒng)的根上,超級塊描述和維護文件系統(tǒng)的狀態(tài)。文件系統(tǒng)中管理的每個對象(文件或目錄)在 Linux 中表示為一個 inode。inode 包含管理文件系統(tǒng)中的對象所需的所有元數(shù)據(jù)(包括可以在對象上執(zhí)行的操作)。另一組結構稱為 dentry,它們用來實現(xiàn)名稱和 inode 之間的映射,有一個目錄緩存用來保存最近使用的 dentry。dentry 還維護目錄和文件之間的關系,從而支持在文件系統(tǒng)中移動。最后,VFS 文件表示一個打開的文件(保存打開的文件的狀態(tài),比如寫偏移量等等)。

虛擬文件系統(tǒng)層

VFS 作為文件系統(tǒng)接口的根層。VFS 記錄當前支持的文件系統(tǒng)以及當前掛裝的文件系統(tǒng)。

可以使用一組注冊函數(shù)在 Linux 中動態(tài)地添加或刪除文件系統(tǒng)。內核保存當前支持的文件系統(tǒng)的列表,可以通過 /proc 文件系統(tǒng)在用戶空間中查看這個列表。這個虛擬文件還顯示當前與這些文件系統(tǒng)相關聯(lián)的設備。在 Linux 中添加新文件系統(tǒng)的方法是調用 register_filesystem。這個函數(shù)的參數(shù)定義一個文件系統(tǒng)結構(file_system_type)的引用,這個結構定義文件系統(tǒng)的名稱、一組屬性和兩個超級塊函數(shù)。也可以注銷文件系統(tǒng)。

在注冊新的文件系統(tǒng)時,會把這個文件系統(tǒng)和它的相關信息添加到 file_systems 列表中(見圖 2 和 linux/include/linux/mount.h)。這個列表定義可以支持的文件系統(tǒng)。在命令行上輸入 cat /proc/filesystems,就可以查看這個列表。


圖 2. 向內核注冊的文件系統(tǒng)
 圖 2. 向內核注冊的文件系統(tǒng)

VFS 中維護的另一個結構是掛裝的文件系統(tǒng)(見圖 3)。這個結構提供當前掛裝的文件系統(tǒng)(見 linux/include/linux/fs.h)。它鏈接下面討論的超級塊結構。


圖 3. 掛裝的文件系統(tǒng)列表
 圖 3. 掛裝的文件系統(tǒng)列表

超級塊

超級塊結構表示一個文件系統(tǒng)。它包含管理文件系統(tǒng)所需的信息,包括文件系統(tǒng)名稱(比如 ext2)、文件系統(tǒng)的大小和狀態(tài)、塊設備的引用和元數(shù)據(jù)信息(比如空閑列表等等)。超級塊通常存儲在存儲媒體上,但是如果超級塊不存在,也可以實時創(chuàng)建它??梢栽?./linux/include/linux/fs.h 中找到超級塊結構(見圖 4)。


圖 4. 超級塊結構和 inode 操作
 圖 4. 超級塊結構和 inode 操作

超級塊中的一個重要元素是超級塊操作的定義。這個結構定義一組用來管理這個文件系統(tǒng)中的 inode 的函數(shù)。例如,可以用 alloc_inode 分配 inode,用 destroy_inode 刪除 inode??梢杂?read_inodewrite_inode 讀寫 inode,用 sync_fs 執(zhí)行文件系統(tǒng)同步??梢栽?./linux/include/linux/fs.h 中找到 super_operations 結構。每個文件系統(tǒng)提供自己的 inode 方法,這些方法實現(xiàn)操作并向 VFS 層提供通用的抽象。

inode 和 dentry

inode 表示文件系統(tǒng)中的一個對象,它具有惟一標識符。各個文件系統(tǒng)提供將文件名映射為惟一 inode 標識符和 inode 引用的方法。圖 5 顯示 inode 結構的一部分以及兩個相關結構。請?zhí)貏e注意 inode_operationsfile_operations。這些結構表示可以在這個 inode 上執(zhí)行的操作。inode_operations 定義直接在 inode 上執(zhí)行的操作,而 file_operations 定義與文件和目錄相關的方法(標準系統(tǒng)調用)。


圖 5. inode 結構和相關聯(lián)的操作
 圖 5. inode 結構和相關聯(lián)的操作

inode 和目錄緩存分別保存最近使用的 inode 和 dentry。注意,對于 inode 緩存中的每個 inode,在目錄緩存中都有一個對應的 dentry??梢栽?./linux/include/linux/fs.h 中找到 inodedentry 結構。

緩沖區(qū)緩存

除了各個文件系統(tǒng)實現(xiàn)(可以在 ./linux/fs 中找到)之外,文件系統(tǒng)層的底部是緩沖區(qū)緩存。這個組件跟蹤來自文件系統(tǒng)實現(xiàn)和物理設備(通過設備驅動程序)的讀寫請求。為了提高效率,Linux 對請求進行緩存,避免將所有請求發(fā)送到物理設備。緩存中緩存最近使用的緩沖區(qū)(頁面),這些緩沖區(qū)可以快速提供給各個文件系統(tǒng)。





回頁首


有趣的文件系統(tǒng)

本文沒有討論 Linux 中可用的具體文件系統(tǒng),但是值得在這里稍微提一下。Linux 支持許多種文件系統(tǒng),包括 MINIX、MS-DOS 和 ext2 等老式文件系統(tǒng)。Linux 還支持 ext3、JFS 和 ReiserFS 等新的日志型文件系統(tǒng)。另外,Linux 支持加密文件系統(tǒng)(比如 CFS)和虛擬文件系統(tǒng)(比如 /proc)。

最后一種值得注意的文件系統(tǒng)是 Filesystem in Userspace(FUSE)。這種文件系統(tǒng)可以將文件系統(tǒng)請求通過 VFS 發(fā)送回用戶空間。所以,如果您有興趣創(chuàng)建自己的文件系統(tǒng),那么通過使用 FUSE 進行開發(fā)是一種不錯的方法。





回頁首


結束語

分享這篇文章……

digg 將本文提交到 Digg
del.icio.us 發(fā)布到 del.icio.us
Slashdot 提交到 Slashdot!

盡管文件系統(tǒng)的實現(xiàn)并不復雜,但它是可伸縮和可擴展的體系結構的好例子。文件系統(tǒng)體系結構已經發(fā)展了許多年,并成功地支持了許多不同類型的文件系統(tǒng)和許多目標存儲設備類型。由于使用了基于插件的體系結構和多層的函數(shù)間接性,Linux 文件系統(tǒng)在近期的發(fā)展很值得關注

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一本色道久久综合亚洲精品小说| 亚洲激情中文1区| 国产精品丝袜xxxxxxx| 久久综合999| 亚洲影院污污.| 一区二区三区鲁丝不卡| 在线一区亚洲| 欧美永久精品| 免费观看成人www动漫视频| 老司机精品福利视频| 嫩草影视亚洲| 国产精品啊啊啊| 国产亚洲福利一区| 亚洲电影免费观看高清完整版在线| 国产亚洲欧洲一区高清在线观看| 韩国av一区二区三区在线观看| 激情成人av在线| 午夜精品国产更新| 美女主播精品视频一二三四| 欧美视频网址| 在线日本高清免费不卡| 中日韩视频在线观看| 久久久噜噜噜久久| 亚洲毛片av在线| 久久免费国产精品1| 国产精品久久久久久久久久久久 | 性欧美大战久久久久久久免费观看| 午夜日韩激情| 一区二区三区免费网站| 欧美 日韩 国产 一区| 国产亚洲欧美色| 欧美在线日韩精品| 亚洲一区二区三区777| 欧美巨乳在线| 亚洲一级在线观看| 亚洲日本成人| 欧美日韩成人在线观看| 亚洲狼人精品一区二区三区| 亚洲国产精品精华液2区45| 久久综合久久综合九色| 亚洲国产精品va在线看黑人| 麻豆精品传媒视频| 麻豆av福利av久久av| 亚洲精品乱码久久久久久久久| 欧美大片91| 欧美色图首页| 久久se精品一区二区| 久久亚洲精选| 亚洲综合色在线| 欧美在线视屏 | 亚洲视频一区在线观看| 亚洲国产成人一区| 一区二区日韩免费看| 日韩视频亚洲视频| 国产欧美精品在线播放| 亚洲欧美美女| 久久精品一区二区| 亚洲大片在线观看| 这里是久久伊人| 国语自产偷拍精品视频偷| 亚洲电影在线观看| 欧美日韩精品免费观看视频完整| 一区二区三区精品视频在线观看 | 一本一本久久| 欧美一区二区啪啪| 亚洲一区二区不卡免费| 欧美成人精品三级在线观看| 久久超碰97中文字幕| 欧美日韩精品欧美日韩精品| 欧美高清视频在线| 亚洲国产精品嫩草影院| 久久精品视频在线| 久久综合99re88久久爱| 国产日韩精品一区二区三区| 亚洲小视频在线观看| 亚洲欧美日韩专区| 国产精品丝袜xxxxxxx| 亚洲欧美日韩国产综合| 欧美一级一区| 亚洲第一色在线| 欧美激情一区二区久久久| 亚洲国产成人久久综合| 久久gogo国模裸体人体| 羞羞答答国产精品www一本| 国产精品久久久久久久久免费桃花| 模特精品在线| 亚洲欧美清纯在线制服| 国产乱码精品一区二区三区忘忧草| 一本大道久久a久久精品综合| 亚洲欧美日韩网| 国产在线精品成人一区二区三区 | 玖玖精品视频| 亚洲欧洲综合另类| 午夜日韩激情| 在线看国产一区| 国产精品久久久久久久久| 香蕉久久夜色精品| 亚洲国产成人精品久久| 久久精品国产免费观看| 99re热精品| 亚洲国产精品传媒在线观看 | 亚洲高清三级视频| 国产精品入口尤物| 欧美母乳在线| 久久婷婷蜜乳一本欲蜜臀| 99精品国产99久久久久久福利| 久久综合狠狠综合久久激情| 亚洲精品你懂的| 在线不卡免费欧美| 国产精品一区三区| 国产精品mm| 欧美日韩国产精品专区| 欧美激情一区三区| 欧美激情一区二区三区成人| 亚洲一区二区三区色| 日韩视频一区二区三区在线播放| 国产亚洲va综合人人澡精品| 欧美视频精品在线| 欧美日韩国产不卡| 国产精品草草| 国产精品极品美女粉嫩高清在线| 欧美精品电影在线| 国产精品久久久久久五月尺| 欧美国产专区| 欧美巨乳在线观看| 国产酒店精品激情| 亚洲国产精品电影| 亚洲视频在线观看三级| 久久精品123| 欧美国产精品久久| 亚洲日本成人在线观看| 亚洲综合第一页| 久久久久成人网| 欧美亚韩一区| 亚洲国产精品一区在线观看不卡| 99精品视频免费观看| 欧美一区二区视频在线观看| 麻豆精品精品国产自在97香蕉| 亚洲黄色高清| 久久se精品一区精品二区| 免费久久精品视频| 国产精品揄拍500视频| 亚洲美女在线一区| 免费久久久一本精品久久区| 亚洲一区二区三区国产| 免费成人你懂的| 国产精品日韩高清| 日韩午夜在线视频| 欧美成人在线网站| 久久国产精品99精品国产| 国产精自产拍久久久久久| 一区二区三区四区精品| 99精品欧美一区| 国产精品日韩精品| 久久超碰97人人做人人爱| 中文精品一区二区三区| 亚洲国产精品久久久久| 久久米奇亚洲| 亚洲激情黄色| 99精品99| 黄色成人av| 亚洲人成艺术| 国产女人aaa级久久久级| 久久亚洲欧美| 欧美二区在线| 亚洲欧美日韩中文在线制服| 性欧美video另类hd性玩具| 国产日韩欧美精品在线| 老司机成人在线视频| 欧美高清在线视频观看不卡| 一区二区av在线| 久久精品国产第一区二区三区最新章节 | 国产精品看片你懂得| 久久精品女人的天堂av| 久久这里只有| 午夜精品短视频| 免费在线日韩av| 欧美一区成人| 欧美国产另类| 久久久久久久久久久久久9999| 久久久之久亚州精品露出| 一个色综合导航| 久久夜色精品| 久久久在线视频| 国产欧美一区二区三区久久人妖 | 欧美福利网址| 久久久91精品国产| 国产精品久久久久一区二区三区| 美女精品一区| 精品动漫av| 老司机精品视频网站| 欧美gay视频激情| 亚洲高清久久| 欧美连裤袜在线视频| 亚洲福利专区| 99热精品在线| 亚洲欧洲精品一区二区三区 | 久久九九全国免费精品观看| 国产精品国产自产拍高清av王其| 亚洲国产女人aaa毛片在线|