国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

圖解Linux虛擬文件系統(tǒng)(VFS)之關(guān)系篇

云計算 虛擬化
VFS的設(shè)計目標(biāo)是將不同類型的文件系統(tǒng)抽象為一個統(tǒng)一的接口,使得用戶和應(yīng)用程序無需關(guān)心底層文件系統(tǒng)的具體實現(xiàn)細(xì)節(jié)。通過VFS用戶可以使用相同的系統(tǒng)調(diào)用(如open、read、write等)來訪問不同類型的文件系統(tǒng),包括本地文件系統(tǒng)(如ext4、XFS等)、網(wǎng)絡(luò)文件系統(tǒng)(如NFS、CIFS等)以及虛擬文件系統(tǒng)(如procfs、sysfs等)。

大家好,今天和大家探討一下Linux虛擬文件系統(tǒng),虛擬文件系統(tǒng)是我一直想要去聊的一個知識點(diǎn),如果你想從事Linux開發(fā)相關(guān)的工作,一定要了解虛擬文件系統(tǒng)。

1.什么是虛擬文件系統(tǒng)?

Linux虛擬文件系統(tǒng)(Virtual File System,VFS)是Linux操作系統(tǒng)中的一個重要組成部分,它提供了一個統(tǒng)一的接口,使得用戶和應(yīng)用程序可以通過相同的方式訪問不同類型的文件系統(tǒng)。

圖片圖片

VFS的設(shè)計目標(biāo)是將不同類型的文件系統(tǒng)抽象為一個統(tǒng)一的接口,使得用戶和應(yīng)用程序無需關(guān)心底層文件系統(tǒng)的具體實現(xiàn)細(xì)節(jié)。通過VFS用戶可以使用相同的系統(tǒng)調(diào)用(如open、read、write等)來訪問不同類型的文件系統(tǒng),包括本地文件系統(tǒng)(如ext4、XFS等)、網(wǎng)絡(luò)文件系統(tǒng)(如NFS、CIFS等)以及虛擬文件系統(tǒng)(如procfs、sysfs等)。

VFS由以下幾個主要組件組成:

  • 虛擬文件系統(tǒng)接口:VFS定義了一組通用的文件系統(tǒng)操作接口。
  • 超級塊(super_block):每個文件系統(tǒng)都有一個超級塊,它包含了文件系統(tǒng)的元數(shù)據(jù)信息,如文件系統(tǒng)類型、塊大小、inode表等,超級塊提供了對文件系統(tǒng)的整體描述和管理。
  • 目錄項(dentry):dentry是目錄項的縮寫,用于表示文件系統(tǒng)中的目錄和文件,dentry包含了目錄和文件對應(yīng)的inode指針,通過它可以快速定位到目錄下的文件或子目錄。
  • 文件節(jié)點(diǎn)(inode):inode是文件系統(tǒng)中的一個數(shù)據(jù)結(jié)構(gòu),用于存儲文件或目錄的元數(shù)據(jù)信息,如文件大小、權(quán)限、所有者等,每個文件或目錄都對應(yīng)一個唯一的inode。
  • 文件對象(file):file是表示打開文件的數(shù)據(jù)結(jié)構(gòu),它包含了對應(yīng)的inode指針、當(dāng)前讀寫位置等信息,通過file可以進(jìn)行文件的讀寫操作。

2.Linux系統(tǒng)文件樹

對于一個普通的Linux用戶或者運(yùn)維人員,Linux系統(tǒng)文件樹通常的樣子如下圖,以根文件系統(tǒng)根目錄為起點(diǎn),通過根目錄遍歷整個文件樹。

圖片圖片

而在系統(tǒng)開發(fā)人員眼中,Linux系統(tǒng)文件樹則變成這樣一個結(jié)構(gòu),每個文件和目錄都對應(yīng)一個dentry結(jié)構(gòu)體。

圖片圖片

dentry到底是什么?

dentry結(jié)構(gòu)體的主要作用是提供文件系統(tǒng)層次結(jié)構(gòu)的表示,它們通過形成一個樹狀結(jié)構(gòu)來組織目錄和文件,每個dentry都有一個唯一的路徑名,可以通過遍歷dentry樹來找到特定文件或目錄。

struct dentry結(jié)構(gòu)體定義:

struct dentry {
    struct dentry *d_parent;
    struct qstr d_name;
    struct inode *d_inode;
   
    const struct dentry_operations *d_op;
    struct super_block *d_sb; 
    struct list_head d_child;
    struct list_head d_subdirs;
    ....
};

