向目录项链表指针,注意一个inodes可以对应多个dentry,因为一个实际的文件可能被链接到其他的文件,那么就会有另一个dentry,这个链表就是将所有的与本inode有关的dentry都连在一起。
i_dirty_buffers和i_dirty_data_buffers:脏数据缓冲区
i_ino:索引节点号,每个inode都是唯一的
i_count:引用计数
i_dev:如果inode代表设备,那么就是设备号
i_mode:文件的类型和访问权限
i_nlink:与该节点建立链接的文件数(硬链接数)
i_uid:文件拥有者标号
i_gid:文件所在组标号
i_rdev:实际的设备标识
注意i_dev和i_rdev之间区别:如果是普通的文件,例如磁盘文件,存储在某块磁盘上,那么i_dev代表的就是保存这个文件的磁盘号,但是如果此处是特殊文件例如就是磁盘本身(因为所有的设备也看做文件处理),那么i_rdev就代表这个磁盘实际的磁盘号。
i_size:inode所代表的的文件的大小,以字节为单位
i_atime:文件最后一次访问时间
i_mtime:文件最后一次修改时间
i_ctime:inode最后一次修改时间
i_blkbits:块大小,字节单位
i_blksize:块大小,bit单位
i_blocks:文件所占块数
i_version:版本号
i_bytes:文件中最后一个块的字节数
i_sem:指向用于同步操作的信号量结构
i_alloc_sem:保护inode上的IO操作不被另一个打断
i_zombie:僵尸inode信号量
i_op:索引节点操作
i_fop:文件操作
i_sb:inode所属文件系统的超级块指针
i_wait:指向索引节点等待队列指针
i_flock:文件锁链表
注意下面:address_space不是代表某个地址空间,而是用于描述页高速缓存中的页面的。一个文件对应一个address_space,一个address_space和一个偏移量可以确定一个页高速缓存中的页面。
i_mapping:表示向谁请求页面
i_data:表示被inode读写的页面
i_dquot:inode的磁盘限额
关于磁盘限额:在多任务环境下,对于每个用户的磁盘使用限制是必须的,起到一个公平性作用。
磁盘限额分为两种:block限额和inode限额,而且对于一个特文件系统来说,使用的限额机制都是一样的,所以限额的操作函数
放在super_block中就OK!
i_devices:设备链表。共用同一个驱动程序的设备形成的链表。
i_pipe:指向管道文件(如果文件是管道文件时使用)
i_bdev:指向块设备文件指针(如果文件是块设备文件时使用)
i_cdev:指向字符设备文件指针(如果文件是字符设备时使用)
i_dnotify_mask:目录通知事件掩码
i_dnotify:用于目录通知
i_state:索引节点的状态标识:I_NEW,I_LOCK,I_FREEING
i_flags:索引节点的安装标识
i_sock:如果是套接字文件则为True
i_write_count:记录多少进程以刻写模式打开此文件
i_attr_flags:文件创建标识
i_generation:保留
u:具体的inode信息
注意管理inode的四个链表:
inode_unused:将目前还没有使用的inode链接起来(通过i_list域链接)
inode_in_use:目前正在使用的inode链接起来(通过i_list域链接)
super_block中的s_dirty:将所有修改过的inode链接起来,这个字段在super_block中(通过i_list域链接起来)
inode_hashtable:注意为了加快inode的查找效率,将正在使用的inode和脏inode也会放在inode_hashtable这样一个hash结构中,
但是,不同的inode的hash值可能相等,所以将hash值相等的这些inode通过这个i_hash字段连接起来。