CN116680233A - 一种文件访问方法、***、电子设备及机器可读存储介质 - Google Patents

一种文件访问方法、***、电子设备及机器可读存储介质 Download PDF

Info

Publication number
CN116680233A
CN116680233A CN202310532937.2A CN202310532937A CN116680233A CN 116680233 A CN116680233 A CN 116680233A CN 202310532937 A CN202310532937 A CN 202310532937A CN 116680233 A CN116680233 A CN 116680233A
Authority
CN
China
Prior art keywords
target
file
file data
service program
shared memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202310532937.2A
Other languages
English (en)
Inventor
向凌峰
陆庆达
吴结生
王磊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba China Co Ltd
Original Assignee
Alibaba China Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Alibaba China Co Ltd filed Critical Alibaba China Co Ltd
Priority to CN202310532937.2A priority Critical patent/CN116680233A/zh
Publication of CN116680233A publication Critical patent/CN116680233A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/13File access structures, e.g. distributed indices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/172Caching, prefetching or hoarding of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本说明书一个或多个实施例提供一种文件访问方法、***、电子设备及机器可读存储介质。所述方法应用于运行在客户机上的安全容器所对应的文件***客户端;文件***客户端包括部署在宿主机用户空间的代理服务程序和部署在客户机内核空间的文件访问服务程序;所述方法包括:为目标安全容器加载代理服务程序与文件访问服务程序之间的共享内存空间;代理服务程序将其代理的文件***中的文件数据复制至共享内存空间;响应于目标安全容器针对目标文件数据的访问请求,目标安全容器对应的文件访问服务程序从共享内存空间中获取所述目标文件数据。

Description

