Linux内核VFS的主要数据结构

Posted bcbobo21cn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux内核VFS的主要数据结构相关的知识,希望对你有一定的参考价值。

VFS在系统中的位置如下图;

​    VFS依靠四个主要的数据结构和一些辅助的数据结构来描述其结构信息;

1、超级块对象
    存储一个已安装的文件系统的控制信息,代表一个已安装的文件系统;每次一个实际的文件系统被安装时, 内核会从磁盘的特定位置读取一些控制信息来填充内存中的超级块对象;

struct super_block  //超级块数据结构
        struct list_head s_list;                /*指向超级块链表的指针*/
        ……
        struct file_system_type  *s_type;       /*文件系统类型*/
       struct super_operations  *s_op;         /*超级块方法*/
        ……
        struct list_head         s_instances;   /*该类型文件系统*/
        ……
;

2、索引节点对象
   ​ 索引节点对象存储了文件的相关信息,代表了存储设备上的一个实际的物理文件。当一个 文件首次被访问时,内核会在内存中组装相应的索引节点对象,以便向内核提供对一个文件进行操 作时所必需的全部信息;

struct inode //索引节点结构
      ……
      struct inode_operations  *i_op;     /*索引节点操作表*/
     struct file_operations   *i_fop;  /*该索引节点对应文件的文件操作集*/
     struct super_block       *i_sb;     /*相关的超级块*/
     ……
;

3、目录项对象
   ​ 引入目录项的概念主要是出于方便查找文件的目的。一个路径的各个组成部分,不管是目录还是 普通的文件,都是一个目录项对象;

struct dentry //目录项结构
     ……
     struct inode *d_inode;           /*相关的索引节点*/
    struct dentry *d_parent;         /*父目录的目录项对象*/
    struct qstr d_name;              /*目录项的名字*/
    ……
     struct list_head d_subdirs;      /*子目录*/
    ……
     struct dentry_operations *d_op;  /*目录项操作表*/
    struct super_block *d_sb;        /*文件超级块*/
    ……
;

4 文件对象
   ​ 文件对象是已打开的文件在内存中的表示,主要用于建立进程和磁盘上的文件的对应关系。它由sys_open() 现场创建,由==sys_close()==销毁;

struct file 
    ……
     struct list_head        f_list;        /*文件对象链表*/
    struct dentry          *f_dentry;       /*相关目录项对象*/
    struct vfsmount        *f_vfsmnt;       /*相关的安装文件系统*/
    struct file_operations *f_op;           /*文件操作表*/
    ……
;

超级块对象代表一个已安装的文件系统;
索引节点对象代表存储设备上的一个实际的物理文件;
一个路径的各个组成部分,不管是目录还是普通的文件,都是一个目录项对象;
文件对象是已打开的文件在内存中的表示;


 

以上是关于Linux内核VFS的主要数据结构的主要内容,如果未能解决你的问题,请参考以下文章

《Linux内核设计与实现》笔记——VFS

Linux文件IOIO内核

Linux文件系统1---VFS的引入

Linux文件系统1---VFS的引入

linux文件系统体系结构 和 虚拟文件系统(VFS)

Linux VFS数据结构