首 页 本刊概况 出 版 人 发行统计 在线订阅 欢迎投稿 市场分析 1 组织交流 1 关于我们
 
1
   通信短波
1
   新品之窗
1
   优秀论文
1
   通信趋势
1
   特别企划
1
   运营商动态
1
   技术前沿
1
   市场聚焦
1
   通信视点
1
   信息化论坛
1
当前位置:首页 > 优秀论文
基于WebOS的虚拟文件系统服务研究
作者:袁继飞 同济大学计算机科学及技术系 上海 201804
来源:不详
更新时间:2009/9/19 19:29:00
正文:

1 引言
WebOS是目前互联网研究的热点之一,它是在分布式的网络环境下,一种向用户提供网络服务的基于浏览器的操作系统[1]。自上世界80年代以来,有好几个网络操作系统实现了将远程资源抽象成局域网资源,比如:Locus[2],Mach[3],Sprite[4],Amoeb[5]和V[6],他们还简化了网络应用程序的开发。WebOS最大的优点就是它的可移动性,平台无关性,以及可协作性。可移动性体现在用户可以在任何地点登录自己的帐户进行操作;平台无关性是指WebOS只需要一个浏览器就可以进行各种操作,而不需要特定操作系统;可协作性则是指用户可以在网上协作完成一个文件。
WebOS提供的一个最重要的服务就是虚拟文件服务[5](Virtual file system)。对用户来说经常用到就是上传文件到服务器,或者在不同服务器之间传送文件,下载文件到本地。但是由于用户在远程操作文件,并且在同一个WebOS上同时可能有很多用户在操作,所以从设计实现方面来考虑,安全性是WebOS虚拟文件系统的重要考虑因素。一方面要防止用户误操作修改或者下载系统文件,另外还得防止用户访问其他用户的文件。虚拟文件服务还需要考虑到让不同的用户能够实现文件共享,当然也需要可控制的权限。
本文研究以一种灵活的模块化的虚拟文件系统来管理用户文件,而对于需要保护的文件则利用重命名来保护。我们首先研究一下这种模块化的虚拟文件系统的主要难点:(a)在用户的层面设计一种服务器-浏览器客户端的文件模式[7],(b)构建一个高效率的中间层响应用户的文件操作,并同时隐藏对用户的文件权限检查[8],(c)优化这个文件中间层的效率。
2 WebOS和VFS
2.1 Web虚拟文件系统VFS的特殊问题
虚拟文件系统相对于普通的文件系统来说由于是在Web环境下,除了要考虑普通文件系统一些常见的问题之外,还有一些特殊的问题需要考虑。以下是基于WebOS的VFS经常面对的问题:
1. 维护的开销:Internet用户的需求经常会变化,所以应用程序也会经常变化,从而需要VFS能及时扩展来支持应用程序的这种变化。所以,相对于普通文件系统很久不需要更新,WebOS的VFS通常需要经常更新。本文提出的将文件接口尽可能的模块化就能有效的防止未来增加新功能时修改过多的代码。
2. 容易遭受攻击:由于VFS的环境是Internet,向数量庞大的用户群提供服务,所以如果被恶意攻击者从外部获取文件系统的权限,很容易导致VFS的崩溃。另外一方面,由于用户众多,所以必须对用户的权限进行严格管理,防止用户非法获取其他用户的文件。本文提出的随机字符串文件命名法就是针对这种问题的一种解决方法。
3. 响应时间的限制:在网络的环境下,考虑到可能的网络延迟,以及同一时刻可能会有很多的用户同时进行相同的操作,所以VFS的文件操作需要减少不必要的时间,并且考虑到操作可能带来的并发的冲突问题,以获得更快的响应速度。
2.2 WebOS的基本概念
从用户角度来看,WebOS(Web-based Operating System)可以称为网络操作系统,是一种基于浏览器的虚拟的操作系统,用户通过浏览器可以在这个WebOS上运用基于Web的在线应用(Web Application)的操作来实现PC操作系统上的各种操作(包括文档的存储,编辑,媒体播放等等)。目前随着在线网络应用服务的不断发展,在线存储,在线Office等等都为网络操作系统的发展提供了很好的基础。
从开发者角度来看,WebOS是一个向用户提供网络应用服务的平台,他的主要目的就是解决网络应用开发中的常见问题,给开发者提供一个同构化的开发平台[10]。从而让开发者只需要关注于应用程序的开发,而WebOS则负责资源管理,和浏览器的通信,以及安全问题等。
2.3 WebOS的基本结构
在探讨WebOS的服务之前,我们必须了解WebOS的结构。整个这样一个系统是一个客户端-服务器的系统结构,而WebOS是服务器,客户端一般是一个浏览器。如图1所示:

