《一种访问用户空间文件系统的方法及装置.pdf》由会员分享,可在线阅读,更多相关《一种访问用户空间文件系统的方法及装置.pdf(7页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 103617039 A (43)申请公布日 2014.03.05 CN 103617039 A (21)申请号 201310625947.7 (22)申请日 2013.11.28 G06F 9/44(2006.01) (71)申请人 北京华胜天成科技股份有限公司 地址 100192 北京市海淀区学清路 8 号科技 财富中心 A 座 11 层 申请人 北京鲸鲨软件科技有限公司 (72)发明人 赵前 高杰 (74)专利代理机构 北京品源专利代理有限公司 11332 代理人 胡彬 (54) 发明名称 一种访问用户空间文件系统的方法及装置 (57) 摘要 本发明提供一种访问用。
2、户空间文件系统的方 法及装置, 所述方法包括 : 通过动态库拦截应用 程序用于访问文件系统的访问指令 ; 如果通过所 述动态库根据所述访问指令的内容, 识别出访问 的文件系统为用户空间文件系统, 则调用所述用 户空间文件系统的应用程序编程接口, 访问所述 用户空间文件系统。对应地, 动态库包括 : 指令拦 截模块、 接口调用模块等, 应用本发明提供的一种 访问用户空间文件系统的方法及动态库, 实现了 全程在用户态下访问用户空间文件系统的方法, 提高了对用户态文件系统的访问效率。 (51)Int.Cl. 权利要求书 1 页 说明书 4 页 附图 1 页 (19)中华人民共和国国家知识产权局 (1。
3、2)发明专利申请 权利要求书1页 说明书4页 附图1页 (10)申请公布号 CN 103617039 A CN 103617039 A 1/1 页 2 1. 一种访问用户空间文件系统的方法, 其特征在于, 包括 : 通过动态库拦截应用程序用于访问文件系统的访问指令 ; 如果通过所述动态库根据所述访问指令的内容, 识别出访问的文件系统为用户空间文 件系统, 则调用所述用户空间文件系统的应用程序编程接口, 访问所述用户空间文件系统。 2. 根据权利要求 1 所述的方法, 其特征在于, 通过动态库拦截应用程序用于访问文件 系统的访问指令后, 所述方法还包括 : 如果所述动态库根据所述访问指令的内容,。
4、 识别出访问的文件系统为内核态文件系 统, 则通过所述动态库调用标准函数库, 通过访问虚拟文件系统来访问内核态文件系统。 3.根据权利要求1或2所述的方法, 其特征在于, 通过动态库拦截应用程序用于访问文 件系统的访问指令之前, 还包括 : 将所述动态库的路径存入内核系统的初始化程序配置文件中 ; 在内核系统初始化时, 通过执行所述配置文件, 按照所述动态库的路径加载所述动态 库。 4. 一种访问用户空间文件系统的装置, 其特征在于, 包括 : 指令拦截模块, 用于通过动态库拦截应用程序用于访问文件系统的访问指令 ; 接口调用模块, 用于当通过所述动态库根据所述访问指令的内容, 识别出应用程序。
5、访 问的文件系统为用户空间文件系统时, 调用所述用户空间文件系统的应用程序编程接口, 访问所述用户空间文件系统。 5. 根据权利要求 4 所述的装置, 其特征在于, 还包括 : 标准函数库调用模块, 用于通过动态库拦截应用程序用于访问文件系统的访问指令 后, 当所述动态库根据所述访问指令的内容, 识别出访问的文件系统为内核态文件系统时, 通过所述动态库调用标准函数库, 通过访问虚拟文件系统来访问内核态文件系统。 6. 根据权利要求 4 或 5 所述的装置, 其特征在于, 还包括 : 动态库加载模块, 用于通过动态库拦截应用程序用于访问文件系统的访问指令之前, 将所述动态库的路径存入内核系统的初。
6、始化程序配置文件中 ; 在内核系统初始化时, 通过 执行所述配置文件, 按照所述动态库的路径加载所述动态库。 权 利 要 求 书 CN 103617039 A 2 1/4 页 3 一种访问用户空间文件系统的方法及装置 技术领域 0001 本发明涉及应计算机数据处理技术领域, 尤其涉及一种访问用户空间文件系统的 方法及装置。 背景技术 0002 用户空间文件系统 (Filesystem in Userspace, 简称 FUSE) , 是操作系统中的概 念, 指完全在用户态实现的文件系统。目前内核系统, 例如 Linux 通过内核模块对此进行支 持, 一些文件系统如 ZFS, glusterfs。
7、 和 luster 都属于用户空间文件系统。 0003 Linux 对所有的文件系统采用统一的文件界面, 用户通过该文件界面来实现对不 同文件系统的操作。对于用户来说, 不需要清楚不同文件系统的具体操作过程, 而只是对 一个虚拟的文件操作界面来进行操作, 这个操作界面就是 Linux 的虚拟文件系统 (Virtual File Systems, 简称 VFS) 。 0004 现有技术如图 1 所示, 应用程序访问一个用户空间文件系统时, 需要首先访问 VFS, VFS 判断应用程序访问的文件系统类型为 FUSE, 再把指令传递给内核功能模块, 用户 空间文件系统读取数据, 并对该数据加工处理后。
8、把结果沿反方向传递直至应用程序。所以 应用程序应用该方法访问用户空间文件系统时, 必然会引入额外的内核态 / 用户态切换带 来的开销, 降低了访问效率。 发明内容 0005 本发明实施例提供了一种访问用户空间文件系统的方法及装置, 以提高对用户态 文件系统的访问效率。 0006 本发明实施例提供了一种访问用户空间文件系统的方法, 包括 : 0007 通过动态库拦截应用程序用于访问文件系统的访问指令 ; 0008 如果通过所述动态库根据所述访问指令的内容, 识别出访问的文件系统为用户空 间文件系统, 则调用所述用户空间文件系统的应用程序编程接口, 访问所述用户空间文件 系统。 0009 本发明实。
9、施例还提供了一种访问用户空间文件系统的装置, 包括 : 0010 指令拦截模块, 用于通过动态库拦截应用程序用于访问文件系统的访问指令 ; 0011 接口调用模块, 用于当通过所述动态库根据所述访问指令的内容, 识别出应用程 序访问的文件系统为用户空间文件系统时, 调用所述用户空间文件系统的应用程序编程接 口, 访问所述用户空间文件系统。 0012 应用本发明提供的一种访问用户空间文件系统的方法及装置, 通过使用动态库拦 截应用程序用于访问文件系统的访问指令、 调用用户空间文件系统的应用程序编程接口等 步骤实现了全程在用户态下访问用户空间文件系统的方法, 提高了对用户态文件系统的访 问效率。 。
10、说 明 书 CN 103617039 A 3 2/4 页 4 附图说明 0013 通过阅读参照以下附图所作的对非限制性实施例所作的详细描述, 本发明的其它 特征、 目的和优点将会变得更明显 : 0014 图 1 是背景技术中对用户空间文件系统的访问方法示意图 ; 0015 图 2 是本发明实施例提供的一种访问用户空间文件系统的方法流程图 ; 0016 图 3 是本发明实施例提供的一种访问用户空间文件系统的装置结构示意图。 具体实施方式 0017 下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是, 此处所描 述的具体实施例仅仅用于解释本发明, 而非对本发明的限定。 另外还需要说明的是。
11、, 为了便 于描述, 附图中仅示出了与本发明相关的部分而非全部内容。 0018 实施例一 0019 如图 2 所示, 本实施例提供一种访问用户空间文件系统的方法, 该方法由访问用 户空间文件系统的装置来实现, 该装置可以由软件或硬件来实现, 该方法具体包括 : 0020 步骤 21, 通过动态库拦截应用程序用于访问文件系统的访问指令 ; 0021 步骤 22, 如果通过所述动态库根据所述访问指令的内容, 识别出访问的文件系统 为用户空间文件系统, 则调用所述用户空间文件系统的应用程序编程接口, 访问所述用户 空间文件系统。 0022 本发明所述的动态库, 是指可以动态链接的库, 例如 Wind。
12、ows 系统中的动态链接 库 (dynamic link library, 简称 DLL) 文件、 UNIX 或 Linux 系统中的共享对象 (shared object, 简称 so) 文件。库文件是预先编译链接好的可执行文件, 存储在计算机的硬盘上。 大多数情况下, 同一时间多个应用程序可以使用一个库的同一份拷贝, 而操作系统不需要 加载这个库的多个实例。 0023 应用程序与动态库的连接属于一种动态链接, 在可执行文件装载时或运行时, 由 操作系统的装载程序加载动态库。应用程序会在硬盘上搜索需要的库, 然后将其加载到内 存中预先不确定的位置, 之后根据加载库时确定的库的地址更新可执行程。
13、序。可执行程序 根据更新后的库信息调用库中的函数或引用库中的数据, 这种类型的动态加载即装载时加 载, 被 Windows 和 Linux 等多数系统采用。 0024 利用这种加载动态库的方式, 本发明提供的方法是在应用程序中指定加载一个 动态库, 用于访问文件系统, 应用程序访问文件系统中的数据时, 会发出访问指令, 具体表 现为调用一些访问函数, 例如 open、 close、 write、 read 等函数, 来实现对文件系统中具体 数据的操作, 这些访问指令将不会被直接发送到 VFS 中, 而是用所述动态库将应用程序发 出的访问指令拦截, 并根据指令内容判断应用程序要访问的目标文件系,。
14、 在一个操作系统 中可能存在多种文件系统, 如 Linux 系统支持 ext、 ext2、 fat32、 ntfs 等多种文件系统, 并且有一些文件系统属于用户空间文件系统, 如果动态库判断出应用程序访问的文件系 统类型是用户空间文件系统, 那么动态库将调用该用户空间文件系统应用程序编程接口 (Application Programming Interface, 简称API) , 应用程序直接使用该API访问所述用户 空间文件系统, 这个访问的过程全程保持在用户态下进行, 避免了现有技术中内核态与用 户态的频繁切换工作, 节约了系统的开销, 提高了访问效率。 说 明 书 CN 10361703。
15、9 A 4 3/4 页 5 0025 示例性的, 通过动态库拦截应用程序用于访问文件系统的访问指令后, 所述方法 还包括 : 0026 如果所述动态库根据所述访问指令的内容, 识别出访问的文件系统为内核态文件 系统, 则通过所述动态库调用标准函数库, 通过访问虚拟文件系统来访问内核态文件系统。 0027 当动态库拦截了应用程序发出的访问指令, 根据指令内容判断出应用程序所访问 的文件系统是一种内核态文件系统, 则直接调用标准的库函数通过访问虚拟文件系统来访 问该文件系统, 因为访问此类内核态文件系统不需要进行内核态 / 用户态的切换, 直接使 用标准的函数库中的函数访问即可。 0028 示例性。
16、的, 通过动态库拦截应用程序用于访问文件系统的访问指令之前, 还包 括 : 0029 将所述动态库的路径存入内核系统的初始化程序配置文件中 ; 0030 在内核系统初始化时, 通过执行所述配置文件, 按照所述动态库的路径加载所述 动态库。 0031 本发明提供的方法还具备一个加载所述动态库的步骤, 以 Linux 系统为例, Linux 系统一般带有 lib 或 usr/lib 目录, 该目录用于存放各类库文件, lib 是库 (Library) 的简 称, 没有该目录则系统就无法正常运行。lib 目录中存储着程序运行时使用的库, 许多程序 可以重复使用相同的代码, 并且这些库可以存储在一个公。
17、共的位置上, 因此能减小运行程 序的大小, 这个目录包含程序在链接时使用的各种库 ; Linux 系统还提供一个 etc 目录, etc 目录用于存储系统的配置文件, 应用本发明提供的方法, 可以将所述动态库文件放入 lib 目录中, 例如一个动态库文件名称为 A.so, 放入 lib 目录后该动态库的路径为 /lib/A.so, 然后将此路径写入配置文件 /etc/ld.so.preload 中, 通过执行该配置文件, 则实现了为应 用程序提前加载了一个动态库 A.so。 0032 实施例二 0033 如图 3 所示, 本实施例提供一种访问用户空间文件系统的装置 31, 包括 : 0034 。
18、指令拦截模块 311, 用于通过动态库拦截应用程序用于访问文件系统的访问指 令 ; 0035 接口调用模块 312, 用于当通过所述动态库根据所述访问指令的内容, 识别出应用 程序访问的文件系统为用户空间文件系统时, 调用所述用户空间文件系统的应用程序编程 接口, 访问所述用户空间文件系统。 0036 示例性的, 所述装置还包括 : 0037 标准函数库调用模块, 用于通过动态库拦截应用程序用于访问文件系统的访问指 令后, 当所述动态库根据所述访问指令的内容, 识别出访问的文件系统为内核态文件系统 时, 通过所述动态库调用标准函数库, 通过访问虚拟文件系统来访问内核态文件系统。 0038 示例。
19、性的, 所述装置还包括 : 0039 动态库加载模块, 用于通过动态库拦截应用程序用于访问文件系统的访问指令之 前, 将所述动态库的路径存入内核系统的初始化程序配置文件中 ; 在内核系统初始化时, 通 过执行所述配置文件, 按照所述动态库的路径加载所述动态库。 0040 本发明实施例所提供的访问用户空间文件系统的装置, 可用于实现本发明任意实 施例所提供的访问用户空间文件系统的方法, 具备相应的功能模块, 实现相同的有益效果。 说 明 书 CN 103617039 A 5 4/4 页 6 0041 上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解, 本发 明不限于这里所述的特定实施例, 对本领域技术人员来说能够进行各种明显的变化、 重新 调整和替代而不会脱离本发明的保护范围。因此, 虽然通过以上实施例对本发明进行了较 为详细的说明, 但是本发明不仅仅限于以上实施例, 在不脱离本发明构思的情况下, 还可以 包括更多其他等效实施例, 而本发明的范围由所附的权利要求范围决定。 说 明 书 CN 103617039 A 6 1/1 页 7 图 1 图 2 图 3 说 明 书 附 图 CN 103617039 A 7 。