虚拟机内存共享方法、装置、计算机设备及存储介质与流程

文档序号:15981186发布日期:2018-11-17 00:21阅读:226来源:国知局

本申请涉及java虚拟机技术领域,尤其涉及一种虚拟机内存共享方法、装置、计算机设备及存储介质。

背景技术

目前,jvm(javavirtualmachine,即java虚拟机的缩写)之间的通信一般都通过rmi方法(remotemethodinvocation,即远程调用方法),rmi方法能够让在客户端java虚拟机上的对象像调用本地对象一样调用服务端java虚拟机中的对象上的方法;或是通过socket方法,例如网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。

但上述两种方式不仅通信效率低效,而且在本地jvm的对象不能访问其他jvm的内存地址。



技术实现要素:

本申请提供了一种虚拟机内存共享方法、装置、计算机设备及存储介质,旨在解决现有技术中通过rmi方法或socket方法实现虚拟机之间的通讯,导致虚拟机之间通讯效率低下,而且虚拟机之间不能访问其他虚拟机的内存地址的问题。

第一方面,本申请提供了一种虚拟机内存共享方法,其包括:

创建共享内存,及与所述共享内存对应的共享内存函数;

将所述共享内存函数封装至待通讯虚拟机中的本地接口;其中,待通讯虚拟机中包括至少一数据发送端和至少一数据接收端;

若检测到数据发送端的数据发送请求,通过解析所述共享内存函数,将所述共享内存对应的地址分别映射至数据发送端和数据接收端,以将待通讯虚拟机中的数据发送端与数据接收端通过本地接口建立连接;

所述共享内存获取所述数据发送端的通讯数据,并将所述通讯数据发送至所述数据接收端。

第二方面,本申请提供了一种虚拟机内存共享装置,其包括:

共享内存函数创建单元,用于创建共享内存,及与所述共享内存对应的共享内存函数;

函数封装单元,用于将所述共享内存函数封装至待通讯虚拟机中的本地接口;其中,待通讯虚拟机中包括至少一数据发送端和至少一数据接收端;

连接建立单元,用于若检测到数据发送端的数据发送请求,通过解析所述共享内存函数,将所述共享内存对应的地址分别映射至数据发送端和数据接收端,以将待通讯虚拟机中的数据发送端与数据接收端通过本地接口建立连接;

数据通讯单元,用于所述共享内存获取所述数据发送端的通讯数据,并将所述通讯数据发送至所述数据接收端。

第三方面,本申请又提供了一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本申请提供的任一项所述的虚拟机内存共享方法。

第四方面,本申请还提供了一种存储介质,其中所述存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行本申请提供的任一项所述的虚拟机内存共享方法。

本申请提供一种虚拟机内存共享方法、装置、计算机设备及存储介质。该方法通过创建共享内存,及与所述共享内存对应的共享内存函数;将所述共享内存函数封装至待通讯虚拟机中的本地接口;若检测到数据发送端的数据发送请求,通过解析所述共享内存函数,将所述共享内存对应的地址分别映射至数据发送端和数据接收端,以将待通讯虚拟机中的数据发送端与数据接收端通过本地接口建立连接;所述共享内存获取所述数据发送端的通讯数据,并将所述通讯数据发送至所述数据接收端。该方法实现了不同虚拟机之间通过一块共享内存进行数据读写,提高了虚拟机之间的数据交换速率。

附图说明

为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例提供的一种虚拟机内存共享方法的示意流程图;

图2为本申请实施例提供的一种虚拟机内存共享方法的子流程示意图;

图3为本申请实施例提供的一种虚拟机内存共享方法的另一子流程示意图;

图4为本申请实施例提供的一种虚拟机内存共享方法的另一子流程示意图;

图5为本申请实施例提供的一种虚拟机内存共享方法的另一示意流程图;

图6为本申请实施例提供的一种虚拟机内存共享装置的示意性框图;