一种文件访问方法、***、电子设备及机器可读存储介质
技术领域
本说明书一个或多个实施例涉及安全容器技术领域,尤其涉及一种文件访问方法、***、电子设备及机器可读存储介质。
背景技术
基于分布式文件***协议的云文件服务,可以使得文件数据通过网络被访问与共享,具有较高灵活性。
在安全容器需要访问文件中存储的文件数据时,通常需要先在安全容器所在的客户机上部署文件***客户端,并为文件***客户端预留私有数据缓存;进一步地,文件***客户端可以通过各种通信协议、文件***协议,从文件***服务端获取文件***中的文件,并将获取到的文件写入为文件***客户端预留的私有数据缓存中。其中,如果分别部署在多个客户机中的多个安全容器需要访问文件***中的同一文件,通常需要在各个安全容器所在的客户机上分别部署文件***客户端,并为各个文件***客户端分别预留私有数据缓存。
由此可见,在相关技术中,安全容器访问文件***中的文件时,存在内存开销较大、虚拟化开销较大的问题。
发明内容
本申请提供一种文件访问方法,所述方法应用于运行在客户机上的安全容器所对应的文件***客户端;所述文件***客户端包括部署在宿主机用户空间的代理服务程序和部署在客户机内核空间的文件访问服务程序;所述方法包括:
为目标安全容器加载代理服务程序与文件访问服务程序之间的共享内存空间;
所述代理服务程序将其代理的文件***中的文件数据复制至所述共享内存空间;
响应于所述目标安全容器针对目标文件数据的访问请求,所述目标安全容器对应的文件访问服务程序从所述共享内存空间中获取所述目标文件数据。
本申请还提供一种文件访问***,所述文件访问***包括运行在客户机上的安全容器所对应的文件***客户端;所述文件***客户端包括部署在宿主机用户空间的代理服务程序和部署在客户机内核空间的文件访问服务程序;所述文件***客户端用于实现上述方法。
本申请还提供一种电子设备,包括通信接口、处理器、存储器和总线,所述通信接口、所述处理器和所述存储器之间通过总线相互连接;
所述存储器中存储机器可读指令,所述处理器通过调用所述机器可读指令,执行上述方法。
本申请还提供一种机器可读存储介质,所述机器可读存储介质存储有机器可读指令,所述机器可读指令在被处理器调用和执行时,实现上述方法。
通过以上实施例,一方面,通过为代理服务程序和文件访问服务程序提供共享内存空间,并为安全容器加载所述共享内存空间,使得与安全容器对应的文件访问服务程序可以从共享内存空间中直接获取需要访问的文件数据,而无需为各个安全容器预留私有数据缓存,从而减少了内存开销,在虚拟化环境中通过较少的内存资源,实现较高的文件I/O性能。
另一方面,由于代理服务程序可以将文件***中的文件数据复制至共享内存空间,文件访问服务程序可以直接从共享内存空间中获取文件数据,因此文件访问服务程序无需经过复杂的通信协议与文件***服务端进行直接交互,从而减少了文件访问过程中的虚拟化开销。
再一方面,响应于目标安全容器针对目标文件数据的访问请求,与目标安全容器对应的文件访问服务程序可以从共享内存空间中获取目标文件数据;由于文件访问服务程序可以用内存读写指令来访问文件数据,而不是用文件读写之类的***函数,从而提高了安全容器访问文件数据的效率。
附图说明
为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是一示例性的实施例示出的一种文件访问***的架构示意图;
图2是一示例性的实施例示出的另一种文件访问***的架构示意图;
图3是一示例性的实施例示出的一种文件访问方法的流程图;
图4是一示例性的实施例示出的一种共享内存空间的示意图;
图5是一示例性的实施例示出的一种基于布局索引寻址对象的示意图;
图6是一示例性的实施例示出的一种写时复制机制的示意图;
图7是一示例性的实施例示出的一种内存资源分配的示意图;
图8是一示例性的实施例示出的一种文件访问装置所在电子设备的结构示意图;
图9是一示例性的实施例示出的一种文件访问装置的框图。
具体实施方式
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
随着云原生时代的到来,越来越多用户开始使用容器(container);容器是一种操作***的内核虚拟化技术,可以用于隔离进程。
其中,传统容器,如runc容器等,是基于操作***虚拟化技术的,可以使用宿主机(host)的操作***,与宿主机上运行的其他进程共享宿主机内核(host kernel)。通过***资源管控组件(如cgroups)和Namespace(命名空间)机制,可以为各个进程分配***资源,以及对各个进程进行隔离。
而安全容器(secure container),是基于硬件虚拟化技术的,可以使用宿主机所搭载的轻量虚拟机(Lightweight Virtual Machine)的操作***;例如,轻量虚拟机具体可以为微虚机(microVM)。由于每个虚拟机可以具有独立的客户机内核(guest kernel),运行在各个虚拟机中的安全容器可以使用该虚拟机的内核,无需与宿主机上运行的其他进程共享宿主机内核,因此相较于传统容器,安全容器的隔离性更好,更加安全。
基于分布式文件***协议的云文件服务,可以使得文件数据通过网络被访问与共享,具有较高灵活性。由于通过云文件服务可以将存储与计算分离,因此云文件服务也可以被称作存储服务,本说明书对此不作特别限定。例如,云文件服务具体可以包括但不限于基于NFS(Network File System,网络文件***)、HDFS(Hadoop Distributed File System,Hadoop分布式文件***)等的文件服务。
在安全容器需要访问文件中存储的文件数据时,通常需要先在安全容器所在的客户机上部署文件***客户端,并为文件***客户端预留私有数据缓存;进一步地,文件***客户端可以通过各种通信协议、文件***协议,从文件***服务端获取文件***中的文件,并将获取到的文件写入为文件***客户端预留的私有数据缓存中。
其中,如果分别部署在多个客户机中的多个安全容器需要访问文件***中的同一文件,通常需要在各个安全容器所在的客户机上分别部署文件***客户端,并为各个文件***客户端分别预留私有数据缓存;进一步地,各个文件***客户端可以分别从文件***服务端获取文件***中的文件,并将获取到的文件写入为各个文件***客户端预留的私有数据缓存中。
例如,请参见图1,图1是一示例性的实施例示出的一种文件访问***的架构示意图。如图1所示,安全容器Guest Instance 0和安全容器Guest Instance 1,可以分别运行在宿主机所搭载的不同客户机上,并可以使用其所在的客户机内核。为了访问文件***中的文件,可以为安全容器Guest Instance 0和安全容器Guest Instance 1分别部署文件***客户端(Guest FS client),并可以为各个文件***客户端分别预留私有数据缓存(datacache)。进一步地,各个文件***客户端可以通过网络,从分布式的文件***服务端(distributed file system server)获取文件***中的文件,并将获取到的文件写入为私有数据缓存(data cache)中。进一步地,文件***客户端(Guest FS client)可以将存储在私有数据缓存(data cache)中的文件数据提供给运行在安全容器中的应用程序(Application)。另外,安全容器中还可以包括虚拟网卡(virtualized NIC),用于与分布式的文件***服务端(distributed file system server)进行通信,在此不再赘述。
由此可见,在以上示出的相关技术的实施例中,一方面,由于需要为各个文件***客户端分别预留私有数据缓存,导致内存开销较大;并且,如果多个安全容器访问文件***中的同一文件,需要将该文件的多个文件副本分别写入为各个文件***客户端预留的私有数据缓存中,也造成了内存资源的浪费。
另一方面,虽然安全容器相较于传统容器具备更好的隔离性和安全性,但是安全容器访问文件***中的文件时,也需要经过更加复杂的通信协议,导致虚拟化开销较大。
有鉴于此,本说明书旨在提出一种针对安全容器设计的新的文件***客户端框架,可以在虚拟化环境中通过较少的内存资源,实现较高的文件数据I/O性能。
本说明书中提出的新的文件***客户端,可以包括部署在宿主机用户空间的代理服务程序和部署在客户机内核空间的文件访问服务程序,并且,搭载有客户机的宿主机可以为所述代理服务程序和所述文件访问服务程序提供共享内存空间。其中,所述共享内存空间可以被视作虚拟存储设备。所述代理服务程序可以作为文件***的代理,将文件***中的一个或多个文件的文件数据复制至所述共享内存空间。
在文件***客户端启动时或者各个安全容器启动时,可以为可能需要访问文件***中的文件的各个安全容器分别加载所述共享内存空间。
在目标安全容器需要访问文件***中的文件时,响应于所述目标安全容器针对目标文件数据的访问请求,所述目标安全容器对应的文件访问服务程序可以从所述共享内存空间中获取所述目标文件数据。
其中,所述目标安全容器可以为宿主机所搭载的任一客户机上运行的任一安全容器。所述目标文件数据是指所述安全容器需要访问的文件***中的文件所存储的至少部分文件数据。所述文件***可以为分布式的远程文件***,也可以为宿主机的本地文件***,本说明书中对此不作特殊限定。
例如,请参见图2,图2是一示例性的实施例示出的另一种文件访问***的架构示意图。如图2所示,安全容器Guest Instance 2和安全容器Guest Instance 3,可以分别运行在宿主机所搭载的不同客户机上,并可以使用其所在的客户机内核。与安全容器对应的文件***客户端,可以包括代理服务程序(如图2所示的FS client module in host userspace)和部署在客户机内核空间的文件访问服务程序(如图2所示的FS client module inguest kernel);其中,可以为各个安全容器分别部署文件访问服务程序;与各个安全容器分别对应的各个文件访问服务程序可以与同一代理服务程序进行通信。
需要说明的是,如图2所示,为安全容器部署文件***客户端时,无需为各个安全容器预留私有数据缓存,只需要为代理服务程序和文件访问服务程序提供共享内存空间(shared memory),并且为各个安全容器分别加载代理服务程序和文件访问服务程序之间的共享内存空间,就可以使得与各个安全容器分别对应的各个文件访问服务程序通过共享内存空间来访问文件数据。
如图2所示,代理服务程序可以作为文件***的代理,通过网络访问文件***服务端(distributed file system server),从文件***服务端获取文件***中的文件数据,并可以将获取到的文件数据复制至共享内存空间;也就是说,对于宿主机而言,所述共享内存空间可以被视作一个内存映射文件,该内存映射文件可以被运行在客户机上的进程所共享。进一步地,假设目标安全容器为安全容器Guest Instance 2,响应于安全容器GuestInstance 2针对目标文件数据的访问请求,安全容器Guest Instance 2对应的文件访问服务程序(也即图2中部署在Guest Instance 2中的FS client module in guest kernel)可以从共享内存空间中获取所述目标文件数据。
由此可见,在本说明书中的技术方案中,一方面,通过为代理服务程序和文件访问服务程序提供共享内存空间,并为安全容器加载所述共享内存空间,使得与安全容器对应的文件访问服务程序可以从共享内存空间中直接获取需要访问的文件数据,而无需为各个安全容器预留私有数据缓存,从而减少了内存开销,在虚拟化环境中通过较少的内存资源,实现较高的文件I/O性能。
另一方面,由于代理服务程序可以将文件***中的文件数据复制至共享内存空间,文件访问服务程序可以直接从共享内存空间中获取文件数据,因此文件访问服务程序无需经过复杂的通信协议与文件***服务端进行直接交互,从而减少了文件访问过程中的虚拟化开销。
再一方面,响应于目标安全容器针对目标文件数据的访问请求,与目标安全容器对应的文件访问服务程序可以从共享内存空间中获取目标文件数据;由于文件访问服务程序可以用内存读写指令来访问文件数据,而不是用文件读写之类的***函数,从而提高了安全容器访问文件数据的效率。
下面通过具体实施例,并结合具体的应用场景对本申请进行描述。
请参见图3,图3是一示例性的实施例示出的一种文件访问方法的流程图。所述文件访问方法可以应用于如图2所示的文件***客户端;所述文件***客户端可以包括部署在宿主机用户空间的代理服务程序和部署在客户机内核空间的文件访问服务程序。
其中,所述宿主机具体可以为裸金属服务器,也可以为其他物理设备。所述客户机具体可以为所述宿主机所搭载的轻量虚拟机。所述代理服务程序具体可以为运行在所述宿主机上的线程或进程。所述文件访问服务程序具体可以为运行在所述客户机上的线程或进程。
如图3所示,所述文件访问方法可以执行以下步骤:
步骤302:为目标安全容器加载代理服务程序与文件访问服务程序之间的共享内存空间。
例如,请结合图2,安全容器Guest Instance 2和安全容器Guest Instance 3,可以分别运行在宿主机所搭载的不同客户机上;所述宿主机可以提供代理服务程序与文件访问服务程序之间的共享内存空间(shared memory)。响应于目标安全容器Guest Instance2启动,或者响应于文件***客户端启动,可以为目标安全容器Guest Instance 2加载共享内存空间(shared memory)。
其中,在所述步骤302中,所述共享内存空间,也可以称作共享内存、共享内存窗口等,本说明书中不做特别限定。所述共享内存空间是一个可以被宿主机和宿主机所搭载的多个虚拟机共享的可寻址空间。
在示出的一种实施方式中,响应于所述文件***客户端启动,可以为所述代理服务程序分配与所述共享内存空间对应的虚拟地址空间,以及,可以为所述代理服务程序申请与所述共享内存空间对应的共享物理地址空间,并可以将申请到的共享物理地址空间映射至为所述代理服务程序分配的虚拟地址空间,以为所述代理服务程序加载所述共享内存空间。
在这种情况下,响应于所述目标安全容器启动或所述文件***客户端启动,所述为目标安全容器加载代理服务程序与文件访问服务程序之间的共享内存空间,具体可以包括:为所述目标安全容器对应的文件访问程序分配与所述共享内存空间对应的私有虚拟地址空间;将为所述代理服务程序申请到的与所述共享内存空间对应的共享物理地址空间,映射至为所述目标安全容器对应的文件访问程序分配的所述私有虚拟地址空间,以为所述目标安全容器完成所述共享内存空间的加载。
步骤304:代理服务程序将其代理的文件***中的文件数据复制至所述共享内存空间。
例如,请结合图2,代理服务程序(也即图2中的FS client module in host userspace)可以作为文件***的代理,通过RPC(Remote Procedure Call,远程调用)访问文件***服务端(distributed file system server);代理服务程序可以按照预设周期定时地、或者基于文件访问的实际需求,获取文件***中的文件数据,并将获取到的文件数据复制至共享内存空间(shared memory)。
又例如,代理服务程序可以先通过RPC访问文件***服务端,将从文件***服务端获取到的文件存储至本地文件***(local file system),再将本地文件***中存储的文件中的文件数据复制至共享内存空间(shared memory)。
其中,在所述步骤304中,所述代理服务程序将其代理的文件***中的文件数据复制至所述共享内存空间,具体可以包括:代理服务程序将其代理的文件***中的文件数据写入与所述共享内存空间对应的共享物理地址空间,并将写入至所述共享物理地址空间的文件数据映射至为所述代理服务程序分配的虚拟地址空间,以及,将写入至所述共享物理地址空间的文件数据映射至为各个安全容器对应的文件访问服务程序分配的私有虚拟地址空间。
另外,由于所述共享内存空间的内存容量是有限的,如图2所示,宿主机中还可以为文件***客户端部署缓存层(cache layer),缓存层可以包括数据缓存(data cache),数据缓存可以用于存储由于空间不足而从共享内存空间中被替换(replace)的文件数据;缓存层还可以用于管理文件租约(lease)、刷新与废止本地缓存的文件数据等。缓冲层具体可以堆叠在宿主机的本地文件***或者远程文件***的客户端上,本说明书对此不做特殊限制。
另外,如图2所示,宿主机中还可以为文件***客户端部署协议层(protocollayer),使得文件***客户端符合NFS、HDFS或其他文件***协议。宿主机中还可以为文件***客户端部署用户空间池化的连接层(Connection control),以实现高性能的弹性网络。
在示出的一种实施方式中,所述共享内存空间除了用于缓存文件数据,还可以用于缓存与被写入的文件数据对应的索引数据。
在实现时,所述代理服务程序将其代理的文件***中的文件数据复制至所述共享内存空间,具体可以包括:所述代理服务程序将其代理的文件***中的文件数据复制至所述共享内存空间中的第一内存地址空间;其中,所述第一内存地址空间用于存储被所述文件访问服务程序和所述代理服务程序共享的文件数据;所述代理服务程序将与被复制至所述第一内存地址空间的文件数据对应的布局索引存储至所述共享内存空间;其中,所述布局索引,用于指示与其对应的文件数据的索引节点,以及用于指示与其对应的文件数据的文件偏移量;所述文件偏移量为对应的文件数据在其所在的文件中的偏移量。
例如,请参见图4,图4是一示例性的实施例示出的一种共享内存空间的示意图。如图4所示,代理服务程序可以将文件***中的文件数据复制至共享内存空间(sharedmemory)中的共享数据区域(shared data region);代理服务程序还可以将与被复制至共享数据区域(shared data region)的文件数据对应的布局索引(layout index)存储至共享内存空间(shared memory)中的共享索引区域(shared index region)。
其中,被存储至共享数据区域的文件数据可以通过操作***的页缓存机制进行管理,也即,可以将文件数据写入共享数据区域中的内存页(page)。
例如,如图4所示,代理服务程序可以将文件数据复制至共享数据区域(shareddata region)中page array中的内存页PG0,并且可以将与被复制至内存页PG0中的文件数据对应的布局索引PG_info0,存储至共享索引区域(shared index region)中的PG_infoarray,另外,还可以对共享索引区域(shared index region)中version array中的版本标识ver0的取值进行更新。需要说明的是,在共享索引区域(shared index region)中PG_info array的数组长度,与在共享数据区域(shared data region)中的内存页数量是相同的,与在共享索引区域(shared index region)中version array中的数组长度也是相同的,并且槽位(slot)是一一对应的。其中,PG_info array中的每个槽位可以包含与其对应的page的inode标识、以及与其对应的page中的文件数据的文件偏移量。也就是说,PG_infoarray可以作为一个固定大小的哈希表(hashtable)使用。
在一些可能的实施例中,由于对共享内存页进行管理时,需要用到操作***内核提供的一些内存管理机制,因此通常对每个4KB的page,需要保留64B的struct page,用于管理对应的page。而在本说明书的技术方案中,由于与共享数据区域中的文件数据对应的布局索引不参与操作***对内存页的管理,因此无需为共享数据区域中的各个内存页预留元数据(也即struct page)所占用的空间,从而进一步节约内存资源。
步骤306:响应于所述目标安全容器针对目标文件数据的访问请求,所述目标安全容器对应的文件访问服务程序从所述共享内存空间中获取所述目标文件数据。
例如,在为目标安全容器Guest Instance 2加载共享内存空间(shared memory),并且代理服务程序(FS client module in host user space)将文件***中的目标文件数据复制至共享内存空间之后,响应于目标安全容器Guest Instance 2针对所述目标文件数据的访问请求,目标安全容器Guest Instance 2对应的文件访问服务程序(FS clientmodule in guest kernel)可以从共享内存空间中获取所述目标文件数据,进而可以将获取到的目标文件数据提供给运行在目标安全容器Guest Instance 2中的应用程序(Application)。
需要说明的是,在以上示出的实施例中,运行在目标安全容器Guest Instance 2中的应用程序(Application)可以直接对文件访问服务程序(FS client module in guestkernel)从共享内存空间中获取到的目标文件数据进行复制,文件访问服务程序(FSclient module in guest kernel)无需对从共享内存空间中获取到的目标文件数据进行缓存。
在示出的一种实施方式中,由于所述共享内存空间的内存容量是有限的,而文件***中可以存储海量的文件数据,因此所述代理服务程序只能将其中的部分文件数据复制至所述共享内存空间,目标安全容器实际需要访问的文件数据不一定已经被复制至所述共享内存空间。
在这种情况下,所述响应于所述目标安全容器针对目标文件数据的访问请求,所述目标安全容器对应的文件访问服务程序从所述共享内存空间中获取所述目标文件数据,具体可以包括:响应于所述目标安全容器针对目标文件数据的访问请求,所述目标安全容器对应的文件访问服务程序在所述共享内存空间中查找所述目标文件数据;如果所述目标安全容器对应的文件访问服务程序在所述共享内存空间中查找到所述目标文件数据,则所述目标安全容器对应的文件访问服务程序从所述共享内存空间中读取所述目标文件数据。
其中,在所述步骤306中,所述访问请求可以用于针对所述目标文件数据进行读操作。
例如,请结合图2,响应于目标安全容器Guest Instance 2针对目标文件数据的访问请求,目标安全容器Guest Instance 2对应的文件访问服务程序(也即图2中部署在Guest Instance 2中的FS client module in guest kernel)可以在共享内存空间中查找目标文件数据;如果文件访问服务程序在共享内存空间中查找到目标文件数据,则文件访问服务程序可以从所述共享内存空间中读取所述目标文件数据
在这种情况下,所述响应于所述目标安全容器针对目标文件数据的访问请求,所述目标安全容器对应的文件访问服务程序从所述共享内存空间中获取所述目标文件数据,具体还可以包括:如果所述目标安全容器对应的文件访问服务程序在所述共享内存空间中未查找到所述目标文件数据,则所述目标安全容器对应的文件访问服务程序向所述代理服务程序发送针对所述目标文件数据的访问请求;响应于所述访问请求,所述代理服务程序从所述文件***中获取所述目标文件数据,并将获取到的目标文件数据复制至所述共享内存空间;所述目标安全容器对应的文件访问服务程序从所述共享内存空间中读取所述目标文件数据。
例如,请结合图2,假设目标文件数据具体是inode标识为10、文件偏移量为8192的page;响应于目标安全容器Guest Instance 2针对目标文件数据的访问请求,目标安全容器Guest Instance 2对应的文件访问服务程序(也即图2中部署在Guest Instance 2中的FS client module in guest kernel)可以在共享内存空间中查找目标文件数据;如果文件访问服务程序在共享内存空间中未查找到目标文件数据,则目标安全容器GuestInstance 2对应的文件访问服务程序可以向代理服务程序(也即图2中的FS clientmodule in host user space)发送针对目标文件数据的访问请求RPC-0;响应于访问请求RPC-0,代理服务程序可以向文件***服务端(distributed file system server)发送针对目标文件数据的访问请求RPC-1,从文件***服务端获取所述目标文件数据所在的目标文件,并根据文件偏移量将获取到的目标文件中的目标文件数据复制至共享内存空间所包括的共享数据区域,所述目标文件数据在共享内存空间中的地址偏移量可以为16384;进一步地,目标安全容器Guest Instance 2对应的文件访问服务程序在接收到访问请求RPC-0的响应消息之后,可以在共享内存空间中重新查找所述目标文件数据,并可以从偏移量为16384的位置读取到所述目标文件数据。
需要说明的是,在以上示出的实施例中,由于所述共享内存空间中的文件数据可以被宿主机和多个客户机中运行的安全容器共享,并且各个安全容器可以分别管理为其分配的私有虚拟地址空间,因此,确定所述目标文件数据在所述共享内存空间中的地址偏移量之后,所述目标安全容器对应的文件访问服务程序可以基于所述目标安全容器的基址和所述地址偏移量,计算出所述目标文件数据映射至为所述安全容器分配的私有虚拟地址空间中的虚拟地址。
例如,请参见图5,图5是一示例性的实施例示出的一种基于布局索引寻址对象的示意图。如图5所示,安全容器Guest Instance 2、安全容器Guest Instance 3、宿主机HOST的基址分别为0xffff2000、0xffff6000、0x7fff0000。响应于目标安全容器Guest Instance2针对目标文件数据的访问请求,目标安全容器Guest Instance 2对应的文件访问服务程序在共享内存空间中查找到的目标文件数据的地址偏移量为offset(如16384),则目标安全容器Guest Instance 2对应的文件访问服务程序可以确定目标文件数据映射在目标安全容器Guest Instance 2的私有虚拟地址空间中的虚拟地址为(0xffff2000+offset)。
在示出的一种实施方式中,所述访问请求可以携带有所述目标文件数据对应的目标布局索引。在这种情况下,所述响应于所述目标安全容器针对目标文件数据的访问请求,所述目标安全容器对应的文件访问服务程序从所述共享内存空间中获取所述目标文件数据,具体可以包括:响应于所述目标安全容器针对目标文件数据的访问请求,所述目标安全容器对应的文件访问服务程序计算出所述目标布局索引的哈希值,对所述哈希值进行取模,并根据取模的值确定所述目标文件数据在所述第一内存地址空间中的目标内存地址;确定在所述共享内存空间中存储的与所述目标内存地址对应的布局索引与所述目标布局索引是否一致;如果与所述目标内存地址对应的布局索引与所述目标布局索引一致,则所述目标安全容器对应的文件访问服务程序根据所述目标内存地址从所述第一内存地址空间中读取出所述目标文件数据。
例如,假设目标文件数据具体是inode标识为10、文件偏移量为8192的目标page中的文件数据;响应于目标安全容器Guest Instance 2针对目标文件数据的访问请求,目标安全容器Guest Instance 2对应的文件访问服务程序可以计算出目标布局索引的哈希值,对计算出的哈希值进行取模(mod),并根据取模的值确定目标page为page array中的内存页PG100,以及可以确定与内存页PG100对应的布局索引为PG_info array中的PG_info100;进一步地,如果确定布局索引PG_info100中包含的inode标识为10、文件偏移量为8192,与所述目标布局索引一致,则目标安全容器Guest Instance 2对应的文件访问服务程序可以从共享数据区域中读取出内存页PG100中的目标文件数据。
在示出的一种实施方式中,为了保证在所述共享内存空间中缓存的文件数据的安全性,避免在共享内存空间中缓存的文件数据被恶意容器实例篡改,可以仅允许宿主机对共享数据区域中的文件数据进行修改;而安全容器可以基于写日志机制对文件数据的副本进行修改,并由宿主机将各个安全容器对文件数据副本的修改内容合并至共享数据区域的文件数据。通过这种实施方式,基于写日志机制本身具备的特征,也可以减少对文件数据的修改操作带来的内存开销。
在这种情况下,如图2所示,共享内存空间还可以包括为安全容器分配的私有的写日志区域(write log region)。在所述步骤306中,如果所述目标安全容器发起的访问请求用于针对所述目标文件数据进行写操作,所述方法还可以包括:所述目标安全容器对应的文件访问服务程序将查找到的目标文件数据复制至所述共享内存空间中的第二内存地址空间;其中,所述第二内存地址空间是在所述共享内存空间中为所述目标安全容器分配的用于对所述目标文件数据进行写日志操作的内存地址空间;所述目标安全容器对应的文件访问服务程序对被复制至所述第二内存地址空间的目标文件数据进行写日志操作,得到被所述目标安全容器修改后的目标文件数据;所述代理服务程序根据所述第二内存地址空间中存储的被所述目标安全容器修改后的目标文件数据,对所述第一内存地址空间中存储的目标文件数据进行更新。
例如,请参见图6,图6是一示例性的实施例示出的一种写日志机制的示意图。如图6所示,共享内存空间的共享数据区域中缓存的文件数据,可以分别被映射至安全容器Guest Instance 2的私有虚拟地址空间与安全容器Guest Instance 3的私有虚拟地址空间;如果目标安全容器Guest Instance 2请求对共享数据区域中缓存的目标文件数据进行写操作,则可以先在共享内存空间中为目标安全容器Guest Instance 2分配私有的写日志区域,并将共享数据区域中缓存的目标文件数据复制至写日志区域,以使目标安全容器Guest Instance 2可以对自身私有的写日志区域中的目标文件数据进行写操作,得到被目标安全容器Guest Instance 2修改后的目标文件数据;进一步地,可以使用环形队列(ringqueue)来存储写日志区域中被目标安全容器Guest Instance 2修改后的文件数据,而代理服务程序可以检查环形队列的状态,并可以将根据被目标安全容器Guest Instance 2修改后的目标文件数据,对共享数据区域中存储的目标文件数据进行更新,也即,代理服务程序可以将目标安全容器针对目标文件数据的修改内容合并至共享数据区域。其中,关于写日志机制的具体实现方式,请参见相关技术,在此不做赘述。
具体地,对共享数据区域中的文件数据进行修改,可以包括更新页面内容和替换页面这两种情况。
在一些可能的实施例中,所述共享内存空间中除了可以存储文件数据和索引数据,还可以存储文件数据对应的使用标识和版本标识。其中,所述使用标识可以用于指示对应的文件数据是否正在被进行写操作;所述版本标识可以用于指示对应的文件数据被各个安全容器修改的次数。
例如,如图4所示,共享内存空间还可以包括使用情况跟踪区域(usage trackregion),使用情况跟踪区域可以用于记录安全容器对共享数据区域中的各个内存页中缓存的文件数据的访问情况。如果某个安全容器对内存页PG0中缓存的文件数据进行访问,则可以将与内存页PG0对应的使用标识use0的取值由0更新为1。共享内存空间的共享索引区域中还可以包括版本标识数组(version array),所述版本标识数组可以用于记录与共享数据区域中的各个内存页一一对应的版本标识。
在这种情况下,所述方法还可以包括:响应于所述目标文件数据被进行写日志操作,将所述目标文件数据对应的使用标识由第一取值更新为第二取值;其中,所述使用标记为第一取值,用于指示对应的文件数据没有正在被进行写日志操作;所述使用标记为第二取值,用于指示对应的文件数据正在被进行写日志操作;响应于所述代理服务程序对所述第一内存地址空间中存储的目标文件数据更新完成,将所述目标文件数据对应的使用标识由第二取值更新为第一取值,以及,对所述目标文件数据对应的版本标识进行更新。
例如,响应于目标安全容器Guest Instance 2对应的文件访问服务程序正在对内存页PG0中缓存的文件数据进行写日志操作,可以将与内存页PG0对应的使用标识use0的取值由0更新为1,用于指示对应的目标文件数据正在被进行写操作;响应于代理服务程序对共享数据区域中的内存页PG0中缓存的数据更新完成,可以将使用标识use0的取值由1更新为0,用于指示对应的目标文件数据已更新完成,没有正在被进行写操作,并且,可以将与内存页PG0对应的版本标识ver0的取值加1。
其中,在一个可能的例子中,版本标识可以为一个4字节的字段,可以将该字段中的最高一位作为标记位PENDING,并将标记位PENDING作为使用标识,从而进一步地节约内存资源。
在另一些可能的实施例中,如果所述访问请求用于针对所述目标文件数据进行读操作,在针对目标文件数据进行读操作前后,可以分别获取目标文件数据对应的版本标识;如果一致,说明读操作期间所述目标文件数据未被修改,获取到的是所述目标文件数据的最新版本;如果不一致,说明读操作期间所述目标文件数据已被修改,需要重新针对所述目标文件数据进行读操作,以获取所述目标文件数据的最新版本。
在这种情况下,所述方法还可以包括:响应于所述目标安全容器对应的文件访问服务程序在所述共享内存空间中查找到所述目标文件数据,从所述共享内存空间中获取所述目标文件数据对应的版本标识;响应于所述目标安全容器对应的文件访问服务程序从所述共享内存空间中读取所述目标文件数据完成,从所述共享内存空间中再次获取所述目标文件数据对应的版本标识,并确定再次获取的版本标识与之前获取的版本标识是否一致;如果不一致,则所述目标安全容器对应的文件访问服务程序从所述共享内存空间中重新读取所述目标文件数据。
例如,响应于目标安全容器Guest Instance 2对应的文件访问服务程序在共享内存空间中查找到目标文件数据,可以从共享内存空间中获取目标文件数据对应的版本标识为“n”;响应于目标安全容器Guest Instance 2对应的文件访问服务程序从共享内存空间中读取所述目标文件数据完成,可以从共享内存空间中再次获取目标文件数据对应的版本标识为“n”;由于再次获取的版本标识与之前获取的版本标识一致,说明目标安全容器Guest Instance 2对应的文件访问服务程序从共享内存空间中获取到的是所述目标文件数据的最新版本。
又例如,响应于目标安全容器Guest Instance 2对应的文件访问服务程序在共享内存空间中查找到目标文件数据,可以从共享内存空间中获取目标文件数据对应的版本标识为“n”;在读操作期间,安全容器Guest Instance3针对版本标识为“n”的目标文件数据进行了写操作,导致目标文件数据对应的版本标识被更新为“n+1”;响应于目标安全容器Guest Instance 2对应的文件访问服务程序从所述共享内存空间中读取所述目标文件数据完成,可以从共享内存空间中再次获取目标文件数据对应的版本标识为“n+1”;由于再次获取的版本标识与之前获取的版本标识不一致,说明目标安全容器Guest Instance 2对应的文件访问服务程序从共享内存空间中获取到的并不是所述目标文件数据的最新版本,因此目标安全容器Guest Instance2对应的文件访问服务程序需要从所述共享内存空间中重新读取目标文件数据,以获得目标文件数据的最新版本。
另外,在一个可能的例子中,为了避免需要重新从共享内存空间中获取目标文件数据,文件访问服务程序可以先基于目标文件数据对应的使用标识,判断所述目标文件数据是否正在被进行写操作,如果是,则暂时先不针对目标文件数据进行读操作。
例如,假设安全容器Guest Instance3正在针对目标文件数据进行写操作,将所述目标文件数据对应的标记位PENDING的取值由0更新为1;响应于目标安全容器GuestInstance 2对应的文件访问服务程序在共享内存空间中查找到目标文件数据,可以从共享内存空间中获取目标文件数据对应的标记位PENDING的取值为1,则目标安全容器GuestInstance 2对应的文件访问服务程序可以暂时先不针对目标文件数据进行读操作,直至目标文件数据对应的标记位PENDING的取值由1更新为0。
需要说明的是,在以上示出的实施例中,为了避免故障停止条件的复杂推理,所述文件***客户端可以被设计为无锁(lock-free)模型,并可以基于版本标识和栅栏指令(fence instruction)实现原子性的数据读取。由于CPU在执行多个机器指令时,可能会自动调整各个机器指令的执行顺序,例如,在目标安全容器针对目标文件数据进行写操作的过程中,代理服务程序对所述第一内存地址空间中存储的目标文件数据进行更新之前,先对所述目标文件数据对应的版本标识进行更新,导致其他安全容器对应的文件访问程序可能会误认为所述目标文件数据已更新完成;因此可以基于所述栅栏指令,保证“将目标文件数据对应的使用标识由第一取值更新为第二取值”→“对共享内存空间中的目标文件数据进行写操作”→“将目标文件数据对应的使用标识由第二取值更新为第一取值,并对目标文件数据对应的版本标识进行更新”的执行顺序。
在示出的一种实施方式中,所述文件***客户端可以支持访问多个文件***;所述宿主机用户空间可以部署有分别为所述多个文件***进行代理的多个代理服务程序;所述共享内存空间可以包括为所述多个代理服务程序分别分配的多个共享内存子空间。
在这种情况下,文件***客户端需要确定为各个文件***分配的共享内存子空间的内存容量,所述方法还可以包括:根据所述目标安全容器针对所述多个文件***中的各个文件***进行访问的访问次数,确定为各个文件***分配的共享内存子空间的内存容量。
例如,请参见图7,图7是一示例性的实施例示出的一种内存资源分配的示意图。如图7所示,各个文件***客户端的守护进程(daemon)可以确定各个文件***对应的缓存命中率(cache hit ratio)、以及当前为各个文件***分配的共享内存子空间的内存容量(cache size);进一步地,运行在宿主机上的协调器(Coordinator)可以根据目标安全容器针对各个文件***进行访问的访问次数,确定为各个文件***分配的共享内存子空间的内存容量(Expected cache size)。
通过以上技术方案可知,一方面,通过为代理服务程序和文件访问服务程序提供共享内存空间,并为安全容器加载所述共享内存空间,使得与安全容器对应的文件访问服务程序可以从共享内存空间中直接获取需要访问的文件数据,而无需为各个安全容器预留私有数据缓存,从而减少了内存开销,在虚拟化环境中通过较少的内存资源,实现较高的文件I/O性能。
另一方面,由于代理服务程序可以将文件***中的文件数据复制至共享内存空间,文件访问服务程序可以直接从共享内存空间中获取文件数据,因此文件访问服务程序无需经过复杂的通信协议与文件***服务端进行直接交互,从而减少了文件访问过程中的虚拟化开销。
再一方面,响应于目标安全容器针对目标文件数据的访问请求,与目标安全容器对应的文件访问服务程序可以从共享内存空间中获取目标文件数据;由于文件访问服务程序可以用内存读写指令来访问文件数据,而不是用文件读写之类的***函数,从而提高了安全容器访问文件数据的效率。
与上述文件访问方法的实施例对应的,本说明书还提供了一种文件访问***的实施例,以及一种文件访问装置的实施例。
在本说明书中,所述文件访问***可以执行所述步骤302-步骤306,以实现本说明书的技术方案。
请参见图8,图8是一示例性的实施例示出的一种文件访问装置所在电子设备的硬件结构图。在硬件层面,该设备包括处理器802、内部总线804、网络接口806、内存808以及非易失性存储器810,当然还可能包括其他所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器802从非易失性存储器810中读取对应的计算机程序到内存808中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参见图9,图9是一示例性的实施例示出的一种文件访问装置的框图。该文件访问装置可以应用于如图8所示的电子设备中,以实现本说明书的技术方案。其中,所述文件访问装置可以应用于运行在客户机上的安全容器所对应的文件***客户端;所述文件***客户端包括部署在宿主机用户空间的代理服务程序和部署在客户机内核空间的文件访问服务程序;所述文件访问装置可以包括:
加载单元902,用于为目标安全容器加载代理服务程序与文件访问服务程序之间的共享内存空间;
复制单元904,用于所述代理服务程序将其代理的文件***中的文件数据复制至所述共享内存空间;
第一获取单元906,用于响应于所述目标安全容器针对目标文件数据的访问请求,所述目标安全容器对应的文件访问服务程序从所述共享内存空间中获取所述目标文件数据。
在本实施例中,所述加载单元902,具体用于:
为所述目标安全容器对应的文件访问程序分配与所述共享内存空间对应的私有虚拟地址空间;
将为所述代理服务程序申请到的与所述共享内存空间对应的共享物理地址空间,映射至为所述目标安全容器对应的文件访问程序分配的所述私有虚拟地址空间,以为所述目标安全容器完成所述共享内存空间的加载。
在本实施例中,所述第一获取单元906,具体用于:
响应于所述目标安全容器针对目标文件数据的访问请求,所述目标安全容器对应的文件访问服务程序在所述共享内存空间中查找所述目标文件数据;
如果所述目标安全容器对应的文件访问服务程序在所述共享内存空间中查找到所述目标文件数据,则所述目标安全容器对应的文件访问服务程序从所述共享内存空间中读取所述目标文件数据。
在本实施例中,所述装置还包括:
发送单元,用于如果所述目标安全容器对应的文件访问服务程序在所述共享内存空间中未查找到所述目标文件数据,则所述目标安全容器对应的文件访问服务程序向所述代理服务程序发送针对所述目标文件数据的访问请求;
第二获取单元,用于响应于所述访问请求,所述代理服务程序从所述文件***中获取所述目标文件数据;
所述复制单元904,还用于将获取到的目标文件数据复制至所述共享内存空间;
所述第一获取单元906,还用于所述目标安全容器对应的文件访问服务程序从所述共享内存空间中读取所述目标文件数据。
在本实施例中,所述复制单元904,具体用于:
所述代理服务程序将其代理的文件***中的文件数据复制至所述共享内存空间中的第一内存地址空间;其中,所述第一内存地址空间用于存储被所述文件访问服务程序和所述代理服务程序共享的文件数据;
所述代理服务程序将与被复制至所述第一内存地址空间的文件数据对应的布局索引存储至所述共享内存空间;其中,所述布局索引,用于指示与其对应的文件数据的索引节点,以及用于指示与其对应的文件数据的文件偏移量;所述文件偏移量为对应的文件数据在其所在的文件中的偏移量。
在本实施例中,所述访问请求携带有所述目标文件数据对应的目标布局索引;
所述第一获取单元906,具体用于:
响应于所述目标安全容器针对目标文件数据的访问请求,所述目标安全容器对应的文件访问服务程序计算出所述目标布局索引的哈希值,对所述哈希值进行取模,并根据取模的值确定所述目标文件数据在所述第一内存地址空间中的目标内存地址;
确定在所述共享内存空间中存储的与所述目标内存地址对应的布局索引与所述目标布局索引是否一致;
如果与所述目标内存地址对应的布局索引与所述目标布局索引一致,则所述目标安全容器对应的文件访问服务程序根据所述目标内存地址从所述第一内存地址空间中读取出所述目标文件数据。
在本实施例中,所述访问请求用于针对所述目标文件数据进行写操作;所述装置还包括写操作单元,用于:
所述目标安全容器对应的文件访问服务程序将查找到的目标文件数据复制至所述共享内存空间中的第二内存地址空间;其中,所述第二内存地址空间是在所述共享内存空间中为所述目标安全容器分配的用于对所述目标文件数据进行写日志操作的内存地址空间;
所述目标安全容器对应的文件访问服务程序对被复制至所述第二内存地址空间的目标文件数据进行写日志操作,得到被所述目标安全容器修改后的目标文件数据;
所述代理服务程序根据所述第二内存地址空间中存储的被所述目标安全容器修改后的目标文件数据,对所述第一内存地址空间中存储的目标文件数据进行更新。
在本实施例中,所述共享内存空间中还存储了文件数据对应的使用标识和版本标识;所述写操作单元,还用于:
响应于所述目标文件数据被进行写日志操作,将所述目标文件数据对应的使用标识由第一取值更新为第二取值;其中,所述使用标记为第一取值,用于指示对应的文件数据没有正在被进行写操作;所述使用标记为第二取值,用于指示对应的文件数据正在被进行写操作;
响应于所述代理服务程序对所述第一内存地址空间中存储的目标文件数据更新完成,将所述目标文件数据对应的使用标识由第二取值更新为第一取值,以及,对所述目标文件数据对应的版本标识进行更新。
在本实施例中,所述访问请求用于针对所述目标文件数据进行读操作;所述第一获取单元906,还用于:
响应于所述目标安全容器对应的文件访问服务程序在所述共享内存空间中查找到所述目标文件数据,从所述共享内存空间中获取所述目标文件数据对应的版本标识;
响应于所述目标安全容器对应的文件访问服务程序从所述共享内存空间中读取所述目标文件数据完成,从所述共享内存空间中再次获取所述目标文件数据对应的版本标识,并确定再次获取的版本标识与之前获取的版本标识是否一致;如果不一致,则所述目标安全容器对应的文件访问服务程序从所述共享内存空间中重新读取所述目标文件数据。
在本实施例中,所述文件***客户端支持访问多个文件***;所述宿主机用户空间部署有分别为所述多个文件***进行代理的多个代理服务程序;所述共享内存空间包括为所述多个代理服务程序分别分配的多个共享内存子空间;所述装置还包括:
分配单元,用于根据所述目标安全容器针对所述多个文件***中的各个文件***进行访问的访问次数,确定为各个文件***分配的共享内存子空间的内存容量。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例只是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
上述实施例阐明的***、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。

