亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

虛擬文件系統

2019-11-17 05:31:08
字體:
來源:轉載
供稿:網友

  Richard Gooch
翻譯:difeijing

本文檔中的慣例用法

==================
文檔中的每一節標題的右邊都有一個字符串"
"。
每個小節都會有個""在右邊。
這些字符串是為了在文檔中查詢更輕易而設的。

注重:本文檔的最新更新可在下面找到:
http://www.atnf.csiro.au/~rgooch/linux/docs/vfs.txt


它到底是什么?

=============
Virtual File System(或者被稱為Virtual Filesystem Switch)是Linux內核中的
一個軟件層,用于給用戶空間的程序提供文件系統接口。它也提供了內核中的一
個抽象功能,答應不同的文件系統共存。



它的工作方式的概覽

==================
在這一節里,在講解細節問題之前,我會簡單扼要的介紹一下VFS是如何工作的。
首先,介紹一下當用戶程序打開或者操作文件時發生了些什么,然后看看一個文
件系統是如何被支持的。

打開一個文件
------------
VFS實現了open(2)系統調用。路徑參數被VFS用來在目錄入口緩存(dentry cache
or "dcache")。這提供了一個將路徑名轉化為特定的dentry的一個快的查找機制。

一個單獨的dentry通常包含一個指向i節點(inode)的指針。i節點存在于磁盤驅動
器上,它可以是一個規則文件,目錄,FIFO文件,等等。Dentry存在于RAM中,并
且永遠不會被存到磁盤上:它們僅僅為了提高系統性能而存在。i節點存在于磁盤
上,當需要時被拷入內存中,之后對它的任何改變將被寫回磁盤。存在于RAM中的
i節點就是VFS的i節點,dentry所包含的指針指向的就是它。

dcache是你的整個文件空間的觀察點。跟Linus不同,我們中的大多數人不可能有
足夠的RAM空間來放我們的文件空間的所有文件的目錄入口緩存(dentry),所以我們
的dcache會有缺少的項。為了將路徑名轉換為一個dentry,VFS不得不采取創建dentry
的方式,并在創建dentry時將指針指向相應的i節點。這是通過對i節點的查找完成
的。

為了查找一個文件的i節點(通常從磁盤上讀),VFS需要調用該文件的父目錄的lookup()
方法,此方法是特定的文件系統所設置的。后面對此將會有更詳盡的描述。

一旦VFS得到了所需要的dentry(同時也得到了相應的i節點),我們就能夠對文件做想
要的操作:打開文件,或者用stat(2)來看i節點中的數據。stat(2)的操作非常簡單:
在VFS得到dentry之后,它取得inode中的一些數據并將其中的一部分送回用戶空間。
打開一個文件需要其它的操作:分配一個strUCt file(定義于linux/fs.h,這是內核中
的文件描述)結構。新分配的struct file結構被指向dentry的指針和對文件進行操作的
函數集合所初始化,這些都是從i節點中得到的。通過這種方式,特定的文件系統實現
才能起作用。

文件結構(struct file)被放在進程的文件描述符表中。

讀,寫和關閉文件(或者其它的VFS操作)是通過使用用戶空間的文件描述符找到相應的
文件結構(struct file),然后調用所需要的方法函數來實現的。

當文件處于打開狀態時,系統保持相應的dentry為"open"狀態(正在使用),這表示相應的
i節點在被使用。


注冊和安裝一個文件系統
----------------------
假如你想在內核中支持一種新的文件系統的話,你所需要做的僅僅是調用函數
register_filesystem().你向內核中傳遞一個描述文件系統實現的結構(struct filesystem
),
此結構將被加入到內核的支持文件系統表中去。你可以運行下面的命令:

% cat /PRoc/filesystems
這樣可以看到你的系統支持哪些文件系統。

當一個mount請求出現時,VFS將會為特定的文件系統調用相應的方法。安裝點的
dentry結構將會被改為指向新文件系統的根i節點。

現在是看看細節的時候了,nice to look!
struct file_system_type

=======================
此結構描述了文件系統。在內核2.1.99中,此結構的定義如下:
(注:在2.2的內核中,此結構也沒有變化)
struct file_system_type {
const char *name;
int fs_flags;
struct super_block *(*read_super) (struct super_block *, void *, int);
struct file_system_type * next;
};

其中各個域的意義:
name:文件系統的類型名稱,如"vfat","ext2",等等。
fs_flags:變量標志,如FS_REQUIRES_DEV, FS_NO_DCACHE,等等.
read_super:當此種文件系統的一個新的實例要被安裝時,此方法會被調用。
next:被內部的VFS實現所使用,你只需要將其初試化為NULL。