图1 WebOS基本架构
WebOS通常都是微内核平台,内核是用来整合WebOS提供给开发者的接口的,类似于Windows中的编写API的内核函数。或者可以说,WebOS针对不同的任务有不同的服务接口,然后内核就是负责服务接口之间的通信以及定位。通过这样的结构,应用程序不需要知道具体怎么激活一个服务,而只需要知道服务的名字,剩下就是让内核去做其余的工作。WebOS中通常有以下一些系统服务[11],如图2所示:

图2 WebOS常用服务
2.4 VFS与网络应用程序


图3 VFS与应用程序
VFS就是WebOS系统服务中的一种,它负责WebOS中低层次文件操作工作。比如,应用程序并不是直接操作文件,而是利用一个为操作文件而设计的一个VFS服务。因此,对文件操作的安全性也有了保障,因为VFS会自动检查应用程序的请求是否合法。一个典型的调用VFS服务的例子就是:
service('vfs','delete',array('file.txt'))
这行代码可以调用VFS服务来删除file.txt这个文件。
2.5 VFS在WebOS中的部署
由于本文所提及VFS是以模块化的设计原则来实现的,所以只需要WebOS部署好了,VFS模块的部署也是比较简单的。下面以开源的EyeOS为例子来实现VFS的部署。
EyeOS是以php脚本语言为基础的一个开源的WebOS,部署要求也相对简单。EyeOS提倡在Linux下部署,但是也可以在Windows下部署。在Linux下,部署EyeOS的通常配置是Apache+MySql+Php,各个不同版本的EyeOS对这三个软件的版本要求不一样。将那三个软件安装好之后,只需要将EyeOS的相关文件放到对应的目录下面就可以在本机上实现对EyeOS的网页访问了。如果要想通过域名来访问,还需要申请域名。
VFS在EyeOS中的部署也是非常简单,由于EyeOS将各种系统服务都模块化了,所以每一个系统服务都是一个单独的模块,互相之间不会耦合。所以,我们只需要将VFS的模块放到EyeOS的系统服务目录,并且同时修改EyeOS的配置文件中虚拟文件服务的配置项,这样VFS就算是部署成功了。以后如果用户需要使用自己的VFS服务,也只需要替换文件,然后配置相关项就可以实现了,这就是模块化的好处。

3 VFS的原始实现和改进
3.1 文件初始模块化实现
WebOS中的虚拟文件系统根据处理的对象可以分成两类:一类是用户创建的抽象文件,一类是真实的非抽象文件(以“real_”为前缀)。
第一类文件一般是由用户创建的抽象文件,VFS模块会创建两个文件:一个保存文件的内容,另外一个用XML格式的文件保存文件基本信息。比如调用VFS服务:
service('vfs','create',array('file.txt'))
则VFS会创建两个文件,一个是file.txt_[RANDOM_STRING].***File,这个是保存内容的文件。另外一个文件是file.txt_[RANDOM_STRING].***Info,这个文件是xml格式的,并且保存了关于这个文件的一些基本信息,比如创建者,权限,创建时间等。
第二类文件则是跟普通的文件一样的真实文件,不会在创建的时候生成两个文件,这类文件通常是系统配置文件和用户配置文件,并且格式也是xml格式。
3.2优点与不足
模块化带来了很多好处:通过将功能分解,降低了各功能模块之间的耦合度。如果需要替换某个模块以实现更好的质量或效率的提高,就不会改变整个结构,只需要修改相应的模块,工作量就会明显减少。另外一个方面,这样的设计也保证了封闭和开放与效率的平衡,既在一定程度上能保证易于修改,也就是易于优化和扩展,也在一定程度上保持良好的性能。

把文件按照抽象文件和真实文件来分类主要是出于以下三个原因:
(1) 方便虚拟文件系统针对不同的文件格式提炼出不同函数接口。由于用户创建的文件每次都是以一个内容文件和一个Xml用户信息文件成对出现,而真实文件则没有这样,所以通常情况下,针对文件的操作的接口都会有所不同。
(2) 方便虚拟文件系统针对不同的文件格式进行权限检查。进行权限检查的函数接口虽然相同,但是对于用户创建的抽象文件来说不仅需要检查Xml文件里面的用户信息,还需要查看文件内容,而针对真实文件的操作则只需要检查真实文件本身即可。而且对于真实文件和虚拟文件的限制有很大不同。
(3) 能够更好实现模块化。将文件分成两类相当于将大模块细分为两个小的高聚合的模块。如果以后会扩展功能,那么需要修改VFS这部分代码就不一定需要修改全部而只需要修改部分。另外,模块化也为将来的功能扩展提供了良好的接口环境,便于开发第三方扩展。

