文件系统及其相关结构体

文件系统及其相关结构体_第1张图片

fd指向打开的文件描述符列表,开始的时候指向fd_array,当大小超过max_fds时,重新分配地址


file结构体代表一个打开的文件


f_op其中包含着与文件关联的操作



进程内核栈与进程描述符之间的关系



task_struct结构体注释详解可参考http://www.educity.cn/linux/518072.html


dentry的中文名称是目录项,是Linux文件系统中某个索引节点(inode)的链接。这个索引节点可以是文件,也可以是目录。 

struct dentry { 
        atomic_t d_count;            目录项对象使用计数器,可以有未使用态,使用态和负状态                                            
     
   unsigned int d_flags;       目录项标志 
        struct inode * d_inode;    与文件名关联的索引节点 
        struct dentry * d_parent; 父目录的目录项对象 
        struct list_head d_hash; 散列表表项的指针 
        struct list_head d_lru;     未使用链表的指针 
        struct list_head d_child; 父目录中目录项对象的链表的指针 
        struct list_head d_subdirs;对目录而言,表示子目录目录项对象的链表 
        struct list_head d_alias;    相关索引节点(别名)的链表 
        int d_mounted;                   对于安装点而言,表示被安装文件系统根项 
        struct qstr d_name;           文件名 
        unsigned long d_time; 
        struct dentry_operations *d_op;  目录项方法 
        struct super_block * d_sb;           文件的超级块对象 
        vunsigned long d_vfs_flags; 
        void * d_fsdata;                             与文件系统相关的数据 
        unsigned char d_iname [DNAME_INLINE_LEN]; 存放短文件名

};


struct fs_struct {
     atomic_t count;   
计数器
     rwlock_t lock;      
读写锁
     int umask;
     struct dentry * root, * pwd, * altroot;
根目录("/"),当前目录以及替换根目录
     struct vfsmount * rootmnt, * pwdmnt, * altrootmnt;
};


struct files_struct {
     atomic_t count;
     struct fdtable *fdt;
     struct fdtable fdtab;

     spinlock_t file_lock ____cacheline_aligned_in_smp;

     int next_fd;
     struct embedded_fd_set close_on_exec_init;
     struct embedded_fd_set open_fds_init;
     struct file * fd_array[NR_OPEN_DEFAULT];
};

索引节点对象由inode结构体表示

struct inode { 
        struct hlist_node       i_hash;               哈希表 
        struct list_head        i_list;                   索引节点链表 
        struct list_head  
      i_dentry;       目录项链表 
        unsigned long           i_ino;                 节点号 
        atomic_t                i_count;                  引用计数 
        umode_t                 i_mode;                 访问权限控制 
        unsigned int            i_nlink;                硬链接数 

  uid_t                   i_uid;                         使用者id 
        gid_t                   i_gid;                         使用者id组 
        kdev_t                  i_rdev;                     实设备标识符 
        loff_t                  i_size;                         以字节为单位的文件大小 
        struct timespec         i_atime;              最后访问时间 
        struct timespec         i_mtime;             最后修改(modify)时间 
        struct timespec         i_ctime;              最后改变(change)时间 
        unsigned int            i_blkbits;             以位为单位的块大小 
        unsigned long           i_blksize;           以字节为单位的块大小 
        unsigned long           i_version;          版本号 
        unsigned long           i_blocks;           文件的块数 
        unsigned short          i_bytes;            使用的字节数 
        spinlock_t              i_lock;                   自旋锁 
        struct rw_semaphore     i_alloc_sem; 索引节点信号量 
        struct inode_operations *i_op;           索引节点操作表 

        struct file_operations  *i_fop; 默认的索引节点操作 
        struct super_block      *i_sb;               相关的超级块 
        struct file_lock        *i_flock;               文件锁链表 
        struct address_space    *i_mapping; 相关的地址映射 
        struct address_space    i_data;          设备地址映射 
        struct dquot            *i_dquot[MAXQUOTAS];节点的磁盘限额 
        struct list_head        i_devices;           块设备链表 
        struct pipe_inode_info  *i_pipe;         管道信息 
        struct block_device     *i_bdev;          块设备驱动 
        unsigned long           i_dnotify_mask;目录通知掩码 
        struct dnotify_struct   *i_dnotify;        目录通知 
        unsigned long           i_state;               状态标志 
        unsigned long           dirtied_when;     首次修改时间 
        unsigned int            i_flags;                  文件系统标志 
        unsigned char           i_sock;               套接字 
        atomic_t                i_writecount;          写者记数 
        void                    *i_security;                 安全模块 

   __u32                   i_generation;           索引节点版本号 
  union { 
                void            *generic_ip;                文件特殊信息 
        } u; 
};







你可能感兴趣的:(linux,array,task)