一种内存共享的方法及装置
文献发布时间:2023-06-19 11:16:08
技术领域
本公开涉及计算机技术领域,具体而言,涉及一种内存共享的方法及装置。
背景技术
共享内存指在多处理器的计算机系统中,可以被不同中央处理器(CentralProcessing Unit,CPU)访问的大容量内存。由于多个CPU需要快速访问存储器,这样就要对存储器进行缓存。任何一个缓存的数据被更新后,由于其他处理器也可能要存取,共享内存就需要立即更新,否则不同的处理器可能用到不同的数据。
共享内存通常需要在多个进程之间约定共享内存的识别信息,但该识别信息是全局通用的,一些不信任的进程也能够通过对识别信息的操作对共享内存进行修改。
发明内容
本公开实施例至少提供一种内存共享的方法及装置,能够提高内存共享的安全性。
第一方面,本公开实施例提供了一种内存共享的方法,包括:
获取并打开预先设置的内存共享驱动;
通过所述内存共享驱动在内核中依次写入目标共享内存的属性信息;
基于写入的所述属性信息,通过所述内存共享驱动生成目标共享内存的文件描述符;所述文件描述符中包括所述属性信息;
向待共享所述目标共享内存的目的进程发送所述文件描述符。
一种可选的实施方式中,所述文件描述符为匿名文件描述符。
一种可选的实施方式中,所述目标共享内存的属性信息包括以下至少一种:
所述目标共享内存的地址信息、长度信息以及权限信息。
一种可选的实施方式中,向待共享所述目标共享内存的目的进程发送所述文件描述符,包括:
通过进程间通讯端口,向待共享所述目标共享内存的目的进程发送所述文件描述符。
一种可选的实施方式中,所述方法还包括:
在接收到所述目的进程反馈的内存共享完成信息后,关闭所述进程间通讯端口、所述文件描述符以及所述内存共享驱动。
第二方面,本公开实施例还提供另一种内存共享方法,包括:
接收源进程发送的目标共享内存的文件描述符;所述文件描述符中指示有所述目标共享内存的属性信息;
基于所述文件描述符,访问所述目标共享内存。
一种可选的实施方式中,所述目标共享内存的属性信息包括以下至少一种:
所述目标共享内存的地址信息、长度信息以及权限信息。
一种可选的实施方式中,基于所述文件描述符,访问所述目标共享内存,包括:
基于所述文件描述符中指示的所述目标共享内存的长度信息,在目的进程的地址空间中创建虚拟地址空间;
基于所述文件描述符中指示的所述目标共享内存的地址信息,遍历所述目标共享内存的地址空间,获取所述目标共享内存中每个内存页面的物理地址;
建立所述目标共享内存中每个内存页面的物理地址与所述虚拟地址空间中每个内存页面之间的映射关系;
通过读取所述虚拟地址空间中每个内存页面对应的物理地址,访问所述目标共享内存。
一种可选的实施方式中,所述文件描述符为匿名文件描述符。
一种可选的实施方式中,在访问所述目标共享内存后,所述方法还包括:
通过进程间通讯端口向所述源进程反馈内存共享完成信息,并关闭所述进程间通讯端口以及所述文件描述符。
第三方面,本公开实施例还提供再一种内存共享方法,包括:
启动源进程;
控制所述源进程获取并打开预先设置的内存共享驱动;
控制所述源进程通过所述内存共享驱动在内核中依次写入目标共享内存的属性信息;
控制所述源进程基于写入的所述属性信息,通过所述内存共享驱动生成目标共享内存的文件描述符;所述文件描述符中包括所述属性信息;
启动目的进程;所述目的进程与所述源进程之间进行内存共享;
控制所述源进程向待共享所述目标共享内存的所述目的进程发送所述文件描述符;
控制所述目的进程基于所述文件描述符,访问所述目标共享内存。
一种可选的实施方式中,所述源进程及所述目的进程为运行于Linux平台上的进程,且所述源进程具有对所述目标共享内存的读写权限,所述目的进程具有对所述目标共享内存的读取权限。
第四方面,本公开实施例还提供一种内存共享装置,包括:
获取模块,用于获取并打开预先设置的内存共享驱动;
写入模块,用于通过所述内存共享驱动在内核中依次写入目标共享内存的属性信息;
生成模块,用于基于写入的所述属性信息,通过所述内存共享驱动生成目标共享内存的文件描述符;所述文件描述符中包括所述目标共享内存的属性信息;
发送模块,用于向待共享所述目标共享内存的目的进程发送所述文件描述符。
一种可选的实施方式中,所述文件描述符为匿名文件描述符。
一种可选的实施方式中,所述目标共享内存的属性信息包括以下至少一种:
所述目标共享内存的地址信息、长度信息以及权限信息。
一种可选的实施方式中,所述发送模块具体用于:
通过进程间通讯端口,向待共享所述目标共享内存的目的进程发送所述文件描述符。
一种可选的实施方式中,所述发送模块还用于:
在接收到所述目的进程反馈的内存共享完成信息后,关闭所述进程间通讯端口、所述文件描述符以及所述内存共享驱动。
第五方面,本公开实施例还提供另一种内存共享装置,包括:
接收模块,用于接收源进程发送的目标共享内存的文件描述符;所述文件描述符中指示有所述目标共享内存的属性信息;
访问模块,用于基于所述文件描述符,访问所述目标共享内存。
一种可选的实施方式中,所述目标共享内存的属性信息包括以下至少一种:
所述目标共享内存的地址信息、长度信息以及权限信息。
一种可选的实施方式中,所述访问模块具体用于:
基于所述文件描述符中指示的所述目标共享内存的长度信息,在目的进程的地址空间中创建虚拟地址空间;
基于所述文件描述符中指示的所述目标共享内存的地址信息,遍历所述目标共享内存的地址空间,获取所述目标共享内存中每个内存页面的物理地址;
建立所述目标共享内存中每个内存页面的物理地址与所述虚拟地址空间中每个内存页面之间的映射关系;
通过读取所述虚拟地址空间中每个内存页面对应的物理地址,访问所述目标共享内存。
一种可选的实施方式中,所述文件描述符为匿名文件描述符。
一种可选的实施方式中,所述访问模块还用于:
通过进程间通讯端口向所述源进程反馈内存共享完成信息,并关闭所述进程间通讯端口以及所述文件描述符。
第六方面,本公开实施例还提供再一种内存共享装置,包括:
第一启动模块,用于启动源进程;
第一控制模块,用于控制所述源进程获取并打开预先设置的内存共享驱动,控制所述源进程通过所述内存共享驱动在内核中依次写入目标共享内存的属性信息,控制所述源进程基于写入的所述属性信息,通过所述内存共享驱动生成目标共享内存的文件描述符;所述文件描述符中包括所述属性信息;
第二启动模块,用于启动目的进程;所述目的进程与所述源进程之间进行内存共享;
第二控制模块,用于控制所述源进程向待共享所述目标共享内存的所述目的进程发送所述文件描述符;
第三控制模块,用于控制所述目的进程基于所述文件描述符,访问所述目标共享内存。
一种可选的实施方式中,所述源进程及所述目的进程为运行于Linux平台上的进程,且所述源进程具有对所述目标共享内存的读写权限,所述目的进程具有对所述目标共享内存的读取权限。
第七方面,本公开实施例还提供一种计算机设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤,或执行上述第二方面,或第二方面中任一种可能的实施方式中的步骤,或执行上述第三方面,或第三方面中任一种可能的实施方式中的步骤。
第八方面,本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤,或执行上述第二方面,或第二方面中任一种可能的实施方式中的步骤,或执行上述第三方面,或第三方面中任一种可能的实施方式中的步骤。
关于上述内存共享装置、计算机设备、及计算机可读存储介质的效果描述参见上述内存共享的方法的说明,这里不再赘述。
本公开实施例提供的内存共享的方法及装置,能够通过源进程利用预先设置的内存共享驱动,生成目标共享内存的文件描述符;所述文件描述符中包括所述目标共享内存的属性信息;向待共享所述目标共享内存的目的进程发送所述文件描述符。目的进程能够通过文件描述符实现目标共享内存的访问,由于文件描述符是根据目标共享内存的属性信息生成的,每个共享内存的文件描述符都不同,使得不受信任的进程无法对共享内存进行访问,有效提高了内存共享的安全性。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本公开实施例所提供的一种内存共享的方法的流程图;
图2示出了本公开实施例所提供的另一种内存共享的方法的流程图;
图3示出了本公开实施例所提供的再一种内存共享的方法的流程图;
图4示出了本公开实施例所提供的一种内存共享装置的示意图;
图5示出了本公开实施例所提供的另一种内存共享装置的示意图;
图6示出了本公开实施例所提供的再一种内存共享装置的示意图;
图7示出了本公开实施例所提供的一种计算机设备的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
经研究发现,在Linux等操作系统中,共享内存通常需要在多个进程之间约定共享内存的识别信息,通过识别信息的操作达到共享内存的目的。然而,约定的识别信息时全局通用的,其他不信任的进程通过对识别信息的操作,也可以对共享的内存信息进行访问或修改,安全性较差。
基于上述研究,本公开提供了一种内存共享的方法,能够通过源进程利用预先设置的内存共享驱动,生成目标共享内存的文件描述符;所述文件描述符中包括所述目标共享内存的属性信息;向待共享所述目标共享内存的目的进程发送所述文件描述符。目的进程能够通过文件描述符实现目标共享内存的访问,由于文件描述符是根据目标共享内存的属性信息生成的,每个共享内存的文件描述符都不同,使得不受信任的进程无法对共享内存进行访问,有效提高了内存共享的安全性。
针对以上方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人在本公开过程中对本公开做出的贡献。
下面将结合本公开中附图,对本公开中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种内存共享的方法进行详细介绍,本公开实施例所提供的内存共享的方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:终端设备或服务器或其它处理设备,终端设备可以为用户设备(User Equipment,UE)、移动设备、用户终端、终端、蜂窝电话、无绳电话、个人数字助理(Personal Digital Assistant,PDA)、手持设备、计算设备、车载设备、可穿戴设备等。该计算机设备可以运行源进程和目的进程,源进程和目的进程之间能够进行内存共享,其中,源进程可以为提供共享内存的进程,目的进程可以为接受共享内存的进程。
下面以执行主体为终端设备为例对本公开实施例提供的内存共享的方法加以说明。
参见图1所示,为本公开实施例提供的内存共享的方法的流程图,所述方法包括步骤S101~S103,其中:
S101:源进程获取并打开预先设置的内存共享驱动,并通过该内存共享驱动生成目标共享内存的文件描述符;所述文件描述符中包括所述目标共享内存的属性信息。
该步骤中,源进程可以获取并打开预先设置的内存共享驱动,通过对内存共享驱动进行输入输出控制(input/output control)操作,将源进程要进行共享的目标共享内存的属性信息传输至内存共享驱动,通过内存共享驱动在内核中依次写入目标共享内存的属性信息,之后,再利用设置完成的属性信息,内存共享驱动基于目标共享内存的属性信息生成目标共享内存的文件描述符,并可以将其反馈给源进程。
其中,文件描述符可以包括目标共享内存的地址信息、长度信息、以及使用权限等属性的至少一种。内存共享驱动可以为一个内核虚拟机设备,可以对该虚拟机设备进行输入输出控制操作。输入输出控制是一个专用于设备输入输出操作的系统调用。
这里,文件描述符是匿名文件描述符,能够描述内存映射,这样,文件描述符所描述的匿名映射内存可以被页面合并技术所合并,提高资源的利用效率。
示例性的,内存共享驱动可以根据预设的映射关系,将目标共享内存的属性信息转换为整型的数据,得到文件描述符,通过映射关系,即可将匿名的文件描述符再转换为目标共享内存的属性信息。
S102:所述源进程向待共享所述目标共享内存的目的进程发送所述文件描述符。
该步骤中,源进程在接收到内存共享驱动反馈的匿名的文件描述符后,可以利用预设的进程间通讯端口,将目标共享内存的匿名的文件描述符传输给目的进程。
其中,源进程可以是提供共享内存的进程,目的进程是接受共享内存的进程。
S103:所述目的进程接收源进程发送的目标共享内存的文件描述符;所述文件描述符中指示有所述目标共享内存的属性信息;基于所述文件描述符,访问所述目标共享内存。
该步骤中,目的进程在接收到文件描述符后,可以根据文件描述符指示的目标共享内存的属性信息,对目标共享内存进行访问,实现内存共享。
示例性的,目的进程在接收到文件描述符后,可以对文件描述符进行输入输出控制操作,从内存共享驱动中获取映射关系,进而将文件描述符转换为目标共享内存的属性信息,并利用得到的属性信息访问目标共享内存。
本公开实施例提供的内存共享方法,能够通过源进程利用预先设置的内存共享驱动,生成目标共享内存的文件描述符;所述文件描述符中包括所述目标共享内存的属性信息;向待共享所述目标共享内存的目的进程发送所述文件描述符。目的进程能够通过文件描述符实现目标共享内存的访问,由于文件描述符是根据目标共享内存的属性信息生成的,每个共享内存的文件描述符都不同,使得不受信任的进程无法对共享内存进行访问,有效提高了内存共享的安全性。
一种可能的实施方式中,在得到文件描述符的属性信息后,具体可以利用以下步骤访问所述目标共享内存:
基于所述文件描述符中指示的所述目标共享内存的长度信息,在目的进程的地址空间中创建虚拟地址空间;
基于所述文件描述符中指示的所述目标共享内存的地址信息,遍历所述目标共享内存的地址空间,获取所述目标共享内存中每个内存页面的物理地址;
建立所述目标共享内存中每个内存页面的物理地址与所述虚拟地址空间中每个内存页面之间的映射关系;
通过读取所述虚拟地址空间中每个内存页面对应的物理地址,访问所述目标共享内存。
该步骤中,为了使目的进程能够利用目标共享内存,可以先在目的进程的地址空间中创建虚拟地址空间,并建立虚拟地址空间与目标共享内存的地址空间之间的映射关系,使得目的进程在需要使用内存时访问虚拟地址空间,再跳转到虚拟地址空间所映射的目标共享内存的内存页面,从而实现目标共享内存的共享。
示例性的,目的进程可以根据目标共享内存的属性信息中的长度信息,在目的进程的地址空间中创建出虚拟地址空间,虚拟地址空间的长度可以根据情况而定,通常不高于目标共享内存的长度,在创建了虚拟地址空间之后,可以基于目标共享内存的地址信息,遍历目标共享内存的地址空间,获取所述目标共享内存中每个内存页面的物理地址,在建立目标共享内存中每个内存页面的物理地址与所述虚拟地址空间中每个内存页面之间的映射关系,最后读取虚拟地址空间中每个内存页面对应的物理地址,访问所述目标共享内存。
在一些可能的实施方式中,步骤S101包括:
所述源进程通过所述内存共享驱动在内核中依次写入目标共享内存的属性信息;
所述源进程基于写入的所述属性信息,通过所述内存共享驱动生成目标共享内存的文件描述符。
这里,所述文件描述符可以为匿名文件描述符。
该步骤中,源进程可以利用内存共享驱动在系统的内核中依次写入目标共享内存的各个属性信息,再利用写入的目标共享内存的各个属性信息,并基于预设的映射关系生成匿名的文件描述符。
其中,目标共享内存的属性信息可以包括以下至少一种:
所述目标共享内存的地址信息、长度信息以及权限信息。
可以通过内存共享驱动则将目标共享内存的地址信息、长度信息以及权限信息中的至少一种依次写入到内核中。
在一些可能的实施方式中,步骤S102包括:
所述源进程通过进程间通讯端口,向待共享所述目标共享内存的目的进程发送所述文件描述符。
示例性的,进程间通讯端口可以为unix socket,unix socket用于一台主机的进程间通信,不需要基于网络协议,可以利用文件系统进行数据传输。
在一些可能的实施方式中,访问所述目标共享内存后,所述方法还包括:
所述目的进程通过进程间通讯端口向所述源进程反馈内存共享完成信息,并关闭所述进程间通讯端口以及所述文件描述符;
所述源进程在接收到所述目的进程反馈的内存共享完成信息后,关闭所述进程间通讯端口、所述文件描述符以及所述内存共享驱动。
该步骤中,在访问目标共享内存后,目的进程可以利用进程间通讯端口向源进程反馈内存共享完成信息,并关闭进程间通讯端口以及匿名的文件描述符,进行目的进程侧的资源释放,同时,源进程在接收到内存共享完成信息后,可以关闭自身的进程间通讯端口、文件描述符以及内存共享驱动,实现源进程端的资源释放
在一些可能的实施方式中,所述源进程及所述目的进程为运行于Linux平台上的进程,且所述源进程具有对所述目标共享内存的读写权限,所述目的进程具有对所述目标共享内存的读取权限。
其中,目的进程对目标共享内存的除读取以外的权限可以根据目标共享内存的属性信息中的权限信息确定,源进程作为目标共享内存的提供方可以具有读写权限。
参见图2所示,为本公开实施例提供的另一种内存共享的方法的流程图,该方法中,计算机设备启动源进程以及目的进程,源进程打开/dev/mmapfd(即内存共享驱动),并通过内存共享驱动生成匿名的文件描述符fd,再利用进程间通讯端口unix socket将匿名的文件描述符fd发送至目的进程,目的进程接收到fd后对fd执行ioctl,实现内存共享,并在共享内存完成后通过unix socket通知源进程,源进程和目的进程分别对进程无用资源的释放,关闭相应的共享工具或程序。
参见图3所示,本公开实施例还提供再一种内存共享方法,可以由运行有源进程和目的进程的终端设备执行,该内存共享方法包括:
S301、启动源进程;控制所述源进程打开预先设置的内存共享驱动,并通过所述内存共享驱动生成目标共享内存的文件描述符;所述文件描述符中指示所述目标共享内存的属性信息。
其中,可以控制所述源进程获取并打开预先设置的内存共享驱动;控制所述源进程通过所述内存共享驱动在内核中依次写入所述目标共享内存的属性信息;控制所述源进程基于写入的所述属性信息,通过所述内存共享驱动生成目标共享内存的文件描述符;所述文件描述符中包括所述属性信息。
S302、启动目的进程;所述目的进程与所述源进程之间进行内存共享;控制所述源进程向待共享所述目标共享内存的所述目的进程发送所述文件描述符。
S303、控制所述目的进程基于所述文件描述符,访问所述目标共享内存。
其中,该内存共享方法解决问题的原理与本公开实施例上述内存共享的方法相似,因此可以参见上述内存共享方法的实施,重复之处不再赘述。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与内存共享的方法对应的内存共享装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述内存共享的方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
参照图4所示,为本公开实施例提供的一种内存共享装置的示意图,所述内存共享装置400包括:生成模块410、发送模块420;其中,
获取模块410,用于获取并打开预先设置的内存共享驱动;
写入模块420,用于通过所述内存共享驱动在内核中依次写入目标共享内存的属性信息;
生成模块430,用于基于写入的所述属性信息,通过所述内存共享驱动生成目标共享内存的文件描述符;所述文件描述符中包括所述目标共享内存的属性信息;
发送模块440,用于向待共享所述目标共享内存的目的进程发送所述文件描述符。
本公开实施例能,目的进程能够通过文件描述符实现目标共享内存的访问,由于文件描述符是根据目标共享内存的属性信息生成的,每个共享内存的文件描述符都不同,使得不受信任的进程无法对共享内存进行访问,有效提高了内存共享的安全性。
一种可选的实施方式中,所述文件描述符为匿名文件描述符。
一种可选的实施方式中,所述目标共享内存的属性信息包括以下至少一种:
所述目标共享内存的地址信息、长度信息以及权限信息。
一种可选的实施方式中,所述发送模块440具体用于:
通过进程间通讯端口,向待共享所述目标共享内存的目的进程发送所述文件描述符。
一种可选的实施方式中,所述发送模块440还用于:
在接收到所述目的进程反馈的内存共享完成信息后,关闭所述进程间通讯端口、所述文件描述符以及所述内存共享驱动。
参照图5所示,为本公开实施例提供的另一种内存共享装置的示意图,所述内存共享装置500包括:接收模块510、访问模块520;其中,
接收模块510,用于接收源进程发送的目标共享内存的文件描述符;所述文件描述符中指示有所述目标共享内存的属性信息;
访问模块520,用于基于所述文件描述符,访问所述目标共享内存。
一种可选的实施方式中,所述目标共享内存的属性信息包括以下至少一种:
所述目标共享内存的地址信息、长度信息以及权限信息。
一种可选的实施方式中,所述访问模块520具体用于:
基于所述文件描述符中指示的所述目标共享内存的长度信息,在目的进程的地址空间中创建虚拟地址空间;
基于所述文件描述符中指示的所述目标共享内存的地址信息,遍历所述目标共享内存的地址空间,获取所述目标共享内存中每个内存页面的物理地址;
建立所述目标共享内存中每个内存页面的物理地址与所述虚拟地址空间中每个内存页面之间的映射关系;
通过读取所述虚拟地址空间中每个内存页面对应的物理地址,访问所述目标共享内存。
一种可选的实施方式中,所述文件描述符为匿名文件描述符。
一种可选的实施方式中,所述访问模块520还用于:
通过进程间通讯端口向所述源进程反馈内存共享完成信息,并关闭所述进程间通讯端口以及所述文件描述符。
参照图6所示,为本公开实施例提供的再一种内存共享装置的示意图,所述内存共享装置600包括:
第一启动模块610,用于启动源进程;
第一控制模块620,用于控制所述源进程获取并打开预先设置的内存共享驱动,控制所述源进程通过所述内存共享驱动在内核中依次写入目标共享内存的属性信息,控制所述源进程基于写入的所述属性信息,通过所述内存共享驱动生成目标共享内存的文件描述符;所述文件描述符中包括所述属性信息;
第二启动模块630,用于启动目的进程;所述目的进程与所述源进程之间进行内存共享;
第二控制模块640,用于控制所述源进程向待共享所述目标共享内存的所述目的进程发送所述文件描述符;
第三控制模块650,用于控制所述目的进程基于所述文件描述符,访问所述目标共享内存。
一种可选的实施方式中,所述源进程及所述目的进程为运行于Linux平台上的进程,且所述源进程具有对所述目标共享内存的读写权限,所述目的进程具有对所述目标共享内存的读取权限。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
基于同一技术构思,本申请实施例还提供了一种计算机设备。参照图7所示,为本申请实施例提供的计算机设备700的结构示意图,包括处理器701、存储器702、和总线703。其中,存储器702用于存储执行指令,包括内存7021和外部存储器7022;这里的内存7021也称内存储器,用于暂时存放处理器701中的运算数据,以及与硬盘等外部存储器7022交换的数据,处理器701通过内存7021与外部存储器7022进行数据交换,当计算机设备700运行时,处理器701与存储器702之间通过总线703通信,使得处理器701在执行以下指令:
获取并打开预先设置的内存共享驱动;
通过所述内存共享驱动在内核中依次写入所述目标共享内存的属性信息;
基于写入的所述属性信息,通过所述内存共享驱动生成目标共享内存的文件描述符;所述文件描述符中包括所述属性信息;
向待共享所述目标共享内存的目的进程发送所述文件描述符。
一种可能的实施方式中,处理器701用于执行以下指令:
接收源进程发送的目标共享内存的文件描述符;所述文件描述符中指示有所述目标共享内存的属性信息;
基于所述文件描述符,访问所述目标共享内存。
一种可能的实施方式中,处理器701用于执行以下指令:
启动源进程;
控制所述源进程获取并打开预先设置的内存共享驱动;
控制所述源进程通过所述内存共享驱动在内核中依次写入目标共享内存的属性信息;
控制所述源进程基于写入的所述属性信息,通过所述内存共享驱动生成目标共享内存的文件描述符;所述文件描述符中包括所述属性信息;
启动目的进程;所述目的进程与所述源进程之间进行内存共享;
控制所述源进程向待共享所述目标共享内存的所述目的进程发送所述文件描述符向所述目的进程发送所述文件描述符;
控制所述目的进程基于所述文件描述符,访问所述目标共享内存。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的内存共享的方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例所提供的内存共享的方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行上述方法实施例中所述的内存共享的方法的步骤,具体可参见上述方法实施例,在此不再赘述。
本公开实施例还提供一种计算机程序,该计算机程序被处理器执行时实现前述实施例的任意一种方法。该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software DevelopmentKit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。
- 内存共享方法、内存共享装置及终端设备
- 一种全局内存共享方法、装置和一种通信系统