一种访问用户空间文件系统的方法及装置制造方法

文档序号:6521267阅读:242来源:国知局
一种访问用户空间文件系统的方法及装置制造方法
【专利摘要】本发明提供一种访问用户空间文件系统的方法及装置,所述方法包括:通过动态库拦截应用程序用于访问文件系统的访问指令;如果通过所述动态库根据所述访问指令的内容,识别出访问的文件系统为用户空间文件系统,则调用所述用户空间文件系统的应用程序编程接口,访问所述用户空间文件系统。对应地,动态库包括:指令拦截模块、接口调用模块等,应用本发明提供的一种访问用户空间文件系统的方法及动态库,实现了全程在用户态下访问用户空间文件系统的方法,提高了对用户态文件系统的访问效率。
【专利说明】一种访问用户空间文件系统的方法及装置
【技术领域】
[0001]本发明涉及应计算机数据处理【技术领域】,尤其涉及一种访问用户空间文件系统的方法及装置。
【背景技术】
[0002]用户空间文件系统(Filesystem in Userspace,简称FUSE),是操作系统中的概念,指完全在用户态实现的文件系统。目前内核系统,例如Linux通过内核模块对此进行支持,一些文件系统如ZFS, glusterfs和luster都属于用户空间文件系统。
[0003]Linux对所有的文件系统采用统一的文件界面,用户通过该文件界面来实现对不同文件系统的操作。对于用户来说,不需要清楚不同文件系统的具体操作过程,而只是对一个虚拟的文件操作界面来进行操作,这个操作界面就是Linux的虚拟文件系统(VirtualFile Systems,简称 VFS)。
[0004]现有技术如图1所示,应用程序访问一个用户空间文件系统时,需要首先访问VFS, VFS判断应用程序访问的文件系统类型为FUSE,再把指令传递给内核功能模块,用户空间文件系统读取数据,并对该数据加工处理后把结果沿反方向传递直至应用程序。所以应用程序应用该方法访问用户空间文件系统时,必然会引入额外的内核态/用户态切换带来的开销,降低了访问效率。

【发明内容】

[0005]本发明实施例提供了一种访问用户空间文件系统的方法及装置,以提高对用户态文件系统的访问效率。
[0006]本发明实施例提供了一种访问用户空间文件系统的方法,包括:
[0007]通过动态库拦截应用程序用于访问文件系统的访问指令;
[0008]如果通过所述动态库根据所述访问指令的内容,识别出访问的文件系统为用户空间文件系统,则调用所述用户空间文件系统的应用程序编程接口,访问所述用户空间文件系统。
[0009]本发明实施例还提供了一种访问用户空间文件系统的装置,包括:
[0010]指令拦截模块,用于通过动态库拦截应用程序用于访问文件系统的访问指令;
[0011]接口调用模块,用于当通过所述动态库根据所述访问指令的内容,识别出应用程序访问的文件系统为用户空间文件系统时,调用所述用户空间文件系统的应用程序编程接口,访问所述用户空间文件系统。
[0012]应用本发明提供的一种访问用户空间文件系统的方法及装置,通过使用动态库拦截应用程序用于访问文件系统的访问指令、调用用户空间文件系统的应用程序编程接口等步骤实现了全程在用户态下访问用户空间文件系统的方法,提高了对用户态文件系统的访问效率。【专利附图】

