共享内存访问方法、装置、设备、存储介质及程序产品与流程

摘要: 本公开涉及通信,尤其涉及一种共享内存访问方法、装置、电子设备、存储介质及计算机程序产品。背景技术:1、在操作系统中,通过将进程间通信机制与共享内存结合,允许不同...
共享内存访问方法、装置、设备、存储介质及程序产品与流程

本公开涉及通信,尤其涉及一种共享内存访问方法、装置、电子设备、存储介质及计算机程序产品。

背景技术:

1、在操作系统中,通过将进程间通信机制与共享内存结合,允许不同应用程序或同一应用的不同组件之间,基于共享内存实现跨进程调用方法,从而进一步完善进程间通讯体系。然而,共享内存的使用有很多局限性。

技术实现思路

1、为克服相关技术中存在的问题,本公开提供一种共享内存访问方法、装置、电子设备、存储介质及计算机程序产品。

2、根据本公开实施例的第一方面,提供一种共享内存访问方法。该共享内存访问方法包括:获得第一进程对应的第一虚拟地址空间中的第一虚拟地址,其中,第一虚拟地址映射到共享内存的基地址;获得对象中的第一成员相关的第一偏移量,其中,第一偏移量是第一成员在共享内存中的第一物理地址相对于共享内存的基地址的偏移;根据第一偏移量和第一虚拟地址,对共享内存中的第一成员进行访问。

3、上述共享内存访问方法的优势在于:通过获得任意一个进程对应的虚拟地址空间中与共享内存的基地址对应的第一虚拟地址,再获得第一成员在共享内存中的第一物理地址相对于共享内存的基地址的第一偏移量,可以确定第一成员在共享内存中的存储位置,进而可以根据第一成员的存储位置,完成对共享内存中的第一成员进行访问。这一过程中,由于获得的是第一成员相关的第一偏移量,也就是第一成员相对于共享内存的基地址的相对地址,因此多个进程均可以根据该相对地址和共享内存的基地址,确定出第一成员的绝对地址,从而实现多个进程均可以对第一成员进行访问。如此,消除了多个进程之间将共享内存映射到不同虚拟地址空间,第一成员在不同虚拟地址空间的绝对地址不同,导致无法访问第一成员的问题。

4、在一些实施例中,获得对象中的第一成员相关的第一偏移量,包括:访问对象中的第二成员,其中,第二成员是第一成员的上一级成员;根据第二成员中的第一指针,确定第一偏移量。

5、上述共享内存访问方法的优势在于:相比于相关技术中第一指针用于指向第一成员的内存地址的方案,本公开实施例中的第一指针存储的是第一成员相对于共享内存的基地址的偏移量。如此,对象内部指针存储的是第一成员的相对位置,使得不同进程均可以根据对象内部指针访问第一成员,实现跨进程访问。

6、在一些实施例中,根据第一偏移量和第一虚拟地址,对共享内存中的第一成员进行访问,包括:根据第一偏移量和第一虚拟地址,确定第一虚拟地址空间中的第二虚拟地址;确定第一成员在共享内存中的第一物理地址,其中,第一物理地址映射到第二虚拟地址;根据第一物理地址,对第一成员进行访问。

7、上述共享内存访问方法的优势在于:进程运行时可动态计算偏移量与虚拟地址,并利用共享内存的物理地址的一致性,实现多进程对第一成员的协同读写,解决跨进程无法访问第一成员的问题。

8、在一些实施例中,方法还包括:创建共享内存;将共享内存映射到第一虚拟地址空间;将对象中的第一成员写入共享内存中的第一物理地址处;根据第一物理地址和共享内存的基地址,确定第一偏移量。

9、上述共享内存访问方法的优势在于:相比于相关技术中只能够获得第一成员在共享内存中的绝对地址的方案,本公开实施例能够获得第一成员相关的第一偏移量,使得多个进程根据第一偏移量确定第一成员的真实物理地址,进而访问第一成员,从而保证了跨进程通信的实现。