图7为本申请实施例提供的一种虚拟机内存共享装置的子单元示意性框图;

图8为本申请实施例提供的一种虚拟机内存共享装置的另一子单元示意性框图;

图9为本申请实施例提供的一种虚拟机内存共享装置的另一子单元示意性框图;

图10为本申请实施例提供的一种虚拟机内存共享装置的另一示意性框图;

图11为本申请实施例提供的一种计算机设备的示意性框图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。

还应当理解,在此本申请说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本申请。如在本申请说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。

还应当进一步理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。

请参阅图1,图1是本申请实施例提供的一种虚拟机内存共享方法的示意流程图。该方法应用于台式电脑、手提电脑、平板电脑等终端中,也可以应用于服务器中。如图1所示,该方法包括步骤s101~s104。

s101、创建共享内存,及与所述共享内存对应的共享内存函数。

在本实施例中,创建共享内存即是在创建一块物理内存,所创建的物理内存内同时映射至多个进程地址空间,其中每一java虚拟机可以视为与其一一对应的进程(多个java虚拟机可以同时运行在同一台终端,如台式电脑或服务器中,每一进程可以对应进行一个企业员工的佣金计算进程),每个进程都有对应的进程地址空间。多个java虚拟机中若有一个java虚拟机对该共享内存中的内容进行更新,其余的java虚拟机均能即时看到共享内存中的内容更新。可见,java虚拟机之间传递数据是以共享内存为载体,待传输的数据只需从数据发送端先传输至共享内存,再由共享内存传输至数据请求端即可,上述过程中仅仅拷贝了两次数据,而避免了如管道和消息队列等通信方式则需要在内核和用户空间进行四次的数据拷贝,提升了通讯的效率。

具体实施时,在创建共享内存,所对应创建的共享内存函数,共享内存函数的格式如下:

intshmget(key_tkey,size_tsize,intshmflag);

其中,shmget是取值为整数类型的共享内存函数,该共享内存函数包括的函数传入值包括共享内存的键值(即key,其参数类型为key_t)、共享内存字节数(即size,其参数类型为size_t)、及共享内存的标志位值(即shmflag,其参数类型为整数);

具体的,key值可以配置为ipc_private,表示在当前的java虚拟机的内存中创建一块新的共享内存;将key设置为0,则操作系统将忽略键,建立一个新的共享内存,指定一个键值,然后返回这块共享内存ipc标识符id。而将这个新的共享内存的标识符id告诉其他进程可以在建立共享内存后通过派生子进程,或写入文件或管道来实现。

size所配置的共享内存字节数是用户自定义设置,根据实际需求来设定,如将size配置为0-1gb中的任意值;如果一段进程只申请一块只有一个字节的内存,内存也会分配整整一页(在i386机器中一页的缺省大小pace_size=4096字节)这样,新创建的共享内存的大小实际上是从size这个参数调整而来的页面大小。即如果size为1至4096,则实际申请到的共享内存大小为4k(一页);4097到8192,则实际申请到的共享内存大小为8k(两页),依此类推。

shmflag(可以理解为共享内存的标志位值)可以配置为ipc_creat,表示如果共享内存不存在,则创建一个共享内存,否则打开操作。如果单独使用ipc_creat,shmget()函数要么返回一个已经存在的共享内存的操作符,要么返回一个新建的共享内存的标识符。如果将ipc_creat和ipc_excl标志一起使用,shmget()将返回一个新建的共享内存的标识符;如果该共享内存已存在,或者返回-1。ipc_exel标志本身并没有太大的意义,但是和ipc_creat标志一起使用可以用来保证所得的对象是新建的,而不是打开已有的对象。对于用户的读取和写入许可指定shm_r和shm_w,(shm_r>3)和(shm_w>3)是一组读取和写入许可,而(shm_r>6)和(shm_w>6)是全局读取和写入许可。