struct dentry結(jié)構(gòu)體通過d_parent,d_child,d_subdirs等成員將文件系統(tǒng)組成一顆文件樹,要了解Linux文件系統(tǒng),我們得學(xué)會運(yùn)用dentry。

小節(jié):dentry是VFS重要的組成部分,要理解VFS先從dentry開始。

3.文件系統(tǒng)注冊

通過前面的學(xué)習(xí),我們了解到dentry結(jié)構(gòu)的重要性,接下來圍繞dentry結(jié)構(gòu)體來解析文件VFS各組件之間的關(guān)系,我們先來看一下整體架構(gòu)圖:

圖片圖片

Linux文件系統(tǒng)對應(yīng)一個file_system_type結(jié)構(gòu)體對象,file_system_type結(jié)構(gòu)體定義如下:

struct file_system_type {
    const char *name;
    int fs_flags;
    int (*init_fs_context)(struct fs_context *);
    const struct fs_parameter_spec *parameters;
    struct dentry *(*mount) (struct file_system_type *, int,
                 const char *, void *);
    void (*kill_sb) (struct super_block *);
    ......
};

ramfs文件系統(tǒng)定義如下,name表示文件系統(tǒng)類型,當(dāng)ramfs文件系統(tǒng)需要實例化,需要通過name查找全局文件系統(tǒng)鏈表頭找到對應(yīng)的已注冊文件系統(tǒng),再通過已注冊文件系統(tǒng)創(chuàng)建超級塊(super block)。

static struct file_system_type ramfs_fs_type = {
      .name = "ramfs",
      .init_fs_context = ramfs_init_fs_context,
      .parameters = ramfs_fs_parameters,
      .kill_sb = ramfs_kill_sb,
      .fs_flags = FS_USERNS_MOUNT,
};

定義好文件系統(tǒng)后,通過register_filesystem函數(shù)將文件系統(tǒng)注冊至Linux系統(tǒng),注冊成功的文件系統(tǒng)會插入全局文件系統(tǒng)鏈表,已注冊的文件系統(tǒng)能夠用來創(chuàng)建超級塊(super block)。

通過cat /proc/filesystems查看系統(tǒng)所有已注冊文件系統(tǒng)

圖片圖片

4.文件系統(tǒng)掛載

文件系統(tǒng)掛載就是新文件系統(tǒng)生成一個掛載實例(struct mount),讓新掛載實例和父文件系統(tǒng)的掛載實例建立父子關(guān)系。

一個新的掛載實例包括幾個重要部分:

  • 超級塊(super_block)

超級塊用來指示新的文件系統(tǒng)對應(yīng)的設(shè)備。

  • 父掛載實例(mount)

父掛載實例表示掛載點(diǎn)所處的文件系統(tǒng)掛載實例。

  • 掛載點(diǎn)(mountpoint)

掛載點(diǎn)是新文件系統(tǒng)和父文件系統(tǒng)之間連接的紐帶。

  • 文件系統(tǒng)根目錄(dentry)

每個文件系統(tǒng)都有一個根目錄,當(dāng)索引一個文件路徑進(jìn)入到一個新的文件系統(tǒng)后,會從新的文件系統(tǒng)根目錄開始索引。

4.1 索引掛載點(diǎn)

索引掛載點(diǎn)的目的是為了獲取掛載點(diǎn)的struct path記錄信息,掛載點(diǎn)索引的過程就是struct path記錄信息不斷被替換的過程。

圖片圖片

以掛載點(diǎn)/mnt/test/dir為例來講解:

  1. 索引/目錄,獲取/目錄的path記錄信息。
  2. 索引mnt目錄,獲取mnt目錄的path記錄信息,并覆蓋/目錄的path記錄信息。
  3. 索引test目錄,獲取test目錄的path記錄信息,并覆蓋mnt目錄的path記錄信息。
  4. 索引dir目錄,獲取dir目錄的path記錄信息,并覆蓋test目錄的path記錄信息。
  5. 最終獲取到掛載點(diǎn)dir的struct path記錄信息。

struct path結(jié)構(gòu)體定義如下:

struct path {
      struct vfsmount *mnt;
      struct dentry *dentry;
};

mnt:記錄掛載點(diǎn)所在文件系統(tǒng)的掛載實例。

dentry:掛載點(diǎn)目錄dentry。

4.2 創(chuàng)建新文件系統(tǒng)掛載實例

  • 創(chuàng)建超級塊