Claims (13)

1.一种文件访问方法,所述方法应用于运行在客户机上的安全容器所对应的文件***客户端;所述文件***客户端包括部署在宿主机用户空间的代理服务程序和部署在客户机内核空间的文件访问服务程序;所述方法包括:
为目标安全容器加载代理服务程序与文件访问服务程序之间的共享内存空间;
所述代理服务程序将其代理的文件***中的文件数据复制至所述共享内存空间;
响应于所述目标安全容器针对目标文件数据的访问请求,所述目标安全容器对应的文件访问服务程序从所述共享内存空间中获取所述目标文件数据。
2.根据权利要求1所述的方法,所述为目标安全容器加载代理服务程序与文件访问服务程序之间的共享内存空间,包括:
为所述目标安全容器对应的文件访问程序分配与所述共享内存空间对应的私有虚拟地址空间;
将为所述代理服务程序申请到的与所述共享内存空间对应的共享物理地址空间,映射至为所述目标安全容器对应的文件访问程序分配的所述私有虚拟地址空间,以为所述目标安全容器完成所述共享内存空间的加载。
3.根据权利要求1所述的方法,所述响应于所述目标安全容器针对目标文件数据的访问请求,所述目标安全容器对应的文件访问服务程序从所述共享内存空间中获取所述目标文件数据,包括:
响应于所述目标安全容器针对目标文件数据的访问请求,所述目标安全容器对应的文件访问服务程序在所述共享内存空间中查找所述目标文件数据;
如果所述目标安全容器对应的文件访问服务程序在所述共享内存空间中查找到所述目标文件数据,则所述目标安全容器对应的文件访问服务程序从所述共享内存空间中读取所述目标文件数据。
4.根据权利要求3所述的方法,所述方法还包括:
如果所述目标安全容器对应的文件访问服务程序在所述共享内存空间中未查找到所述目标文件数据,则所述目标安全容器对应的文件访问服务程序向所述代理服务程序发送针对所述目标文件数据的访问请求;
响应于所述访问请求,所述代理服务程序从所述文件***中获取所述目标文件数据,并将获取到的目标文件数据复制至所述共享内存空间;
所述目标安全容器对应的文件访问服务程序从所述共享内存空间中读取所述目标文件数据。
5.根据权利要求1所述的方法,所述代理服务程序将其代理的文件***中的文件数据复制至所述共享内存空间,包括:
所述代理服务程序将其代理的文件***中的文件数据复制至所述共享内存空间中的第一内存地址空间;其中,所述第一内存地址空间用于存储被所述文件访问服务程序和所述代理服务程序共享的文件数据;
所述代理服务程序将与被复制至所述第一内存地址空间的文件数据对应的布局索引存储至所述共享内存空间;其中,所述布局索引,用于指示与其对应的文件数据的索引节点,以及用于指示与其对应的文件数据的文件偏移量;所述文件偏移量为对应的文件数据在其所在的文件中的偏移量。
6.根据权利要求5所述的方法,所述访问请求携带有所述目标文件数据对应的目标布局索引;
所述响应于所述目标安全容器针对目标文件数据的访问请求,所述目标安全容器对应的文件访问服务程序从所述共享内存空间中获取所述目标文件数据,包括:
响应于所述目标安全容器针对目标文件数据的访问请求,所述目标安全容器对应的文件访问服务程序计算出所述目标布局索引的哈希值,对所述哈希值进行取模,并根据取模的值确定所述目标文件数据在所述第一内存地址空间中的目标内存地址;
确定在所述共享内存空间中存储的与所述目标内存地址对应的布局索引与所述目标布局索引是否一致;
如果与所述目标内存地址对应的布局索引与所述目标布局索引一致,则所述目标安全容器对应的文件访问服务程序根据所述目标内存地址从所述第一内存地址空间中读取出所述目标文件数据。
7.根据权利要求5所述的方法,所述访问请求用于针对所述目标文件数据进行写操作;所述方法还包括:
所述目标安全容器对应的文件访问服务程序将查找到的目标文件数据复制至所述共享内存空间中的第二内存地址空间;其中,所述第二内存地址空间是在所述共享内存空间中为所述目标安全容器分配的用于对所述目标文件数据进行写日志操作的内存地址空间;
所述目标安全容器对应的文件访问服务程序对被复制至所述第二内存地址空间的目标文件数据进行写日志操作,得到被所述目标安全容器修改后的目标文件数据;
所述代理服务程序根据所述第二内存地址空间中存储的被所述目标安全容器修改后的目标文件数据,对所述第一内存地址空间中存储的目标文件数据进行更新。
8.根据权利要求7所述的方法,所述共享内存空间中还存储了文件数据对应的使用标识和版本标识;所述方法还包括:
响应于所述目标文件数据被进行写日志操作,将所述目标文件数据对应的使用标识由第一取值更新为第二取值;其中,所述使用标记为第一取值,用于指示对应的文件数据没有正在被进行写操作;所述使用标记为第二取值,用于指示对应的文件数据正在被进行写操作;
响应于所述代理服务程序对所述第一内存地址空间中存储的目标文件数据更新完成,将所述目标文件数据对应的使用标识由第二取值更新为第一取值,以及,对所述目标文件数据对应的版本标识进行更新。
9.根据权利要求8所述的方法,所述访问请求用于针对所述目标文件数据进行读操作;所述方法还包括:
响应于所述目标安全容器对应的文件访问服务程序在所述共享内存空间中查找到所述目标文件数据,从所述共享内存空间中获取所述目标文件数据对应的版本标识;
响应于所述目标安全容器对应的文件访问服务程序从所述共享内存空间中读取所述目标文件数据完成,从所述共享内存空间中再次获取所述目标文件数据对应的版本标识,并确定再次获取的版本标识与之前获取的版本标识是否一致;如果不一致,则所述目标安全容器对应的文件访问服务程序从所述共享内存空间中重新读取所述目标文件数据。
10.根据权利要求1所述的方法,所述文件***客户端支持访问多个文件***;所述宿主机用户空间部署有分别为所述多个文件***进行代理的多个代理服务程序;所述共享内存空间包括为所述多个代理服务程序分别分配的多个共享内存子空间;所述方法还包括:
根据所述目标安全容器针对所述多个文件***中的各个文件***进行访问的访问次数,确定为各个文件***分配的共享内存子空间的内存容量。
11.一种文件访问***,所述文件访问***包括运行在客户机上的安全容器所对应的文件***客户端;所述文件***客户端包括部署在宿主机用户空间的代理服务程序和部署在客户机内核空间的文件访问服务程序;
所述文件***客户端用于实现权利要求1至10任一项所述的方法。
12.一种电子设备,包括通信接口、处理器、存储器和总线,所述通信接口、所述处理器和所述存储器之间通过总线相互连接;
所述存储器中存储机器可读指令,所述处理器通过调用所述机器可读指令,执行权利要求1至10任一项所述的方法。
13.一种机器可读存储介质,所述机器可读存储介质存储有机器可读指令,所述机器可读指令在被处理器调用和执行时,实现权利要求1至10任一项所述的方法。
CN202310532937.2A 2023-05-11 2023-05-11 一种文件访问方法、***、电子设备及机器可读存储介质 Pending CN116680233A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310532937.2A CN116680233A (zh) 2023-05-11 2023-05-11 一种文件访问方法、***、电子设备及机器可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310532937.2A CN116680233A (zh) 2023-05-11 2023-05-11 一种文件访问方法、***、电子设备及机器可读存储介质