s102、将所述共享内存函数封装至待通讯虚拟机中的本地接口;其中,待通讯虚拟机中包括至少一数据发送端和至少一数据接收端。

在本实施例中,当创建了共享内存,例如这一共享内存可以是位于多个java虚拟机中的其中某一java虚拟机中,创建完成之后,将所述共享内存函数存储在需进行通讯的虚拟机中。例如待通讯虚拟机中包括至少一数据发送端和至少一数据接收端,其中数据发送端和数据接收端均可以视为一java虚拟机,则将所述共享内存函数封装至数据发送端的本地接口,且将所述共享内存函数封装至数据接收端的本地接口。当数据发送端和数据接收端均调用各自的本地接口中的共享内存函数,即可快速建立通讯连接。

在一实施例中,如图2所述,步骤s102中包括:

s1021、将所述共享内存函数进行编译,得到与所述共享内存函数对应的头文件;

s1022、将所述头文件引入至待通讯虚拟机中的本地接口的动态链接库文件;

s1023、将所述动态链接库文件配置到待通讯虚拟机中的环境变量,以完成共享内存函数封装。

在本实施例中,将共享内存函数进行编译后,再引入到数据发送端的本地接口的dll文件(dynamiclinklibrary,表示动态链接库文件)中和数据接收端的本地接口的dll文件中。完成上述过程后,再将数据发送端的本地接口的dll文件配置到数据发送端的环境变量,且将数据接收端的本地接口的dll文件配置到数据接收端的环境变量中,即可完成共享内存函数的封装过程。完成上述函数封装过程后,即可确保后续通讯过程的正常建立。

s103、若检测到数据发送端的数据发送请求,通过解析所述共享内存函数,将所述共享内存对应的地址分别映射至数据发送端和数据接收端,以将待通讯虚拟机中的数据发送端与数据接收端通过本地接口建立连接。

在本实施例中,若数据发送端有数据发送请求,则表示需与数据接收端进行通讯连接,此时需将数据发送端的本地接口中所封装的共享内存函数进行解析,同时将数据接收端的本地接口中所封装的共享内存函数进行解析,在通过共享内存函数将所述共享内存对应的地址分别映射至数据发送端和数据接收端,以确保数据发送端和数据接收端均能访问该共享内存。

在一实施例中,如图3所示,步骤s103包括:

s1031、获取待通讯虚拟机中的环境变量,并根据环境变量获取对应的动态链接库文件;

s1032、对所述动态链接库文件进行反编译,获取所述动态链接库文件中的头文件;

s1033、获取所述头文件中的共享内存函数,得到与所述共享内存函数中的共享内存字节数。

在本实施例中,解析内存共享函数即是封装内存共享函数的逆向过程。通过上述逆向过程,即可实现快速将所述共享内存对应的地址分别映射至数据发送端和数据接收端,以确保数据发送端和数据接收端均能访问该共享内存。

在一实施例中,如图4所示,步骤s103还包括:

s1034、根据所述共享内存函数中的共享内存字节数,获取所述共享内存的起始地址和终止地址;

s1035、根据所述共享内存的起始地址和终止地址,获取所述共享内存对应的地址;

s1036、将所述共享内存对应的地址通过空指针随机分别映射至数据发送端的空间地址,及数据接收端的空间地址。

在本实施例中,通过获取所述共享内存函数中的共享内存字节数,即可在所指定的java虚拟机对应进程地址空间的空余空间中随机指定一起始地址,根据起始地址与共享内存字节数求和定位终止地址,根据所述共享内存的起始地址和终止地址,即可获取所述共享内存对应的地址。最后,将所述共享内存对应的地址通过空指针随机分别映射至数据发送端的空间地址,及数据接收端的空间地址,实现共享内存空间的精准映射。

s104、所述共享内存获取所述数据发送端的通讯数据,并将所述通讯数据发送至所述数据接收端。

