fs_struct,file_struct,file,file_operations等的关联关系

先上一张图:
在这里插入图片描述
task_struct不用多说,是Linux中的进程描述符;
所谓的inode就是index node,因为ext4,ext2等都是indexed allocation file sysyem;
fs字段指向fs_struct结构体(存储filesystem info),是用来记录这个进程的工作目录pwd,和它的根目录root;显然目录信息是由dentry结构体保存的;在linux中,目录也是一种文件,因此dentry结构体会有指向inode结构体的指针字段d_inode;
file字段指向files_struct结构体,这个结构体是用来记录该进程打开的所有文件的信息;每个打开的文件都会为它建立一个file(图中的files错误)结构体;files_struct结构体中,用fd_array[]数组字段,维护着所有指向file结构体的指针;
而每个被打开的file也有其所在目录f_entry; 所有的operations都是对应目录或是inode或是文件的操作方法;

在linux中打开文件需要知道文件的inode,而inode就是通过dentry来获取的;因此需要拿着dentry去找它下面的文件的inode;
目录也有inode,而目录的inode指向的block中存放的是这个目录下的文件或目录的inode的号码(或位置),如/etc/passwd访问流程:
先通过/的inode号(2号)找到其block,在其block中找到/etc的inode的位置a,通过inode a找到/etc目录文件的block,在其block中又找到/etc/passwd文件的inode位置,就找到了/etc/passwd文件;

为什么要将files_struct分出来,用一个指针指向,而不是放在task_struct中呢?
是为了支持多线程,把file_struct移出来是为了让同一进程内的多个线程可以共享一个file_struct,这样线程1打开的文件,线程2也能看到了;

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值