- 論壇徽章:
- 0
|
不同的文件系統(tǒng)有不同的實(shí)現(xiàn),但和VFS的接口都是通過一個file_operation數(shù)據(jù)結(jié)構(gòu)
(include/linux/fs.h),作為函數(shù)跳轉(zhuǎn)表。
struct file_operation{
struct module *owner;
.. llseek()
.. read()
.. write()
.. readdir()
.. ioctl()
.. mmap()
.. open()
.. flush()
.. fsync()
.. lock()
}
用戶進(jìn)程只和VFS交互。
-----------------------------------------
task_struct中的兩個相關(guān)結(jié)構(gòu)體
struct task_struct {
/*
struct fs_struct{
atomic_t count;
rwlock_t lock;
int umask;
/*
文件的屬性,如文件名、訪問權(quán)限
root 本進(jìn)程的根目錄,即用戶登錄時看到的根目錄
pwd 進(jìn)程當(dāng)前所在目錄
altroot 用戶設(shè)置的“替換根目錄” -- 再議
dentry結(jié)構(gòu)中有一個d_inode(struct inode)指針,指向記錄著文件在
存儲介質(zhì)上的位置和分布信息的inode結(jié)構(gòu)體
dentry 是邏輯文件
inode 是物理文件 所以多個dentry指向一個inode
*/
struct dentry *root, *pwd, *altroot;
/*
對應(yīng)著上三個結(jié)構(gòu)
*/
struct vfsmount *rootmnt, *pwdmnt, *altrootmnt;
}
*/
struct fs_struct *fs;//文件系統(tǒng)信息,全局的,與具體文件無關(guān)
/*
files_struct 主體是一個file結(jié)構(gòu)數(shù)組
每打開一個文件,進(jìn)程就通過一個fid訪問,fid實(shí)際是相應(yīng)file 結(jié)構(gòu)在數(shù)組中的下標(biāo)
每個file結(jié)構(gòu)中
f_op 指向該文件所屬文件系統(tǒng)的file_operation
f_dentry 指向該文件的dentry
*/
struct files_struct *files;//已打開的文件的信息
}
---------------------
inode結(jié)構(gòu)體
每個inode都有
一個“i節(jié)點(diǎn)號”i_ino,同一文件系統(tǒng)中唯一
一個“文件主”,為創(chuàng)建文件的用戶,可改變 -- 系統(tǒng)每個用戶都有一個uid標(biāo)識,都屬于一個組gid,所以inode也有兩個對應(yīng)i_uid、i_gid字段
兩個設(shè)備號 i_dev 除特殊文件外,一個索引節(jié)點(diǎn)總需存在在某個設(shè)備上,即i_dev
i_rdev 若索引節(jié)點(diǎn)達(dá)標(biāo)的是某個設(shè)備(即不是常規(guī)文件),則需另一個設(shè)備號i_rdev
(主設(shè)備號、次設(shè)備號)
i_link 文件鏈接數(shù),即文件別名數(shù)
i_count [動態(tài)]文件共享計(jì)數(shù)
本文來自ChinaUnix博客,如果查看原文請點(diǎn):http://blog.chinaunix.net/u3/109164/showart_2135331.html |
|