linux VFS 学习

文件系统的分类

基于磁盘的文件系统(ext2,ext3),虚拟文件系统(如proc文件系统,cat  /proc/version 可以看到系统版本信息,但是ls -l /proc/version 发现这个文件的大小为0),网络文件系统(如NFS)

通用文件模型 

VFS提供了一种结构模型,包含了一个强大的文件系统缩影具备的所有组件。VFS与ext2很类似,它们之间转化很容易,几乎不费时。

inode节点中包括(1) 描述元数据的文件(2)保存时间文件内容的数据段(或者指向数据的指针)

但是inode中并不包括文件的名字,这是为什么呢?(继续学习)

文件系统中的重要结构体分析

File数据结构(strcut file)

Struct file

{

struct dentry     *f_dentry; /*指向相关目录项的指针*/

struct vfsmount         *f_vfsmnt; /*指向VFS安装点的指针*/

struct file_operations *f_op;     /*指向文件操作表的指针*/

..............

};

Denty 目录项数据结构(与目录的区别,目录是特殊的文件,位于存储介质中)

Struct dentry

atomic_t d_count;        /*目录项引用计数器 */

unsigned int d_flags;    /*目录项标志 */

struct inode * d_inode;   /*与文件名关联的索引节点 */

struct dentry * d_parent;       /*父目录的目录项 */

...............

struct file_operations(文件操作统一接口)

 

 

 


Inode对象

Struct inode(vfs层次,位于内存中,最后读取存储介质的索引结点填充)

unsigned long   i_ino;            /*索引节点号*/

struct inode_operations   *i_op; /*索引节点的操作*/

struct super_block   *i_sb;     /*指向该文件系统超级块的指针 */

atomic_t i_count;//当前使用该节点的进程数。计数为0,表明该节点可丢弃或被重新使用

Union//联合体,与具体的文件系统相关

............

struct vfsmount

struct vfsmount *mnt_parent;    /* fs we are mounted on */

struct dentry *mnt_mountpoint; /* dentry of mountpoint */

struct dentry *mnt_root;        /* root of the mounted tree */

struct super_block *mnt_sb;     /* pointer to superblock */

............

Super_block超级快结构(描述文件系统的信息):

Strcut super_block

{

kdev_t s_dev;//包含该具体文件系统的块设备标识符。例如,对于/dev/hda1,其设备标识符为 0x301

struct dentry     *s_root; /*指向该具体文件系统安装目录的目录项。*/

struct super_operations *s_op; //指向某个特定的具体文件系统的用于超级块操作的函数集合  

Union//联合体,与具体的某个文件系统相关

........

}

代表进程的数据结构task_struct:

Struct task_struct

{

Struct fs_struct fs//进程文件系统相关信息

Struct files_struct file//打开文件的信息

...........

}

Struct fs_struct

{

 

   .............

};

全两个个dentry项分别是该文件系统根目录,当前目录的目录项

 

struct files_struct

struct file * fd_array[32];/* 文件对象指针的初始化数组*/

..............

};

打开文件的fid就是数组fd_array的索引


最后所有数据结构的关系

 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值