CN111427707A - 一种基于共享内存池的ipc通信方法 - Google Patents
一种基于共享内存池的ipc通信方法 Download PDFInfo
- Publication number
- CN111427707A CN111427707A CN202010216291.3A CN202010216291A CN111427707A CN 111427707 A CN111427707 A CN 111427707A CN 202010216291 A CN202010216291 A CN 202010216291A CN 111427707 A CN111427707 A CN 111427707A
- Authority
- CN
- China
- Prior art keywords
- memory
- shared memory
- address
- pool
- size
- 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
- 230000015654 memory Effects 0.000 title claims abstract description 269
- 238000000034 method Methods 0.000 title claims abstract description 75
- 238000004891 communication Methods 0.000 title claims abstract description 45
- 238000006243 chemical reaction Methods 0.000 claims abstract description 5
- 238000012545 processing Methods 0.000 claims abstract description 4
- 101000633429 Homo sapiens Structural maintenance of chromosomes protein 1A Proteins 0.000 claims description 7
- 102100029538 Structural maintenance of chromosomes protein 1A Human genes 0.000 claims description 7
- 230000002457 bidirectional effect Effects 0.000 claims description 6
- 230000009191 jumping Effects 0.000 claims 1
- 230000008569 process Effects 0.000 description 24
- 230000005540 biological transmission Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 4
- 230000008520 organization Effects 0.000 description 4
- 230000007717 exclusion Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 2
- 230000002068 genetic effect Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 239000002699 waste material Substances 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/544—Buffers; Shared memory; Pipes
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种基于共享内存池的IPC通信方法,其中,包括:进行IPC通信,包括:消息接收和消息发送;消息发送包括:申请共享内存,如成功则继续,否则结束;向共享内存写入消息数据;将申请到的共享内存的虚拟地址转换为逻辑地址;将该逻辑地址发往目的接收队列;该接收队列的消息接收包括:接收消息队列收到该逻辑地址;根据转换公式将该逻辑地址还原出内存池ID和共享内存最小管理单元逻辑地址;通过内存池ID逻辑地址获得虚拟地址,虚拟地址加上共享内存最小管理单元逻辑地址等于消息实际存储地址;处理消息;释放该逻辑地址;进行内存池创建管理。本发明的方法减少了IPC通信时内核拷贝信息次数,降低了系统开销。
Description
技术领域
本发明涉及计算机通信技术,特别涉及一种基于共享内存池的IPC通信方法。
背景技术
在Linux系统下IPC通信有多种工具可以选择,包括管道,FIFO,socket,消息队列及共享内存。所有工具又可分为两类,数据传输工具和共享内存。数据传输工具要求在用户内存和内核内存之间进行两次数据传输,一次传输是在写入的时候从用户内存到内核内存,另一次传输是在读取的时候内核内存到用户内存;共享内存允许进程通过将数据放到由进程间共享的一块内存中以完成信息交互,一个进程可以通过将数据放到共享内存块中使得其他进程读取这些数据。由于通信无需系统调用以及用户内存和内核内存之间的数据传输,因此共享内存的速度非常快。
基于共享内存的技术解决系统内大数据量的传递是业内普遍做法,技术差异主要体现在共享内存访问同步,共享内存的组织管理上。
中国专利“CN130514053一种基于共享内存的进程间通信方法”提供了一种使用读写锁和互斥锁同步循环队列的方法组织管理共享内存,多个进程是用同一段共享内存,通过互斥锁解决多个进程写互斥问题,是用读写锁解决多进程读顺序问题,在一定程度上提高了系统通信效率。
中国专利“CN130514053一种基于共享内存的进程间通信方法”所述技术方案当有进程长期占有读写权限时,势必对其他进程产生多种不确定结果,虽然有淘汰机制,但是并没有实际解决问题,而仅保证了本系统正常运行,这该机制是以牺牲其他进程的运行时间保证的。于对实时系统而言数据的实效性是第一位的。另外技术方案仅对读写权限做检查,虽然一定程度保证各个进程数据相对的独立性,但是没有机制保证本共享内存段所有者自身对内存操作的正确性。
发明内容
本发明的目的在于提供一种基于共享内存池的IPC通信方法,用于解决上述现有技术的问题。
本发明一种基于共享内存池的IPC通信方法,其中,包括:进行IPC通信,包括:消息接收和消息发送;消息发送包括:申请共享内存,如成功则继续,否则结束;向共享内存写入消息数据;将申请到的共享内存的虚拟地址转换为逻辑地址;将该逻辑地址发往目的接收队列;该接收队列的消息接收包括:接收消息队列收到该逻辑地址;根据转换公式将该逻辑地址还原出内存池ID和共享内存最小管理单元逻辑地址;通过内存池ID逻辑地址获得虚拟地址,虚拟地址加上共享内存最小管理单元逻辑地址等于消息实际存储地址;处理消息;释放该逻辑地址;进行内存池创建管理。
根据本发明的基于共享内存池的IPC通信方法的一实施例,其中,使用共享内存控制管理块、共享内存最小管理单元、共享内存最小管理单元的头部信息、共享内存最小管理单元的尾部信息以及双向链表对系统申请共享内存进行统一管理。
根据本发明的基于共享内存池的IPC通信方法的一实施例,其中,通信双方发送数据时,发方通过虚拟内存地址将数据写入共享内存,将虚拟地址转换为该逻辑地址。
根据本发明的基于共享内存池的IPC通信方法的一实施例,其中,接受方通过IPC接口收到发方的该逻辑地址,将该逻辑地址转换为本地的虚拟地址,从该虚拟地址中读出数据并解析。
根据本发明的基于共享内存池的IPC通信方法的一实施例,其中,内存池创建管理包括:a)读取配置文件,顺序解析配置文件,检查配置参数是否合法,合法后获取内存池ID、共享内存最小管理单元可用内存以及共享内存最小管理单元总数,如不合法,则结束;b)使用内存池ID获取共享内存首地址,若成功到则转a),失败则转c);c)使用内存池ID关键字创建共享内存,长度为共享内存控制管理块结构大小,共享内存最小管理单元总数个共享内存最小管理单元的可用内存、头部信息以及尾部信息;d)创建信号量,用于临界资源的保护,并获得资源;e)初始化空闲的双向链表,将线性的共享内存初始化为双向链表,链表元素为共享内存最小管理单元;f)初始化共享内存最小管理单元,设置实际大小为BLK_SIZE、已经使用的大小为0,属主信息为0,关联值为0,数据域的地址设置为自定义地址;g)初始化共享内存控制管理块的内存池内使用中共享内存最小管理单元的双向链表为空;h)释放二义信号量资源,跳转到a)。
根据本发明的基于共享内存池的IPC通信方法的一实施例,其中,申请共享内存时使用二分查找方法查找合适的内存池:对内存池ID根据共享内存最小管理单元可用内存大小顺序排列,在申请内存时,通过查找所有内存池共享内存最小管理单元可用内存大小,并进行比较推算出合理的内存池ID进行使用。
根据本发明的基于共享内存池的IPC通信方法的一实施例,其中,申请共享内存时使用二分查找方法查找合适的内存池进一步包括:将M指向的共享内存控制管理块记做SMCB[M],申请内存大小记做REQ_SIZE,最大内存池ID为MAX,最小内存池ID为MIN,中间内存池ID记做M,M=(MIN+MAX)/2;a)REQ_SIZE与中间位置的SMCB[M]的BLK_SIZE比较,通过中间内存池M将MAX个SMCB分成两部分;b)如果SMCB[M]的可用内存大小小于REQ_SIZE继续,如果大于就在MIN到M+1个内存池ID中继续查找;c)如果SMCB[M+1]的可用内存大小大于等于REQ_SIZE那么返回M+1值为申请到的内存池ID否则在M-1到MAX个内存池ID中继续查找。本发明所述方法减少了IPC通信时内核拷贝信息次数,降低了系统开销。基于内存池的分块管理,为实际业务提供了灵活的配置方法。内存块的属主及关联数,为用户信息安全提供了保障。
附图说明
图1所示为共享内存管理的组织结构示意图;
图2所示为配置管理创建SMCB流程图;
图3所示为申请共享内存流程图;
图4所示为释放共享内存流程图;
图5所示为二分查找过程图;
图6所示为IPC通信消息发送流程图;
图7所示为IPC通信消息接收流程图。
具体实施方式
为使本发明的目的、内容、和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
本发明一种基于共享内存池的IPC通信方法包括:
图1所示为共享内存管理的组织结构示意图,如图所示,进行共享内存管理包括:
使用SMCB(share memory control block,共享内存控制管理块)、共享内存最小管理单元BLK(block)、共享内存最小管理单元的头部信息BLK_HEAD、共享内存最小管理单元的尾部信息BLK_TAIL、双向链表等数据结构对系统申请共享内存进行统一管理,详细包括:
1、BLK:共享内存最小管理单元,也是共享内存申请的最小单位,其由共享数据域和数据域前后BLK_HEAD、BLK_TAIL组成。
2、BLK_HEAD:是共享内存最小管理单元的头部信息,其中包含了BLK块实际大小blksize、已经使用的大小usesize,属主信息(任务ID集合,可实现为容纳进程ID的数组),关联值,数据域的地址,以及实现双向链表所需的前后驱指针,并且指针值为自定义逻辑地址。
3、BLK_TAIL:是共享内存最小管理单元的尾部信息,其中包含当前共享内存单元的保护信息,有共享内存单元溢出标识符和应用扩展字段
4、FREELIST:当前空闲的BLK双向链表;
5、USEDLIST:内存池内使用中BLK的双向链表;
6、SMCB(share memory control block):共享内存控制管理块,总是位于内存池开始位置,包括BLK总数BLK_NUM,空闲BLK个数FREE_NUM,BLK可用内存大小BLK_SIZE(实际大小blksize),FREELIST,USEDLIST,信号量等;
7、自定义地址:该地址为共享内存虚拟地址相对SMCB块虚拟地址的偏移量;
8、POOLID:内存池ID,唯一标示一个内存池;
共享内存创建,共享内存申请和共享内存释放方法,以共IPC通信时使用,具体包括:
1、SMCB的创建即共享内存创建,图2所示为配置管理创建SMCB流程图,
a)使用POOLID作为键值创建共享内存块,共享内存块长度为SMCB结构长度、BLK_NUM个BLK_SIZE,BLK_NUM个BLK_HEAD,BLK_NUM个BLK_TAIL的总和。
b)创建信号量,用于临界资源(SMCB)的保护。当前创建并获得资源;
c)初始化SMCB.FREELIST,将线性的共享内存初始化为双向链表,链表元素为BLK;
d)初始化BLK,设置实际大小为BLK_SIZE、已经使用的大小为0,属主信息为0,关联值为0,数据域的地址设置为自定义地址;
e)初始化SMCB.USEDLIST为NULL;
f)释放信号量资源。
2、图3所示为申请共享内存流程图,如图所示:
a)根据申请共享内存的空间大小,使用二分查找方法查找使用哪个内存池,确认定POOLID获取SMCB地址;
b)获取二义信号量资源,获取资源成功后获得访问SMCB权继续,否则阻塞等待,直到其他任务释放信号量资源,该处再次获取资源成功后继续;
c)根据共享内存控制管理块空闲BLK数量FREE_NUM判定是否有空闲BLK,有空闲的BLK块则转到d),没有空闲BLK返回NULL结束。
d)从FREELIST链表中摘取第一块空闲块BLK,设置BLK属主包含通信源、目的任务ID。设置关联值为属主信息内任务ID个数。
e)将空闲BLK插入USEDLIST;
f)释放二义信号量资源;
g)将BLK_HEAD内保存的BLK自定义地址转换为虚拟地址返回。
3、图4所示为释放共享内存流程图,如图所示,共享内存释放包括:
a)通过当前BLK虚拟地址,通过偏移找到BLK_HEAD,再通过BLK_HEAD内的offset字段,计算SMCB;
b)获取SMCB信号量资源,成功继续,否则等待其他任务释放信号量资源,再次获取信号量资源。
c)校验当前任务ID是否属于BLK的属主信息的任务集合,不匹配到h),匹配继续
d)检查BLK_TAIL的溢出标识符,是否溢出,溢出继续,否则跳转到f。
e)根据BLK_HEAD的属主信息,输出警告,提示属主信息内所有任务内存溢出。跳转到i
f)内存块关联值减1后是否为0,不为0转到h),为0继续
g)清空BLK,更新SMCB,包括FREE_NUM加1,将BLK从USEDLIST链表删除后,插入到FREELIST链表;
h)释放信号量资源,即释放锁;
i)结束。
通过上述数据结构将共享内存有效的组织,使用者通过本发明方法申请共享内存,无需向系统重新申请,通过FREELIST查找在O(0)时间复杂度内将可用的共享地址返回,为提高申请内存时可以快速匹配精准合适的内存池。
图5所示为二分查找过程图,如图所示,本发明使用二分查找方法查找使用哪个内存池,具体包括:
对内存池ID根据BLK_SIZE大小顺序排列。在申请内存时,通过查找所有内存池BLK_SIZE,并进行比较最终推算出合理的内存池ID进行使用。查找具体流程包括:
将M指向的SMCB记做SMCB[M],申请内存大小记做REQ_SIZE,最大POOLID为MAX,最小POOLID为MIN。中间POOLID记做M,M=(MIN+MAX)/2;二分查找如下;
a)REQ_SIZE与中间位置的SMCB[M]的BLK_SIZE比较,M将MAX个SMCB分成两部分。
b)如果SMCB[M]的BLK_SIZE小于REQ_SIZE继续,如果大于就在MIN到M+1个POOLID中继续查找
c)如果SMCB[M+1]的BLK_SIZE大于等于REQ_SIZE那么返回M+1值为申请到的POOLID,否则在M-1到最大数个POOLID中继续查找。
为了解决非亲缘关系进程间共享内存地址(虚拟地址)不一样的问题,在内存管理中使用了相对偏移地址,即BLK_HEAD内存储的数据域地址为相对SMCB的地址偏移,本发明称之为逻辑地址。非亲缘关系进程通过相同的POOLID值访问同一块物理地址的共享内存,虽然共享内存的虚拟地址不相同,但使用相对偏移量就可选中统一的物理地址。当系统中存在多个POOLID是,将POOLID关联进逻辑地址,就可以区分不同POOLID的逻辑地址。
虚拟地址与自定义逻辑地址转换方法:根据前述定义,使用者每次申请共享内存内部实际管理的是逻辑地址,也就是申请得到的BLK的数据域虚拟地址相对SMCB的偏移量。由此可得出公式:
BLK逻辑地址=(BLK数据域虚拟地址–SMCB虚拟地址)&((0x1<<25)-1);
又因为需要区分不同POOLID的逻辑地址,所以在实际IPC传递时的逻辑地址ALGADDR需要关联POOLID,转换公式为:
ALGADDR=BLK逻辑地址&((POOLID&0xff)<<24);
共享内存的安全访问问题的解决,本发明使用了SMCB中的信号量来保护临界资源,保证相同时刻仅有一个进程访问;利用属主信息,控制访问共享内存的权限,只有关联的进程才可访问内存数据;通过监测BLK_TAIL中的溢出标识符,可快速感知溢出,达到防溢出功能。
第二步IPC通信,具体过程包括:消息接收方法,消息发送方法。下面详细描述具体操作流程。
图6所示为消息发送流程图,如图所示,包括:
a)使用第一部分的共享内存申请方法申请内存;成功继续,失败结束;
b)向共享内存写入消息数据;
c)将申请到虚拟地址转换为自定义逻辑地址ALGADDR;
d)将逻辑地址发往目的接收队列;
图7所示为消息接收流程图,如图7所示,步骤如下:
a)接收消息队列收到逻辑地址ALGADDR;
b)根据转换公式将逻辑地址ALGADDR还原出POOLID和BLK逻辑地址;
c)通过POOLID获得虚拟地址,虚拟地址+BLK逻辑地址获得消息实际存储地址;
d)处理消息;
e)释放ALGADDR。
通信双方实际发送数据时,发方通过虚拟内存地址将大量数据写入共享内存,在通过本发明的方法将虚拟地址转换为逻辑地址,发方最终使用IPC方法将逻辑地址传送给接收方。接受方通过IPC接口将收到发方的逻辑地址,根据本发明的转换方法将逻辑地址转换为本地的虚拟地址,在从虚拟地址中读出数据,并解析。
进一步包括:配置管理,负责内存池创建管理,提供内存池创建方法。
如图2所示,内存池创建方法流程的一实施例,包括:
ShareMem_Cfg:用户可定制文件,用于动态生成内存池的必要信息,包括BLK总数BLK_NUM,BLK可用内存大小BLK_SIZE,POOLID等;
根据配置文件ShareMem_Cfg动态生成n个共享内存段。ShareMem_Cfg文件全局可见,解析POOLID字段保证了非父子关系进程间共享内存物理地址的一致性。每个共享内存段如图1所示,包括SMCB[POOLID]及指定多了BLK。具体初始化步骤如下:
a)读取配置文件,顺序解析一条配置,检查配置参数是否合法,合法后获取POOLID,BLK_SIZE,BLK_NUM,不合法结束初始化;
b)使用POOLID获取SMCB[POOLID],成功到a),失败到c)
c)使用POOLID关键字创建共享内存,长度为SMCB结构大小,BLK_NUM个BLK_SIZE,BLK_NUM个BLK_HEAD,BLK_NUM个BLK_TAIL;
d)创建SMCB[POOLID],即共享内存首地址;
e)根据BINARY_SMESID创建二义信号量SMESID,并获得资源;
f)初始化SMCB[POOLID].FREELIST;
g)初始化SMCB[POOLID].FREELIST为链表头;
h)初始化SMCB[POOLID].USEDLIST为NULL;
i)释放二义信号量资源,回到a);
在管理一片连续的共享内存,最小管理单元即共享内存最小分配长度固定,当用于一般应用程序,因为通信所需内存长度不是唯一固定,势必会造成空间浪费,或资源不足。通过使用内存池和内存分配,解决灵活配置和扩展问题。
本发明提供配置功能,根据具体应用特性使用内存长度的分布情况,选择合理的配置参数,本发明提供通用的内存池配置参数。配置参数包括:内存池总个数,内存池ID,内存池内包含的BLK总数(BLK_NUM)及BLK可用内存大小BLK_SIZE等。配置参数存储于配置文件内,由配置管理功能解析,创建内存池。理论上本发明可以创建任意多个不同BLK_SIZE的内存池。经过试验在IPC大数据传输的情况下有良好表现。
本发明共分三部分,第一部分共享内存管理,是本发明的基础,为第二部分提供了共享内存访问方法。该部分解决:1、非亲缘关系进程间共享内存地址(虚拟地址)不一样的问题;2、共享内存高效申请问题;3、共享内存的安全访问问题。第二部分是本发明要解决的核心问题,通过第一部分提供的方法访问共享内存,实现高效IPC通信。该部分解决大数据拷贝通信效率问题。第三部分是对第一第二部分的配置管理,解决功能灵活配置和功能扩展问题。
本发明利用两个双向链表的方式管理共享内存,使用户分配及释放内存更加灵活,内存使用时间不受其他内存生命周期影响,只与自身关联数值及系统生命周期相关,特别是在实时系统条件下链式管理的优势尤其明显;同时分别记录空闲内存块(FREELIST)和占用内存块(USEDLIST),系统可以随时监控共享内存使用情况,扩展内存快照功能可实时查询系统内消息路径,快速分析业务故障;本发明方法使用配置文件动态创建共享内存池的规格,可根据业务特点自定义内存池个数,深度,BLK大小等,方便在不同系统平台上移植。本发明方法使用自定义地址管理各个BLK,用在实际通信中传递,代替实际的通信数据,减少了数据在系统中拷贝次数,即降低了系统开销,同时自定义地址关联了POOLID信息,使多个非父子进程共享多个内存池成为可能
本发明建立了以链表+中心控制管理的共享内存组织结构,减少了进程间共享内存资源管理的耦合性,一定程度上保证了数据的实时性;通过对用户友好的配置文件,来保正系统的可移植性;通过分别记录空闲和占用内存块,以及内存块尾,增强了对内存的保护,为调试增加了可用信息。
本发明一种基于共享内存池的IPC通信方法,本发明通过双向链表对共享内存进行组织,并通过内存池加强对共享内存的管理。不同内存池分别管理不同块大小的共享内存链表,按实际业务需求通过配置文件定制个内存池个数块大小及块总数。另设特殊内存池共超大内存需求业务分配使用,特殊内存池使用循环队列管理。系统内同一时间仅支持一个进程申请共享内存池内空间,申请成功后释放前可供所有者写,支持包括所有者在内的多进程读取,并可控制读取权限。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
Claims (7)
1.一种基于共享内存池的IPC通信方法,其特征在于,包括:
进行IPC通信,包括:消息接收和消息发送;
消息发送包括:
申请共享内存,如成功则继续,否则结束;
向共享内存写入消息数据;
将申请到的共享内存的虚拟地址转换为逻辑地址;
将该逻辑地址发往目的接收队列;
该接收队列的消息接收包括:
接收消息队列收到该逻辑地址;
根据转换公式将该逻辑地址还原出内存池ID和共享内存最小管理单元逻辑地址;
通过内存池ID逻辑地址获得虚拟地址,虚拟地址加上共享内存最小管理单元逻辑地址等于消息实际存储地址;
处理消息;
释放该逻辑地址;
进行内存池创建管理。
2.如权利要求1所述的基于共享内存池的IPC通信方法,其特征在于,使用共享内存控制管理块、共享内存最小管理单元、共享内存最小管理单元的头部信息、共享内存最小管理单元的尾部信息以及双向链表对系统申请共享内存进行统一管理。
3.如权利要求1所述的基于共享内存池的IPC通信方法,其特征在于,通信双方发送数据时,发方通过虚拟内存地址将数据写入共享内存,将虚拟地址转换为该逻辑地址。
4.如权利要求1所述的基于共享内存池的IPC通信方法,其特征在于,接受方通过IPC接口收到发方的该逻辑地址,将该逻辑地址转换为本地的虚拟地址,从该虚拟地址中读出数据并解析。
5.如权利要求1所述的基于共享内存池的IPC通信方法,其特征在于,内存池创建管理包括:
a)读取配置文件,顺序解析配置文件,检查配置参数是否合法,合法后获取内存池ID、共享内存最小管理单元可用内存以及共享内存最小管理单元总数,如不合法,则结束;
b)使用内存池ID获取共享内存首地址,若成功到则转a),失败则转c);
c)使用内存池ID关键字创建共享内存,长度为共享内存控制管理块结构大小,共享内存最小管理单元总数个共享内存最小管理单元的可用内存、头部信息以及尾部信息;
d)创建信号量,用于临界资源的保护,并获得资源;
e)初始化空闲的双向链表,将线性的共享内存初始化为双向链表,链表元素为共享内存最小管理单元;
f)初始化共享内存最小管理单元,设置实际大小为BLK_SIZE、已经使用的大小为0,属主信息为0,关联值为0,数据域的地址设置为自定义地址;
g)初始化共享内存控制管理块的内存池内使用中共享内存最小管理单元的双向链表为空;
h)释放二义信号量资源,跳转到a)。
6.如权利要求1所述的基于共享内存池的IPC通信方法,其特征在于,申请共享内存时使用二分查找方法查找合适的内存池:
对内存池ID根据共享内存最小管理单元可用内存大小顺序排列,在申请内存时,通过查找所有内存池共享内存最小管理单元可用内存大小,并进行比较推算出合理的内存池ID进行使用。
7.如权利要求6所述的基于共享内存池的IPC通信方法,其特征在于,申请共享内存时使用二分查找方法查找合适的内存池进一步包括:
将M指向的共享内存控制管理块记做SMCB[M],申请内存大小记做REQ_SIZE,最大内存池ID为MAX,最小内存池ID为MIN,中间内存池ID记做M,M=(MIN+MAX)/2;
a)REQ_SIZE与中间位置的SMCB[M]的BLK_SIZE比较,通过中间内存池M将MAX个SMCB分成两部分;
b)如果SMCB[M]的可用内存大小小于REQ_SIZE继续,如果大于就在MIN到M+1个内存池ID中继续查找;
c)如果SMCB[M+1]的可用内存大小大于等于REQ_SIZE那么返回M+1值为申请到的内存池ID否则在M-1到MAX个内存池ID中继续查找。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010216291.3A CN111427707B (zh) | 2020-03-25 | 2020-03-25 | 一种基于共享内存池的ipc通信方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010216291.3A CN111427707B (zh) | 2020-03-25 | 2020-03-25 | 一种基于共享内存池的ipc通信方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111427707A true CN111427707A (zh) | 2020-07-17 |
CN111427707B CN111427707B (zh) | 2024-02-06 |
Family
ID=71549423
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010216291.3A Active CN111427707B (zh) | 2020-03-25 | 2020-03-25 | 一种基于共享内存池的ipc通信方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111427707B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112114983A (zh) * | 2020-09-14 | 2020-12-22 | 深圳花儿数据技术有限公司 | 一种基于共享内存的通信方法、装置和设备 |
CN112214329A (zh) * | 2020-11-04 | 2021-01-12 | 腾讯科技(深圳)有限公司 | 内存管理方法、装置、设备及计算机可读存储介质 |
CN112328412A (zh) * | 2020-11-13 | 2021-02-05 | 重庆航天工业有限公司 | 一种基于linux平台下用户层的ipc通信方法 |
CN112416625A (zh) * | 2020-11-30 | 2021-02-26 | 深信服科技股份有限公司 | 免拷贝的进程间通信系统及方法 |
CN112860458A (zh) * | 2021-02-22 | 2021-05-28 | 北京睿芯高通量科技有限公司 | 一种基于共享内存的进程间通信方法及系统 |
CN113312187A (zh) * | 2021-06-02 | 2021-08-27 | 福建天晴数码有限公司 | 基于双向链表的消息多线程消费顺序确认的方法及装置 |
CN114153634A (zh) * | 2021-12-03 | 2022-03-08 | 上海交通大学 | 基于国产龙芯处理器的进程间通信系统及操作平台 |
CN114500400A (zh) * | 2022-01-04 | 2022-05-13 | 西安电子科技大学 | 基于容器技术的大规模网络实时仿真方法 |
EP4170497A1 (en) * | 2021-12-24 | 2023-04-26 | Beijing Baidu Netcom Science Technology Co., Ltd. | Access control method and apparatus for shared memory, electronic device and autonomous vehicle |
CN117056099A (zh) * | 2023-08-14 | 2023-11-14 | 中国铁道科学研究院集团有限公司 | 一种铁路信号安全计算机平台及其内存共享方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101180802A (zh) * | 2005-03-25 | 2008-05-14 | 安太科技株式会社 | 共享内存分块的访问控制 |
CN101266575A (zh) * | 2007-03-13 | 2008-09-17 | 中兴通讯股份有限公司 | 一种提高内存池利用率的方法 |
CN101499034A (zh) * | 2009-03-05 | 2009-08-05 | 北京中星微电子有限公司 | 内存管理方法 |
US20090254715A1 (en) * | 2005-03-23 | 2009-10-08 | Mtekvision Co., Ltd. | Variable partitioned blocks in shared memory |
CN103425538A (zh) * | 2012-05-24 | 2013-12-04 | 深圳市腾讯计算机系统有限公司 | 进程通讯方法及系统 |
-
2020
- 2020-03-25 CN CN202010216291.3A patent/CN111427707B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090254715A1 (en) * | 2005-03-23 | 2009-10-08 | Mtekvision Co., Ltd. | Variable partitioned blocks in shared memory |
CN101180802A (zh) * | 2005-03-25 | 2008-05-14 | 安太科技株式会社 | 共享内存分块的访问控制 |
CN101266575A (zh) * | 2007-03-13 | 2008-09-17 | 中兴通讯股份有限公司 | 一种提高内存池利用率的方法 |
CN101499034A (zh) * | 2009-03-05 | 2009-08-05 | 北京中星微电子有限公司 | 内存管理方法 |
CN103425538A (zh) * | 2012-05-24 | 2013-12-04 | 深圳市腾讯计算机系统有限公司 | 进程通讯方法及系统 |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112114983A (zh) * | 2020-09-14 | 2020-12-22 | 深圳花儿数据技术有限公司 | 一种基于共享内存的通信方法、装置和设备 |
CN112114983B (zh) * | 2020-09-14 | 2022-04-19 | 深圳花儿数据技术有限公司 | 一种基于共享内存的通信方法、装置和设备 |
CN112214329B (zh) * | 2020-11-04 | 2023-09-22 | 腾讯科技(上海)有限公司 | 内存管理方法、装置、设备及计算机可读存储介质 |
CN112214329A (zh) * | 2020-11-04 | 2021-01-12 | 腾讯科技(深圳)有限公司 | 内存管理方法、装置、设备及计算机可读存储介质 |
CN112328412A (zh) * | 2020-11-13 | 2021-02-05 | 重庆航天工业有限公司 | 一种基于linux平台下用户层的ipc通信方法 |
CN112328412B (zh) * | 2020-11-13 | 2024-05-07 | 重庆航天工业有限公司 | 一种基于linux平台下用户层的ipc通信方法 |
CN112416625A (zh) * | 2020-11-30 | 2021-02-26 | 深信服科技股份有限公司 | 免拷贝的进程间通信系统及方法 |
CN112416625B (zh) * | 2020-11-30 | 2024-04-09 | 深信服科技股份有限公司 | 免拷贝的进程间通信系统及方法 |
CN112860458A (zh) * | 2021-02-22 | 2021-05-28 | 北京睿芯高通量科技有限公司 | 一种基于共享内存的进程间通信方法及系统 |
CN113312187B (zh) * | 2021-06-02 | 2023-06-16 | 福建天晴数码有限公司 | 基于双向链表的消息多线程消费顺序确认的方法及装置 |
CN113312187A (zh) * | 2021-06-02 | 2021-08-27 | 福建天晴数码有限公司 | 基于双向链表的消息多线程消费顺序确认的方法及装置 |
CN114153634A (zh) * | 2021-12-03 | 2022-03-08 | 上海交通大学 | 基于国产龙芯处理器的进程间通信系统及操作平台 |
CN114153634B (zh) * | 2021-12-03 | 2024-05-28 | 上海交通大学 | 基于国产龙芯处理器的进程间通信系统及操作平台 |
EP4170497A1 (en) * | 2021-12-24 | 2023-04-26 | Beijing Baidu Netcom Science Technology Co., Ltd. | Access control method and apparatus for shared memory, electronic device and autonomous vehicle |
CN114500400B (zh) * | 2022-01-04 | 2023-09-08 | 西安电子科技大学 | 基于容器技术的大规模网络实时仿真方法 |
CN114500400A (zh) * | 2022-01-04 | 2022-05-13 | 西安电子科技大学 | 基于容器技术的大规模网络实时仿真方法 |
CN117056099A (zh) * | 2023-08-14 | 2023-11-14 | 中国铁道科学研究院集团有限公司 | 一种铁路信号安全计算机平台及其内存共享方法 |
CN117056099B (zh) * | 2023-08-14 | 2024-06-07 | 中国铁道科学研究院集团有限公司 | 一种铁路信号安全计算机平台及其内存共享方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111427707B (zh) | 2024-02-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111427707A (zh) | 一种基于共享内存池的ipc通信方法 | |
JP3199718B2 (ja) | キャッシュ整合性維持方法 | |
EP3796188A1 (en) | Blockchain network transaction processing method, apparatus, device, and storage medium | |
CN100498796C (zh) | 逻辑日志生成方法、数据库备份/恢复方法与系统 | |
EP3238421B1 (en) | System for high-throughput handling of transactions in data-partitioned, distributed, relational database management system | |
TWI305618B (en) | Use of virtual targets for preparing and servicing requests for server-free data transfer operations | |
US11934383B2 (en) | Mimetic database-based network operating system design method | |
US8239879B2 (en) | Notification by task of completion of GSM operations at target node | |
CN108491332A (zh) | 一种基于Redis的实时缓存更新方法和系统 | |
CN101127685A (zh) | 一种进程间通讯装置及其进程间通讯方法 | |
CN110704214B (zh) | 进程间通信方法和装置 | |
DE60142152D1 (de) | Virtualisierung von E/A-Adapterressourcen | |
CN102955851A (zh) | 一种数据库的切换方法和装置 | |
CN101944119B (zh) | 一种智能电子设备的实时事件管理方法 | |
CN111897666A (zh) | 用于多进程之间通信的方法、设备及系统 | |
US20090199191A1 (en) | Notification to Task of Completion of GSM Operations by Initiator Node | |
CN114385091A (zh) | 网盘盘符的实现方法、装置、网盘及存储介质 | |
CN105453056B (zh) | 用于在多高速缓存环境中管理高速缓冲存储器的方法和装置 | |
CN102968457A (zh) | 数据库间切换方法和系统 | |
CN105068817A (zh) | 将数据写入存储设备的方法及存储设备 | |
EP2235637B1 (en) | Hierarchical block-identified data communication for unified handling of structured data and data compression | |
CN111435286B (zh) | 一种数据存储方法、装置和系统 | |
CN112486702B (zh) | 基于多核多处理器并行系统的全局消息队列实现方法 | |
CN112230901B (zh) | 一种基于异步io模型的网络编程框架系统及方法 | |
CN104572483B (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 |