在本实施例中,通讯数据是先从数据发送端输入至共享内存,再由共享内存发送至数据接收端,上述过程中仅仅拷贝了两次数据,提升了通讯的效率。

在一实施例中,如图5所示,步骤s104之后还包括:

s105、若所述数据发送端终止通讯数据的发送超出预设的时间阈值,将所述共享内存进行释放。

在本实施例中,java虚拟机之间在通过共享内存进行通讯时,并不总是读写少量数据后就解除映射,然后又有新的通信时再重新建立共享内存区域。而是保持共享内存,直到通讯完毕为止(若所述数据发送端终止通讯数据的发送超出预设的时间阈值,则可表示通讯完毕),这样数据内容一直保存在共享内存中,并没有写回文件,共享内存中的内容往往是在解除映射时才写回文件的。因此,采用共享内存的通信方式效率是非常高的。

可见,该方法实现了不同虚拟机之间通过一块共享内存进行数据读写,提高了虚拟机之间的数据交换速率。

本申请实施例还提供一种虚拟机内存共享装置,该虚拟机内存共享装置用于执行前述虚拟机内存共享方法的任一实施例。具体地,请参阅图6,图6是本申请实施例提供的一种虚拟机内存共享装置的示意性框图。虚拟机内存共享装置100可以配置于台式电脑、平板电脑、手提电脑、等终端中,也可以配置于服务器中。

如图6所示,虚拟机内存共享装置100包括共享内存函数创建单元101、函数封装单元102、连接建立单元103、及数据通讯单元104。

共享内存函数创建单元101,用于创建共享内存,及与所述共享内存对应的共享内存函数。

在本实施例中,创建共享内存即是在创建一块物理内存,所创建的物理内存内同时映射至多个进程地址空间,其中每一java虚拟机可以视为与其一一对应的进程(多个java虚拟机可以同时运行在同一台终端,如台式电脑或服务器中,每一进程可以对应进行一个企业员工的佣金计算进程),每个进程都有对应的进程地址空间。多个java虚拟机中若有一个java虚拟机对该共享内存中的内容进行更新,其余的java虚拟机均能即时看到共享内存中的内容更新。可见,java虚拟机之间传递数据是以共享内存为载体,待传输的数据只需从数据发送端先传输至共享内存,再由共享内存传输至数据请求端即可,上述过程中仅仅拷贝了两次数据,而避免了如管道和消息队列等通信方式则需要在内核和用户空间进行四次的数据拷贝,提升了通讯的效率。

具体实施时,在创建共享内存,所对应创建的共享内存函数,共享内存函数的格式如下:

intshmget(key_tkey,size_tsize,intshmflag);

其中,shmget是取值为整数类型的共享内存函数,该共享内存函数包括的函数传入值包括共享内存的键值(即key,其参数类型为key_t)、共享内存字节数(即size,其参数类型为size_t)、及共享内存的标志位值(即shmflag,其参数类型为整数);

具体的,key值可以配置为ipc_private,表示在当前的java虚拟机的内存中创建一块新的共享内存;将key设置为0,则操作系统将忽略键,建立一个新的共享内存,指定一个键值,然后返回这块共享内存ipc标识符id。而将这个新的共享内存的标识符id告诉其他进程可以在建立共享内存后通过派生子进程,或写入文件或管道来实现。

size所配置的共享内存字节数是用户自定义设置,根据实际需求来设定,如将size配置为0-1gb中的任意值;如果一段进程只申请一块只有一个字节的内存,内存也会分配整整一页(在i386机器中一页的缺省大小pace_size=4096字节)这样,新创建的共享内存的大小实际上是从size这个参数调整而来的页面大小。即如果size为1至4096,则实际申请到的共享内存大小为4k(一页);4097到8192,则实际申请到的共享内存大小为8k(两页),依此类推。

