浅析VFS

2009-05-13 05:20:21来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

浅析VFS
(陈云川 ybc2084@163.com)
1 引言
VFS的全称是Virtual FileSystem(即虚拟文件系统)。VFS是一个异构文件系统之上的软件粘合层(注:有时也把VFS称为可堆叠的文件系统(Stackable Filesystem),因为VFS可以无缝地使用多个不同类型的文件系统,就像把多个文件系统堆叠在一起一样,故而得名)。通过VFS,可以为访问文件系统的系统调用提供一个统一的抽象接口。VFS最早由Sun公司提出以实现NFS(Network FileSystem,网络文件系统)。但是现在很多Unix系统都采用了VFS(包括Linux、FreeBSD、Solaris等)。本文在参考相关资料的情况下,对FreeBSD和Linux两种操作系统上的VFS接口进行了简要的分析与对比。
2 FreeBSD下的VFS
在4.3BSD中,对本地文件系统的引用是通过inode来实现的。当系统中只有一个单独的文件系统的时候,使用inode来描述文件系统结构就已经足够了。但是,如果系统中存在多种类型的文件系统,尤其是如果需要从运行其它操作系统的机器上导入其它类型的文件系统,那就必须对文件系统的工作机制进行相应的修改。
一种修改方式是把多个文件系统以不同的文件系统类型导入到系统当中。但是,这种方法将导致文件系统接口不统一,比如对于本地FFS(Fast FileSystem,快速文件系统)和NFS文件系统,就必须采用不同的访问方式;其次,这也需要对系统现有的构架进行大量的重新构建(因为早期的BSD系列操作系统采用inode来引用文件系统)。
另一种方法则是在底层的文件系统类型与上层接口之间加入一个新的层。这个新加的层就是VFS层。在FreeBSD中,VFS是通过vnode(virtual node)来实现的。这样,文件系统仍然保持了统一性,即所有访问文件系统的操作都将通过vnode来完成。而在VFS层之下则是具体的文件系统所在的层,比如本地文件系统使用的inode或者NFS文件系统使用的nfsnode,以及特殊文件(比如设备文件、socket、FIFO等)。层次关系如图1所示。
VFS
NFS
UFS
special devices,etc
FFS
LFS
图1 FreeBSD中VFS的层次关系
FreeBSD中对文件系统的具体操作流程则如图2所示。

图2 FreeBSD中文件系统的操作流程
通过struct mount,可以找到系统中已挂载的文件系统,然后即可通过struct vnode来选择具体的文件系统结构,对于UFS本地文件系统,是struct inode结构,访问的是本地存储设备(比如硬盘);对于NFS网络文件系统,则是struct nfsnode结构,访问的是网络上的其它计算机上的文件系统。
通过这样一个附加的中间层,VFS屏蔽了底层异构类型的文件系统的差异,也屏蔽了基础设施的差异(比如:是访问本地设备还是访问网络)。从而给上层的应用程序访问文件系统提供了统一的接口。
3 Linux下的VFS
VFS的作用就是采用标准的Unix系统调用读写位于不同物理介质上的不同文件系统。VFS是一个可以让open()、read()、write()等系统调用不用关心底层的存储介质和文件系统类型就可以工作的粘合层。在古老的DOS操作系统中,要访问本地文件系统之外的文件系统需要使用特殊的工具才能进行。而在Linux下,通过VFS,一个抽象的通用访问接口屏蔽了底层文件系统和物理介质的差异性。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:调整 FreeBSD 的使用环境

下一篇:https的安全,Firefox-256bits vs. IE-128bits