VFS数据结构之(inode)

本文详细介绍了Linux文件系统中的索引节点(inode)对象,包括其数据结构、关键字段及其意义,如状态标志、索引节点操作链表、散列表等。还讨论了inode在内存中的管理和文件操作,如硬链接、符号链接、文件类型判断等。
摘要由CSDN通过智能技术生成

1. 索引节点对象(inode object)

文件系统处理文件所需要的所有信息都放在索引节点数据结构中。文件名可以改,但索引节点对文件是唯一的。每个索引节点对象都会复制磁盘索引节点包含的一些数据,比如分配给文件的块数。

1.1 索引节点数据结构

struct inode {
   
	struct hlist_node	i_hash;		/* 用于散列链表的指针 */
	struct list_head	i_list;		/* 用于描述索引节点当前状态的链表的指针 */
	struct list_head	i_sb_list;	/* 用于超级块的索引节点链表的指针 */
	struct list_head	i_dentry;	/* 引用索引节点的目录项对象链表的头 */
	unsigned long		i_ino;		/* 索引节点号 */
	atomic_t			i_count;	/* 引用计数器 */
	unsigned int		i_nlink;	/* 硬链接数目 */
	uid_t				i_uid;		/* 所有者标识符 */
	gid_t				i_gid;		/* 组标识符 */
	dev_t				i_rdev;		/* 设备标识符 */
	unsigned long		i_version;	/* 版本号(每次使用后自动递增) */
	loff_t				i_size;		/* 文件的字节数 */	
	seqcount_t		i_size_seqcount;/* SMP系统为i_size字段获取一致值时使用的顺序计数器 */
	struct timespec		i_atime;	/* 上次访问的时间 */
	struct timespec		i_mtime;	/* 上次写文件的时间 */
	struct timespec		i_ctime;	/* 上次修改索引节点的时间 */
	unsigned int		i_blkbits;	/* 块的位数 */
	blkcnt_t			i_blocks;	/* 文件的块数 */
	unsigned short      i_bytes;	/* 文件中最后一个块的字节数 */
	umode_t				i_mode;		/* 文件类型与访问权限 */
	spinlock_t			i_lock;		/* 保护索引节点一些字段的自旋锁 */
	struct mutex		i_mutex;
	struct rw_semaphore	i_alloc_sem;/* 在直接I/O文件操作中避免出现竞争条件的读/写信号量 */
	const struct inode_operations	*i_op;	/* 索引节点的操作 */
	const struct file_operations	*i_fop;	/* 缺省文件操作 */
	struct super_block	*i_sb;				/* 指向超级块对象的指针 */
	struct file_lock	*i_flock;			/* 指向文件锁链表的指针 */
	struct address_space	*i_mapping;		/* 指向address_space对象的指针 */
	struct address_space	i_data;			/* 文件的address_space对象 */
	struct dquot		*i_dquot[MAXQUOTAS];/* 索引节点磁盘限额 */
	struct list_head	i_devices;			/* 用于具体的字符或块设备索引节点链表的指针 */
	union {
   
		struct pipe_inode_info	*i_pipe;	/* 如果文件是一个管道则使用它 */
		struct block_device		*i_bdev;	/* 指向块设备驱动程序的指针 */
		struct cdev				*i_cdev;	/* 指向字符设备驱动程序的指针 */
	};
	int					i_cindex;			/* 拥有一组次设备号的设备文件的索引 */
	__u32				i_generation;		/* 索引节点版本号(由某些文件系统使用) */
	unsigned long
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值