CN112416625A - 免拷贝的进程间通信系统及方法 - Google Patents
免拷贝的进程间通信系统及方法 Download PDFInfo
- Publication number
- CN112416625A CN112416625A CN202011377253.2A CN202011377253A CN112416625A CN 112416625 A CN112416625 A CN 112416625A CN 202011377253 A CN202011377253 A CN 202011377253A CN 112416625 A CN112416625 A CN 112416625A
- Authority
- CN
- China
- Prior art keywords
- memory
- shared memory
- unit
- shared
- address
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 305
- 230000006854 communication Effects 0.000 title claims abstract description 203
- 238000004891 communication Methods 0.000 title claims abstract description 198
- 230000005540 biological transmission Effects 0.000 claims abstract description 74
- 230000004044 response Effects 0.000 claims description 63
- 230000008569 process Effects 0.000 description 167
- 238000010586 diagram Methods 0.000 description 5
- 239000000284 extract Substances 0.000 description 4
- 108010001267 Protein Subunits Proteins 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000012369 In process control Methods 0.000 description 1
- FFBHFFJDDLITSX-UHFFFAOYSA-N benzyl N-[2-hydroxy-4-(3-oxomorpholin-4-yl)phenyl]carbamate Chemical compound OC1=C(NC(=O)OCC2=CC=CC=C2)C=CC(=C1)N1CCOCC1=O FFBHFFJDDLITSX-UHFFFAOYSA-N 0.000 description 1
- 210000004544 dc2 Anatomy 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000004190 ion pair chromatography Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
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/546—Message passing systems or structures, e.g. queues
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multi Processors (AREA)
Abstract
本发明公开了一种免拷贝的进程间通信系统及方法,涉及进程间通信技术领域。免拷贝的进程间通信系统包括:共享内存管理模块,用于获取共享内存池,将共享内存池按预设大小划分为若干个共享内存块;共享内存分配模块,用于在使用共享内存块的内存时,调用内存动态分配接口,在释放共享内存块的内存时,调用内存释放接口;进程间通信模块,用于通过内存动态分配接口获得内存接收地址或通过内存释放接口获得内存发送地址,将内存接收地址或内存发送地址转换为对应的共享内存物理地址,将对应的共享内存物理地址发送至对端程序,实现了无拷贝的进程间通信,减小了内存拷贝带来的性能损耗,提高了数据传输效率及用户体验。
Description
技术领域
本发明涉及进程间通信技术领域,尤其涉及一种免拷贝的进程间通信系统及方法。
背景技术
随着通信技术的发展,共享内存作为一种常见的进程间通信方式,在类Unix操作系统的所有IPC中,其性能最高。现有的共享内存通信库在发送端处理用户数据时,需要将用户数据从本地内存拷贝到共享内存中,共享内存通信库在接收端处理用户数据时,又需要将用户数据从共享内存中拷贝到本地内存中。这种内存拷贝方式会占用较多存储器资源和内存带宽资源,从而使得进程间通信的传输性能较差。
上述内容仅用于辅助理解本发明的技术方案,并不代表承认上述内容是现有技术。
发明内容
本发明的主要目的在于提供一种免拷贝的进程间通信系统及方法,旨在解决现有技术中进程通信过程需要进行多次数据拷贝,从而使得进程间通信的传输性能较差的技术问题。
为实现上述目的,本发明提供一种免拷贝的进程间通信系统,所述免拷贝的进程间通信系统包括:共享内存管理模块、共享内存分配模块及进程间通信模块;
所述共享内存管理模块,用于获取共享内存池,将所述共享内存池按预设大小划分为若干个共享内存块;
所述共享内存分配模块,用于在使用所述共享内存块的内存时,调用内存动态分配接口,在释放所述共享内存块的内存时,调用内存释放接口;
所述进程间通信模块,用于通过所述内存动态分配接口获得内存接收地址或通过所述内存释放接口获得内存发送地址,将所述内存接收地址或所述内存发送地址转换为对应的共享内存物理地址,将所述对应的共享内存物理地址发送至对端程序。
可选地,所述共享内存管理模块包括:内存管理区域单元及内存管理通道单元;
所述内存管理区域单元,用于获取共享内存区域池,将所述共享内存区域池按所述预设大小划分为若干个所述共享内存块;
所述内存管理通道单元,用于获取共享内存通道池,将所述共享内存通道池按预设规则划分为若干个发送队列及若干个接收队列,以通过所述发送队列或接收队列进行进程间通信。
可选地,所述共享内存分配模块包括分配单元;
所述分配单元,用于将所述共享内存块划分为若干个内存子单元,所述若干个内存子单元组合成若干个链表;
所述分配单元,还用于在使用所述链表对应的共享内存时,调用内存动态分配接口,在释放所述共享内存块的内存时,调用内存释放接口。
可选地,所述共享内存分配模块还包括注册单元;
所述注册单元,用于向所述共享内存管理模块发送注册请求,在注册成功后,得到所述共享内存管理模块中的共享内存块。
可选地,所述进程间通信模块包括:客户单元及服务单元;
所述客户单元,用于获取第一传输通道,通过预设通信方法与所述服务单元建立连接;
所述客户单元,还用于获取第一共享内存物理地址,对所述第一共享内存物理地址进行转换,得到第一主键标识,将所述第一主键标识写入所述第一传输通道,并生成第一通知信息,将所述第一通知信息采用所述预设通信方法发送至所述服务单元;
所述服务单元,还用于根据所述第一通知信息从所述第一传输通道中取出第一主键标识,并对所述第一主键标识进行解析,得到所述第一共享内存物理地址,以通过所述第一共享内存物理地址进行数据访问。
可选地,所述服务单元,用于获取第二传输通道,通过预设通信方法与所述客户单元建立连接;
所述服务单元,还用于在所述数据访问完成后获取第二共享内存物理地址,对所述第二共享内存物理地址进行转换和应答标记,得到应答主键标识,将所述应答主键标识写入所述第二传输通道,并生成第二通知信息,将所述第二通知信息采用所述预设通信方法发送至所述客户单元;
所述客户单元,还用于根据所述第二通知信息从所述第二传输通道中取出应答主键标识,并对所述应答主键标识进行识别,得到应答类型的主键标识;
所述客户单元,还用于对所述应答类型的主键标识进行解析,得到所述第二共享内存物理地址,以通过所述第二共享内存物理地址进行内存释放。
此外,为实现上述目的,本发明还提供一种免拷贝的进程间通信方法,所述免拷贝的进程间通信方法应用于免拷贝的进程间通信系统,所述免拷贝的进程间通信系统包括:共享内存管理模块、共享内存分配模块及进程间通信模块;
所述免拷贝的进程间通信方法包括:
所述共享内存管理模块获取共享内存池,将所述共享内存池按预设大小划分为若干个共享内存块;
所述共享内存分配模块在使用所述共享内存块的内存时,调用内存动态分配接口,在释放所述共享内存块的内存时,调用内存释放接口;
所述进程间通信模块通过所述内存动态分配接口获得内存接收地址或通过所述内存释放接口获得内存发送地址,将所述内存接收地址或所述内存发送地址转换为对应的共享内存物理地址,将所述对应的共享内存物理地址发送至对端程序。
可选地,所述共享内存管理模块包括:内存管理区域单元及内存管理通道单元;
所述共享内存管理模块获取共享内存池,将所述共享内存池按预设大小划分为若干个共享内存块,包括:
所述内存管理区域单元获取共享内存区域池,将所述共享内存区域池按所述预设大小划分为若干个所述共享内存块;
所述内存管理通道单元获取共享内存通道池,将所述共享内存通道池按预设规则划分为若干个发送队列及若干个接收队列,以通过所述发送队列或接收队列进行进程间通信。
可选地,所述共享内存分配模块包括注册单元及分配单元;
所述共享内存分配模块在使用所述共享内存块的内存时,调用内存动态分配接口,在释放所述共享内存块的内存时,调用内存释放接口之前,所述方法还包括:
所述注册单元向所述共享内存管理模块发送注册请求,在注册成功后,得到所述共享内存管理模块中的共享内存块;
所述分配单元将所述共享内存块划分为若干个内存子单元,所述若干个内存子单元组合成若干个链表;
所述共享内存分配模块在使用所述共享内存块的内存时,调用内存动态分配接口,在释放所述共享内存块的内存时,调用内存释放接口,包括:
所述分配单元在使用所述链表对应的共享内存时,调用内存动态分配接口,在释放所述共享内存块的内存时,调用内存释放接口。
可选地,所述进程间通信模块包括:客户单元及服务单元;
所述进程间通信模块通过所述内存动态分配接口获得内存接收地址或通过所述内存释放接口获得内存发送地址,将所述内存接收地址或所述内存发送地址转换为对应的共享内存物理地址,将所述对应的共享内存物理地址发送至对端程序,包括:
所述客户单元获取第一传输通道,通过预设通信方法与所述服务单元建立连接;
所述客户单元通过所述内存动态分配接口获得内存接收地址,将所述内存接收地址转换为对应的第一共享内存物理地址,对所述第一共享内存物理地址进行转换,得到第一主键标识,将所述第一主键标识写入所述第一传输通道,并生成第一通知信息,将所述第一通知信息采用所述预设通信方法发送至所述服务单元;
所述服务单元根据所述第一通知信息从所述第一传输通道中取出第一主键标识,并对所述第一主键标识进行解析,得到所述第一共享内存物理地址,以通过所述第一共享内存物理地址进行数据访问;
所述服务单元获取第二传输通道,通过预设通信方法与所述客户单元建立连接;
所述服务单元在所述数据访问完成后通过所述内存释放接口获得内存发送地址,将所述内存发送地址转换为对应的第二共享内存物理地址,对所述第二共享内存物理地址进行转换和应答标记,得到应答主键标识,将所述应答主键标识写入所述第二传输通道,并生成第二通知信息,将所述第二通知信息采用所述预设通信方法发送至所述客户单元;
所述客户单元根据所述第二通知信息从所述第二传输通道中取出应答主键标识,并对所述应答主键标识进行识别,得到应答类型的主键标识;
所述客户单元对所述应答类型的主键标识进行解析,得到所述第二共享内存物理地址,以通过所述第二共享内存物理地址进行内存释放。
本发明通过共享内存管理模块获取共享内存池,将所述共享内存池按预设大小划分为若干个共享内存块,共享内存分配模块在使用所述共享内存块的内存时,调用内存动态分配接口,在释放所述共享内存块的内存时,调用内存释放接口,进程间通信模块通过所述内存动态分配接口获得内存接收地址或通过所述内存释放接口获得内存发送地址,将所述内存接收地址或所述内存发送地址转换为对应的共享内存物理地址,将所述对应的共享内存物理地址发送至对端程序,从而实现无拷贝的进程间通信,解决了现有技术中进程通信过程需要进行多次数据拷贝,从而使得进程间通信的传输性能较差的技术问题,减小了内存拷贝带来的性能损耗,提高了数据传输效率及用户体验。
附图说明
图1为本发明免拷贝的进程间通信系统第一实施例的功能模块示意图;
图2为本发明免拷贝的进程间通信系统一实施例的用户信息表示意图;
图3为本发明免拷贝的进程间通信系统一实施例的通道信息表示意图;
图4为本发明免拷贝的进程间通信系统第二实施例的功能模块示意图;
图5为本发明免拷贝的进程间通信方法第一实施例的流程示意图;
图6为本发明免拷贝的进程间通信方法第二实施例的流程示意图
图7为本发明免拷贝的进程间通信方法第三实施例的流程示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
参照图1、图2、图3,图1为本发明免拷贝的进程间通信系统第一实施例的功能模块示意图。
所述免拷贝的进程间通信系统包括:共享内存管理模块10、共享内存分配模块20及进程间通信模块30。
需要说明的是,免拷贝的进程间通信系统可为一个基于共享内存的内存分配及回收的系统,可替换原有方式中对内存分配及释放接口的繁琐操作,从而实现能直接从共享内存中分配空间来存储数据的功能。
所述共享内存管理模块10,用于获取共享内存池,将所述共享内存池按预设大小划分为若干个共享内存块。
需要说明的是,共享内存管理模块在系统启动时初始化,并申请共享内存,将申请得到的共享内存作为共享内存资源池,共享内存池可划分为两部分,一部分可为共享内存区域池,另一部分可为共享内存通道池,共享内存块可为共享内存区域池及共享内存通道池中划分出来,以供用户使用的内存空间,在本实施例不加以限制。
可以理解的是,共享内存区域池可划分为等大的共享内存区块,每个共享内存区块可划分为头部区域及使用区域,头部区域可用于每个共享内存区块的自控管理,作为管理的头部区域不可被用户直接使用,使用区域可用于分配给用户进程,当使用区域被分配后还可继续对使用进程划分,以使使用区域被合理使用,本实施例不加以限制。
在本实施例中,共享内存通道池可划分为若干个等大的进程通道,进程通道可用于收发进程间的消息,每一个进程通道都可有唯一的通道标识,进程通道还可以划分为两种类型,一种可为发送队列,一种可为接收队列。对于连接的发送队列与接收队列可互为收发队列,例如,其中一个进程通道可作为进程A的发送队列,同时该进程通道也可作为进程B的接收队列。在发送队列或接收队列中保存的信息可以采用shm_key的数据结构进行保存,shm_key数据结构可记录某个共享内存片段的物理地址(相对地址)、长度及类型,共享内存片段的类型可为请求类型或应答类型,本实施例不加以限制。
可以理解的是,共享内存管理模块可在共享内存中创建两张表,一张表可为用户信息表,用户信息表可用于记录各个已注册的业务进程的信息,已注册的业务进程的信息可为分配的进程通道对应的通道标识、业务进程的接口以及已经申请到的使用区域等,例如,program1(进程1)的shm_uid(分配的进程通道唯一的分配标识)为0,它已经申请到了region0(使用区域0)和region1(使用区域1),本实施例不加以限制。
需要说明的是,另一张表可为通道信息表,通道信息表可用于记录共享内存的进程通道的相关信息,进程通道的相关信息可为进程通道唯一的通道标识及分配的进程通道唯一的分配标识等,例如,shm_uid(分配的进程通道唯一的分配标识)为0的进程和shm_uid(分配的进程通道唯一的分配标识)为1的进程之间的通信使用了shm_cid(进程通道唯一的通道标识)为0的channel(进程通道),而它与shm_uid(分配的进程通道唯一的分配标识)为3的进程的通信则使用了shm_cid(进程通道唯一的通道标识)为1的channel(进程通道),本实施例不加以限制。
所述共享内存分配模块20,用于在使用所述共享内存块的内存时,调用内存动态分配接口,在释放所述共享内存块的内存时,调用内存释放接口。
可以理解的是,共享内存分配模块在业务进程启动后可通过进程间通信方式与共享内存管理模块建立连接,进程间通信方式可为Unix socket等通信方式,共享内存分配模块可向共享内存管理模块发送注册请求,在共享内存管理模块接收到注册请求后可以允许共享内存分配模块使用申请所需的共享内存块,接收到注册请求共享内存管理模块还可以分配一个标识返回给该共享内存分配模块建立的进程,该分配的标识可作为主机内该进程的唯一标识,还可以作为分配的进程通道唯一的分配标识,本实施例不加以限制。
需要说明的是,共享内存分配模块可对申请所需的共享内存块进一步划分和管理,以实现对内存空间的合理应用。例如,共享内存分配模块可将申请所需的共享内存块划分为可使用的最小单元,并将最小单元组合成不同内存大小的链表,当用户需要使用内存空间时,可从空闲的链表中找出可供用户选择的最小链表,从而节省共享内存资源。
在本实施例中,共享内存分配模块分配完成满足用户使用需求的共享内存资源后需要调用内存动态分配接口,以通过内存动态分配接口获得内存动态分配接口对应的内存接收地址。
可以理解的是,共享内存分配模块需要释放用户已使用的共享内存资源时需要调用内存释放接口,以通过内存释放接口获得内存释放接口对应的内存发送地址。
所述进程间通信模块30,用于通过所述内存动态分配接口获得内存接收地址或通过所述内存释放接口获得内存发送地址,将所述内存接收地址或所述内存发送地址转换为对应的共享内存物理地址,将所述对应的共享内存物理地址发送至对端程序。
可以理解的是,进程间通信模块可用于建立两个进程之间的连接,从而实现进程间的通信。在建立进程连接时,进程间通信模块可划分为两种状态,一种可为客户端,另一种为服务端,客户端与服务端均为进程间通信模块且可同时存在,客户端进程与服务端进程互为对端进程,本实施例不加以限制。
在本实施例中,在客户端进程的进程间通信模块与在服务端进程的进程间通信模块通过进程间通信方式建立数据发送连接,进程间通信方式可为Unix socket等通信方式,本实施例不加以限制。
在具体实现中,在客户端进程的进程间通信模块通过共享内存分配模块分配一块共享内存空间,然后将要发送的数据直接写入内存中,并调用内存动态分配接口,进程间通信模块可获得写入的数据的参数信息,参数信息可为通过内存动态分配接口获得的内存接收地址及数据长度,并将参数信息转换为规定的格式,规定的格式可为shm_key格式等,可将更改格式后的参数信息标记为请求类型,本实施例不加以限制。
可以理解的是,在客户端进程的进程间通信模块将更改格式后的参数信息写入共享内存进程通道的发送队列,并根据此过程生成已发送的通知消息,然后通过进程间通信方式将通知消息通知到对端进程即服务端进程,本实施例不加以限制。
在本实施例中,服务端进程的进程间通信模块接收到已发送的通知消息后,从共享内存进程通道的发送队列中取出更改格式后的参数信息,并解析出共享内存的地址和长度,将共享内存的地址上报给服务端进程进行使用,本实施例不加以限制。
可以理解的是,在服务端进程的进程间通信模块与在客户端进程的进程间通信模块通过进程间通信方式建立数据接收连接,进程间通信方式可为Unix socket等通信方式,本实施例不加以限制。
可以理解的是,服务端进程可根据共享内存的地址直接使用写入共享内存中的数据,并在使用完毕后,通过服务端进程的共享内存分配模块调用内存释放接口,服务端进程的进程间通信模块通过内存释放接口获得的内存发送地址,将数据信息转换为规定的格式,数据信息可为内存发送地址及数据长度,规定的格式可为shm_key格式等,并标记上是应答类型,本实施例不加以限制。
可以理解的是,服务端进程的进程间通信模块将更改格式后的数据信息写入共享内存进程通道的接收队列,并根据此过程生成已使用的通知消息,然后通过进程间通信方式将通知消息通知到对端进程即客户端进程,本实施例不加以限制。
可以理解的是,客户端进程的进程间通信模块接收到已使用的通知消息后,从共享内存进程通道的接收队列中取出更改格式后的数据信息,更改格式后的数据信息为应答类型时解析出共享内存的地址和长度,将共享内存的地址上报给客户端进程释放对应的共享内存空间,本实施例不加以限制。
本实施例通过共享内存管理模块获取共享内存池,将所述共享内存池按预设大小划分为若干个共享内存块,共享内存分配模块在使用所述共享内存块的内存时,调用内存动态分配接口,在释放所述共享内存块的内存时,调用内存释放接口,进程间通信模块通过所述内存动态分配接口获得内存接收地址或通过所述内存释放接口获得内存发送地址,将所述内存接收地址或所述内存发送地址转换为对应的共享内存物理地址,将所述对应的共享内存物理地址发送至对端程序。本发明通过共享内存管理模块将内存空间划分为供用户使用的内存块。共享内存分配模块使用内存时调用相应接口,进程间通信模块通过接口得到对应的物理地址并将对应物理地址发送到对端程序,从而实现无拷贝的进程间通信,解决了现有技术中进程通信过程需要进行多次数据拷贝,从而使得进程间通信的传输性能较差的技术问题,减小了内存拷贝带来的性能损耗,提高了数据传输效率及用户体验。
参照图4,图4为本发明免拷贝的进程间通信系统第二实施例的功能模块示意图,基于上述第一实施例,提出本发明免拷贝的进程间通信系统的第二实施例。
在本实施例中,所述共享内存管理模块10包括:内存管理区域单元101及内存管理通道单元102。
可以理解的是,共享内存管理模块在系统启动时初始化,并申请共享内存将申请得到的共享内存作为共享内存资源池,共享内存池可划分为两部分,一部分可为共享内存区域池,另一部分可为共享内存通道池,在本实施例不加以限制。
所述内存管理区域单元101,用于获取共享内存区域池,将所述共享内存区域池按所述预设大小划分为若干个所述共享内存块。
在本实施例中,内存管理区域单元可管理共享内存区域池,共享内存区域池可划分为等大的共享内存区块,每个共享内存区块可划分为头部区域及使用区域,头部区域可用于每个共享内存区块的自控管理,作为管理的头部区域不可被用户直接使用,使用区域可用于分配给用户进程,当使用区域被分配后还可继续对使用进程划分,以使使用区域被合理使用,本实施例不加以限制。
可以理解的是,共享内存区域池按预设大小划分的共享内存块可为用于分配给用户进程的使用区域,预设大小可为同等大小,预设大小还可以根据用户的实际需求进行设定,本实施例不加以限制。
所述内存管理通道单元102,用于获取共享内存通道池,将所述共享内存通道池按预设规则划分为若干个发送队列及若干个接收队列,以通过所述发送队列或接收队列进行进程间通信。
在本实施例中,内存管理通道单元可管理共享内存通道池,共享内存通道池可划分为若干个等大的进程通道,预设规则可为按同等大小划分,预设规则还可以根据用户的实际需求进行不同大小的划分。进程通道可用于收发进程间的消息,每一个进程通道都可有唯一的通道标识,进程通道还可以划分为两种类型,一种可为发送队列,一种可为接收队列。对于连接的发送队列与接收队列可互为收发队列,例如,其中一个进程通道可作为进程A的发送队列,同时该进程通道也可作为进程B的接收队列。在发送队列或接收队列中保存的信息可以采用shm_key的数据结构进行保存,shm_key数据结构可记录某个共享内存片段的物理地址(相对地址)、长度及类型,共享内存片段的类型可为请求类型或应答类型,本实施例不加以限制。
在本实施例中,所述共享内存分配模块20包括分配单元202;
所述分配单元202,用于将所述共享内存块划分为若干个内存子单元,所述若干个内存子单元组合成若干个链表。
可以理解的是,共享内存分配模块的分配单元可对申请所需的共享内存块进一步划分和管理,以实现对内存空间的合理应用。例如,共享内存分配模块可将申请所需的共享内存块划分为子单元,子单元可为可使用的最小单元,并将最小单元组合成不同内存大小的链表,当用户需要使用内存空间时,可从空闲的链表中找出可供用户选择的最小链表,从而节省共享内存资源。
所述分配单元202,还用于在使用所述链表对应的共享内存时,调用内存动态分配接口,在释放所述共享内存块的内存时,调用内存释放接口。
可以理解的是,共享内存分配模块的分配单元分配完成满足用户使用需求的共享内存资源后需要调用内存动态分配接口,以通过内存动态分配接口获得内存动态分配接口对应的内存接收地址。
可以理解的是,共享内存分配模块的分配单元需要释放用户已使用的共享内存资源时需要调用内存释放接口,以通过内存释放接口获得内存释放接口对应的内存发送地址。
所述共享内存分配模块20还包括注册单元201;
所述注册单元201,用于向所述共享内存管理模块发送注册请求,在注册成功后,得到所述共享内存管理模块中的共享内存块。
在本实施例中,共享内存分配模块的注册单元在业务进程启动后可通过进程间通信方式与共享内存管理模块建立连接,进程间通信方式可为Unix socket等通信方式,注册单元可向共享内存管理模块发送注册请求,在共享内存管理模块接收到注册请求后可以允许共享内存分配模块使用申请所需的共享内存块,接收到注册请求共享内存管理模块还可以分配一个标识返回给该共享内存分配模块建立的进程,该分配的标识可作为主机内该进程的唯一标识,还可以作为分配的进程通道唯一的分配标识,本实施例不加以限制。
在本实施例中,所述进程间通信模块30包括:客户单元301及服务单元302。
可以理解的是,进程间通信模块可用于建立两个进程之间的连接,从而实现进程间的通信。在建立进程连接时,进程间通信模块可划分为两种状态,一种可为客户端,另一种为服务端,客户端与服务端均为进程间通信模块且可同时存在,客户端进程与服务端进程互为对端进程,本实施例不加以限制。
所述客户单元301,用于获取第一传输通道,通过预设通信方法与所述服务单元建立连接。
可以理解的是,在客户单元与服务单元通过进程间通信方式建立数据发送连接,进程间通信方式可为Unix socket等通信方式,本实施例不加以限制。
所述客户单元301,还用于获取第一共享内存物理地址,对所述第一共享内存物理地址进行转换,得到第一主键标识,将所述第一主键标识写入所述第一传输通道,并生成第一通知信息,将所述第一通知信息采用所述预设通信方法发送至所述服务单元。
在本实施例中,客户单元通过共享内存分配模块分配一块共享内存空间,然后将要发送的数据直接写入内存中,并调用内存动态分配接口,进程间通信模块可获得写入的数据的参数信息,参数信息可为第一共享内存物理地址及数据长度,第一共享内存物理地址可为通过内存动态分配接口获得的内存接收地址,将参数信息转换为规定的格式得到第一主键标识,规定的格式可为shm_key格式等,可将第一主键标识标记为请求类型,本实施例不加以限制。
可以理解的是,在客户单元将第一主键标识写入第一传输通道,第一传输通道可为共享内存进程通道的发送队列,并根据此过程生成已发送的第一通知信息,然后通过进程间通信方式将第一通知信息通知到对端进程即服务端进程,本实施例不加以限制。
所述服务单元302,还用于根据所述第一通知信息从所述第一传输通道中取出第一主键标识,并对所述第一主键标识进行解析,得到所述第一共享内存物理地址,以通过所述第一共享内存物理地址进行数据访问。
可以理解的是,服务单元接收到已发送的第一通知信息后,从第一传输通道中取出第一主键标识,并解析出共享内存的地址和长度,将共享内存的地址上报给服务端进程进行使用,本实施例不加以限制。
所述服务单元302,用于获取第二传输通道,通过预设通信方法与所述客户单元建立连接。
可以理解的是,在服务单元与在客户单元通过进程间通信方式建立数据接收连接,进程间通信方式可为Unix socket等通信方式,本实施例不加以限制。
所述服务单元302,还用于在所述数据访问完成后获取第二共享内存物理地址,对所述第二共享内存物理地址进行转换和应答标记,得到应答主键标识,将所述应答主键标识写入所述第二传输通道,并生成第二通知信息,将所述第二通知信息采用所述预设通信方法发送至所述客户单元。
在本实施例中,服务端进程可根据共享内存的地址直接使用写入共享内存中的数据,并在使用完毕后,通过服务端进程的共享内存分配模块调用内存释放接口,第二共享内存物理地址可为服务单元通过内存释放接口获得的内存发送地址,将数据信息转换为规定的格式得到应答主键标识,应答主键标识可为内存发送地址及数据长度,规定的格式可为shm_key格式等,并标记上是应答类型,本实施例不加以限制。
可以理解的是,服务单元将应答主键标识写入第二传输通道,第二传输通道可为共享内存进程通道的接收队列,并根据此过程生成已使用的第二通知信息,然后通过进程间通信方式将第二通知信息通知到对端进程即客户端进程,本实施例不加以限制。
所述客户单元301,还用于根据所述第二通知信息从所述第二传输通道中取出应答主键标识,并对所述应答主键标识进行识别,得到应答类型的主键标识。
所述客户单元301,还用于对所述应答类型的主键标识进行解析,得到所述第二共享内存物理地址,以通过所述第二共享内存物理地址进行内存释放。
可以理解的是,客户单元接收到已使用的第二通知信息后,从第二传输通道中取出应答主键标识,应答主键标识为应答类型时解析出共享内存的地址和长度,将共享内存的地址上报给客户端进程释放对应的共享内存空间,本实施例不加以限制。
本实施例通过内存管理区域单元获取共享内存区域池,将共享内存区域池划分为共享内存块,内存管理通道单元获取共享内存通道池,将共享内存通道池划分发送队列及接收队列,以通过发送队列或接收队列进行进程间通信,注册单元向共享内存管理模块发送注册请求,在注册成功后,得到共享内存管理模块中的共享内存块,分配单元将共享内存块划分为内存子单元,并组合链表,分配单元在使用链表对应的共享内存时,调用内存动态分配接口,在释放共享内存块的内存时,调用内存释放接口,客户单元内存接收地址转换为对应的第一共享内存物理地址,并转换为第一主键标识,将第一主键标识写入第一传输通道,并生成第一通知信息,将第一通知信息发送至服务单元,服务单元根据第一通知信息从第一传输通道中取出第一主键标识,并对第一主键标识进行解析,得到第一共享内存物理地址,以通过第一共享内存物理地址进行数据访问,服务单元将内存发送地址转换为对应的第二共享内存物理地址,并转换应答主键标识,将应答主键标识写入第二传输通道,并生成第二通知信息,将第二通知信息发送至客户单元,客户单元根据第二通知信息从第二传输通道中取出应答主键标识,并进行识别与解析,得到第二共享内存物理地址,以通过第二共享内存物理地址进行内存释放,实现无拷贝的进程间通信,解决了现有技术中进程通信过程需要进行多次数据拷贝,从而使得进程间通信的传输性能较差的技术问题,减小了内存拷贝带来的性能损耗,提高了数据传输效率及用户体验,合理分配满足用户需求的最小内存空间,提高了整体内存资源的利用率。
进一步地,参照图5,图5为本发明免拷贝的进程间通信方法第一实施例的流程示意图,所述免拷贝的进程间通信方法应用于免拷贝的进程间通信系统,所述免拷贝的进程间通信系统包括:共享内存管理模块、共享内存分配模块及进程间通信模块;
所述免拷贝的进程间通信方法包括:
步骤S10:所述共享内存管理模块获取共享内存池,将所述共享内存池按预设大小划分为若干个共享内存块。
需要说明的是,共享内存管理模块在系统启动时初始化,并申请共享内存将申请得到的共享内存作为共享内存资源池,共享内存池可划分为两部分,一部分可为共享内存区域池,另一部分可为共享内存通道池,共享内存块可为共享内存区域池及共享内存通道池中划分出来,以供用户使用的内存空间,在本实施例不加以限制。
在本实施例中,共享内存区域池可划分为等大的共享内存区块,每个共享内存区块可划分为头部区域及使用区域,头部区域可用于每个共享内存区块的自控管理,作为管理的头部区域不可被用户直接使用,使用区域可用于分配给用户进程,当使用区域被分配后还可继续对使用进程划分,以使使用区域被合理使用,本实施例不加以限制。
步骤S20:所述共享内存分配模块在使用所述共享内存块的内存时,调用内存动态分配接口,在释放所述共享内存块的内存时,调用内存释放接口。
在本实施例中,共享内存分配模块在业务进程启动后可通过进程间通信方式与共享内存管理模块建立连接,进程间通信方式可为Unix socket等通信方式,共享内存分配模块可向共享内存管理模块发送注册请求,在共享内存管理模块接收到注册请求后可以允许共享内存分配模块使用申请所需的共享内存块,接收到注册请求共享内存管理模块还可以分配一个标识返回给该共享内存分配模块建立的进程,该分配的标识可作为主机内该进程的唯一标识,还可以作为分配的进程通道唯一的分配标识,本实施例不加以限制。
可以理解的是,共享内存分配模块可对申请所需的共享内存块进一步划分和管理,以实现对内存空间的合理应用。例如,共享内存分配模块可将申请所需的共享内存块划分为可使用的最小单元,并将最小单元组合成不同内存大小的链表,当用户需要使用内存空间时,可从空闲的链表中找出可供用户选择的最小链表,从而节省共享内存资源。
可以理解的是,共享内存分配模块分配完成满足用户使用需求的共享内存资源后需要调用内存动态分配接口,以通过内存动态分配接口获得内存动态分配接口对应的内存接收地址。
可以理解的是,共享内存分配模块需要释放用户已使用的共享内存资源时需要调用内存释放接口,以通过内存释放接口获得内存释放接口对应的内存发送地址。
步骤S30:所述进程间通信模块通过所述内存动态分配接口获得内存接收地址或通过所述内存释放接口获得内存发送地址,将所述内存接收地址或所述内存发送地址转换为对应的共享内存物理地址,将所述对应的共享内存物理地址发送至对端程序。
在本实施例中,进程间通信模块可用于建立两个进程之间的连接,从而实现进程间的通信。在建立进程连接时,进程间通信模块可划分为两种状态,一种可为客户端,另一种为服务端,客户端与服务端均为进程间通信模块且可同时存在,客户端进程与服务端进程互为对端进程,本实施例不加以限制。
需要说明的是,在客户端进程的进程间通信模块与在服务端进程的进程间通信模块通过进程间通信方式建立数据发送连接,进程间通信方式可为Unix socket等通信方式,本实施例不加以限制。
可以理解的是,在客户端进程的进程间通信模块通过共享内存分配模块分配一块共享内存空间,然后将要发送的数据直接写入内存中,并调用内存动态分配接口,进程间通信模块可获得写入的数据的参数信息,参数信息可为通过内存动态分配接口获得的内存接收地址及数据长度,并将参数信息转换为规定的格式,规定的格式可为shm_key格式等,可将更改格式后的参数信息标记为请求类型,本实施例不加以限制。
可以理解的是,在客户端进程的进程间通信模块将更改格式后的参数信息写入共享内存进程通道的发送队列,并根据此过程生成已发送的通知消息,然后通过进程间通信方式将通知消息通知到对端进程即服务端进程,本实施例不加以限制。
可以理解的是,服务端进程的进程间通信模块接收到已发送的通知消息后,从共享内存进程通道的发送队列中取出更改格式后的参数信息,并解析出共享内存的地址和长度,将共享内存的地址上报给服务端进程进行使用,本实施例不加以限制。
需要说明的是,在服务端进程的进程间通信模块与在客户端进程的进程间通信模块通过进程间通信方式建立数据接收连接,进程间通信方式可为Unix socket等通信方式,本实施例不加以限制。
可以理解的是,服务端进程可根据共享内存的地址直接使用写入共享内存中的数据,并在使用完毕后,通过服务端进程的共享内存分配模块调用内存释放接口,服务端进程的进程间通信模块通过内存释放接口获得的内存发送地址,将数据信息转换为规定的格式,数据信息可为内存发送地址及数据长度,规定的格式可为shm_key格式等,并标记上是应答类型,本实施例不加以限制。
可以理解的是,服务端进程的进程间通信模块将更改格式后的数据信息写入共享内存进程通道的接收队列,并根据此过程生成已使用的通知消息,然后通过进程间通信方式将通知消息通知到对端进程即客户端进程,本实施例不加以限制。
可以理解的是,客户端进程的进程间通信模块接收到已使用的通知消息后,从共享内存进程通道的接收队列中取出更改格式后的数据信息,更改格式后的数据信息为应答类型时解析出共享内存的地址和长度,将共享内存的地址上报给客户端进程释放对应的共享内存空间,本实施例不加以限制。
本实施例通过共享内存管理模块获取共享内存池,将所述共享内存池按预设大小划分为若干个共享内存块,共享内存分配模块在使用所述共享内存块的内存时,调用内存动态分配接口,在释放所述共享内存块的内存时,调用内存释放接口,进程间通信模块通过所述内存动态分配接口获得内存接收地址或通过所述内存释放接口获得内存发送地址,将所述内存接收地址或所述内存发送地址转换为对应的共享内存物理地址,将所述对应的共享内存物理地址发送至对端程序。本发明通过共享内存管理模块将内存空间划分为供用户使用的内存块。共享内存分配模块使用内存时调用相应接口,进程间通信模块通过接口得到对应的物理地址并将对应物理地址发送到对端程序,从而实现无拷贝的进程间通信,解决了现有技术中进程通信过程需要进行多次数据拷贝,从而使得进程间通信的传输性能较差的技术问题,减小了内存拷贝带来的性能损耗,提高了数据传输效率及用户体验。
参照图6,图6为本发明免拷贝的进程间通信方法第二实施例的流程示意图,基于上述图3所示的实施例,提出本发明免拷贝的进程间通信方法的第二实施例。
步骤S10具体包括以下步骤:
步骤S101:所述内存管理区域单元获取共享内存区域池,将所述共享内存区域池按所述预设大小划分为若干个所述共享内存块。
在本实施例中,内存管理区域单元可管理共享内存区域池,共享内存区域池可划分为等大的共享内存区块,每个共享内存区块可划分为头部区域及使用区域,头部区域可用于每个共享内存区块的自控管理,作为管理的头部区域不可被用户直接使用,使用区域可用于分配给用户进程,当使用区域被分配后还可继续对使用进程划分,以使使用区域被合理使用,本实施例不加以限制。
可以理解的是,共享内存区域池按预设大小划分的共享内存块可为用于分配给用户进程的使用区域,预设大小可为同等大小,预设大小还可以根据用户的实际需求进行设定,本实施例不加以限制。
步骤S102:所述内存管理通道单元获取共享内存通道池,将所述共享内存通道池按预设规则划分为若干个发送队列及若干个接收队列,以通过所述发送队列或接收队列进行进程间通信。
在本实施例中,内存管理通道单元可管理共享内存通道池,共享内存通道池可划分为若干个等大的进程通道,预设规则可为按同等大小划分,预设规则还可以根据用户的实际需求进行不同大小的划分。进程通道可用于收发进程间的消息,每一个进程通道都可有唯一的通道标识,进程通道还可以划分为两种类型,一种可为发送队列,一种可为接收队列。对于连接的发送队列与接收队列可互为收发队列,例如,其中一个进程通道可作为进程A的发送队列,同时该进程通道也可作为进程B的接收队列。在发送队列或接收队列中保存的信息可以采用shm_key的数据结构进行保存,shm_key数据结构可记录某个共享内存片段的物理地址(相对地址)、长度及类型,共享内存片段的类型可为请求类型或应答类型,本实施例不加以限制。
进一步地,步骤S20具体包括以下步骤:
步骤S201:所述注册单元向所述共享内存管理模块发送注册请求,在注册成功后,得到所述共享内存管理模块中的共享内存块。
可以理解的是,共享内存分配模块的注册单元在业务进程启动后可通过进程间通信方式与共享内存管理模块建立连接,进程间通信方式可为Unix socket等通信方式,注册单元可向共享内存管理模块发送注册请求,在共享内存管理模块接收到注册请求后可以允许共享内存分配模块使用申请所需的共享内存块,接收到注册请求共享内存管理模块还可以分配一个标识返回给该共享内存分配模块建立的进程,该分配的标识可作为主机内该进程的唯一标识,还可以作为分配的进程通道唯一的分配标识,本实施例不加以限制。
步骤S202:所述分配单元将所述共享内存块划分为若干个内存子单元,所述若干个内存子单元组合成若干个链表。
可以理解的是,共享内存分配模块的分配单元可对申请所需的共享内存块进一步划分和管理,以实现对内存空间的合理应用。例如,共享内存分配模块可将申请所需的共享内存块划分为子单元,子单元可为可使用的最小单元,并将最小单元组合成不同内存大小的链表,当用户需要使用内存空间时,可从空闲的链表中找出可供用户选择的最小链表,从而节省共享内存资源。
步骤S203:所述分配单元在使用所述链表对应的共享内存时,调用内存动态分配接口,在释放所述共享内存块的内存时,调用内存释放接口。
可以理解的是,共享内存分配模块的分配单元分配完成满足用户使用需求的共享内存资源后需要调用内存动态分配接口,以通过内存动态分配接口获得内存动态分配接口对应的内存接收地址。
可以理解的是,共享内存分配模块的分配单元需要释放用户已使用的共享内存资源时需要调用内存释放接口,以通过内存释放接口获得内存释放接口对应的内存发送地址。
本实施例通过内存管理区域单元获取共享内存区域池,将共享内存区域池划分为共享内存块,内存管理通道单元获取共享内存通道池,将共享内存通道池划分发送队列及接收队列,以通过发送队列或接收队列进行进程间通信,注册单元向共享内存管理模块发送注册请求,在注册成功后,得到共享内存管理模块中的共享内存块,分配单元将共享内存块划分为内存子单元,并组合链表,分配单元在使用链表对应的共享内存时,调用内存动态分配接口,在释放共享内存块的内存时,调用内存释放接口,合理分配满足用户需求的最小内存空间,提高了整体内存资源的利用率。
进一步地,参照图7,图7为本发明免拷贝的进程间通信方法第三实施例的流程示意图。
步骤S30具体包括以下步骤:
步骤S301:所述客户单元获取第一传输通道,通过预设通信方法与所述服务单元建立连接。
需要说明的是,在客户单元与服务单元通过进程间通信方式建立数据发送连接,进程间通信方式可为Unix socket等通信方式,本实施例不加以限制。
步骤S302:所述客户单元通过所述内存动态分配接口获得内存接收地址,将所述内存接收地址转换为对应的第一共享内存物理地址,对所述第一共享内存物理地址进行转换,得到第一主键标识,将所述第一主键标识写入所述第一传输通道,并生成第一通知信息,将所述第一通知信息采用所述预设通信方法发送至所述服务单元。
在本实施例中,客户单元通过共享内存分配模块分配一块共享内存空间,然后将要发送的数据直接写入内存中,并调用内存动态分配接口,进程间通信模块可获得写入的数据的参数信息,参数信息可为第一共享内存物理地址及数据长度,第一共享内存物理地址可为通过内存动态分配接口获得的内存接收地址,将参数信息转换为规定的格式得到第一主键标识,规定的格式可为shm_key格式等,可将第一主键标识标记为请求类型,本实施例不加以限制。
可以理解的是,在客户单元将第一主键标识写入第一传输通道,第一传输通道可为共享内存进程通道的发送队列,并根据此过程生成已发送的第一通知信息,然后通过进程间通信方式将第一通知信息通知到对端进程即服务端进程,本实施例不加以限制。
步骤S303:所述服务单元根据所述第一通知信息从所述第一传输通道中取出第一主键标识,并对所述第一主键标识进行解析,得到所述第一共享内存物理地址,以通过所述第一共享内存物理地址进行数据访问。
可以理解的是,服务单元接收到已发送的第一通知信息后,从第一传输通道中取出第一主键标识,并解析出共享内存的地址和长度,将共享内存的地址上报给服务端进程进行使用,本实施例不加以限制。
步骤S304:所述服务单元获取第二传输通道,通过预设通信方法与所述客户单元建立连接。
需要说明的是,在服务单元与在客户单元通过进程间通信方式建立数据接收连接,进程间通信方式可为Unix socket等通信方式,本实施例不加以限制。
步骤S305:所述服务单元在所述数据访问完成后通过所述内存释放接口获得内存发送地址,将所述内存发送地址转换为对应的第二共享内存物理地址,对所述第二共享内存物理地址进行转换和应答标记,得到应答主键标识,将所述应答主键标识写入所述第二传输通道,并生成第二通知信息,将所述第二通知信息采用所述预设通信方法发送至所述客户单元。
在本实施例中,服务端进程可根据共享内存的地址直接使用写入共享内存中的数据,并在使用完毕后,通过服务端进程的共享内存分配模块调用内存释放接口,第二共享内存物理地址可为服务单元通过内存释放接口获得的内存发送地址,将数据信息转换为规定的格式得到应答主键标识,应答主键标识可为内存发送地址及数据长度,规定的格式可为shm_key格式等,并标记上是应答类型,本实施例不加以限制。
可以理解的是,服务单元将应答主键标识写入第二传输通道,第二传输通道可为共享内存进程通道的接收队列,并根据此过程生成已使用的第二通知信息,然后通过进程间通信方式将第二通知信息通知到对端进程即客户端进程,本实施例不加以限制。
步骤S306:所述客户单元根据所述第二通知信息从所述第二传输通道中取出应答主键标识,并对所述应答主键标识进行识别,得到应答类型的主键标识。
步骤S307:所述客户单元对所述应答类型的主键标识进行解析,得到所述第二共享内存物理地址,以通过所述第二共享内存物理地址进行内存释放。
可以理解的是,客户单元接收到已使用的第二通知信息后,从第二传输通道中取出应答主键标识,应答主键标识为应答类型时解析出共享内存的地址和长度,将共享内存的地址上报给客户端进程释放对应的共享内存空间,本实施例不加以限制。
本实施例通过客户单元内存接收地址转换为对应的第一共享内存物理地址,并转换为第一主键标识,将第一主键标识写入第一传输通道,并生成第一通知信息,将第一通知信息发送至服务单元,服务单元根据第一通知信息从第一传输通道中取出第一主键标识,并对第一主键标识进行解析,得到第一共享内存物理地址,以通过第一共享内存物理地址进行数据访问,服务单元将内存发送地址转换为对应的第二共享内存物理地址,并转换应答主键标识,将应答主键标识写入第二传输通道,并生成第二通知信息,将第二通知信息发送至客户单元,客户单元根据第二通知信息从第二传输通道中取出应答主键标识,并进行识别与解析,得到第二共享内存物理地址,以通过第二共享内存物理地址进行内存释放,实现无拷贝的进程间通信,减小了内存拷贝带来的性能损耗,提高了数据传输效率及用户体验。
此外,需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如只读存储器(Read Only Memory,ROM)/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种免拷贝的进程间通信系统,其特征在于,所述免拷贝的进程间通信系统包括:共享内存管理模块、共享内存分配模块及进程间通信模块;
所述共享内存管理模块,用于获取共享内存池,将所述共享内存池按预设大小划分为若干个共享内存块;
所述共享内存分配模块,用于在使用所述共享内存块的内存时,调用内存动态分配接口,在释放所述共享内存块的内存时,调用内存释放接口;
所述进程间通信模块,用于通过所述内存动态分配接口获得内存接收地址或通过所述内存释放接口获得内存发送地址,将所述内存接收地址或所述内存发送地址转换为对应的共享内存物理地址,将所述对应的共享内存物理地址发送至对端程序。
2.如权利要求1所述的免拷贝的进程间通信系统,其特征在于,所述共享内存管理模块包括:内存管理区域单元及内存管理通道单元;
所述内存管理区域单元,用于获取共享内存区域池,将所述共享内存区域池按所述预设大小划分为若干个所述共享内存块;
所述内存管理通道单元,用于获取共享内存通道池,将所述共享内存通道池按预设规则划分为若干个发送队列及若干个接收队列,以通过所述发送队列或接收队列进行进程间通信。
3.如权利要求1所述的免拷贝的进程间通信系统,其特征在于,所述共享内存分配模块包括分配单元;
所述分配单元,用于将所述共享内存块划分为若干个内存子单元,所述若干个内存子单元组合成若干个链表;
所述分配单元,还用于在使用所述链表对应的共享内存时,调用内存动态分配接口,在释放所述共享内存块的内存时,调用内存释放接口。
4.如权利要求1所述的免拷贝的进程间通信系统,其特征在于,所述共享内存分配模块还包括注册单元;
所述注册单元,用于向所述共享内存管理模块发送注册请求,在注册成功后,得到所述共享内存管理模块中的共享内存块。
5.如权利要求1至4中任一项所述的免拷贝的进程间通信系统,其特征在于,所述进程间通信模块包括:客户单元及服务单元;
所述客户单元,用于获取第一传输通道,通过预设通信方法与所述服务单元建立连接;
所述客户单元,还用于获取第一共享内存物理地址,对所述第一共享内存物理地址进行转换,得到第一主键标识,将所述第一主键标识写入所述第一传输通道,并生成第一通知信息,将所述第一通知信息采用所述预设通信方法发送至所述服务单元;
所述服务单元,还用于根据所述第一通知信息从所述第一传输通道中取出第一主键标识,并对所述第一主键标识进行解析,得到所述第一共享内存物理地址,以通过所述第一共享内存物理地址进行数据访问。
6.如权利要求5所述的免拷贝的进程间通信系统,其特征在于,所述服务单元,用于获取第二传输通道,通过预设通信方法与所述客户单元建立连接;
所述服务单元,还用于在所述数据访问完成后获取第二共享内存物理地址,对所述第二共享内存物理地址进行转换和应答标记,得到应答主键标识,将所述应答主键标识写入所述第二传输通道,并生成第二通知信息,将所述第二通知信息采用所述预设通信方法发送至所述客户单元;
所述客户单元,还用于根据所述第二通知信息从所述第二传输通道中取出应答主键标识,并对所述应答主键标识进行识别,得到应答类型的主键标识;
所述客户单元,还用于对所述应答类型的主键标识进行解析,得到所述第二共享内存物理地址,以通过所述第二共享内存物理地址进行内存释放。
7.一种免拷贝的进程间通信方法,其特征在于,所述免拷贝的进程间通信方法应用于免拷贝的进程间通信系统,所述免拷贝的进程间通信系统包括:共享内存管理模块、共享内存分配模块及进程间通信模块;
所述免拷贝的进程间通信方法包括:
所述共享内存管理模块获取共享内存池,将所述共享内存池按预设大小划分为若干个共享内存块;
所述共享内存分配模块在使用所述共享内存块的内存时,调用内存动态分配接口,在释放所述共享内存块的内存时,调用内存释放接口;
所述进程间通信模块通过所述内存动态分配接口获得内存接收地址或通过所述内存释放接口获得内存发送地址,将所述内存接收地址或所述内存发送地址转换为对应的共享内存物理地址,将所述对应的共享内存物理地址发送至对端程序。
8.如权利要求7所述的免拷贝的进程间通信方法,其特征在于,所述共享内存管理模块包括:内存管理区域单元及内存管理通道单元;
所述共享内存管理模块获取共享内存池,将所述共享内存池按预设大小划分为若干个共享内存块,包括:
所述内存管理区域单元获取共享内存区域池,将所述共享内存区域池按所述预设大小划分为若干个所述共享内存块;
所述内存管理通道单元获取共享内存通道池,将所述共享内存通道池按预设规则划分为若干个发送队列及若干个接收队列,以通过所述发送队列或接收队列进行进程间通信。
9.如权利要求7所述的免拷贝的进程间通信方法,其特征在于,所述共享内存分配模块包括注册单元及分配单元;
所述共享内存分配模块在使用所述共享内存块的内存时,调用内存动态分配接口,在释放所述共享内存块的内存时,调用内存释放接口之前,所述方法还包括:
所述注册单元向所述共享内存管理模块发送注册请求,在注册成功后,得到所述共享内存管理模块中的共享内存块;
所述分配单元将所述共享内存块划分为若干个内存子单元,所述若干个内存子单元组合成若干个链表;
所述共享内存分配模块在使用所述共享内存块的内存时,调用内存动态分配接口,在释放所述共享内存块的内存时,调用内存释放接口,包括:
所述分配单元在使用所述链表对应的共享内存时,调用内存动态分配接口,在释放所述共享内存块的内存时,调用内存释放接口。
10.如权利要求7至9中任一项所述的免拷贝的进程间通信方法,其特征在于,所述进程间通信模块包括:客户单元及服务单元;
所述进程间通信模块通过所述内存动态分配接口获得内存接收地址或通过所述内存释放接口获得内存发送地址,将所述内存接收地址或所述内存发送地址转换为对应的共享内存物理地址,将所述对应的共享内存物理地址发送至对端程序,包括:
所述客户单元获取第一传输通道,通过预设通信方法与所述服务单元建立连接;
所述客户单元通过所述内存动态分配接口获得内存接收地址,将所述内存接收地址转换为对应的第一共享内存物理地址,对所述第一共享内存物理地址进行转换,得到第一主键标识,将所述第一主键标识写入所述第一传输通道,并生成第一通知信息,将所述第一通知信息采用所述预设通信方法发送至所述服务单元;
所述服务单元根据所述第一通知信息从所述第一传输通道中取出第一主键标识,并对所述第一主键标识进行解析,得到所述第一共享内存物理地址,以通过所述第一共享内存物理地址进行数据访问;
所述服务单元获取第二传输通道,通过预设通信方法与所述客户单元建立连接;
所述服务单元在所述数据访问完成后通过所述内存释放接口获得内存发送地址,将所述内存发送地址转换为对应的第二共享内存物理地址,对所述第二共享内存物理地址进行转换和应答标记,得到应答主键标识,将所述应答主键标识写入所述第二传输通道,并生成第二通知信息,将所述第二通知信息采用所述预设通信方法发送至所述客户单元;
所述客户单元根据所述第二通知信息从所述第二传输通道中取出应答主键标识,并对所述应答主键标识进行识别,得到应答类型的主键标识;
所述客户单元对所述应答类型的主键标识进行解析,得到所述第二共享内存物理地址,以通过所述第二共享内存物理地址进行内存释放。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011377253.2A CN112416625B (zh) | 2020-11-30 | 2020-11-30 | 免拷贝的进程间通信系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011377253.2A CN112416625B (zh) | 2020-11-30 | 2020-11-30 | 免拷贝的进程间通信系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112416625A true CN112416625A (zh) | 2021-02-26 |
CN112416625B CN112416625B (zh) | 2024-04-09 |
Family
ID=74830586
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011377253.2A Active CN112416625B (zh) | 2020-11-30 | 2020-11-30 | 免拷贝的进程间通信系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112416625B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112631815A (zh) * | 2021-03-10 | 2021-04-09 | 国能信控互联技术有限公司 | 基于com跨进程调用和共享内存的进程间通信方法和系统 |
CN113032162A (zh) * | 2021-03-23 | 2021-06-25 | 重庆智行者信息科技有限公司 | 一种基于共享内存备份机制的多进程通讯方法 |
CN113377703A (zh) * | 2021-06-23 | 2021-09-10 | 上海擎昆信息科技有限公司 | 一种核间通信方法 |
CN113839920A (zh) * | 2021-08-19 | 2021-12-24 | 惠州市德赛西威智能交通技术研究院有限公司 | 一种车载CarPlay高效识别的优化方法及系统 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1904873A (zh) * | 2005-07-28 | 2007-01-31 | 大唐移动通信设备有限公司 | 嵌入式实时操作系统中多核处理器的核间通信方法及装置 |
CN101127685A (zh) * | 2007-09-20 | 2008-02-20 | 中兴通讯股份有限公司 | 一种进程间通讯装置及其进程间通讯方法 |
US20140149718A1 (en) * | 2012-11-28 | 2014-05-29 | Christopher J. Hughes | Instruction and logic to provide pushing buffer copy and store functionality |
CN104102550A (zh) * | 2013-04-12 | 2014-10-15 | 南京南瑞继保电气有限公司 | 一种多主机进程间通信的方法 |
US20190042404A1 (en) * | 2018-03-05 | 2019-02-07 | Intel Corporation | Allocating shared memory blocks to table entries to store in a memory device |
CN110399229A (zh) * | 2018-04-25 | 2019-11-01 | 清华大学 | 进程间的通信方法、装置、系统、介质及终端 |
CN111427707A (zh) * | 2020-03-25 | 2020-07-17 | 北京左江科技股份有限公司 | 一种基于共享内存池的ipc通信方法 |
-
2020
- 2020-11-30 CN CN202011377253.2A patent/CN112416625B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1904873A (zh) * | 2005-07-28 | 2007-01-31 | 大唐移动通信设备有限公司 | 嵌入式实时操作系统中多核处理器的核间通信方法及装置 |
CN101127685A (zh) * | 2007-09-20 | 2008-02-20 | 中兴通讯股份有限公司 | 一种进程间通讯装置及其进程间通讯方法 |
US20140149718A1 (en) * | 2012-11-28 | 2014-05-29 | Christopher J. Hughes | Instruction and logic to provide pushing buffer copy and store functionality |
CN104102550A (zh) * | 2013-04-12 | 2014-10-15 | 南京南瑞继保电气有限公司 | 一种多主机进程间通信的方法 |
US20190042404A1 (en) * | 2018-03-05 | 2019-02-07 | Intel Corporation | Allocating shared memory blocks to table entries to store in a memory device |
CN110399229A (zh) * | 2018-04-25 | 2019-11-01 | 清华大学 | 进程间的通信方法、装置、系统、介质及终端 |
CN111427707A (zh) * | 2020-03-25 | 2020-07-17 | 北京左江科技股份有限公司 | 一种基于共享内存池的ipc通信方法 |
Non-Patent Citations (1)
Title |
---|
吴文江;张杰;彭正森;: "基于RT-Linux的数控系统进程间通信方式的研究", 小型微型计算机系统 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112631815A (zh) * | 2021-03-10 | 2021-04-09 | 国能信控互联技术有限公司 | 基于com跨进程调用和共享内存的进程间通信方法和系统 |
CN113032162A (zh) * | 2021-03-23 | 2021-06-25 | 重庆智行者信息科技有限公司 | 一种基于共享内存备份机制的多进程通讯方法 |
CN113032162B (zh) * | 2021-03-23 | 2023-10-24 | 重庆兰德适普信息科技有限公司 | 一种基于共享内存备份机制的多进程通讯方法 |
CN113377703A (zh) * | 2021-06-23 | 2021-09-10 | 上海擎昆信息科技有限公司 | 一种核间通信方法 |
CN113377703B (zh) * | 2021-06-23 | 2024-04-09 | 上海擎昆信息科技有限公司 | 一种核间通信方法 |
CN113839920A (zh) * | 2021-08-19 | 2021-12-24 | 惠州市德赛西威智能交通技术研究院有限公司 | 一种车载CarPlay高效识别的优化方法及系统 |
CN113839920B (zh) * | 2021-08-19 | 2023-11-17 | 惠州市德赛西威智能交通技术研究院有限公司 | 一种车载CarPlay高效识别的优化方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN112416625B (zh) | 2024-04-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112416625B (zh) | 免拷贝的进程间通信系统及方法 | |
CN109246251B (zh) | 一种微服务调用方法、装置、系统、设备及可读存储介质 | |
US20050267779A1 (en) | Method, apparatus, and medium for servicing clients in remote areas | |
KR20130055423A (ko) | 데이터 분배 서비스를 위한 미들웨어에서의 QoS를 지원하기 위한 장치 및 방법 | |
CN101427532A (zh) | 向接入终端提供接入信息的方法 | |
US20080140981A1 (en) | System and method for providing application program interface program for mobile terminal | |
CN106557288B (zh) | 一种获取打印数据的方法及装置 | |
CN112511580B (zh) | 消息推送的方法、装置、存储介质和设备 | |
CN111464626B (zh) | 一种文件存储方法 | |
CN113612861B (zh) | 远程访问方法、系统及计算机可读存储介质 | |
CN111586140A (zh) | 一种数据交互的方法及服务器 | |
CN111431818A (zh) | 跨域请求的流量分配方法、装置、存储介质及计算机设备 | |
CN106330504B (zh) | 一种实现应用的方法及业务控制器 | |
CN101246564A (zh) | 一种基于Web Service和以XML为资产定义的资产管理系统 | |
CN114036031A (zh) | 一种企业数字中台中资源服务应用的调度系统和方法 | |
WO2022257247A1 (zh) | 数据处理方法、装置及计算机可读存储介质 | |
WO2021238259A1 (zh) | 一种数据传输方法、装置、设备及计算机可读存储介质 | |
CN109413011B (zh) | 公共服务资源申请方法、相关设备及系统 | |
CN112019452A (zh) | 一种业务需求的处理方法、系统及相关装置 | |
CN112491566A (zh) | 资源管理方法、资源管理系统及计算机可读存储介质 | |
CN114598739B (zh) | 基于云应用的通信通道的处理方法、装置及系统 | |
WO2016197783A2 (zh) | 控制消息的发送方法及装置 | |
CN115964152A (zh) | Gpu资源调度方法、设备和存储介质 | |
CN112616143B (zh) | 一种分配通信号码的方法、装置、电子设备及存储介质 | |
CN111477229B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |