admin 管理员组

文章数量: 1184232


2024年6月2日发(作者:容器类别和什么意思)

虚拟文件系统

一基本概念

传统的操作系统仅能支持一种类型的文件系统,随着信息技术的发展和应用

需求的增长,对文件系统的使用提出了新的要求,例如,要求在UNIX系统中支

持非UNIX类文件系统,以便运行UNIX的机器上也可访问DOS分区;要求Windows

2000/XP支持高性能文件系统的同时支持FAT文件系统;Linux在设计时便瞄准

能同时支持几十种文件系统;随着网络的发展,迫切要求计算机之间共享网络文

件系统;甚至一些用户希望能定制自己的文件系统。

为了能同时支持多种文件系统,不同操作系统采用不同技术方案来提供虚拟

文件系统,它要实现以下目标:把多种个文件系统纳入统一框架中,不同的磁盘

分区可以包含不同的文件系统,对它们的使用和传统单一文件系统没有区别;用

户可以通过同一组系统调用来对不同的文件系统及文件进行操作,更进一步,系

统调用可以跨物理介质和跨文件系统执行,如从一个文件系统拷贝或移动数据到

另一个文件系统;对网络共享文件提供完全支持,访问远程节点上的文件应与访

问本地节点的文件一致;开发出新的文件系统后,可以模块方式加入到操作系统

中。

虚拟文件系统VFS也称为虚拟文件系统开关(Virtual filesystem Switch),

它是内核的一个子系统,提供了一个通用文件系统模型,该模型囊括了所能见到

的文件系统常用功能和行为,并为应用程序提供一致性的文件系统接口,安装的

所有物理文件系统不但依赖于VFS共存,而且也依靠VFS协同工作。它的主要设

计思想有以下3点:

(1)应用层:VFS模型源于UNIX文件系统,使得用户可以直接使用标准UNIX

文件系统调用来操作文件,无需考虑具体文件系统特性和物理存储介质,通过

VFS访问文件系统,才使得不同文件系统之间的协作性和通用性成为可能。

(2)虚拟层:在对所有具体文件系统的共同特性进行抽象的基础上,形成一

个与具体文件系统实现无关的虚拟层,并在此层次上定义与用户的一致性接口;

(3)实现层:该层使用类似开关表技术进行具体文件系统转接,实现各种文

件系统的物理操作细节,每个文件系统是自包含的,包含文件系统实现的各种设

施,如超级块、节点区、数据区以及各种数据结构和文件类的操作函数。

一般地说,VFS提供以下功能:

•记录可用的文件系统类型;

•把文件系统与对应的存储设备联系起来;

•处理面向文件的通用操作;

•涉及具体文件系统的操作时,把它们映射到相关的具体文件系统。

VFS抽象层之所以能衔接各种不同的文件系统,是因为它定义了所有文件系

统都支持的基本抽象接口和数据结构,同时具体的文件系统也将自己的诸如“文

件如何打开”、“目录如何定义”等概念在形式上与VFS的定义保持一致。对于像

FAT和NTFS这类非UNIX风格文件系统,必须经过封装,提供符合VFS概念的接

口。比如,一个文件系统不支持inode概念,它也必须在内存中装配inode结构

体,就像它本身包含inode一样。这些装配和转换需要在使用现场引入特别处理,

使得非UNIX文件系统能够兼容UNIX文件系统的使用规则和满足VFS的需求,这

样一来,非UNIX文件系统便可与VFS一道工作,只是性能上会有少许影响。

下面看一个文件操作的例子,假如应用程序执行如下文件操作:

write(fd,&buf,len);要求将buf指针指向的、长度为len字节的数据写入文件

描述符fd对应的文件的当前位置。用户执行的系统调用首先被VFS的

sys_write( )处理,该函数首先处理一些与设备无关的操作,并找到f所在的文

件系统,再根据VFS结构及它的inode数据结构提供的信息,重定向到具体文件

系统中相对应的写函数,由它来处理与特定设备相关的操作,并把数据写到物理

介质。

二实例研究:Linux文件系统

标准文件类系统调用,

open( )、read( )、

应用层

用户空间

应用程序

write( )、close( )等

索引节点缓存

系统调用对应的内核函

系统空间

VFS

数,sys_open( )、

虚拟层

sys_read( )、sys_write( )、

目录高速缓存

sys_close( )等

具体文件系统对应的文

Minix Ext2 Fat 件操作函数,open( )、

文件系统 文件系统

read( )、write( )、close( )

文件系统

实现层

缓冲区缓存

图6- Linux 虚拟文件系统模型

磁盘驱动器

Linux VFS采用了面向对象设计思想,文件系统中定义的VFS相当于面向对

象系统中的抽象基类,从它出发可以派生出不同的子类,以支持多种具体文件系

统,但从效率考虑内核纯粹使用C语言编程,故并没有直接利用面向对象的语义。

下面的讨论使用了术语“对象”,实际上是一个结构体struct,但它代表的确实

是一个对象object。VFS由下列四个对象类型组成:

·超级块(super block)对象--代表一个文件系统。存放已安装的文件系统

的信息。如果是基于磁盘的文件系统,该对象便对应于存放在磁盘上的文件系统

控制块,亦即每个文件系统都对应一个超级块对象。

·索引节点(inode)对象--代表一个文件。存放一个具体文件的所有信息。

如果是基于磁盘的文件系统,该对象通常对应于存放在磁盘上的文件控制块,亦

即每个文件都有一个inode对象,而每个inode都有一个inode索引节点号,这

个号惟一地标识某个文件系统中的指定文件。


本文标签: 文件 使用 操作 提供 系统