要創(chuàng)建超級塊首先要知道文件系統(tǒng)類型,mount命令通過-t參數(shù)指定文件系統(tǒng)類型,通過mount命令傳入的文件系統(tǒng)類型,可以遍歷全局文件系統(tǒng)鏈表找到已注冊的文件系統(tǒng),通過已注冊的文件系統(tǒng)創(chuàng)建超級塊。

  • 創(chuàng)建新文件系統(tǒng)掛載實例

創(chuàng)建超級塊后,通過超級塊的信息創(chuàng)建新文件系統(tǒng)掛載實例。

  • 創(chuàng)建掛載點(diǎn)

通過掛載點(diǎn)dentry創(chuàng)建一個掛載點(diǎn)。

4.3 新舊掛載實例對接

通過前面的過程,我們已經(jīng)具備文件系統(tǒng)掛載三要素:

  • 新文件系統(tǒng)掛載實例。
  • 父文件系統(tǒng)掛載實例。
  • 掛載點(diǎn)。

通過掛載三要素,我們就能完成新舊掛載實例對接,完成對接后,新文件系統(tǒng)掛載實例的mnt_parent指向父掛載實例,整個掛載過程就已經(jīng)完成。

新文件系統(tǒng)掛載成功后,Linux系統(tǒng)文件樹將新文件系統(tǒng)嫁接進(jìn)來,如下圖:

圖片圖片


此時我們想要操作新文件系統(tǒng)中的文件,只需要根據(jù)路徑名層層索引獲取文件path信息,path信息記錄dentry信息,dentry綁定了inode對象。

最終獲取到inode文件節(jié)點(diǎn)就能操作文件了。

責(zé)任編輯:武曉燕 來源: 物聯(lián)網(wǎng)心球
相關(guān)推薦

2020-07-22 14:53:06

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

2025-03-28 09:19:11

2019-09-20 10:04:45

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

2018-08-24 10:10:25

Linux文件系統(tǒng)技術(shù)

2022-01-14 08:39:47

鴻蒙HarmonyOS應(yīng)用

2019-05-22 09:00:16

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

2019-05-29 16:33:32

Linux虛擬系統(tǒng)

2023-12-06 09:32:35

Linux系統(tǒng)

2009-07-21 10:49:26

ASP.NET虛擬文件

2021-04-12 05:44:44

Linux文件系統(tǒng)

2022-04-21 14:09:17

lsofLinux虛擬文件

2020-10-12 17:40:44

lsofLinux虛擬文件

2021-01-28 11:37:51

虛擬文件

2010-03-02 14:21:30

Linux操作系統(tǒng)

2019-06-14 14:58:58

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

2021-08-24 10:57:24

Linux文件系統(tǒng)內(nèi)存

2017-02-06 16:18:57

微軟GitGVFS

2010-01-21 09:15:05

Linux嵌入式文件系

2024-08-28 12:13:35

2021-05-31 07:50:59

Linux文件系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

