[发明专利]一种基于共享内存的进程间通讯方法有效
申请号: | 201310432622.7 | 申请日: | 2013-09-22 |
公开(公告)号: | CN103514053B | 公开(公告)日: | 2017-01-25 |
发明(设计)人: | 刘庆云;李世明;刘洋;秦鹏;郑超;孙永;周舟;杨威 | 申请(专利权)人: | 中国科学院信息工程研究所 |
主分类号: | G06F9/54 | 分类号: | G06F9/54;G06F9/44 |
代理公司: | 北京轻创知识产权代理有限公司11212 | 代理人: | 杨立 |
地址: | 100093 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 共享 内存 进程 通讯 方法 | ||
1.一种基于共享内存的多进程间通讯方法,其特征在于,包括如下步骤:
步骤1:写进程创建包括管理单元、循环队列和内存池的共享内存,并在管理单元中存储关于整个共享内存的管理信息;
步骤2:写进程从管理单元中获取关于当前写进程的操作位置,根据每次待写入数据的大小,顺序开辟与待存入数据大小等大的第N(N=1,2,3…)存储块,将待写入的数据存入相应存储块中;
步骤3:开辟第N存储块时,记录所述第N存储块的大小、起始位置、结束位置以及存储的是否为完整数据,上述记录的信息形成第N结构体,并存入循环队列的队尾指针处;同时更新管理单元中关于当前写进程的操作位置的记录;
步骤4:在执行步骤2至3的同时,一个或若干个读进程可对共享内存进行读操作;
步骤5:每个读进程自循环队列的队头开始,依次读取第N(N=1,2,3…)结构体;
步骤6:判断第N结构体是否处于循环队列的队尾,如果是队尾,说明该结构体对应的存储块正在进行写操作,则等待,等到队尾指针不指向该结构体时,执行步骤7;如果不是队尾,则直接执行步骤7;
步骤7:根据该结构体中关于第N存储块的位置信息,读取内存池中相应第N存储块中的数据;
步骤8:判断所述写进程是否还要向内存池写入数据,如果是,返回步骤2;否则判断内存池中数据是否都已读完,如果未读完则返回步骤5;否则结束。
2.根据权利要求1所述一种基于共享内存的多进程间通讯方法,其特征在于,步骤1中所述的管理信息包括:
该共享内存创建者ID、队列规模、内存池大小、内存池起始位置、内存池结尾位置、当前写进程的操作位置、当前读该共享内存的所有读进程标记、当前使用该共享内存的进程数目、读写锁和互斥锁。
3.根据权利要求1所述一种基于共享内存的多进程间通讯方法,其特征在于,步骤2中开辟第N存储块时,还要进行如下操作,
步骤2.1:根据第N-1存储块的结束位置、待存入数据的大小以及内存池的结尾位置判断内存池是否还有足够空间开辟第N存储块来存储数据,如果有足够空间,则执行步骤2.2;如果没有足够空间,则执行2.3;
步骤2.2:开辟与待存入数据等大的第N存储块,将待存入数据存入所述第N存储块,生成关于第N存储块的结构体,并在结构体中标记所存储的数据为完整数据;
步骤2.3:开辟自第N-1存储块的结束位置至内存池的结束位置大小的第N存储块,将待存入数据的一部分存入所述第N存储块,形成第N存储块的结构体,在结构体中标记所存储的数据为不完整数据;将剩余的待存入数据存入内存池头部。
4.根据权利要求3所述一种基于共享内存的多进程间通讯方法,其特征在于,步骤2.3中在将剩余的待存入数据存入内存池头部前要执行如下步骤:
步骤2.3.1:写进程根据循环队列的第N(N=1,2,3,4…)结构体中关于读进程读取第N存储块的记录,判断第N存储块中是否被所有读进程读完,如果未读完则等待,等到读完后,执行步骤2.3.2;如果读完则直接执行步骤2.3.2;
步骤2.3.2:判断第N存储块的大小是否能够容纳剩余的待存入数据,如果能够容纳,则自内存池起始位置开始开辟与剩余的待存入数据等大的存储块,结束;否则返回步骤2.3.1。
5.根据权利要求4所述一种基于共享内存的多进程间通讯方法,其特征在于,所述步骤2.3.1中还包括预设一个等待时间阈值,当所述写进程等待的时间超过等待时间阈值时,所述第N存储块还未被所有读进程读完,则不再等待,直接执行步骤2.3.2。
6.根据权利要求1所述一种基于共享内存的进程间通讯方法,其特征在于,步骤3中所述第N结构体中还包括用于记录一个或若干个读进程读取存储池中第N存储块的读取状态的标记数组,当某一读进程读取第N存储块时,将第N结构体关于该读进程对所述第N存储块是否已读的标记位置1。
7.根据权利要求1所述一种基于共享内存的多进程间通讯方法,其特征在于,多个读进程可同时对共享内存进行读操作,只有一个写进程对共享内存进行写操作,读进程和写进程可同时对共享内存进行操作。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学院信息工程研究所,未经中国科学院信息工程研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310432622.7/1.html,转载请声明来源钻瓜专利网。
- 上一篇:旋转压缩机和具有其的冷冻循环装置
- 下一篇:耐磨环组件和泵送设备