函數read_super具有以下的參數:
struct super_block *sb:超級塊結構。此結構的一部分被VFS初始化,余下的部分必須被
函數read_super初始化。
void * data:任意的安裝選項,通常是ASCII的字符串。
int silent:表示當出現錯誤時是否保持安靜。(不報警?)

read_super方法必須確定指定的塊設備是否包含了一個所支持的文件系統。當成功時返回
超級塊結構的指針,錯誤時返回NULL。

read_super方法填充進超級塊結構(struct super_block)的最有用的域是"s_op"域。這是
一個指向struct super_Operations的指針,此結構描述了文件系統實現的下一層細節。

struct super_operations

=======================
此結構描述了VFS對文件系統的超級塊所能進行的操作。
在內核2.1.99中,此結構的定義如下:
(注:在2.2的內核中,此結構已經有了改變)
struct super_operations {
void (*read_inode) (struct inode *);
void (*write_inode) (struct inode *);
void (*put_inode) (struct inode *);
void (*delete_inode) (struct inode *);
int (*notify_change) (struct dentry *, struct iattr *);
void (*put_super) (struct super_block *);
void (*write_super) (struct super_block *);
int (*statfs) (struct super_block *, struct statfs *, int);
int (*remount_fs) (struct super_block *, int *, char *);
void (*clear_inode) (struct inode *);
};

除非非凡提出,所有的方法都在未加鎖的情況下被調用,這意味著大多數方法都可以
安全的被阻塞。所有的方法都僅僅在進程空間被調用(例如,在中斷處理程序和底半
部中不能調用它們)

read_inode:從一個文件系統中讀取一個特定的i節點時調用此方法。i節點中的域"i_ino"
又VFS初始化為指向所讀的i節點,其余的域被此方法所填充。

write_inode:當VFS需要向磁盤上的一個i節點寫時調用。

put_inode:當VFS的i節點被從i節點緩沖池移走時被調用。此方法是可選的。

delete_inode:當VFS想刪除一個i節點時調用次方法。

notify_change:當VFS的i節點的屬性被改變時調用。若此域為NULL則VFS會調用write_inode
.
此方法調用時需要鎖住內核。

put_super:當VFS要釋放超級塊時調用(umount一個文件系統).此方法調用時需要鎖住內核。

write_super:當VFS超級塊需要被寫入磁盤時被調用。此方法為可選的。

statfs:當VFS需要得到文件系統的統計數據時調用。此方法調用時需要鎖住內核。

remount_fs:當文件系統被重新安裝時調用。此方法調用時需要鎖住內核。


clear_inode:當VFS清除i節點時調用??蛇x項。

以上方法中,read_inode需要填充"i_op"域,此域為一個指向struct inode_operations
結構的指針,它描述了能夠對一個單獨的i節點所能進行的操作。



struct inode_operations