shmflag(可以理解为共享内存的标志位值)可以配置为ipc_creat,表示如果共享内存不存在,则创建一个共享内存,否则打开操作。如果单独使用ipc_creat,shmget()函数要么返回一个已经存在的共享内存的操作符,要么返回一个新建的共享内存的标识符。如果将ipc_creat和ipc_excl标志一起使用,shmget()将返回一个新建的共享内存的标识符;如果该共享内存已存在,或者返回-1。ipc_exel标志本身并没有太大的意义,但是和ipc_creat标志一起使用可以用来保证所得的对象是新建的,而不是打开已有的对象。对于用户的读取和写入许可指定shm_r和shm_w,(shm_r>3)和(shm_w>3)是一组读取和写入许可,而(shm_r>6)和(shm_w>6)是全局读取和写入许可。

函数封装单元102,用于将所述共享内存函数封装至待通讯虚拟机中的本地接口;其中,待通讯虚拟机中包括至少一数据发送端和至少一数据接收端。

在本实施例中,当创建了共享内存,例如这一共享内存可以是位于多个java虚拟机中的其中某一java虚拟机中,创建完成之后,将所述共享内存函数存储在需进行通讯的虚拟机中。例如待通讯虚拟机中包括至少一数据发送端和至少一数据接收端,其中数据发送端和数据接收端均可以视为一java虚拟机,则将所述共享内存函数封装至数据发送端的本地接口,且将所述共享内存函数封装至数据接收端的本地接口。当数据发送端和数据接收端均调用各自的本地接口中的共享内存函数,即可快速建立通讯连接。

在一实施例中,如图7所述,函数封装单元102中包括:

编译单元1021,用于将所述共享内存函数进行编译,得到与所述共享内存函数对应的头文件;

头文件引入单元1022,用于将所述头文件引入至待通讯虚拟机中的本地接口的动态链接库文件;

环境变量配置单元1023,用于将所述动态链接库文件配置到待通讯虚拟机中的环境变量,以完成共享内存函数封装。

在本实施例中,将共享内存函数进行编译后,再引入到数据发送端的本地接口的dll文件(dynamiclinklibrary,表示动态链接库文件)中和数据接收端的本地接口的dll文件中。完成上述过程后,再将数据发送端的本地接口的dll文件配置到数据发送端的环境变量,且将数据接收端的本地接口的dll文件配置到数据接收端的环境变量中,即可完成共享内存函数的封装过程。完成上述函数封装过程后,即可确保后续通讯过程的正常建立。

连接建立单元103,用于若检测到数据发送端的数据发送请求,通过解析所述共享内存函数,将所述共享内存对应的地址分别映射至数据发送端和数据接收端,以将待通讯虚拟机中的数据发送端与数据接收端通过本地接口建立连接。

在本实施例中,若数据发送端有数据发送请求,则表示需与数据接收端进行通讯连接,此时需将数据发送端的本地接口中所封装的共享内存函数进行解析,同时将数据接收端的本地接口中所封装的共享内存函数进行解析,在通过共享内存函数将所述共享内存对应的地址分别映射至数据发送端和数据接收端,以确保数据发送端和数据接收端均能访问该共享内存。

在一实施例中,如图8所示,连接建立单元103包括:

环境变量获取单元1031,用于获取待通讯虚拟机中的环境变量,并根据环境变量获取对应的动态链接库文件;

反编译单元1032,用于对所述动态链接库文件进行反编译,获取所述动态链接库文件中的头文件;

共享内存函数获取单元1033,用于获取所述头文件中的共享内存函数,得到与所述共享内存函数中的共享内存字节数。

在本实施例中,解析内存共享函数即是封装内存共享函数的逆向过程。通过上述逆向过程,即可实现快速将所述共享内存对应的地址分别映射至数据发送端和数据接收端,以确保数据发送端和数据接收端均能访问该共享内存。

在一实施例中,如图9所示,连接建立单元103还包括:

地址定位单元1034,用于根据所述共享内存函数中的共享内存字节数,获取所述共享内存的起始地址和终止地址;

地址计算单元1035,用于根据所述共享内存的起始地址和终止地址,获取所述共享内存对应的地址;

地址映射单元1036,用于将所述共享内存对应的地址通过空指针随机分别映射至数据发送端的空间地址,及数据接收端的空间地址。

在本实施例中,通过获取所述共享内存函数中的共享内存字节数,即可在所指定的java虚拟机对应进程地址空间的空余空间中随机指定一起始地址,根据起始地址与共享内存字节数求和定位终止地址,根据所述共享内存的起始地址和终止地址,即可获取所述共享内存对应的地址。最后,将所述共享内存对应的地址通过空指针随机分别映射至数据发送端的空间地址,及数据接收端的空间地址,实现共享内存空间的精准映射。

数据通讯单元104,用于所述共享内存获取所述数据发送端的通讯数据,并将所述通讯数据发送至所述数据接收端。

在本实施例中,通讯数据是先从数据发送端输入至共享内存,再由共享内存发送至数据接收端,上述过程中仅仅拷贝了两次数据,提升了通讯的效率。

在一实施例中,如图10所示,虚拟机内存共享装置100还包括:

共享内存释放单元105,用于若所述数据发送端终止通讯数据的发送超出预设的时间阈值,将所述共享内存进行释放。

在本实施例中,java虚拟机之间在通过共享内存进行通讯时,并不总是读写少量数据后就解除映射,然后又有新的通信时再重新建立共享内存区域。而是保持共享内存,直到通讯完毕为止(若所述数据发送端终止通讯数据的发送超出预设的时间阈值,则可表示通讯完毕),这样数据内容一直保存在共享内存中,并没有写回文件,共享内存中的内容往往是在解除映射时才写回文件的。因此,采用共享内存的通信方式效率是非常高的。

可见,该装置实现了不同虚拟机之间通过一块共享内存进行数据读写,提高了虚拟机之间的数据交换速率。

上述虚拟机内存共享装置可以实现为一种计算机程序的形式,该计算机程序可以在如图11所示的计算机设备上运行。

请参阅图11,图11是本申请实施例提供的一种计算机设备的示意性框图。该计算机设备500设备可以是终端,也可以是服务器。该终端可以是平板电脑、笔记本电脑、台式电脑、个人数字助理等电子设备。

参阅图11,该计算机设备500包括通过系统总线501连接的处理器502、存储器和网络接口505,其中,存储器可以包括非易失性存储介质503和内存储器504。

该非易失性存储介质503可存储操作系统5031和计算机程序5032。该计算机程序5032包括程序指令,该程序指令被执行时,可使得处理器502执行一种虚拟机内存共享方法。

该处理器502用于提供计算和控制能力,支撑整个计算机设备500的运行。

该内存储器504为非易失性存储介质503中的计算机程序5032的运行提供环境,该计算机程序5032被处理器502执行时,可使得处理器502执行一种虚拟机内存共享方法。

该网络接口505用于进行网络通信,如发送分配的任务等。本领域技术人员可以理解,图11中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备500的限定,具体的计算机设备500可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

其中,所述处理器502用于运行存储在存储器中的计算机程序5032,以实现如下功能:创建共享内存,及与所述共享内存对应的共享内存函数;将所述共享内存函数封装至待通讯虚拟机中的本地接口;其中,待通讯虚拟机中包括至少一数据发送端和至少一数据接收端;若检测到数据发送端的数据发送请求,通过解析所述共享内存函数,将所述共享内存对应的地址分别映射至数据发送端和数据接收端,以将待通讯虚拟机中的数据发送端与数据接收端通过本地接口建立连接;所述共享内存获取所述数据发送端的通讯数据,并将所述通讯数据发送至所述数据接收端。

在一实施例中,处理器502还执行如下操作:将所述共享内存函数进行编译,得到与所述共享内存函数对应的头文件;将所述头文件引入至待通讯虚拟机中的本地接口的动态链接库文件;将所述动态链接库文件配置到待通讯虚拟机中的环境变量,以完成共享内存函数封装;其中所述共享内存函数中的函数传入值至少包括共享内存字节数。

在一实施例中,处理器502还执行如下操作:获取待通讯虚拟机中的环境变量,并根据环境变量获取对应的动态链接库文件;对所述动态链接库文件进行反编译,获取所述动态链接库文件中的头文件;获取所述头文件中的共享内存函数,得到与所述共享内存函数中的共享内存字节数。

在一实施例中,处理器502还执行如下操作:根据所述共享内存函数中的共享内存字节数,获取所述共享内存的起始地址和终止地址;根据所述共享内存的起始地址和终止地址,获取所述共享内存对应的地址;将所述共享内存对应的地址通过空指针随机分别映射至数据发送端的空间地址,及数据接收端的空间地址。

在一实施例中,处理器502还执行如下操作:若所述数据发送端终止通讯数据的发送超出预设的时间阈值,将所述共享内存进行释放。

本领域技术人员可以理解,图11中示出的计算机设备的实施例并不构成对计算机设备具体构成的限定,在其他实施例中,计算机设备可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。例如,在一些实施例中,计算机设备可以仅包括存储器及处理器,在这样的实施例中,存储器及处理器的结构及功能与图11所示实施例一致,在此不再赘述。

应当理解,在本申请实施例中,处理器502可以是中央处理单元(centralprocessingunit,cpu),该处理器502还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。其中,通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

在本申请的另一实施例中提供一种存储介质。该存储介质可以为计算机可读存储介质。该存储介质存储有计算机程序,其中计算机程序包括程序指令。该程序指令被处理器执行时实现:创建共享内存,及与所述共享内存对应的共享内存函数;将所述共享内存函数封装至待通讯虚拟机中的本地接口;其中,待通讯虚拟机中包括至少一数据发送端和至少一数据接收端;若检测到数据发送端的数据发送请求,通过解析所述共享内存函数,将所述共享内存对应的地址分别映射至数据发送端和数据接收端,以将待通讯虚拟机中的数据发送端与数据接收端通过本地接口建立连接;所述共享内存获取所述数据发送端的通讯数据,并将所述通讯数据发送至所述数据接收端。

在一实施例中,该程序指令被处理器执行时实现:将所述共享内存函数进行编译,得到与所述共享内存函数对应的头文件;将所述头文件引入至待通讯虚拟机中的本地接口的动态链接库文件;将所述动态链接库文件配置到待通讯虚拟机中的环境变量,以完成共享内存函数封装;其中所述共享内存函数中的函数传入值至少包括共享内存字节数。

在一实施例中,该程序指令被处理器执行时实现:获取待通讯虚拟机中的环境变量,并根据环境变量获取对应的动态链接库文件;对所述动态链接库文件进行反编译,获取所述动态链接库文件中的头文件;获取所述头文件中的共享内存函数,得到与所述共享内存函数中的共享内存字节数。

在一实施例中,该程序指令被处理器执行时实现:根据所述共享内存函数中的共享内存字节数,获取所述共享内存的起始地址和终止地址;根据所述共享内存的起始地址和终止地址,获取所述共享内存对应的地址;将所述共享内存对应的地址通过空指针随机分别映射至数据发送端的空间地址,及数据接收端的空间地址。

在一实施例中,该程序指令被处理器执行时实现:若所述数据发送端终止通讯数据的发送超出预设的时间阈值,将所述共享内存进行释放。

所述存储介质可以是前述设备的内部存储单元,例如设备的硬盘或内存。所述存储介质也可以是所述设备的外部存储设备,例如所述设备上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,所述存储介质还可以既包括所述设备的内部存储单元也包括外部存储设备。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的设备、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

在本申请所提供的几个实施例中,应该理解到,所揭露的设备、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,也可以将具有相同功能的单元集合成一个单元,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1