VFS数据结构之(superblock )

通用文件模型

VFS的思想是把不同种类文件系统的共同部分抽象出来,其中有一个字段用来指向所支持的实际文件系统的操作方法。这些抽象出来的数据结构就是VFS的通用文件模型。

你可以把通用文件模型看作面向对象的,结构体中既定义了数据也定义了其上的操作方法。这个模型能够表示所有支持的文件系统,因此要实现具体的文件系统就必须要把其物理组织结构转换为虚拟文件系统的通用文件模型才可以使用VFS。

例如:通用模型中每个目录被看作一个文件,包含若干文件和其他子目录。但是存在几个非Unix基于磁盘的文件系统,他们利用文件分配表(File Allocation Table,FAT)存放每个文件在目录树中的位置,在这些文件系统中,存放的是目录而不是文件。为了符合VFS通用文件模型,对于上述基于FAT的文件系统的实现,必须建立对应于目录的文件,符合VFS的统一接口。这样的文件只作为内核内存的对象而存在。

1. 超级块对象(superblock object)

存放已安装文件系统信息。对基于磁盘的文件系统,这类对象通常对应于存放在磁盘上的文件系统控制块。

1.1 超级块数据结构

struct super_block {
   
	struct list_head	s_list;		        /* 指向超级块链表的指针 */
	dev_t			    s_dev;		        /* 设备标识符 */
	unsigned long		s_blocksize;        /* 以字节为单位的块大小 */
	unsigned char		s_blocksize_bits;   /* 以位为单位的块大小 */
	unsigned char		s_dirt;				/* 修改“脏”标识 */
	unsigned long long	s_maxbytes;			/* 文件的最长长度 */
	struct file_system_type	*s_type;		/* 文件系统类型 */
	const struct super_operations	*s_op;	/* 超级块方法 */
	struct dquot_operations	*dq_op;			/* 磁盘限额处理方法 */
 	struct quotactl_ops	*s_qcop;			/* 磁盘限额管理方法 */
	struct export_operations *s_export_op;  /* 网络文件系统使用的输出操作 */
	unsigned long		s_flags;			/* 安装标志 */
	unsigned long		s_magic;			/* 文件系统的魔数 */
	struct dentry		*s_root;			/* 文件系统的根目录的目录项对象 */
	struct rw_semaphore	s_umount;			/* 卸载所用的信号量 */
	struct mutex		s_lock;				/* 超级块信号量 */
	int					s_count;			/* 引用计数器 */
	int					s_syncing;			/* 表示对超级块的索引节点进行同步的标志 */
	int					s_need_sync_fs;		/* 对超级块的已安装文件系统进行同步的标志 */
	atomic_t			s_active;			/* 次级引用计数器 */
	void                *s_security;		/* 指向超级块安全数据结构的指针 */
	
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值