linux内核学习笔记之虚拟文件系统

虚拟文件系统(VFS)是内核的一个子系统,为用户提供通用的系统调用,而无需考虑具体文件系统和介质。VFS抽象层定义了所有文件系统都支持的、基本的、概念上的接口和数据结构。
图1

如图1所示内核通过VFS把不同类型的文件系统连接在一起,给用户提供一个通用的接口(如read/write等)。不同的文件系统所提供的接口不同,从而对文件的操作也不一样。通过VFS就能实现从ext2到ext3的文件拷贝等操作,而无需复杂的操作。例如:以写ext2文件操作流程是这样的:

如果没有VFS,则用户在对不同的文件系统进行读写时可能需要调用不同的接口。

VFS中主要抽象了4种对象,分别是:
超级块 ——代表一个具体的已安装文件系统。结构体为super_block,包含设备标识符、块大小、文件系统类型、超级块方法、目录挂载点等信息,主要是和文件系统相关。
目录项 ——是路径的一部分,与目录有所区别,目录属于文件的一种。结构体为dentry,主要是为了方便文件路径查找,包含目录项名称、使用记数、目录项标识、关联的索引结点等信息。
文件 ——代表一个打开的文件。结构体体为file,指的就是我们常见的文件内容,包含文件操作方法、文件对象链表、使用计数、访问模式、文件指针偏移量等信息。
引节点 ——代表一个具体的文件。结构体为inode,包含文件大小、引用计数、硬链接数、修改时间、访问权限等信息,主要是和具体文件相关。

此外,内核还使用了一些标准的数据结构来管理文件系统的其他相关数据。分别是:
file_system_type ——用来描述特定的文件系统类型,如ext2、ext4、UDF
vfsmount ——描述一个安装文件系统的实例,即代表一个安装点

系统中的每一个进程都有自己的一组打开的文件 ,以下3个数据结构将VFS和系统的进程紧密联系在一起。
file_struct ——由进程描述符中的files目录项指向,所有与单个进程相关的信息(如打开的文件描述符)都包含在其中。
fs_struct ——由进程描述符中的fs域指向,包含文件系统和进程相关的信息。
namespace ——由进程描述符中的mmt_namespace域指向,它使第一个进程在系统中都看到唯一的安装文件系统。默认情况下,所有进程共享同样的命名空间。只有在clone()时使用CLONE_NEWSjf ,才会给进程一个唯一的命名空间的拷贝。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值