【文件】VFS四大struct:file、dentry、inode、super_block 是什么?区别?关系?--编辑中...

简略

推荐:《VFS、超级块、inode、dentry、file》https://www.itdaan.com/blog/2014/08/31/f99ae6e6e574449076a385cd07f0957b.html

https://www.itdaan.com/blog/2014/08/31/b60d5d86d0e61607dc9f1becfe0f5101.html

Linux虚拟文件系统四大对象:

1)超级块(super block)

2)索引节点(inode)

3)目录项(dentry)

4)文件对象(file)

索引节点inode:文件是由 inode 以及 inode指向的数据块构成,Inode记录了文件的管理信息,数据块记录文件的具体内容。

目录也是由 inode 以及inode指向的数据块构成 ,但目录的数据块 记录的是该目录下的  子目录/文件的 inode  以及  子目录名/文件名 等信息。

目录项dentry:目录项是描述文件的逻辑属性(dentry中包含了文件名,文件的inode号等信息。),只存在于内存中,更确切的说是存在于内存的目录项缓存,为了提高查找性能而设计。注意不管是文件夹还是最终的文件,都是属于目录项,所有的目录项在一起构成一颗庞大的目录树。例如:open一个文件/home/xxx/yyy.txt,那么/、home、xxx、yyy.txt都是一个目录项,VFS在查找的时候,根据一层一层的目录项找到对应的每个目录项的inode,那么沿着目录项进行操作就可以找到最终的文件。

dentry结构是一种含有指向父节点和子节点指针的双向结构,多个这样的双向结构构成一个内存里面的树状结构,也就是文件系统的目录结构在内存中的缓存了。有了这个缓存,我们在访问文件系统时,通常都非常快捷。

注意:目录也是一种文件(所以也存在对应的inode)。打开目录,实际上就是打开目录文件。

举个文件的例子:/home/user/Desktop/bilibili.txt ,假设 bilibili.txt和 / 在同一个文件系统,那么,只需要读 / inode读到 home并找到找到home 的inode 并读取,这样步步跳转,最后会读取bilibili.txt这文件对应的 inode ,好了,你打开 bilibili.txt这个文件并读取内容 时,VFS会调用ext3的read()(在5中的安装 ,函数已经向VFS注册过)去 读此inode对应的数据块。

文件对象:注意文件对象描述的是进程已经打开的文件。因为一个文件可以被多个进程打开,所以一个文件可以存在多个文件对象。但是由于文件是唯一的,那么inode就是唯一的,目录项也是定的!

进程其实是通过文件描述符来操作文件的,注意每个文件都有一个32位的数字来表示下一个读写的字节位置,这个数字叫做文件位置。一般情况下打开文件后,打开位置都是从0开始,除非一些特殊情况。Linux用file结构体来保存打开的文件的位置,所以file称为打开的文件描述。这个需要好好理解一下!file结构形成一个双链表,称为系统打开文件表

Superblock, Inode, Dentry 和 File 都属于元数据(Metadata),

Linux系统从ext2开始,是将文件属性和文件内容分开存储,inode 用于存储文件的各属性,block 用来存储文件的内容。inode指向block(至少一个)。

Super block即为超级块,它是硬盘分区开头,超级块中的数据是卷资源表,有关文件卷的大部分信息都保存在这里。

例如:硬盘分区中每个block的大小、硬盘分区上一共有多少个block group、以及每个block group中有多少个inode。它定义了文件系统的类似、大小、状态,
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值