文件系统学习1 四巨头 各种数据结构的关系

struct super_block //有链表将其串成一起,其头元素是super_blocks
----struct list_head	s_list; //相邻元素
----dev_t			s_dev; //对应设备节点
----unsigned char		s_dirt; //表明超级块是否脏了,是否需要更新
----const struct super_operations	*s_op; //虚函数,指向具体文件系统的超级块操作
----void 			*s_fs_info;  //虚数据,执行具体的文件系统的超级块信息
inode
----unsigned long		i_state; //索引节点状态,是否脏
----struct hlist_node	i_hash; //可以方便找到这个节点
----struct list_head	i_list; //归属谁,可能属于如下3种链表之一:有效未使用的索引节点链表;正在使用的索引节点链表;脏索引节点的链表
----const struct inode_operations	*i_op; //虚函数,索引节点关联方法
file //文件对象描述进程怎样与一个打开的文件进行交互。文件对象是在文件被打开时创建的
----loff_t			f_pos; //当前位置
----atomic_t		f_count; //引用计数
----const struct file_operations	*f_op; //虚函数,文件操作指针

当VFS代表进程必须打开一个文件时,它调用get_empty_filp()函数来分配一个新的文件对象。该函数调用kmem_cache_alloc()从filp高速缓存中获得一个空闲的文件对像,然后初始化这个对象的字段,如下所示:
 f = kmem_cache_alloc(filp_cachep, GFP_KERNEL);
 percpu_counter_inc(&nr_files);
 memset(f, 0, sizeof(*f));
 tsk = current;
 INIT_LIST_HEAD(&f->f_u.fu_list);
 atomic_set(&f->f_count, 1);
 rwlock_init(&f->f_owner.lock);
 f->f_uid = tsk->fsuid;
 f->f_gid = tsk->fsgid;
dentry //VFS把每个目录看作由若干子目录和文件组成的一个普通文件
----struct inode *d_inode; //可以处于四种状态:空闲状态(free);未使用状态(unused);正在使用状态(in use);负状态(negative)
----struct dentry_operations *d_op; //虚函数,目录项操作

四巨头的关系如下: 节选自深入理解linux操作系统
这里写图片描述
vfs是个大地图。
vfsmount是个小地图。
文件代表具体地点,有两层含义:
第一:inode:具体唯一的位置,可以获取具体内容以及大小。
第二:dentry:相对位置,可以获取与周边的关系,成熟状结构,如何到达该地点

转自
VFS对象数据结构
http://blog.csdn.net/yunsongice/article/details/5641933

VFS的数据结构
http://blog.csdn.net/mihouge/article/details/7065232

Linux内核大讲堂 (三) 督脉之虚拟文件系统(1)
http://blog.csdn.net/z2007b/article/details/7632377

无为和尚的博客有机会研究一下

VFS中的基本数据结构
https://blog.csdn.net/gx19862005/article/details/52594667

把Linux中的VFS对象串联起来
https://blog.csdn.net/yunsongice/article/details/5683859

Linux 虚拟文件系统(VFS)介绍
https://blog.csdn.net/jasonchen_gbd/article/details/51511261

struct file 和 struct file_struct
https://blog.csdn.net/yuzhihui_no1/article/details/51272563

Linux 内核编程之文件系统
https://www.linuxidc.com/Linux/2011-02/32127p2.htm

Linux内核中通过文件描述符获取绝对路径
http://edsionte.com/techblog/archives/4406

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值