【附图说明】
[0013]通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
[0014]图1是【背景技术】中对用户空间文件系统的访问方法示意图;
[0015]图2是本发明实施例提供的一种访问用户空间文件系统的方法流程图;
[0016]图3是本发明实施例提供的一种访问用户空间文件系统的装置结构示意图。
【具体实施方式】
[0017]下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。
[0018]实施例一
[0019]如图2所示,本实施例提供一种访问用户空间文件系统的方法,该方法由访问用户空间文件系统的装置来实现,该装置可以由软件或硬件来实现,该方法具体包括:
[0020]步骤21,通过动态库拦截应用程序用于访问文件系统的访问指令;
[0021 ] 步骤22,如果通过所述动态库根据所述访问指令的内容,识别出访问的文件系统为用户空间文件系统,则调用所述用户空间文件系统的应用程序编程接口,访问所述用户空间文件系统。
[0022]本发明所述的动态库,是指可以动态链接的库,例如Windows系统中的动态链接库(dynamic link library,简称DLL)文件、UNIX或Linux系统中的共享对象(sharedobject,简称so)文件。库文件是预先编译链接好的可执行文件,存储在计算机的硬盘上。大多数情况下,同一时间多个应用程序可以使用一个库的同一份拷贝,而操作系统不需要加载这个库的多个实例。
[0023]应用程序与动态库的连接属于一种动态链接,在可执行文件装载时或运行时,由操作系统的装载程序加载动态库。应用程序会在硬盘上搜索需要的库,然后将其加载到内存中预先不确定的位置,之后根据加载库时确定的库的地址更新可执行程序。可执行程序根据更新后的库信息调用库中的函数或引用库中的数据,这种类型的动态加载即装载时加载,被Windows和Linux等多数系统采用。
[0024]利用这种加载动态库的方式,本发明提供的方法是在应用程序中指定加载一个动态库,用于访问文件系统,应用程序访问文件系统中的数据时,会发出访问指令,具体表现为调用一些访问函数,例如open、close、write、read等函数,来实现对文件系统中具体数据的操作,这些访问指令将不会被直接发送到VFS中,而是用所述动态库将应用程序发出的访问指令拦截,并根据指令内容判断应用程序要访问的目标文件系,在一个操作系统中可能存在多种文件系统,如Linux系统支持ext、ext2、fat32、ntfs等多种文件系统,并且有一些文件系统属于用户空间文件系统,如果动态库判断出应用程序访问的文件系统类型是用户空间文件系统,那么动态库将调用该用户空间文件系统应用程序编程接口(Application Programming Interface,简称API),应用程序直接使用该API访问所述用户空间文件系统,这个访问的过程全程保持在用户态下进行,避免了现有技术中内核态与用户态的频繁切换工作,节约了系统的开销,提高了访问效率。[0025]示例性的,通过动态库拦截应用程序用于访问文件系统的访问指令后,所述方法还包括:
[0026]如果所述动态库根据所述访问指令的内容,识别出访问的文件系统为内核态文件系统,则通过所述动态库调用标准函数库,通过访问虚拟文件系统来访问内核态文件系统。
[0027]当动态库拦截了应用程序发出的访问指令,根据指令内容判断出应用程序所访问的文件系统是一种内核态文件系统,则直接调用标准的库函数通过访问虚拟文件系统来访问该文件系统,因为访问此类内核态文件系统不需要进行内核态/用户态的切换,直接使用标准的函数库中的函数访问即可。
[0028]示例性的,通过动态库拦截应用程序用于访问文件系统的访问指令之前,还包括:
[0029]将所述动态库的路径存入内核系统的初始化程序配置文件中;
[0030]在内核系统初始化时,通过执行所述配置文件,按照所述动态库的路径加载所述动态库。
[0031]本发明提供的方法还具备一个加载所述动态库的步骤,以Linux系统为例,Linux系统一般带有Iib或usr/lib目录,该目录用于存放各类库文件,Iib是库(Library)的简称,没有该目录则系统就无法正常运行。Iib目录中存储着程序运行时使用的库,许多程序可以重复使用相同的代码,并且这些库可以存储在一个公共的位置上,因此能减小运行程序的大小,这个目录包含程序在链接时使用的各种库;Linux系统还提供一个etc目录,etc目录用于存储系统的配置文件,应用本发明提供的方法,可以将所述动态库文件放入lib目录中,例如一个动态库文件名称为A.so,放入Iib目录后该动态库的路径为/lib/A.so,然后将此路径写入配置文件/etc/ld.s0.preload中,通过执行该配置文件,则实现了为应用程序提前加载了一个动态库A.so。
[0032]实施例二
[0033]如图3所示,本实施例提供一种访问用户空间文件系统的装置31,包括:
[0034]指令拦截模块311,用于通过动态库拦截应用程序用于访问文件系统的访问指令;
[0035]接口调用模块312,用于当通过所述动态库根据所述访问指令的内容,识别出应用程序访问的文件系统为用户空间文件系统时,调用所述用户空间文件系统的应用程序编程接口,访问所述用户空间文件系统。
[0036]示例性的,所述装置还包括:
[0037]标准函数库调用模块,用于通过动态库拦截应用程序用于访问文件系统的访问指令后,当所述动态库根据所述访问指令的内容,识别出访问的文件系统为内核态文件系统时,通过所述动态库调用标准函数库,通过访问虚拟文件系统来访问内核态文件系统。
[0038]示例性的,所述装置还包括:
[0039]动态库加载模块,用于通过动态库拦截应用程序用于访问文件系统的访问指令之前,将所述动态库的路径存入内核系统的初始化程序配置文件中;在内核系统初始化时,通过执行所述配置文件,按照所述动态库的路径加载所述动态库。
[0040]本发明实施例所提供的访问用户空间文件系统的装置,可用于实现本发明任意实施例所提供的访问用户空间文件系统的方法,具备相应的功能模块,实现相同的有益效果。[0041]上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
【权利要求】
1.一种访问用户空间文件系统的方法,其特征在于,包括: 通过动态库拦截应用程序用于访问文件系统的访问指令; 如果通过所述动态库根据所述访问指令的内容,识别出访问的文件系统为用户空间文件系统,则调用所述用户空间文件系统的应用程序编程接口,访问所述用户空间文件系统。
2.根据权利要求1所述的方法,其特征在于,通过动态库拦截应用程序用于访问文件系统的访问指令后,所述方法还包括: 如果所述动态库根据所述访问指令的内容,识别出访问的文件系统为内核态文件系统,则通过所述动态库调用标准函数库,通过访问虚拟文件系统来访问内核态文件系统。
3.根据权利要求1或2所述的方法,其特征在于,通过动态库拦截应用程序用于访问文件系统的访问指令之前,还包括: 将所述动态库的路径存入内核系统的初始化程序配置文件中; 在内核系统初始化时,通过执行所述配置文件,按照所述动态库的路径加载所述动态库。
4.一种访问用户空间文件系统的装置,其特征在于,包括: 指令拦截模块,用于通过动态库拦截应用程序用于访问文件系统的访问指令; 接口调用模块,用于当通过所述动态库根据所述访问指令的内容,识别出应用程序访问的文件系统为用户空间文件系统时,调用所述用户空间文件系统的应用程序编程接口,访问所述用户空间文件系统。
5.根据权利要求4所述的装置,其特征在于,还包括: 标准函数库调用模块,用于通过动态库拦截应用程序用于访问文件系统的访问指令后,当所述动态库根据所述访问指令的内容,识别出访问的文件系统为内核态文件系统时,通过所述动态库调用标准函数库,通过访问虚拟文件系统来访问内核态文件系统。
6.根据权利要求4或5所述的装置,其特征在于,还包括: 动态库加载模块,用于通过动态库拦截应用程序用于访问文件系统的访问指令之前,将所述动态库的路径存入内核系统的初始化程序配置文件中;在内核系统初始化时,通过执行所述配置文件,按照所述动态库的路径加载所述动态库。
【文档编号】G06F9/44GK103617039SQ201310625947
【公开日】2014年3月5日 申请日期:2013年11月28日 优先权日:2013年11月28日
【发明者】赵前, 高杰 申请人:北京华胜天成科技股份有限公司, 北京鲸鲨软件科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1