VFS

虚拟文件系统:
系统中所有的文件系统不但依赖于VFS共存,而且也依赖于VFS系统协同工作。通过虚拟文件系统,程序可以利用标准的UNIX
文件系统调用对不同介质上的不同文件系统进行相应的操作。
两种不同的介质,两种不同的文件系统,连接到同一个虚拟文件系统上。
虚拟文件系统为何有如此强大的功能,为此,虚拟文件系统提供一个抽象层,该层为用户提供统一的通用文件操作接口,用户根本
不用关心底层的实现,文件系统抽象层也是为具体的文件系统实现方法提供接口。
比如:常见的用户调用write()首先通过VFS的通用系统调用,其次通过文件系统提供的特殊写方法,最后写入物理介质中。

UNIX文件系统提供了四种和文件系统相关的传统抽象概念:文件,目录项,索引节点和安装点。
VFS中有四个树妖的对象类型:
超级块对象:代表一个已安装文件系统。存储特定文件系统的信息。存放于磁盘特定扇区中的文件系统超级块或者文件系统控制块。
超级块对象由super_block结构表示,其中有一个属性域就是指向超级块操作函数表,超级块操作函数表由super_operations结构表示。每一项都是
指向一个超级块操作函数的指针。

索引节点对象:代表一个文件。包含了内核在操作文件或目录时需要的全部信息。索引节点对象由Inode结构体表示。
索引节点对象中的inode_operations项包含VFS操作索引节点对象的所有方法。

目录项对象:代表一个目录项,是路径的一个组成部分。如果VFS层遍历路径名中所有的元素并将它们逐个的解析成目录项对象,
将是一件非常费力的工作,会浪费大量的时间。所以内核将目录项对象缓存在目录项缓存中。

文件对象:代表由进程打开的文件。文件对象仅仅是进程观点上代表已打开文件,反过来指向目录项对象,只有目录项对象才表示
已打开的实际文件。文件对象由file结构体表示。文件对象通过f_dentry指针指向相关的目录项对象。目录项对象指向相关的索引节点,
索引节点会记录文件是否是脏的。

linux提供了三种数据结构将VFS层和系统进程紧密联系起来。files_struct, fs_struct, namespace结构体,进程描述符都有指向
这三个结构体的指针。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值