Publications (1)

Publication Number Publication Date
CN116680233A true CN116680233A (zh) 2023-09-01

Family

ID=87784491

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310532937.2A Pending CN116680233A (zh) 2023-05-11 2023-05-11 一种文件访问方法、***、电子设备及机器可读存储介质

Country Status (1)

Country Link
CN (1) CN116680233A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117615013A (zh) * 2024-01-19 2024-02-27 杭州优云科技股份有限公司 文件查找方法、装置、设备及可读存储介质
CN118115132A (zh) * 2024-04-17 2024-05-31 辽宁汇智恒泰科技有限公司 智慧企业协同办公方法、***、计算机设备及存储介质

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117615013A (zh) * 2024-01-19 2024-02-27 杭州优云科技股份有限公司 文件查找方法、装置、设备及可读存储介质
CN117615013B (zh) * 2024-01-19 2024-04-19 杭州优云科技股份有限公司 文件查找方法、装置、设备及可读存储介质
CN118115132A (zh) * 2024-04-17 2024-05-31 辽宁汇智恒泰科技有限公司 智慧企业协同办公方法、***、计算机设备及存储介质

Similar Documents

Publication Publication Date Title
US10289555B1 (en) Memory read-ahead using learned memory access patterns
CN110377436B (zh) 持久性内存的数据存储访问方法、设备及装置
US7831977B2 (en) Shared file system cache in a virtual machine or LPAR environment
KR101786871B1 (ko) 원격 페이지 폴트 처리 장치 및 그 방법
CN113674133B (zh) Gpu集群共享显存***、方法、装置及设备
CN116680233A (zh) 一种文件访问方法、***、电子设备及机器可读存储介质
US10310986B1 (en) Memory management unit for shared memory allocation
JP2012527704A (ja) 仮想マシンシステムにおけるショートカット入出力
US20130290636A1 (en) Managing memory
US10802972B2 (en) Distributed memory object apparatus and method enabling memory-speed data access for memory and storage semantics
US11836087B2 (en) Per-process re-configurable caches
KR20220000415A (ko) 서비스로서의 메모리에 기초한 분산 컴퓨팅
CN110554911A (zh) 内存访问与分配方法、存储控制器及***
US10082978B2 (en) Distributed shared log storage system having an adapter for heterogenous big data workloads
WO2016131175A1 (zh) 多核***中数据访问者目录的访问方法及设备
EP4375836A1 (en) Memory paging method and system, and storage medium
JP2024527054A (ja) 動的割当可能な物理的にアドレス指定されるメタデータストレージ
US11093169B1 (en) Lockless metadata binary tree access
US11989159B2 (en) Hybrid snapshot of a global namespace
US20220318042A1 (en) Distributed memory block device storage
US20170293570A1 (en) System and methods of an efficient cache algorithm in a hierarchical storage system
CN112748854A (zh) 对快速存储设备的优化访问
US11928336B2 (en) Systems and methods for heterogeneous storage systems
US11847100B2 (en) Distributed file system servicing random-access operations
CN115061777A (zh) 一种安全容器的启动方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination