CN115617537A - 一种数据传输方法及装置、存储介质 - Google Patents
一种数据传输方法及装置、存储介质 Download PDFInfo
- Publication number
- CN115617537A CN115617537A CN202110797638.2A CN202110797638A CN115617537A CN 115617537 A CN115617537 A CN 115617537A CN 202110797638 A CN202110797638 A CN 202110797638A CN 115617537 A CN115617537 A CN 115617537A
- Authority
- CN
- China
- Prior art keywords
- file descriptor
- data
- physical memory
- shared physical
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例公开了一种数据传输方法及装置、存储介质,方法包括:在第一进程通过套接字接口接收到第二进程发送的内存分配请求的情况下,通过第一进程,基于ION内存管理机制分配共享物理内存,并将在第一进程中指向共享物理内存的第一文件描述符复制到套接字接口;通过套接字接口,将复制的第一文件描述符转换为在第二进程中指向共享物理内存的第二文件描述符,并将第二文件描述符传输至第二进程;通过第二进程,利用第二文件描述符将待处理数据写入共享物理内存;在第一进程通过套接字接口接收到第二进程发送的完成数据写入的消息的情况下,通过第一进程,利用进程中第一文件描述符从共享物理内存中获取待处理数据。
Description
技术领域
本申请实施例涉及通信技术领域,尤其涉及一种数据传输方法及装置、存储介质。
背景技术
目前,在Android系统的手机、平板电脑等电子设备中,常常采用的进程间的数据传输方案,主要有Binder机制和匿名共享内存机制。
Binder机制是一种用于跨进程通信的机制,其涉及作为客户端的客户进程,作为服务端的服务进程、服务管理进程和Binder驱动。其中,Binder驱动是一种虚拟设备驱动,是连接服务进程、客户进程和服务管理进程的桥梁,通过内存映射传递进程间的数据,而且采用Binder线程池方式实现线程控制。
匿名共享内存机制基于内存映射文件系统调用,不同进程可以将同一段物理内存映射到各自的虚拟地址控制实现共享,进程间不需要再拷贝数据。
然而,对于Binder机制的进程间数据传输,不适合传输大数据,匿名共享内存机制虽然适合传输大数据,但是,其不仅接口适配开发成本高,而且仅能支持一个进程向另一个进程方向传输文件描述符,共享内存区域在虚拟空间是连续的,物理内存却不必定连续,不适合共享内存必须是物理内存连续的场景,限制了应用场景,此外,如果肆意使用,会导致系统资源不足,性能下降。
发明内容
本申请实施例提供一种数据传输方法及装置、存储介质,进程间通信的依赖较少,适用于更多的进程间通信场景,灵活性较高。
本申请实施例的技术方案是这样实现的:
本申请实施例提供了一种数据传输方法,包括:
在第一进程通过套接字接口接收到第二进程发送的内存分配请求的情况下,通过所述第一进程,基于ION内存管理机制分配共享物理内存,并将在所述第一进程中指向所述共享物理内存的第一文件描述符复制到所述套接字接口;
通过所述套接字接口,将复制的所述第一文件描述符转换为在所述第二进程中指向所述共享物理内存的第二文件描述符,并将所述第二文件描述符传输至所述第二进程;
通过所述第二进程,利用所述第二文件描述符将待处理数据写入所述共享物理内存;
在所述第一进程通过所述套接字接口接收到所述第二进程发送的完成数据写入的消息的情况下,通过所述第一进程,利用进程中所述第一文件描述符从所述共享物理内存中获取所述待处理数据。
在上述方法中,所述基于ION内存管理机制分配共享物理内存,包括:
从ION接口库中获取支持内存管理分配的应用程序编程接口;
调用所述应用程序编程接口,在内存堆上分配连续的物理内存,得到所述共享物理内存。
在上述方法中,所述将在所述第一进程中指向所述共享物理内存的第一文件描述符复制到所述套接字接口,包括:
生成携带复制的所述第一文件描述符,且指向所述第二进程的目标套接字文件;
通过所述第一进程,将所述目标套接字文件传输至所述套接字接口;
相应的,所述将复制的所述第一文件描述符转换为在所述第二进程中指向所述共享物理内存的第二文件描述符,并将所述第二文件描述符传输至所述第二进程,包括:
利用所述目标套接字文件,获取复制的所述第一文件描述符,并将复制的所述第一文件描述转换为所述第二文件传输符,传输至所述第二进程。
在上述方法中,所述生成携带复制的所述第一文件描述符,且指向所述第二进程的目标套接字文件,包括:
创建与所述第一进程的地址关联的初始套接字文件;
在所述初始套接字文件中,设置用于支持将复制的所述第一文件描述符向所述第二进程传输的结构体,并将所述第一文件描述符写入控制信息空间,得到所述目标套接字文件。
在上述方法中,所述利用所述第二文件描述符将待处理数据写入所述共享物理内存,包括:
根据所述第二文件描述符,将所述共享物理内存映射到所述第二进程中的第一虚拟地址;
在所述第一虚拟地址处,写入所述待处理数据。
在上述方法中,所述利用进程中所述第一文件描述符从所述共享物理内存中获取所述待处理数据,包括:
根据进程中所述第一文件描述符,将所述共享物理内存映射到所述第一进程中的第二虚拟地址;
从所述第二虚拟地址处,读取所述待处理数据。
在上述方法中,所述利用进程中所述第一文件描述符从所述共享物理内存中获取所述待处理数据之后,所述方法还包括:
通过所述第一进程,对所述待处理数据进行数据处理,并在数据处理完成的情况下,释放所述共享物理内存。
在上述方法中,所述通过所述第一进程,对所述待处理数据进行数据处理之后,所述方法还包括:
在数据处理完成的情况下,通过所述套接字接口,将所述第一进程提供的已完成对所述待处理数据的处理的消息发送至所述第二进程。
本申请实施例提供了一种数据传输装置,包括:
处理模块,用于在第一进程通过套接字接口接收到第二进程发送的内存分配请求的情况下,通过所述第一进程,基于ION内存管理机制分配共享物理内存,并将在所述第一进程中指向所述共享物理内存的第一文件描述符复制到所述套接字接口;
传输模块,用于通过所述套接字接口,将复制的所述第一文件描述符转换为在所述第二进程中指向所述共享物理内存的第二文件描述符,并将所述第二文件描述符传输至所述第二进程;
写入模块,用于通过所述第二进程,利用所述第二文件描述符将待处理数据写入所述共享物理内存;
读取模块,用于在所述第一进程通过所述套接字接口接收到所述第二进程发送的完成数据写入的消息的情况下,通过所述第一进程,利用进程中所述第一文件描述符从所述共享物理内存中获取所述待处理数据。
本申请实施例提供了一种数据传输装置,包括:处理器、存储器和通信总线;
所述通信总线,用于实现所述处理器和所述存储器之间的通信连接;
所述处理器,用于执行所述存储器存储的一个或多个程序,以实现上述数据传输方法。
本申请实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述数据传输方法。
本申请实施例提供了一种数据传输方法及装置、存储介质,方法包括:在第一进程通过套接字接口接收到第二进程发送的内存分配请求的情况下,通过第一进程,基于ION内存管理机制分配共享物理内存,并将在第一进程中指向共享物理内存的第一文件描述符复制到套接字接口;通过套接字接口,将复制的第一文件描述符转换为在第二进程中指向共享物理内存的第二文件描述符,并将第二文件描述符传输至第二进程;通过第二进程,利用第二文件描述符将待处理数据写入共享物理内存;在第一进程通过套接字接口接收到第二进程发送的完成数据写入的消息的情况下,通过第一进程,利用进程中第一文件描述符从共享物理内存中获取待处理数据。本申请实施例提供的数据传输方法,基于ION内存管理机制为进程分配共享的物理内存,并结合套接字接口实现不同进程之间的文件描述符的传输,以支持进程间的数据传输,进程间通信的依赖较少,适用于更多的进程间通信场景,灵活性较高。
附图说明
图1为本申请实施例提供的一种数据传输方法的流程图;
图2为本申请实施例提供的一种示例性的ION内存管理机制的基本框架;
图3为本申请实施例提供的一种示例性的两个进程间进行数据传输的流程示意图;
图4为本申请实施例提供的一种数据传输装置的结构示意图一;
图5为本申请实施例提供的一种数据传输装置的结构示意图二。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
下面将通过实施例并结合附图具体地对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。
另外,本申请实施例所记载的技术方案之间,在不冲突的情况下,可以任意组合。
本申请实施例提供了一种数据传输方法,通过数据传输装置实现。数据传输装置的具体类型本申请实施例不作限定,其可以为任何用户设备,例如可以为智能手机、个人计算机、笔记本电脑、平板电脑和便携式可穿戴设备等。
图1为本申请实施例提供的一种数据传输方法的流程示意图。如图1所示,在本申请的实施例中,数据传输方法主要包括以下步骤:
S101、在第一进程通过套接字接口接收到第二进程发送的内存分配请求的情况下,通过第一进程,基于ION内存管理机制为第二进程分配共享物理内存,并将在第一进程中指向共享物理内存的第一文件描述符复制到套接字接口。
在本申请的实施例中,数据传输装置中包括第一进程、第二进程和套接字接口,在第一进程通过套接字接口接收到第二进程发送的内存分配请求的情况下,第一进程将基于ION内存管理机制为第二进程分配共享物理内存,并将在第一进程中指向共享物理内存的第一文件描述符复制到套接字接口。
需要说明的是,在本申请的实施例中,第一进程和第二进程可以是数据传输装置中任意的进程,第一进程和第二进程之间的数据通信通过套接字(Socket)接口实现。具体的第一进程和第二进程本申请实施例不作限定。
需要说明的是,在本申请的实施例中,在数据传输装置中,第二进程需要与第一进程进行数据共享的情况下,可以通过Socket接口向第一进程发送内存分配请求,请求第一进程向其分配共享物理内存,用于写入需要传输的数据,即待传输数据。
具体的,在本申请的实施例中,数据传输装置基于ION内存管理机制为第二进程分配共享物理内存,包括:从ION接口库中获取支持内存管理分配的应用程序编程接口;调用应用程序编程接口,在内存堆上为第二进程分配连续的物理内存,得到共享物理内存。
需要说明的是,ION内存管理机制是当前Android常用的内存分配管理机制,在多媒体部分中使用的最多,例如从相机到显示器,从媒体服务器到显示合成系统,都会利用ION内存管理机制进行内存分配管理。
需要说明的是,ION内存管理机制和匿名共享内存机制都经过内存映射文件系统来实现共享内存,其区别在于ION内存管理机制的共享区域是一段连续的物理内存,而匿名共享内存机制的共享区域在虚拟空间是连续的,物理内存却不必定连续。而某些设备只能工作在连续的物理内存上,因此需要利用ION内存管理机制来实现。
需要说明的是,ION内存管理机制,最显著的特点是它可以被用户空间的进程之间或者内核空间的模块之间进行内存共享,是在各种内存堆上分配内存。图2为本申请实施例提供的一种示例性的ION内存管理机制的基本框架。图中进程1、进程2、进程3表示用户空间进程。ION核心层提供设备创建、注册等服务,同时提供统一的接口给用户使用。ION驱动利用ION核心层对相应功能进行实现,可以说它是具体平台相关的。
需要说明的是,在本申请的实施例中,数据传输装置中封装了一个ION接口库,通过该套接口,可以实现共享内存空闲分配和释放共享内存代码。具体的ION接口库包括的应用程序编程接口包括:
ion_open接口:打开/dev/ion设备获取文件描述符,后续对文件的操作都是基于该文件描述符;
ion_alloc接口:指定分配的内存空间的大小和类型,需要注意的是内存空间的大小,在相机等一些应用场景下经常会被要求内存空间要对齐,返回的是共享物理内存的操作句柄;
ion_share接口:把操作句柄内存共享出去,用来配置分配的共享物理内存可共享给其他进程,即其他进程有权限访问该端物理内存;
mmap接口:把操作句柄转化为当前进程的虚拟地址,然后对虚拟地址指向的共享物理内存进行操作。
可以理解的是,在本申请的实施例中,通过上述ION接口库中的具体应用程序编程接口即可实现共享物理内存的分配,此外,在第一进程为第二进程分配了共享物理内存之后,即可直接获取该物理内存在第一进程中对应的第一文件描述符。
具体的,在本申请的实施例中,第一进程将在第一进程中指向共享物理内存的第一文件描述符复制到套接字接口,包括:通过第一进程,生成携带复制的第一文件描述符,且指向第二进程的目标套接字文件;通过第一进程,将目标套接字文件传输至套接字接口。
需要说明的是,在本申请的实施例中,第一进程中的第一文件描述符,与复制的第一文件描述符完全一致。
S102、通过套接字接口,将复制的第一文件描述符转换为在第二进程中指向共享物理内存的第二文件描述符,并将第二文件描述符传输至第二进程。
在本申请的实施例中,数据传输装置通过第一进程为第二进程分配了共享物理内存之后,进一步的,通过套接字接口,将复制的第一文件描述符转换为在第二进程中指向共享物理内存的第二文件描述符,并将第二文件描述符传输至第二进程。
需要说明的是,在本申请的实施例中,同一物理内存在不同的进程中对应的文件描述符,可能是不同的,因此,如果直接将复制的第一文件描述符,即与进程中的第一文件传输符完成一致的文件传输符传输给第二进程,那么后续可能会出现数据无法获取,或者,获取错误的问题出现,因此,需要先将第一文件描述符进行转换,得到在第二进程中指向共享物理内存的第二文件描述符。
具体的,在本申请的实施例中,与上述实现复制第一文件描述符的具体过程相对应,套接字接口,将复制的第一文件描述符转换为在第二进程中指向共享物理内存的第二文件描述符,并将第二文件描述符传输至第二进程,包括:利用目标套接字文件,获取复制的第一文件描述符,并将第一文件描述转换为第二文件传输符,传输至第二进程。
可以理解的是,在本申请的实施例中,数据传输装置中的第一进程与第二进程通过套接字接口实现通讯,因此,第一进程需要先生成携带复制的第一文件描述符的目标套接字文件,从而提供给套接字接口,套接字接口即可进行文件描述符的转换,将第二文件描述符传输给第二进程。
需要说明的是,在本申请的实施例中,在数据传输装置为UNIX系统的情况下,具体可以采用进程间通信方式UNIX domain socket,即用于同一台主机的进程间通信,不需要经过网络协议栈,不需要打包拆包,计算校验和,维护序号和应答,只是将应用层数据从一个进程拷贝到另一个进程的通信方式,实现通信。
具体的,在本申请的实施例中,第一进程生成携带第一文件描述符,且指向第二进程的目标套接字文件,包括:创建与第一进程的地址关联的初始套接字文件;在初始套接字文件中,设置用于支持将复制的第一文件描述符向第二进程传输的结构体,并将复制的第一文件描述符写入控制信息空间,得到目标套接字文件。
需要说明的是,在本申请的实施例中,第一进程可以先创建一个初始套接字文件,具体使用数据报套接字SOCK_DGRAM,与用户数据报协议(User Datagram Protocol,UDP)类似,不需要建立链接,直接通过地址发送。而且使用UDP连接,不需要调用握手连接的阻塞接口,不会阻塞当前进程的处理流程。此外,第一进程将初始套接字文件进行绑定地址,这里的地址就不再是一个互联网协议地址了,而是一个文件路径,即与第一进程关联,从而其他的进程就可以通过这样一个特殊的地址跟第一进程发送消息了。就跟发送UDP消息一样,不同的是使用struct sockaddr_un来定义地址,而不是struct sockaddr_in.除此之外,其他进程还可以通过发送控制信息向这个进程传递文件描述符。
需要说明的是,在本申请的实施例中,第一进程在初始套接字文件中,可以设置用于写入控制信息的空间,即控制信息空间,从而将复制的第一文件描述符写入其中。
需要说明的是,第一进程设置的用于支持复制的第一文件描述符向第二进程传输的结构体中:
目标地址:该地址是可选的,如果协议是面向连接的,就不需要指定地址;否则就需要指定地址;
要发送的数据:这是一个数组,数组的长度由msg_iovlen指定,数组的元素是一个struct iovec结构体,指定一段连续数据的起始地址(iov_base)和长度(iov_len).也就是说,它可以发送多段连续数据;或者说,可以发送一段不连续的数据;
控制信息:不能直接设置它,必须使用一系列的宏来设置它。msg_control指向一个由struct cmsghdr结构体及其附加数据构成的序列。struct cmsghdr实际上定义的是数据的头部,后面应该紧跟着一个unsigned char数组,存放控制信息的实际数据,也就是通常的"变长结构体",msg_control便是指向一个由这样的变长结构体构成的序列。
需要说明的是,在本申请的实施例中,数据传输装置中可以提供一对系统调用:sendmsg和recvmsg,与常用的发送和接收不同,它们除了可以发送或接收常规数据之外,还可以用来发送或接收控制信息,这是传递文件描述符的关键。第一进程可以通过调用sendmsg发送复制的第一文件描述符,第二进程可以通过调用recvmsg接收转换到的第二文件描述符。核心在于:首先,创建的套接字类型是UNIX socket,其次发送时设置msg.msg_control,其值为struct cmsghdr且cmptr->cmsg_type设置成SCM_RIGHTS,从而根据cmsg_type值,会对发送方的文件描述符进行转换,转换成接收方的文件描述符。
S103、通过第二进程,利用第二文件描述符将待处理数据写入共享物理内存。
在本申请的实施例中,数据传输装置在通过套接字接口将第二文件描述符传输至第二进程之后,即可通过第二进程,利用第二文件描述符将待处理数据写入共享物理内存。
具体的,在本申请的实施例中,第二进程利用第二文件描述符将待处理数据写入共享物理内存,包括:根据第二文件描述符,将共享物理内存映射到第二进程中的第一虚拟地址;在第一虚拟地址处,写入待处理数据。
可以理解的是,在本申请的实施例中,第二进程在获得第二文件描述符之后,由于第二文件描述符指向了共享物理内存,因此,第二进程可以获知共享物理内存,将其映射到自己进程中的一个虚拟地址,该虚拟地址记为第一虚拟地址,这样,第二进程将待处理数据写入第一虚拟地址处,即实现了将待处理数据存储到共享物理内存。
S104、在第一进程通过套接字接口接收到第二进程发送的完成数据写入的消息的情况下,通过第一进程,利用进程中第一文件描述符从共享物理内存中获取待处理数据。
在本申请的实施例中,数据处理装置在通过第二进程将待处理数据写入共享物理内存之后,即可通过第一进程从共享物理内存中获取待处理数据,完成第一进程与第二进程间的数据传输。
需要说明的是,在本申请的实施例中,第二进程利用第二文件描述符将待处理数据写入共享物理内存之后,还可以通过套接字接口向第一进程发送完成数据写入的消息,通知第一进程。
具体的,在本申请的实施例中,第一进程利用进程中第一文件描述符从共享物理内存中获取待处理数据,包括:根据进程中第一文件描述符,将共享物理内存映射到第一进程中的第二虚拟地址;从第二虚拟地址处,读取待处理数据。
可以理解的是,在本申请的实施例中,第一进程中指向共享物理内存的文件描述符为第一文件描述符,由于第一文件描述符指向了共享物理内存,因此,第一进程可以获知共享物理内存,从而将其映射到自己进程中的一个虚拟地址,该虚拟地址记为第二虚拟地址,这样,在第二进程将待处理数据写入第一虚拟地址处,实现了将待处理数据存储到共享物理内存的情况下,第一进程可以从第二虚拟地址处,读取出共享物理内存中的待处理数据,第一进程即可通过共享物理内存实现数据传输。
在本申请的实施例中,数据传输装置通过第一进程,利用进程中第一文件描述符从共享物理内存中获取待处理数据之后,还可以执行以下步骤:通过第一进程,对待处理数据进行数据处理,并在数据处理完成的情况下,释放共享物理内存。
可以理解的是,在本申请的实施例中,第一进程在获取到第二进程提供的待处理数据之后,可以对其进行数据处理,而在完成数据处理之后,实际上共享物理内存就完成了提供数据的任务,因此,可以释放共享物理内存,这样,在后续其它进程间进行数据传输时,可以将该共享物理内存进行分配。
在本申请的实施例中,数据传输装置通过第一进程,对待处理数据进行数据处理之后,还可以执行以下步骤:在数据处理完成的情况下,通过套接字接口,将第一进程提供的已完成对待处理数据的处理的消息发送至第二进程。
可以理解的是,在本申请的实施例中,第一进程可以在对第二进程提供的待处理数据进行数据处理之后,通知第二进程已经完成数据处理,这样,第二进程也可以获知数据传输正常完成且已成功实现数据处理。
图3为本申请实施例提供的一种示例性的两个进程间进行数据传输的流程示意图。如图3所示,在本申请的实施例中,进程A通过套接字接口向进程B发送内存分配请求,进程B通过ION接口库分配共享物理内存,并保存分配的物理共享内存的文件描述符fd1,此外,进程B通过套接字接口将与第一文件描述符fd1对应同一共享物理内存的第二文件描述符fd2传输到进程A。进程A拿到fd2文件描述符,通过映射自己进程的虚拟地址ptr_A,但该虚拟地址空间操作的是同一块共享物理内存,进程A将数据复制到ptr_A地址处,可以通过套接字接口通知Process B这块内存写入完毕,进程B根据fd1进行映射将这块共享物理内存映射到自己进程的虚拟地址ptr_B,然后对该块数据进行处理,处理完毕后,可以释放该块共享物理内存。进程B处理完该共享物理内存的数据后,通知进程A已完成数据处理。
需要说明的是,在本申请的实施例中,可根据实际应用场景使用上述数据传输方案,如高频次传输帧数据,在android设备上,每一帧数据空间约几M字节,帧率为30fps或60fps,甚至120fps。每一帧数据的跨进程传输即可采用上述数据传输方案。首先,当1s内需要传输120帧数据时,即1s数据的跨进程传输和数据处理需要在1s/120=8.3ms内处理完毕,这对时延的要求性很高。如此,可以将跨进程传递数据和第一进程的句柄处理部分并行化,即第一进程获取到第二进程A完成数据写入共享物理内存的通知后,创建新的线程对该块内存中的数据进行处理,来消除串行化带来的处理时间开销;另外,当每帧数据空间很大时,第二进程获取到进程描述符后,映射后对该块空间填充数据,也需要耗时,如果耗时大于8.3ms,也会造成此次数据还未来得及处理,下次帧数据就会覆盖该块内存空间,所以基于上述方案进行扩展,在第一进程维护内存池,当进程请求空闲内存时,第一进程从内存池中找到一个未使用的内存将其文件描述符传递给第二进程进行映射再写入数据,等到第一进程新起线程完成该内存处理后,才会释放该内存到内存池中,结束其生命周期,才可供下次共享内存使用。
本申请实施例提供了一种数据传输方法,包括:在第一进程通过套接字接口接收到第二进程发送的内存分配请求的情况下,通过第一进程,基于ION内存管理机制分配共享物理内存,并将在第一进程中指向共享物理内存的第一文件描述符复制到套接字接口;通过套接字接口,将复制的第一文件描述符转换为在第二进程中指向共享物理内存的第二文件描述符,并将第二文件描述符传输至第二进程;通过第二进程,利用第二文件描述符将待处理数据写入共享物理内存;在第一进程通过套接字接口接收到第二进程发送的完成数据写入的消息的情况下,通过第一进程,利用进程中第一文件描述符从共享物理内存中获取待处理数据。本申请实施例提供的数据传输方法,基于ION内存管理机制为进程分配共享的物理内存,并结合套接字接口实现不同进程之间的文件描述符的传输,以支持进程间的数据传输,进程间通信的依赖较少,适用于更多的进程间通信场景,灵活性较高。
本申请实施例提供了一种数据传输装置,图4为本申请实施例提供的一种数据传输装置的结构示意图一。如图4所述,数据传输装置包括:
处理模块401,用于在第一进程通过套接字接口接收到第二进程发送的内存分配请求的情况下,通过所述第一进程,基于ION内存管理机制分配共享物理内存,并将在所述第一进程中指向所述共享物理内存的第一文件描述符复制到所述套接字接口;
传输模块402,用于通过所述套接字接口,将复制的所述第一文件描述符转换为在所述第二进程中指向所述共享物理内存的第二文件描述符,并将所述第二文件描述符传输至所述第二进程;
写入模块403,用于通过所述第二进程,利用所述第二文件描述符将待处理数据写入所述共享物理内存;
读取模块404,用于在所述第一进程通过所述套接字接口接收到所述第二进程发送的完成数据写入的消息的情况下,通过所述第一进程,利用进程中所述第一文件描述符从所述共享物理内存中获取所述待处理数据。
在本申请一实施例中,所述处理模块401,具体用于从ION接口库中获取支持内存管理分配的应用程序编程接口;调用所述应用程序编程接口,在内存堆上分配连续的物理内存,得到所述共享物理内存。
在本申请一实施例中,所述处理模块401,具体用于通过所述第一进程生成携带复制的所述第一文件描述符,且指向所述第二进程的目标套接字文件;通过所述第一进程,将所述目标套接字文件传输至所述套接字接口;
相应的,所述传输模块402,具体用于通过所述套接字接口,利用所述目标套接字文件,获取复制的所述第一文件描述符,并将复制的所述第一文件描述转换为所述第二文件传输符,传输至所述第二进程。
在本申请一实施例中,所述处理模块401,具体用于通过所述第一进程,创建与所述第一进程的地址关联的初始套接字文件;在所述初始套接字文件中,设置用于支持将复制的所述第一文件描述符向所述第二进程传输的结构体,并将所述第一文件描述符写入控制信息空间,得到所述目标套接字文件。
在本申请一实施例中,所述写入模块403,具体用于通过所述第二进程,根据所述第二文件描述符,将所述共享物理内存映射到所述第二进程中的第一虚拟地址;在所述第一虚拟地址处,写入所述待处理数据。
在本申请一实施例中,所述读取模块404,具体用于通过所述第一进程,根据进程中所述第一文件描述符,将所述共享物理内存映射到所述第一进程中的第二虚拟地址;从所述第二虚拟地址处,读取所述待处理数据。
在本申请一实施例中,所述处理模块401,还用于通过所述第一进程,对所述待处理数据进行数据处理,并在数据处理完成的情况下,释放所述共享物理内存。
在本申请一实施例中,所述处理模块401,还用于在数据处理完成的情况下,通过所述套接字接口,将所述第一进程提供的已完成对所述待处理数据的处理的消息发送至所述第二进程。
图5为本申请实施例提供的一种数据传输装置的结构示意图二。如图5所示,数据传输装置包括:处理器501、存储器502和通信总线503;
所述通信总线503,用于实现所述处理器501和所述存储器502之间的通信连接;
所述处理器501,用于执行所述存储器502存储的一个或多个程序,以实现上述数据传输方法。
本申请实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述数据传输方法。计算机可读存储介质可以是易失性存储器(volatile memory),例如随机存取存储器(Random-Access Memory,RAM);或者非易失性存储器(non-volatile memory),例如只读存储器(Read-Only Memory,ROM),快闪存储器(flash memory),硬盘(Hard Disk Drive,HDD)或固态硬盘(Solid-State Drive,SSD);也可以是包括上述存储器之一或任意组合的各自设备,如移动电话、计算机、平板设备、个人数字助理等。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的实现流程示意图和/或方框图来描述的。应理解可由计算机程序指令实现流程示意图和/或方框图中的每一流程和/或方框、以及实现流程示意图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在实现流程示意图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在实现流程示意图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在实现流程示意图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本实用申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (11)
1.一种数据传输方法,其特征在于,包括:
在第一进程通过套接字接口接收到第二进程发送的内存分配请求的情况下,通过所述第一进程,基于ION内存管理机制分配共享物理内存,并将在所述第一进程中指向所述共享物理内存的第一文件描述符复制到所述套接字接口;
通过所述套接字接口,将复制的所述第一文件描述符转换为在所述第二进程中指向所述共享物理内存的第二文件描述符,并将所述第二文件描述符传输至所述第二进程;
通过所述第二进程,利用所述第二文件描述符将待处理数据写入所述共享物理内存;
在所述第一进程通过所述套接字接口接收到所述第二进程发送的完成数据写入的消息的情况下,通过所述第一进程,利用进程中所述第一文件描述符从所述共享物理内存中获取所述待处理数据。
2.根据权利要求1所述的方法,其特征在于,所述基于ION内存管理机制分配共享物理内存,包括:
从ION接口库中获取支持内存管理分配的应用程序编程接口;
调用所述应用程序编程接口,在内存堆上分配连续的物理内存,得到所述共享物理内存。
3.根据权利要求1所述的方法,其特征在于,所述将在所述第一进程中指向所述共享物理内存的第一文件描述符复制到所述套接字接口,包括:
生成携带复制的所述第一文件描述符,且指向所述第二进程的目标套接字文件;
通过所述第一进程,将所述目标套接字文件传输至所述套接字接口;
相应的,所述将复制的所述第一文件描述符转换为在所述第二进程中指向所述共享物理内存的第二文件描述符,并将所述第二文件描述符传输至所述第二进程,包括:
利用所述目标套接字文件,获取复制的所述第一文件描述符,并将复制的所述第一文件描述转换为所述第二文件传输符,传输至所述第二进程。
4.根据权利要求3所述的方法,其特征在于,所述生成携带复制的所述第一文件描述符,且指向所述第二进程的目标套接字文件,包括:
创建与所述第一进程的地址关联的初始套接字文件;
在所述初始套接字文件中,设置用于支持将复制的所述第一文件描述符向所述第二进程传输的结构体,并将所述第一文件描述符写入控制信息空间,得到所述目标套接字文件。
5.根据权利要求1所述的方法,其特征在于,所述利用所述第二文件描述符将待处理数据写入所述共享物理内存,包括:
根据所述第二文件描述符,将所述共享物理内存映射到所述第二进程中的第一虚拟地址;
在所述第一虚拟地址处,写入所述待处理数据。
6.根据权利要求1所述的方法,其特征在于,所述利用进程中所述第一文件描述符从所述共享物理内存中获取所述待处理数据,包括:
根据进程中所述第一文件描述符,将所述共享物理内存映射到所述第一进程中的第二虚拟地址;
从所述第二虚拟地址处,读取所述待处理数据。
7.根据权利要求1或6所述的方法,其特征在于,所述利用进程中所述第一文件描述符从所述共享物理内存中获取所述待处理数据之后,所述方法还包括:
通过所述第一进程,对所述待处理数据进行数据处理,并在数据处理完成的情况下,释放所述共享物理内存。
8.根据权利要求7所述的方法,其特征在于,所述通过所述第一进程,对所述待处理数据进行数据处理之后,所述方法还包括:
在数据处理完成的情况下,通过所述套接字接口,将所述第一进程提供的已完成对所述待处理数据的处理的消息发送至所述第二进程。
9.一种数据传输装置,其特征在于,包括:
处理模块,用于在第一进程通过套接字接口接收到第二进程发送的内存分配请求的情况下,通过所述第一进程,基于ION内存管理机制分配共享物理内存,并将在所述第一进程中指向所述共享物理内存的第一文件描述符复制到所述套接字接口;
传输模块,用于通过所述套接字接口,将复制的所述第一文件描述符转换为在所述第二进程中指向所述共享物理内存的第二文件描述符,并将所述第二文件描述符传输至所述第二进程;
写入模块,用于通过所述第二进程,利用所述第二文件描述符将待处理数据写入所述共享物理内存;
读取模块,用于通过所述第一进程,利用进程中所述第一文件描述符从所述共享物理内存中获取所述待处理数据。
10.一种数据传输装置,其特征在于,包括:处理器、存储器和通信总线;
所述通信总线,用于实现所述处理器和所述存储器之间的通信连接;
所述处理器,用于执行所述存储器存储的一个或多个程序,以实现权利要求1-8任一项所述的数据传输方法。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1-8任一项所述的数据传输方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110797638.2A CN115617537A (zh) | 2021-07-14 | 2021-07-14 | 一种数据传输方法及装置、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110797638.2A CN115617537A (zh) | 2021-07-14 | 2021-07-14 | 一种数据传输方法及装置、存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115617537A true CN115617537A (zh) | 2023-01-17 |
Family
ID=84854980
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110797638.2A Pending CN115617537A (zh) | 2021-07-14 | 2021-07-14 | 一种数据传输方法及装置、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115617537A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117806892A (zh) * | 2024-02-29 | 2024-04-02 | 山东云海国创云计算装备产业创新中心有限公司 | 存储芯片模型测试方法、装置、通信设备及存储介质 |
-
2021
- 2021-07-14 CN CN202110797638.2A patent/CN115617537A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117806892A (zh) * | 2024-02-29 | 2024-04-02 | 山东云海国创云计算装备产业创新中心有限公司 | 存储芯片模型测试方法、装置、通信设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2021052437A1 (zh) | 一种应用启动方法及电子设备 | |
RU2477930C2 (ru) | Способ и система для передачи потоковых мультимедийных данных с нулевым копированием | |
US11281388B2 (en) | Method for managing a multi-system shared memory, electronic device and non-volatile computer-readable storage medium | |
JP7100154B2 (ja) | プロセッサコアのスケジューリング方法、装置、端末及び記憶媒体 | |
US10165058B2 (en) | Dynamic local function binding apparatus and method | |
CN112749022B (zh) | 相机资源访问方法、操作系统、终端和虚拟相机 | |
CN112799825A (zh) | 一种任务处理方法和网络设备 | |
CN114064302B (zh) | 一种进程间通信的方法及装置 | |
CN112906075A (zh) | 一种内存共享的方法及装置 | |
CN114281263B (zh) | 容器集群管理系统的存储资源处理方法、系统和设备 | |
CN112256460A (zh) | 进程间通信方法、装置、电子设备及计算机可读存储介质 | |
CN110753119A (zh) | 一种基于K8s集群的应用包部署系统 | |
CN112685148A (zh) | 海量终端的异步通信方法、装置、计算机设备和存储介质 | |
CN117692416B (zh) | 网络报文处理方法、装置、计算机设备和存储介质 | |
CN115617537A (zh) | 一种数据传输方法及装置、存储介质 | |
CN109302639B (zh) | 一种弹幕消息的分发方法、装置、终端和存储介质 | |
CN117453582A (zh) | 数据传输方法、设备及存储介质 | |
CN114253704A (zh) | 一种分配资源的方法及装置 | |
WO2023030178A1 (zh) | 一种基于用户态协议栈的通信方法及相应装置 | |
CN113726723B (zh) | 基于udp的数据传输方法、装置及设备 | |
CN116244231A (zh) | 一种数据传输方法、装置、系统、电子设备及存储介质 | |
US9990303B2 (en) | Sharing data structures between processes by semi-invasive hybrid approach | |
CN115037671B (zh) | 多路径聚合调度方法及电子设备 | |
CN109218371B (zh) | 一种调用数据的方法和设备 | |
CN115629809A (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 |