VFS的索引节点

                                             索引节点

       文件系统处理文件所需要的所有信息都放在称为索引节点的数据结构中。文件名可以随时更改,但是索引节点对文件是唯一的,并且随文件的存在而存在。具体文件系统的索引节点是存放在磁盘上的,是一种静态数据结构,要使用他必须调入内存,填写VFS的索引节点,因此,也称VFS索引节点是动态节点。

       VFS索引节点数据结构主要域有

       struct inode

      {

            struct list_head i_hash;//指向哈希链表的指针

            struct list_head i_list;//指向索引节点链表的指针

            struct list_head i_dentry;//指向目录项链表的指针

 

            unsigned long i_ino;//索引结点号

            umode_t i_mode;//文件类型与访问权限

            kdev_t i_rdev;//实际设备标识号

            uid_t i_uid;//文件拥有者标识号

            gid_t i_gid;//文件拥有者所在组的标识号

 

            struct inode_operations *i_op; //指向对该节点操作的一组函数

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

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

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

            struct vm_area_struct *i_op;//指向对该文件进行映射所使用的虚存区指针。

            unsigned long i_state;//索引节点的状态标识

            unsigned int i_flags;//文件系统的安装标志

            union{

                  struct minix_inode_info minix_i;

                  struct ext2_inode_info exit2_i;

             }

};

       如果索引节点所代表的并不是常规文件而是某个设备,那就有个设备号,这就是i_rdev.

       i_state域如果为DIRTY,该索引节点就是“脏的”,也就是说对应的磁盘索引节点必须被更新。每个索引节点对象总是出现在下列三个循环双向链表的某个链表中:未用索引节点链表、正在使用的索引节点链表和脏索引节点链表。这三个链表都是通过索引节点的i_list域连接在一起的。

       属于正在使用或脏链表的索引节点对象也存放在一个哈希表中。哈希表加快了对索引节点对象的搜索,前提是内核要知道索引节点号以及对应文件所在文件系统的超快对象的地址。

       与索引节点关联的方法叫做索引节点操作表,由inode_operations结构来描述

       struct inode_operations

       {

              int (*create)(struct inode*, struct dentry *, int);创建一个新的磁盘索引节点

              int (*link)(struct dentry *, struct inode *, struct dentry *);创建一个新的硬链接

              int (*unlink)(struct inode *, struct dentry*);删除一个硬链接

              int (*symlink)(struct inode *, struct dentry *, const char *);为符号连接创建一个新的索引节点

       }

        对于不同的文件系统,其每个函数的具体实现是不同的,也不是每个函数都必须实现,没有实现的函数对应的域应设为NULL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值