服务器诊所:使虚拟文件系统工作

2009-05-13 01:08:39来源:未知 阅读 ()

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


虚拟文件系统(VFS)是一个抽象概念,它具有极其高效的用途。几种流行的语言现在都支持VFS构造,CameronLaird向您说明这些构造适用于什么。

“不亲自尝试就不会明白它是多么有用”。当有人对我这么说时,我一贯的反应就是认为说这话的人对所说的功能不够了解,所以没法说清楚。

但是,对于虚拟文件系统,亲身经历告诉我说这话的人是对的。JeffreyHobbs是ActiveStateCorp.的高开发人员,我们俩都见识了使用虚拟文件系统(VFS)可以实现多么不可思议的强大功能。

简单的构想,重大的成果
VFS背后的构想很简单:它将不是文件系统的事物表示为文件系统。这里的文件系统指的是“传统的类Linux文件系统”:由可直接访问的目录和(普通)文件构成的树或层次结构。当然,这个概念会激起所有Linux用户的兴趣,因为Linux本身的许多特征都源自UNIX文件系统内对设备、表和其它对象的表示。UNIX建立在如下原则之上:每样东西(或者至少是许多东西)都是文件;VFS将这一原则加以推广,将尽可能多的东西看成是文件系统。

注:Linux内核工程师也谈到了VFS,但意义不同。本月的专栏文章不是关于Linux虚拟文件系统交换器的,该交换器将文件系统驱动程序分派给ext2、ext3、reiserfs等等。

对VFS的一种看法是:它是某种技术或概念的另一个示例,用独立开发人员Jean-ClaudeWippler的话说,这种技术“使OS和高级语言环境之间的界限变得模糊”。另外,“系统服务”在应用程序开发语言中的出现使可移植性变得更为容易,因为操作系统从视野中消失。

那么,哪类东西本身不是文件系统,但用这种方式表示却非常有用呢?这有许多:可以通过FTP、HTTP、WebDAV或其它网络协议访问的文件;.zip文件、CVS(并发版本控制系统,concurrentversionssystem)或其它归档文件的内容;数据库表;受安全性或其它约束限制的真正文件系统的投影(projection);及其它。

容易看出这样的资源可以以自然的方式映射到文件系统。假定example.zip压缩了下面这些文件:

first
subdir1/second
subdir1/third
subdir2/fourth
该归档文件很可能创建为现有文件系统树的直接(局部)映像,所以自然可以用有根树表示:

./first
./subdir1/second
./subdir1/third
./subdir2/fourth
许多在业界有影响的产品都依赖于VFS。象日志记录文件系统这样的DB2功能部件的体系结构就依靠于VFS模型。众所周知的Zope应用程序服务器提供了一个颇有挑战性的VFS示例。Zope的“获得(acquisition)”概念将程序化的对象映射成URL。在Zope中,类似于下面这样的方法调用:

context.myproject.object1.method1(year="1999")
相当于对下面这个URL的HTTP请求:

http://myzope.com/myproject/object1/method1?year=1999
看出其中的优点了吗?VFS和UNIX的“一切均是文件”的概念也很相似,因为这个想法很容易理解和模仿,但是要意识到它能将应用程序设计简化到哪种程度,还需要花几年工夫。

我们来研究一个示例。假定您已经编写了一个文本编辑器;它提供了访问、读取、修改单独文件以及将它们写回到存储器的方法。如果使用文件系统“虚拟器”,立刻就可以使用所有相同的代码来浏览FTP或ZIP归档文件,选择、修改并保存单独的项。您拥有在操作本地文件时能很好地工作的浏览器、备份实用程序、安全性扫描程序或版本控制系统吗?对其文件系统访问进行虚拟化,它立刻就可以对.tar文件、老式磁带盘和只能通过虚拟专用网(VPN)访问的公司资源进行操作。供应商喜欢把这样的附件卖到数千美元。VFS却免费提供了这样的功能。

或者说这几乎是免费的。程序员不用学习任何新知识;他们只需要像以往那样执行相同的open、close等文件系统操作。关键是所有的代码都和以前的一样。最大的困难就是当前支持成熟的VFS的语言运行时库很少。常见的困难之一是驱动程序通常是只读的,这或者是因为写功能需要进行更为复杂的编程,或者只是因为在类似HTTP这样的协议中没有定义写操作。

标签:

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

上一篇:服务器诊所:Fortran,在Linux上安家

下一篇:服务器诊所:编写出色的异常