虚拟文件系统

一、虚拟文件系统的简介

虚拟文件系统作为内核子系统,为用户空间应用程序提供了文件和文件系统相关的接口。通过虚拟文件系统,程序可以利用标准的UNIX系统调用对不同的文件系统,甚至不同介质上的文件系统进行读写操作。比如:应用程序调用write(fd,buf,len)系统调用,这个系统调用首先被VFS的通用系统调用sys_write()处理,sys_write()要先找到fd所在的文件系统实际给出的是哪个写操作,然后再调用该文件系统的特殊的写操作进行真正的写动作。二、虚拟文件系统四种主要的对象

VFS使用的是面向对象的设计思路,他用一组数据结构来代表通用的对象,而且这些数据结构中还包含对其中数据操作的一些函数指针。VFS中有4个主要的对象类型,它们是:

1、超级块对象super_block和对应的操作super_operations:代表一个具体的已安装的文件系统,即每一个一安装的文件系统都必须实现超级块对象,该对象用于存储文件系统的信息,通常对应于存放在磁盘特定扇区中的文件系统超级块或文件系统控制块。

2、索引节点对象inode和对应的操作inode_operations:代表一个具体文件

3、目录项对象dentry和对应的操作dentry_operations:代表一个目录项,是路径的一个组成部分。比如对于路径/tmp/test.c/tmptest.c都是目录项对象。

4、文件对象file和对应的操作file_operatons:代表由进程打开的文件

VFS所支持的文件系统使用和linux内核驱动类似的机制来实现文件系统的抽象:每一个具体的文件系统都实现VFS上述的4个对象和对应的全部或部分的操作,然后通过register_fiesystem()(具体见下面描述)把自己注册到VFS中。当用户调用某个操作时,VFS就会找到具体文件系统的相应操作进行执行。

VFS各个对象之间的关系如下图:


进程的描述符files字段记录了进程打开的所有文件,这些文件的文件对象指针保存在structfile_structfd_array数组里(图中给的fd是错的)。通过文件的file对象可以获得相应的目录项对象,进而获得inode对象,即获得了要操作的文件,这样就建立了文件对象和物理文件之间的对应关系。

三、文件系统的注册与安装

3.1、相关的结构对象

除了以上4中主要的VFS对象之外,内核还使用了其他一些数据结构来管理文件系统,其中,structfile_system_type用于描述具体文件系统的类型,structvfsmount用于描述一个文件系统的安装实例。

Linux所支持的文件系统,只要注册到VFS中,都会有且仅有一个对应的file_system_type结构,不管系统中是安装了一个还是多个ext2,甚至是没有安装ext3,都会有一个对应的ext2_fs_typeext3_fs_type结构,当然ext2ext3必须注册到VFS中。所有的file_system_type组成一个链表,由全局变量file_system作表头。每当一个文件系统被安装时,就会有一个vfsmount结构被创建,它代表了一个安装实例,也代表了一个安装点,如果有两个ext2安装到系统中,则有两个ext2对应的vfsmount结构。

超级块、安装点和具体的文件系统的关系如下图:


不同的文件系统通过next字段形成一个链表,表头是一个全局变量file_system;同一种文件系统的超级块通过s_instances字段链接在一起,并挂入file_system_typefs_supers链表中;所有的vfsmount结构通过mnt_list字段形成一个链表。

3.2、文件系统的注册与安装

文件系统的注册与安装是两个不同的概念。注册只是向内核声明自己可以被支持,但是我们不能访问它。问了能够访问,文件系统必须安装到系统中,也就是我们通常说的mount操作。

VFS以链表的形式管理已经注册的文件系统,即将所有已经注册的文件系统的file_system_type对象形成一个链表,表头是一个全局变量file_system.注册函数register_fiesystem()把一个文件系统的类型名、文件系统特性、指向对应的VFS超级块读取函数的地址以及已注册项的链指针等填写到相应的file_system_type数据结构中。函数unregister_filesystem()用于将一个文件系统从链表里移除。

一个文件系统只有安装后才能够被访问,除了根文件系统是在内核引导阶段就被安装的,其他文件系统或者由初始化脚本安装,或者由用户使用mount命令安装在已安装文件系统的某个目录上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值