10、在一些实施例中,将对象中的第一成员写入共享内存中的第一物理地址处,包括:将共享内存划分为第一内存区和第二内存区,其中,第一内存区的起始地址为共享内存的基地址;通过内存分配器为第一成员分配内存,以使第一成员写入共享内存中的第一物理地址处,其中,内存分配器根据第一内存区的起始地址和第一内存区的容量,将第一成员存储于第二内存区中;第一成员在第二内存区中的物理地址为第一物理地址;其中,根据第一物理地址和共享物理内存的基地址,确定第一偏移量,包括:内存分配器根据第一物理地址和第一内存区的起始地址,确定第一偏移量;将第一偏移量存储在第一内存区中第二成员的第一指针。

11、上述共享内存访问方法的优势在于:在第一进程创建共享内存,并在共享内存中写入第一成员时,第二成员会记录第一成员相关的第一偏移量,从而保证任意进程可以通过第二成员获得第一成员的偏移量,进而使得对象中可以使用指针成员,实现跨进程访问指针成员指向的成员。

12、在一些实施例中,第一成员包括以下至少之一:数据;第二指针,用于对第一成员的下一级成员进行寻址。

13、在本公开实施例中,通过访问第一成员,可以获得数据或是第二指针,从而满足多个进程对第一成员的访问需求。

14、根据本公开实施例的第二方面,提供一种共享内存访问装置。该共享内存访问装置可以包括:第一获得单元,配置为获得第一进程对应的第一虚拟地址空间中的第一虚拟地址,其中,第一虚拟地址映射到共享内存的基地址;第二获得单元,配置为获得对象中的第一成员相关的第一偏移量,其中,第一偏移量是第一成员在共享内存中的第一物理地址相对于共享内存的基地址的偏移;访问单元,配置为根据第一偏移量和第一虚拟地址,对共享内存中的第一成员进行访问。

15、在一些实施例中,第二获得单元,还配置为访问对象中的第二成员,其中,第二成员是第一成员的上一级成员;根据第二成员中的第一指针,确定第一偏移量。

16、在一些实施例中,访问单元,还配置为根据第一偏移量和第一虚拟地址,确定第一虚拟地址空间中的第二虚拟地址;确定第一成员在共享内存中的第一物理地址,其中,第一物理地址映射到第二虚拟地址;根据第一物理地址,对第一成员进行访问。

17、在一些实施例中,共享内存访问装置还包括创建单元。创建单元,配置为创建共享内存;将共享内存映射到第一虚拟地址空间;将对象中的第一成员写入共享内存中的第一物理地址处;根据第一物理地址和共享内存的基地址,确定第一偏移量。

18、在一些实施例中,创建单元,还配置为将共享内存划分为第一内存区和第二内存区,其中,第一内存区的起始地址为共享内存的基地址;通过内存分配器为第一成员分配内存,以使第一成员写入共享内存中的第一物理地址处,其中,内存分配器根据第一内存区的起始地址和第一内存区的容量,将第一成员存储于第二内存区中;第一成员在第二内存区中的物理地址为第一物理地址;内存分配器根据第一物理地址和第一内存区的起始地址,确定第一偏移量;将第一偏移量存储在第一内存区中第二成员的第一指针。

19、在一些实施例中,第一成员包括以下至少之一:数据;第二指针,用于对第一成员的下一级成员进行寻址。

20、根据本公开实施例的第三方面,提供一种电子设备,包括:处理器;用于存储计算机程序或指令的存储器;其中,所述处理器执行所述计算机程序或指令,以实现如本公开第一方面任一项所述的方法的步骤。

21、根据本公开实施例的第四方面,提供一种非临时性计算机可读存储介质,所述存储介质存储有计算机程序或指令,当所述存储介质中的计算机程序或指令由处理器执行时,实现如本公开第一方面任一项所述的方法的步骤。

22、根据本公开实施例的第五方面,提供一种计算机程序产品,包括计算机程序或者指令,所述计算机程序或指令被处理器执行时,实现如本公开第一方面任一项所述的方法的步骤。

23、应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。