=======================
此結構描述了VFS能夠對文件系統的一個i節點所能進行的操作。
在內核2.1.99中,此結構的定義如下:
(注:在2.2的內核中,此結構已經有了少許改變)
struct inode_operations {
struct file_operations * default_file_ops;
int (*create) (struct inode *,struct dentry *,int);
int (*lookup) (struct inode *,struct dentry *);
int (*link) (struct dentry *,struct inode *,struct dentry *);
int (*unlink) (struct inode *,struct dentry *);
int (*symlink) (struct inode *,struct dentry *,const char *);
int (*mkdir) (struct inode *,struct dentry *,int);
int (*rmdir) (struct inode *,struct dentry *);
int (*mknod) (struct

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久久亚洲影视| 亚洲视频日韩精品| 亚洲大胆人体av| 久久久久这里只有精品| 亚洲小视频在线| 欧美三级xxx| 九九精品在线观看| 亚洲黄一区二区| 亚洲无线码在线一区观看| 国内精品一区二区三区| 麻豆一区二区在线观看| 国色天香2019中文字幕在线观看| 91免费看片在线| 国产精品久久久久久久久久新婚| 性色av一区二区三区在线观看| 久久综合国产精品台湾中文娱乐网| 国产一区二区三区视频免费| 欧美激情videos| 在线成人一区二区| 欧美性猛交xxxx免费看| 亚洲精品理论电影| 日韩最新免费不卡| 国产69精品久久久| 日韩av电影手机在线| 欧美视频在线看| 国产精品99久久久久久久久| 欧美最猛性xxxxx免费| 国内伊人久久久久久网站视频| 菠萝蜜影院一区二区免费| 97免费中文视频在线观看| 亚洲第一区第二区| 亚洲电影在线看| 在线观看欧美www| 国产美女搞久久| 92版电视剧仙鹤神针在线观看| 欧美精品在线极品| 亚洲综合在线小说| 日韩亚洲国产中文字幕| 国产v综合v亚洲欧美久久| 高清日韩电视剧大全免费播放在线观看| 久久精视频免费在线久久完整在线看| 久久91超碰青草是什么| 国产精品观看在线亚洲人成网| 日本精品久久久久影院| 精品久久久久久久久久| 久久久久久久久国产精品| 日本国产欧美一区二区三区| 青草热久免费精品视频| 精品国产精品三级精品av网址| 欧美亚洲另类制服自拍| 国产精品老女人视频| 亚洲91精品在线观看| 一区二区三区四区在线观看视频| 欧美成人免费网| 欧美自拍视频在线观看| 成人黄色片网站| 国外成人在线视频| 2019亚洲男人天堂| 日韩精品视频在线观看免费| 欧美成人在线免费| 国产精品视频自在线| 欧美黄色三级网站| 欧美日韩国产va另类| 国产精品色视频| 国产精品一区二区久久久| 亚洲欧美日韩爽爽影院| 日韩电影免费观看中文字幕| 97视频在线播放| 午夜精品久久久久久久白皮肤| 伊人久久久久久久久久久| 欧美成年人在线观看| 海角国产乱辈乱精品视频| 国产在线精品自拍| 精品视频在线播放| 成人精品福利视频| 亚洲综合日韩在线| 日韩乱码在线视频| 欧美猛男性生活免费| 欧美猛交ⅹxxx乱大交视频| 精品久久香蕉国产线看观看gif| 亚洲人午夜精品| 欧美韩日一区二区| 日本aⅴ大伊香蕉精品视频| 国产精品爱啪在线线免费观看| 久久久久久久久国产精品| 国产精品对白刺激| 亚洲色图18p| 91中文在线观看| 日韩经典中文字幕在线观看| 国产精品自产拍在线观看中文| 欧美巨大黑人极品精男| 亚洲网站在线播放| 九色成人免费视频| 国产精品久久久久久久av大片| 秋霞成人午夜鲁丝一区二区三区| 久久久国产一区| 精品欧美一区二区三区| 茄子视频成人在线| 日本成人黄色片| 亚洲人在线观看| 成人妇女免费播放久久久| 欧美中文在线视频| 日韩在线观看免费高清完整版| 久久久久www| 欧美激情一区二区三区在线视频观看| 91日本在线视频| 亚洲老头同性xxxxx| 国产成人涩涩涩视频在线观看| 欧美日韩福利在线观看| 亚洲精品黄网在线观看| 国产精品极品美女在线观看免费| 亚洲精品免费一区二区三区| 欧美成aaa人片在线观看蜜臀| 亚洲激情在线视频| 日韩美女在线观看一区| 日韩hd视频在线观看| 亚洲成人av片| 欧美激情视频一区| 中文字幕亚洲第一| 日本一区二三区好的精华液| 亚洲成人aaa| 午夜剧场成人观在线视频免费观看| 欧美精品免费播放| 欧美日韩综合视频网址| 国产成人jvid在线播放| 欧美成人在线免费视频| 国产脚交av在线一区二区| 国产亚洲欧美aaaa| 日韩久久午夜影院| 欧美成人精品在线视频| 韩国美女主播一区| 欧美日韩加勒比精品一区| 久久精品电影网站| 日韩精品在线第一页| 亚洲大胆人体av| 色综合导航网站| 国产91|九色| 亚洲精品午夜精品| 亚洲一区二区中文| 欧美成人午夜视频| 国产91成人video| 国产精品欧美亚洲777777| 亚洲人成在线观看网站高清| 亚洲精品美女网站| 国产一区二区色| 中文字幕欧美日韩| 久久激情视频久久| 亚洲精品动漫久久久久| 国产999精品| 亚洲电影天堂av| 久久久久北条麻妃免费看| 精品国产区一区二区三区在线观看| 成人春色激情网| 久久精品夜夜夜夜夜久久| 97免费中文视频在线观看| www.午夜精品| 91精品久久久久久久久久久久久久| 亚洲美女激情视频| 亚洲自拍高清视频网站| 亚洲精品国产精品乱码不99按摩| 在线亚洲国产精品网| 欧美激情视频一区二区| 国产成人精品国内自产拍免费看| 91精品国产91久久久久久最新|