一种应用层文件系统访问的方法及电子设备技术领域
本发明涉及计算机领域,尤其涉及一种应用层文件系统访问的方法及电子设备。
背景技术
用户空间文件系统(File system in Userspace,缩写:FUSE)是操作系统中的概
念,指完全在用户态实现的文件系统。目前用户空间文件系统在各大操作系统中使用越来
越广泛,在诸多生产业务系统发挥着重要的作用。相比传统内核态文件系统。其一,开发效
率高,无需内核编程的诸多限制,甚至脚本语言都可以开发,可以满足迅速多变需求;其二,
容错性好,内核态文件系统崩溃会导致整个主机崩溃,这对有些重要的业务难于接受,而应
用层文件系统只需重新启动即可,这对于大型、复杂的分布式文件系统尤为重要。
虽然用户空间文件系统优点多,但是相比内核态文件系统还是具有一定的劣势,
对于内核文件系统,应用程序访问很直接,可以直接通过内核文件系统处理后直达存储介
质接口。而对于用户空间文件系统则不然,请结合图1进行理解,应用程序则要通过内核
FUSE驱动到应用层文件系统,再到达存储介质接口。如,应用程序的操作指令首先需要切换
一次内核,发送至内核的FUSE驱动,然后,FUSE驱动发送数据到应用层文件系统进程,应用
层文件系统再做处理后把数据送入内核存储介质接口。这样切换多次并复制多次数据,不
仅增加了系统开销,又增加了输入/输出延时。
发明内容
本发明实施例提供了一种应用层文件系统访问的方法及电子设备,用于在访问应
用层文件系统时,减少了大量不必要路径,极大提升应用层文件系统访问速度。
第一方面,本发明实施例提供了一种应用层文件系统访问的方法,包括:
拦截应用程序的目标访问指令,所述目标访问指令用于访问应用层文件系统;
通过预置的hook函数调用应用程序接口将所述目标访问指令跳转到所述应用层
文件系统;
访问所述应用层文件系统。
在一种可能的实现方式中,所述拦截应用程序用于访问应用层文件系统的目标访
问指令,包括:
判断应用程序的访问指令是否为用于访问应用层文件系统的目标访问指令;
若所述访问指令为目标访问指令,则拦截所述目标访问指令。
在一种可能的实现方式中,所述通过预置的hook应用程序接口将所述访问指令跳
转到所述应用层文件系统,包括:
通过高速传输通道将所述目标访问指令传输到所述应用层文件系统;
按照目标格式对所述目标访问指令进行处理,得到第一目标访问指令,所述目标
格式为所述应用层文件系统对应的格式;
通过调用应用程序接口将所述第一目标访问指令跳转到所述应用层文件系统。
在一种可能的实现方式中,所述访问所述应用层文件系统之后,所述方法还包括:
获取所述应用层文件系统的访问结果。
在一种可能的实现方式中,所述获取所述应用层文件系统的访问结果,包括:
通过所述高速通道将所述应用层文件系统的访问结果反馈给所述应用程序。
第二方面,本发明实施提供了一种电子设备,包括:
拦截模块,用于拦截应用程序的目标访问指令,所述目标访问指令用于访问应用
层文件系统;
调用模块,用于通过预置的hook函数调用应用程序接口将所述拦截模块拦截的目
标访问指令跳转到所述应用层文件系统;
访问模块,用于访问所述调用模块跳转的所述应用层文件系统。
在一种可能的实现方式中,所述拦截模块包括判断单元和拦截单元:
所述判断单元,用于判断应用程序的访问指令是否为用于访问应用层文件系统的
目标访问指令;
拦截单元,用于当所述访问指令为目标访问指令时,拦截所述目标访问指令。
在一种可能的实现方式中,调用模块包括传输单元,格式处理单元和调用单元;
所述传输单元,用于通过高速传输通道将所述目标访问指令传输到所述应用层文
件系统;
所述格式处理单元,用于按照目标格式对所述传输单元传输的所述目标访问指令
进行处理,得到第一目标访问指令,所述目标格式为所述应用层文件系统对应的格式;
所述调用单元,用于通过调用应用程序接口将所述格式处理单元处理的所述第一
目标访问指令跳转到所述应用层文件系统。
在一种可能的实现方式中,所述装置还包括获取模块;
所述获取模块,用于获取所述应用层文件系统的访问结果。
在一种可能的实现方式中,所述获取模块还具体用于:
通过所述高速通道将所述应用层文件系统的访问结果反馈给所述应用程序。
从以上技术方案可以看出,本发明实施例具有以下优点:
本发明实施例中,通过hook API将拦截的用于访问应用层文件系统目标访问指令
直接跳转到应用层文件系统,减少了传统方式中访问应用层文件系统的路径,提高了访问
速度。
附图说明
图1为现有技术中应用层文件系统访问的方法;
图2为本发明实施例中一种电子设备的结构示意图;
图3为本发明实施例中一种应用层文件系统访问的方法的原理示意图;
图4为本发明实施例中一种应用层文件系统访问的方法的一个实施例的流程示意
图;
图5为本发明实施例中一种电子设备的一个实施例的结构示意图;
图6为本发明实施例中一种电子设备的另一个实施例的结构示意图;
图7为本发明实施例中一种电子设备的另一个实施例的结构示意图;
图8为本发明实施例中一种电子设备的另一个实施例的结构示意图。
具体实施方式
本发明实施例提供了一种应用层文件系统访问的方法及电子设备,用于在访问应
用层文件系统时,减少了大量不必要路径,极大提升应用层文件系统访问速度。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的
附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是
本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例前提下所获得的所
有其他实施例,都应当属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第
四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理
解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示
或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于
覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限
于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产
品或设备固有的其它步骤或单元。
本发明实施例中提供了一种应用层文件系统访问的方法,该方法应用于一种电子
设备,该电子设备可以为一种专业的存储设备,服务器或者也可以为分布式存储系统。请参
阅图2所示,图2为本发明实施例提供的一种电子设备的结构示意图,该电子设备200可因配
置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器222和存储器232,一
个或一个以上存储应用程序242或数据的存储介质230(例如一个或一个以上海量存储设
备)。其中,存储器132和存储介质130可以是短暂存储或持久存储。存储在存储介质230的程
序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对电子设备中的一系列
指令操作。更进一步地,处理器222可以设置为与存储介质230通信,在电子设备200上执行
存储介质230中的一系列指令操作。电子设备200还可以包括一个或一个以上输入输出接口
258,一个或一个以上操作系统241,该操作系统可以包括但不限定为:Linux,FreeBSD,
NetBSD,OpenSolaris或Mac OSX等等。该操作系统包括操作系统内核2410和应用层文件系
统2411,该操作系统内核2410还包括存储介质接口(图中未示)。
上面对本发明提供的一种应用层文件系统访问的方法的应用的电子设备做了简
要的介绍,为了方便理解,下面对本发明实施例中涉及的词语进行简要说明。
文件系统(file system):操作系统中负责管理和存储文件信息的机构称为文件
管理系统,简称文件系统,文件系统是命名文件及放置文件的逻辑存储和恢复的系统。文件
系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等存储介质使用数据块的概
念,用户使用文件系统来保存数据不必关心数据实际保存在存储介质的地址为多少的数据
块上,只需要记住这个文件的所属目录和文件名。
应用层文件系统:是操作系统中的概念,指完全在用户态实现的文件系统。管理和
调度文件的存储空间,提供文件的逻辑结构、物理结构和存储方法;实现文件从标识到实际
地址的映射,实现文件的控制操作和输入/输出(Input/Output,缩写:I/O)操作。该应用层
文件系统可以理解为用户空间文件系统。
hook:用于改变函数执行结果或获取想要信息的技术。使用这种技术可以改变或
增加一个函数的原有功能。基本方法是找到需要修改的函数入口点,改变它的地址指向新
的自定义函数。
hook API:一种用于改变API执行结果的技术。
下面对本发明实施例实现的原理进行说明。请参阅图3进行理解,图3为本发明实
施例中一种应用层文件系统访问的方法的原理示意图。
应用程序启动时,代理组件通过hook应用程序接口(Application Programming
Interface,缩写:API)机制自动装载到应用程序中。代理组件与应用层程序运行在同一进
程内,该代理组件用于截获应用程序对应用层文件系统的访问,并把这些操作通过高速通
道全部传送给文件系统插件。文件系统插件运行在应用层文件系统进程内,用于接收代理
组件传送的操作,并将操作下发到应用层文件系统中,执行访问应用层文件系统。实现了在
访问应用层文件系统时,运用hook API技术将目标访问指令直接跳转到应用层文件系统,
从而访问该应用层文件系统,减少了大量不必要路径,极大提升应用层文件系统访问速度,
而且不需要修改该应用层文件系统的应用程序。
请参阅图4所示,下面对本发明提供的一种应用层文件系统访问的方法的一个实
施例进行详细描述。
步骤401、拦截应用程序的目标访问指令,所述目标访问指令用于访问应用层文件
系统。
当接收到访问指令时,该访问指令可以为I/O指令,例如,建立,存入、读出、修改、
转储,打开等。判断应用程序的访问指令是访问操作系统内核空间还是访问应用层文件系
统,若该访问指令为访问应用层文件系统的指令,则对该访问指令进行拦截,该访问指令就
为目标访问指令。
步骤402、通过预置的hook函数调用API接口将所述目标访问指令跳转到所述应用
层文件系统。
需要说明的是,在应用程序启动前,需要将hook API自动装载到应用程序中。其中
hook API可以包括但不限于Linux的LD_PRELOAD和Windows Detours等。
当拦截到访问应用层文件系统的访问指令时(目标访问指令),将该目标访问指令
封装好,通过高速传输通道将所述访问指令传输到所述应用层文件系统。其中高速通道用
于通过执行通道程序管理I/O操作来实现,它使应用程序与应用层文件系统可以达到更高
的并行程度。由于它的任务是管理实现输入/输出操作,提供一种传送通道,所以将这种部
件称作“通道”。处理器把数据传输功能下放给通道,这样,通道与处理器分时使用内存,就
可以实现处理器与外设的并行工作。当需要进行I/O操作时,处理器只需启动通道,然后可
以继续执行自身程序,通道则执行通道程序,管理与实现I/O操作。例如,高速通道可以为共
享内存。
按照目标格式对所述访问指令进行处理,得到目标访问指令,所述目标格式为所
述应用层文件系统对应的格式,该目标格式为该应用层文件系统可以处理的格式。比如,
linux有比较通用的协议格式,如FUSE通信协议,gluster,ceph,linux zfs等等应用层文件
系统均使用该FUSE通信协议协议。linux系统实现网上邻居的samba软件,也可以看作是一
种应用层文件系统,其协议格式为SMB协议;又如linux标准的共享文件系统使用的是NFS协
议格式。需要说明的是,对于应用层文件系统及对应的格式只是举例说明,并不造成对本发
明的限定性说明。
通过调用应用程序接口将所述目标访问指令跳转到所述应用层文件系统。
步骤403、访问所述应用层文件系统。
本发明实施例中,通过hook API将拦截的用于访问应用层文件系统,目标访问指
令直接跳转到应用层文件系统,减少了传统方式中访问应用层文件系统的路径,提高了访
问速度。
步骤404、获取所述应用层文件系统的访问结果。
通过所述高速通道将所述应用层文件系统的访问结果反馈给所述应用程序。
上面对一种应用层文件系统访问的方法进行了描述,下面对该方法应用的电子设
备进行描述,请参阅图5所示,图5为该电子设备500的一个实施例的结构示意图。本发明提
供的一种电子设备的一个实施例包括:
拦截模块510,用于拦截应用程序的目标访问指令,所述目标访问指令用于访问应
用层文件系统;
调用模块520,用于通过预置的hook函数调用应用程序接口将所述拦截模块510拦
截的访问指令跳转到所述应用层文件系统;
访问模块530,用于访问所述调用模块520跳转的所述应用层文件系统。
请参阅图6所示,图6为该电子设备600的另一个实施例的结构示意图。本发明实施
例提供了电子设备的另一个实施例包括:
拦截模块510进一步包括判断单元511和拦截单元512。
所述判断单元511,用于判断应用程序的访问指令是否为用于访问应用层文件系
统的目标访问指令。
拦截单元512,用于当所述访问指令为目标访问指令时,拦截所述目标访问指令。
调用模块520,用于通过预置的hook函数调用应用程序接口将所述拦截单元512拦
截的访问指令跳转到所述应用层文件系统。
访问模块530,用于访问所述调用模块520跳转的所述应用层文件系统。
请参阅图7所示,图7为该电子设备700的另一个实施例的结构示意图。本发明实施
例提供了电子设备的另一个实施例包括:
拦截模块510,用于拦截应用程序的目标访问指令,所述目标访问指令用于访问应
用层文件系统;
调用模块520包括传输单元521,格式处理单元522和调用单元523;
所述传输单元521,用于通过高速传输通道将所述访问指令传输到所述应用层文
件系统。
所述格式处理单元522,用于按照目标格式对所述传输单元521传输的所述访问指
令进行处理,得到目标访问指令,所述目标格式为所述应用层文件系统对应的格式。
所述调用单元523,用于调用应用程序接口将所述格式处理单元522出的所述目标
访问指令跳转到所述应用层文件系统。
访问模块530,用于访问所述调用单元523跳转的所述应用层文件系统。
请参阅图8所示,图8为该电子设备800的另一个实施例的结构示意图。本发明实施
例提供了电子设备的另一个实施例包括:
拦截模块510,用于拦截应用程序的目标访问指令,所述目标访问指令用于访问应
用层文件系统;
调用模块520,用于通过预置的hook函数调用应用程序接口将所述拦截模块510拦
截的访问指令跳转到所述应用层文件系统;
访问模块530,用于访问所述调用模块520跳转的所述应用层文件系统。
所述获取模块540,用于获取所述应用层文件系统的访问结果。
所述获取模块540还具体用于:
通过所述高速通道将所述应用层文件系统的访问结果反馈给所述应用程序。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,
装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以
通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的
划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件
可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或
讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦
合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显
示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个
网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目
的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以
是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单
元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用
时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上
或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式
体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机
设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全
部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only
Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程
序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前
述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前
述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些
修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。