VFS 结构

1 ext2 文件系统索引节点(inode)结构:struct ext2_inode //include/linux/ext2_fs.h

        该结构描述的是一个文件在物理磁盘中的相关信息,其中的i_block数组存储的就是该文件的数据。

2 ext2 的目录项结构:struct ext2_dir_entry_2//include/linux/ext2_fs.h

        目录也是一个文件,也占用一个inode,通过该inode的i_block数组就能访问但该目录的数据。目录的数据是由一定的

        格式的,该格式就是由struct ext2_dir_entry_2来描述。

3 ext2 超级块结构:超级块记录一个分区的整体信息。

        ext2的超级块结构为struct ext2_super_block。//include/linux/ext2_fs.h

4 ext2 的内存结构:内核需要频繁访问以上的这些结构,因此当磁盘驱动程序把相关数据从磁盘读出后,

        会建立相应的内存结构。

        struct ext2_sb_info:ext2在内存中的超级块结构。//include/linux/ext2_fs_sb.h

                                     该结构中的 s_sbh,s_group_desc分别指向包含磁盘超级块和组描述符的缓冲区头部。

                                      s_es指向包含磁盘超级块结构的内存首地址。即s_es 指向ext2_super_block;

 

        struct ext2_inode_info:ext2在内存中的Inode结构。//include/linux/ext2.h

5 VFS 的超级块 struct super_block//include/linux/fs.h

        mount一个块设备的时候,根据分区表中的信息分析该该块设备的文件系统类型,然后从 file_systems链表中找到对应的文件系统驱动程

        序的文件系统对象,调用它的get_sb函数获取具体文件系统的超级块的信息ext2_super_block,然后根据这些信息初始化内存中的

        ext2_sb_info及VFS超级块super_block。struct super_block

        中的s_sb_info就是指向具体文件系统超级块的内存对象ext2_sb_info。

        当VFS访问一个Ext2磁盘索引节点时,它会创建一个ext2_inode_info类型的索引节点描述符

                 static struct inode *ext2_alloc_inode(struct super_block *sb)
                 {

                          struct ext2_inode_info *ei;
                          ei = (struct ext2_inode_info *)kmem_cache_alloc(ext2_inode_cachep, SLAB_KERNEL);
                          if (!ei)
                                return NULL;
                  #ifdef CONFIG_EXT2_FS_POSIX_ACL
                         ei->i_acl = EXT2_ACL_NOT_CACHED;
                         ei->i_default_acl = EXT2_ACL_NOT_CACHED;
                   #endif
                         ei->vfs_inode.i_version = 1;
                         return &ei->vfs_inode;
                    }


                   出处:http://blog.csdn.net/yunsongice/archive/2010/08/17/5819484.aspx

6  VFS inode结构 struct inode

        该结构用于隐藏各种具体文件结构的inode的差别,向上层提供统一的inode接口。ext2_get_inode函数读取磁盘上的inode结构,并根据磁盘上的Inode结构,初始化 VFS inode结构和ext2内存inode结构。ext2_inode_info中包含一个VFS inode成员。

7 VFS 目录项对象struct dentry

        目录/文件都有相应的目录项,目录项表示目录中的条目。该结构中的d_inode指向VFS的inode结构。文件结构是通过目录项的树状结构

        来描述的。例如/bin/bash,首先/对应一个dentry结构,通过该结构的d_child链表即可遍历/下的所有目录项,于是能够找到bin的目录

        项,再从bin的d_child链表中找到bash的dentry,于是就找到了bash的VFS inode结构。

8 VFS的文件对象 struct file

        该结构向上层提供统一的文件对象。它里面有个struct dentry成员f_dentry。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值