不过,EyeOS的VFS只是针对是否是用户创建的文件做了区分,而没有针对用户创建的不同文件:个人文件和group文件进行区分,这是模块化做的不够的一个方面。

此外,用户有时候会需要将真实文件和抽象文件进行互相转化,VFS并没有提供这样的接口,这就导致系统管理员进行这样的操作需要手动进行,十分不方便管理系统,这也是模块化做的不足的一个方面。

模块化有明显的好处,不过对于设计者来说,前期的设计就需要花费很多的时间。同时,这种设计多半不是一次性完成的,所以设计得时候要考虑适当的开放性。另外,现有的EyeOS系统对于模块化还细分的不够,特别是针对group用户的文件操作接口并没有单独成为一个功能模块,这样导致开发者处理权限时没有那么方便,所以这是一个可以继续改进的地方。

3.3 模块化的改进
3.3.1 文件分类改进
文件分类改进主要着手于实现简单而让开发者容易理解的文件模块化。具体来说主要是在接口层面针对个人文件和group文件进行分类,这样既能方便开发者使用不同权限的函数接口。
首先,利用已经存在的不同文件函数权限。在groups目录下,抽象函数只能对用户自己创建的函数进行修改和删除。真实函数可以在用户的目录下任何地方创建和修改任何真实文件,但是真实函数不能读写groups目录下的文件。这样设置的原因是出于安全考虑,对groups目录下的配置文件进行修改需要严格的权限检查,所以必须由对权限检查更加严格的抽象函数来访问。
其次,在文件分类这个层次上也采用了模块化的设计思想,那就是主要根据用户创建文件的性质进行分类,从而VFS也相应分为两个相对独立的服务,一个面向用户创建的内容文件,一个面向用户创建的配置文件以及系统文件。其实模块化还可以细分一些,那就是将针对系统文件的函数分离出来,这样模块化后的结构显得更加高内聚,对于将来的代码重用或者功能扩展都有帮助。
最后,才是针对文件不同的所有者,根据是用户单独拥有的文件还是一个group所拥有的文件来提供各种不同的文件服务。通过进行这样的细分,VFS可以减少很多不必要的权限检查,从而带来整体性能的提高。 实现过程可以通过在XML文件中增加一个项目记录所拥有的文件数来实现。在这样处理之后可以针对不同的文件做一些特殊的处理。最典型的比如针对文件的大小的限制可以分别设置,通常说来允许上传到groups目录下的文件的大小都会比普通的文件大小要小一些。
将虚拟文件系统进行足够的模块化其实最主要还是方便开发者,方便应用程序开发者将来对虚拟文件系统服务本身以及自己的应用程序进行适当修改,但是方便了开发者,最终的受益者仍然还是WebOS的普通用户。
3.3.2 系统文件安全性的保护改进
由于将用户创建的文件分成两个文件,而其中一个xml文件是包含用户信息和文件信息的文件,所以应该需要特别小心防止xml文件被其他用户访问。这里采用的是用随机字符串命名文件的方法来实现。在每次自动创建xml文件的时候,在xml文件名的生成时,不是简单的直接复制内容文件的文件名,而是采用php随机字符串函数
genRandomString($len)来修改xml的文件名。使用这种办法虽然简单但是很有效。一方面,创建xml的用户由于是通过VFS来访问xml文件,所以VFS可以利用正则表达式来访问文件名变得和内容文件不一样的xml文件。另一方面,其他用户由于不知道xml文件的具体文件名,所以没办法访问其他用户创建xml文件,如果想通过VFS来访问,必然会由于权限不够而被拒绝。至于随机字符串的长度,自然是越长安全性越好,考虑到各种操作系统对文件名长度的限制,一般36个字符长度已经够用了。