999久久久免费精品国产| 激情亚洲另类图片区小说区| 欧美亚洲自偷自偷| 欧美亚洲国产视频| 黄色片在线看| 久久影院电视剧免费观看| 精品产品国产在线不卡| 日韩欧美视频第二区| 亚洲精品在线a| 国产丝袜一区二区三区免费视频| 在线理论视频| 中文字幕在线一区二区三区| 日本在线观看天堂男亚洲| 日本一区二区三区视频在线| 欧美岛国在线观看| 婷婷成人激情| 成人看片人aa| 免费成人看片| 99riav一区二区三区| 精品免费久久久久久久| 爽爽淫人综合网网站| 神马影院我不卡午夜| 日本一区二区三区视频在线看| 中文字幕免费精品一区| 性一爱一乱一交一视频| 亚洲高清三级视频| 国产无套粉嫩白浆在线2022年| 一本色道久久综合亚洲91| 天堂社区日本电影超碰| 欧洲精品一区二区| 日韩专区av| 久久在精品线影院精品国产| 成人自拍视频| 国产精品普通话| 欧美伊人久久| 中文字幕一区二区三区有限公司 | 久热爱精品视频线路一| 超碰97成人| 成人激情av在线| 亚洲ab电影| 欧美午夜免费| 2020日本不卡一区二区视频| 四虎免费av| 中文字幕永久在线不卡| 精精国产xxxx视频在线动漫| 欧美色另类天堂2015| 黄色在线论坛| 欧美精品18videos性欧美| 欧美+亚洲+精品+三区| 中国女人做爰视频| 国产成人亚洲精品青草天美| 亚洲欧美自偷自拍另类| 欧美精品在线观看播放| 亚洲精品福利| 香蕉视频免费版| 精品福利在线看| 国产啊啊啊视频在线观看| 亚洲精品v天堂中文字幕| 欧美黄色影院| 亚洲日本一区二区三区在线不卡 | 欧美一区二区三区喷汁尤物| а√在线天堂官网| 草莓视频一区| 一区二区三区高清在线| 国产91在线精品| 亚洲国产一区二区在线| 有码一区二区三区| 亚洲日本中文| 国产在线视频综合| 日韩精品一区国产麻豆| 日韩国产欧美| 桃乃木香奈av在线| 亚洲欧美国产高清va在线播| 欧美韩日精品| 深夜福利视频在线观看| 日韩美女在线观看| 亚洲四区在线观看| 成人精品视频| 免费的av电影| 九九久久国产精品| aaa亚洲精品| 第四色日韩影片| 国产丝袜一区二区| av大片在线| 综合精品久久久| 激情六月天婷婷| avtt综合网| 国内少妇毛片视频| 国产激情91久久精品导航| 成人精品久久久| 久久av最新网址| 91丝袜在线| 日韩免费在线播放| 欧洲精品一区二区三区在线观看| 欧美天堂亚洲电影院在线观看| 在线中文字幕-区二区三区四区| 神马影院我不卡| 欧美激情国产精品| 91福利精品第一导航| 欧美日韩亚洲一区三区| 中文字幕免费在线观看| 国产在线欧美日韩| 91传媒视频在线播放| 激情另类小说区图片区视频区| 四虎成人精品一区二区免费网站| av免费看大片| 亚洲巨乳在线观看| 欧美一二三区精品| 美美哒免费高清在线观看视频一区二区 | 91视视频在线观看入口直接观看www | 免费精品一区二区三区在线观看| 上原亚衣加勒比在线播放| 成人av资源在线播放| 欧美mv和日韩mv的网站| 久久久久国产精品麻豆ai换脸 | 日本一区二区三区中文字幕| 在线看国产视频| 任你操这里只有精品| 日韩欧美亚洲区| 91网在线免费观看| 欧美xfplay| 五月天欧美精品| 久久久久久久久97黄色工厂| 香蕉精品999视频一区二区| 91精品国产自产精品男人的天堂| 大香伊人久久| 中文字幕福利片| 天堂av在线网站| 日本午夜激情视频| 免费成人在线观看av| 亚洲人成电影网| 精品一区精品二区| 一区二区三区欧美亚洲| 美女视频一区二区三区| 日本美女一区二区| 麻豆精品在线看| 亚洲一区区二区| 亚洲免费成人| 久久精品国产一区二区| 亚洲欧美日韩视频二区| 黄色成人精品网站| 一区二区三区四区五区在线| 97精品一区| 97精品在线| 99亚洲一区二区| 国产精品女主播一区二区三区| 网友自拍区视频精品| 久久视频精品| 雨宫琴音一区二区在线| 蜜臀久久久久久久| 国产精品1区2区3区在线观看| 欧美日韩性在线观看| 日韩av超清在线观看| 亚洲国产视频二区| 亚洲v天堂v手机在线| 99久久久久国产精品| 精品1区2区3区4区| 国产一区在线观看视频| 国产三级一区二区| 婷婷综合另类小说色区| 在线不卡一区二区| 中文字幕亚洲国产| 国产成人免费av| 国产精品久久久对白| 亚洲色图都市激情| 国产视频一二| www久久日com| 国产精品白丝久久av网站| 一区二区三区亚洲变态调教大结局| 欧美色网址大全| 国产精品一区二区三区四区| 一区二区三区四区不卡在线| 欧美高清激情brazzers| 久久久国产精品亚洲一区| 国产日韩欧美夫妻视频在线观看 | 超碰在线最新| 欧美日韩破处视频| 亚洲片区在线| 日韩美女视频一区二区| 91精品国产91久久久久久一区二区 | 天天av综合网| 日韩精品成人| 国产宾馆实践打屁股91| 一区二区久久久久久| 在线精品91av| 国内精品视频免费| 三上悠亚在线观看| 亚洲精品aaa| 国产一区二区三区在线看麻豆| 一区二区三区不卡在线观看| 亚洲制服丝袜在线| 538国产精品视频一区二区| www.好吊操| 激情开心成人网| 国产精品69xx| av电影在线免费| youjizz在线播放| 91网址在线观看| 色图在线观看| 日本精品一区二区三区在线观看视频|