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索引节点号,这
个号惟一地标识某个文件系统中的指定文件。
版权声明:本文标题:虚拟文件系统 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1717296302a704414.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论