图4 记录文件信息的xml文件
除了在文件名上面生成随机字符串的方式外,在xml文件里面的password还可以利用一些加密算法将密码进行加密,加密算法可以随意选择,另外其实用户名都可以利用加密算法进行加密,不过这样会损失一些性能。
3.3.3 异常处理改进
WebOS有一套自己的简单而有效的异常处理机制,每一种特定的异常都会返回一个与异常很相近的字符串,但是并没有返回相应的参数。这种简单的机制虽然缺少了一些具体的参数,所以开发者遇到相应的异常不能针对性的处理。针对异常的改进主要是因为以前的异常返回信息量太少,没有针对不同的函数接口的错误返回不同的错误代码。这样可以更方面开发者调试。
改进后的异常通常可以分为4类:
1 调用的服务参数与要求不符合:一般是参数个数不匹配,或者参数没有初始化,或者参数类型不匹配。这种类型的异常通常是给开发人员查看的。
2 有关文件是否存在的异常:通常是一些需要访问文件的函数发现文件不存在或者是创建文件的函数发现文件已经存在。这种类型的异常可能会直接返回给用户,当然是经过处理之后,让用户忽略技术细节,而直接提醒他们。
3 文件权限不够的异常:这种类型的异常一般是用户的文件操作需要的权限比用户拥有的权限高从而被VFS所拒绝。这种类型异常也是经常返回给用户,提醒需要更高等级的权限。
4 系统异常:这种异常是WebOS本身底层实现的问题,比如一些内核函数出现异常,VFS通常需要包装一下返回给开发者或者是普通用户。VFS应该避免直接将这种异常返回给普通用户,要不会带来很恶劣的用户体验,而是应该将其包装成更人性化的提示。

4 未来的工作
本文的目的就是证明在这种基于WebOS的虚拟文件系统服务当中,由于涉及到权限管理,用户文件远程管理,所以对虚拟文件服务进行相当程度的模块化对于以后的开发工作是很有帮助的。所以未来的工作主要是对文件操作的各种接口函数进行进一步的模块化。另外一方面就是考虑以后的远程网络应用程序调用,所以很有可能以后虚拟文件系统需要处理存放位置地理差异很大,虚拟文件系统要考虑远程调用应用程序服务器上的存储文件,这就涉及到WebOS服务器与应用程序服务器之间的交互,这也是未来研究的一个方向。
5 总结
在这篇论文里面,我们分析了在WebOS里面实现一个虚拟文件服务系统的特殊难点和要点。我们的WebOS原型EyeOS实现了一种可能的虚拟文件系统服务,以一种模块化的文件服务方便于客户配置和未来可能的功能增加或变更。在本文里,我们做了一下一些贡献。首先,分析了在Internet条件下实现类似于普通单机上的文件系统服务的特定难点。其次,通过抽象文件系统与应用程序的通信,我们简化了各种网络应用程序的开发。另外,我们还论证了以模块化的方法设计文件系统服务对于以后的WebOS功能升级或替换所带来的好处。

7 参考文献
[1] [Accetta et al. 1986] M. Accetta, R. Baron, W. Bolosky, D.Golub, R. Rashid, A. Tevanian, and M. Young.
“Mach: A New Kernel Foundation For UNIXDevelopment”. In Proceedings of the 1986 USENIX Summer Conference, pp. 93–112, June 1986.
[2] [Alexandrov et al. 1997] A. D. Alexandrov, M. Ibel, K. E.Schauser, and C. J. Scheiman. “Ufo: A Personal Global File System Based on User-Level Extensions to the Operating System”. In Proceedings of the 1997 USENIX Technical Conference, Anaheim, CA, January 1997.
[3] [Cheriton 1988] D. R. Cheriton. “The V Distributed System”.In Communications of the ACM, pp. 314–
333, March 1988.
[4] [Dahlin et al. 1994] M. Dahlin, R.Wang, T. Anderson, and D.Patterson. “Cooperative Caching: Using Remote Client Memory to Improve File System Performance”.In Proceedings of the 1st USENIX Symposium on Operating Systems Design and Implementation, pp. 267–280, November 14–17 1994.
[5] S.B. Lamine, J. Plaice, and P. Kropf. Problems of computing on the WEB. In A. Tentner, editor,High performance computing 1997, pages 296{301,Atlanta, Ga., 1997. SCS.
[6] J. Plaice and S.B. Lamine. Intensional Program-ming II, chapter Eduction: A general model for computing. World Scientic, Singapure, 1997. To appear.
[7] [Deering 1991] S. E. Deering. “Multicast Routing in a Datagram Internetwork”. PhD thesis, Stanford University,December 1991.

作者简介:袁继飞,同济大学电信学院软件与理论研究生,研究方向WebOS与网络应用程序的连接技术。<

 
 
   
《通信市场》 中国·北京·复兴路49号通信市场(100036) 点击查看具体位置
电话:86-10-6820 7724, 6820 7726
京ICP备05037146号-8
建议使用 Microsoft IE4.0 以上版本 800*600浏览 如果您有什么建议和意见请与管理员联系