VFS对象总结

Posted feng9exe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VFS对象总结相关的知识,希望对你有一定的参考价值。

关键术语:

超级快(super block)对象:

一个超级块对应一个具体的文件系统(已经安装的文件系统类型如 ext2,此处是实际的文件系统,不是 VFS)。

iNode 对象:

inode是内核文件对象的元数据,inode 仅仅只是保存了文件对象的属性信息,包括:权限、属组、数据块的位置、时间戳等信息。

file 对象:

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

dentry 对象:

dentry 是一个纯粹的内存结构,由文件系统在提供文件访问的过程中在内存中直接建立。dentry 中包含了文件名,文件的 inode 号等信息。

关系: 

1. 超级块对象和inode对象分别对应有物理数据,在磁盘上有静态信息。

2. 目录项对象和文件对象描述的是一种关系,前者描述的文件与文件名的关系;后者描述的是进程与文件的关系,所以没有对应物理数据。例如有三个不同的进程打开同一个文件,其中有两个进程使用了相同的硬链接。三个进程拥有各自的file object,而只有两个dentry(同一个硬链接对应一个dentry,dentry不随进程打开文件而增加或改变)。两个dentry都指向同一个inode。

3. 进程每打开一个文件,就会有一个file结构与之对应。同一个进程可以多次打开同一个文件而得到多个不同的file结构,file结构描述被打开文件的属性,如文件的当前偏移量等信息。

4. 两个不同的file结构可以对应同一个dentry结构。进程多次打开同一个文件时,对应的只有一个dentry结构。

5. 在存储介质中,每个文件对应唯一的inode结点,但是每个文件又可以有多个文件名。即可以通过不同的文件名访问同一个文件。这里多个文件名对应一个文件的关系在数据结构中表示就是dentry和inode的关系。

6. Inode中不存储文件的名字,它只存储节点号;而dentry则保存有名字和与其对应的节点号,所以就可以通过不同的dentry访问同一个inode。

7. 不同的dentry则是同个文件链接(ln命令)来实现的

图解:

技术分享图片

 

https://www.cnblogs.com/licongyu/p/5031924.html

以上是关于VFS对象总结的主要内容,如果未能解决你的问题,请参考以下文章

VFS四大对象之三 struct dentry

文件系统VFS数据结构(超级块 inode dentry file)(收集整理)

Linux虚拟文件系统(VFS)

Linux内核VFS的主要数据结构

vfs基本操作(待继续补全)

linux内核源码分析之虚拟文件系统VFS