[发明专利]一种基于边界保护的消息通信方法及装置有效
| 申请号: | 202010570711.8 | 申请日: | 2020-06-22 |
| 公开(公告)号: | CN111538607B | 公开(公告)日: | 2020-10-20 |
| 发明(设计)人: | 韩辉 | 申请(专利权)人: | 北京翼辉信息技术有限公司 |
| 主分类号: | G06F9/54 | 分类号: | G06F9/54;G06F21/62 |
| 代理公司: | 北京智乾知识产权代理事务所(普通合伙) 11552 | 代理人: | 邓大为 |
| 地址: | 100095 北京*** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 基于 边界 保护 消息 通信 方法 装置 | ||
1.一种基于边界保护的消息通信方法,其特征在于,所述方法包括:
初始化步骤,启动有边界虚拟消息设备,通过所述有边界虚拟消息设备在系统堆中申请一环形缓冲区;
写入步骤,第一进程将第一消息数据写入所述环形缓冲区,写入成功后所述有边界虚拟消息设备释放读信号量;
读出步骤,第二进程获取到读信号量后从所述环形缓冲区读出所述第一消息数据;
其中,所述第一消息数据的头文件记录所述第一消息数据的数据长度,当所述数据长度超出缓冲区范围时,所述有边界虚拟消息设备将读指针或写指针重新指向环形缓冲区的首地址;
其中,所述写入步骤与所述读出步骤通过所述有边界虚拟消息设备进行读写同步,包括:当所述第一进程向所述环形缓冲区写入数据时,判断所述环形缓冲区是否初始化成功,如果是,继续判断所述环形缓冲区的大小是否大于或等于所述第一消息数据的长度得到第一判断结果,如果所述第一判断结果为是,所述第一进程将所述第一消息数据写入所述环形缓冲区,写入成功后所述有边界虚拟消息设备向所述第二进程释放读信号量,如果所述第一判断结果为否,所述有边界虚拟消息设备释放阻塞信号量,以阻止向所述环形缓冲区写入数据;所述第二进程获得所述读信号量后开始从所述环形缓冲区读出所述第一消息数据,在读出所述第一消息数据完成后,判断所述环形缓冲区中是否还有消息数据得到第二判断结果,如果所述第二判断结果为否,所述有边界虚拟消息设备释放阻塞信号量,以阻止从所述环形缓冲区读出数据,如果所述第二判断结果为是,所述有边界虚拟消息设备释放读出信号量,使得其他进程进行消息数据的读出,然后判断所述环形缓冲区是否还有空间剩余得到第三判断结果,如果所述第三判断结果为是,所述有边界虚拟消息设备释放写信号量,如果所述第三判断结果为否,所述有边界虚拟消息设备释放阻塞信号量,以阻止向所述环形缓冲区写入数据;
在所述第一判断结果为否时,所述有边界虚拟消息设备将所述第一消息数据拆分为N条第一消息子数据后写入所述环形缓冲区,, 表示向上取整,M为所述第一消息数据的长度,K为所述环形缓冲区的大小,所述第一消息数据的长度等于所述头文件的长度与所述数据长度之和;
所述有边界虚拟消息设备具有进程读写的多路复用机制模式, 当第三进程处于所述多路复用机制模式时,所述第三进程调用所述有边界虚拟消息设备的文件状态监测进程,所述文件状态监测进程判断所述环形缓冲区是否处于读阻塞状态得到第四判断结果,如果所述第四判断结果为是,判断所述环形缓冲区是否有消息数据,如果是,则唤醒读阻塞以阻塞其他进程对所述环形缓冲区的读操作,所述第三进程从所述环形缓冲区中读出消息数据;如果所述第四判断结果为否,则判断所述环形缓冲区是否处于写阻塞状态,如果是,则判断所述环形缓冲区是否还有空间剩余,如果是,则唤醒写阻塞以阻塞其他进程对所述环形缓冲区的写操作,所述第三进程将消息数据写入所述环形缓冲区;
所述有边界虚拟消息设备设置对所述环形缓冲区设置操作权限,其他进程欲使用该设备时,若权限不足则无法打开使用。
2.根据权利要求1所述的方法,其特征在于,所述有边界虚拟消息设备设定一次原子操作的最大数据长度,当判断所述环形缓冲区的剩余空间大小小于一次原子操作的最大数据长度时,所述有边界虚拟消息设备发出阻塞信号量,阻塞写操作。
3.根据权利要求2任一项所述的方法,其特征在于,所述有边界虚拟消息设备申请的所述环形缓冲区支持L个进程同时使用,以实现L个进程之间的消息通信,所述L≥2。
4.根据权利要求3所述的方法,其特征在于,所述有边界虚拟消息设备设置读阻塞阈值和写阻塞时间阈值,当所述有边界虚拟消息设备判断读出消息数据的进程阻塞时间达到读阻塞阈值时,退出所述读出消息数据的进程;所述有边界虚拟消息设备判断写入消息数据的进程阻塞时间达到写阻塞阈值时,退出所述写入消息数据的进程。
5.一种基于边界保护的消息通信装置,其特征在于,所述装置包括:
初始化单元,用于启动有边界虚拟消息设备,通过所述有边界虚拟消息设备在系统堆中申请一环形缓冲区;
写入单元,用于使第一进程将第一消息数据写入所述环形缓冲区,写入成功后所述有边界虚拟消息设备释放读信号量;
读出单元,用于使第二进程获取到读信号量后从所述环形缓冲区读出所述第一消息数据;
其中,所述第一消息数据的头文件记录所述第一消息数据的数据长度,当所述数据长度超出缓冲区范围时,所述有边界虚拟消息设备将读指针或写指针重新指向环形缓冲区的首地址;
其中,所述写入单元与所述读出单元通过所述有边界虚拟消息设备进行读写同步,包括:当所述第一进程向所述环形缓冲区写入数据时,判断所述环形缓冲区是否初始化成功,如果是,继续判断所述环形缓冲区的大小是否大于或等于所述第一消息数据的长度得到第一判断结果,如果所述第一判断结果为是,所述第一进程将所述第一消息数据写入所述环形缓冲区,写入成功后所述有边界虚拟消息设备向所述第二进程释放读信号量,如果所述第一判断结果为否,所述有边界虚拟消息设备释放阻塞信号量,以阻止向所述环形缓冲区写入数据;所述第二进程获得所述读信号量后开始从所述环形缓冲区读出所述第一消息数据,在读出所述第一消息数据完成后,判断所述环形缓冲区中是否还有消息数据得到第二判断结果,如果所述第二判断结果为否,所述有边界虚拟消息设备释放阻塞信号量,以阻止从所述环形缓冲区读出数据,如果所述第二判断结果为是,所述有边界虚拟消息设备释放读出信号量,使得其他进程进行消息数据的读出,然后判断所述环形缓冲区是否还有空间剩余得到第三判断结果,如果所述第三判断结果为是,所述有边界虚拟消息设备释放写信号量,如果所述第三判断结果为否,所述有边界虚拟消息设备释放阻塞信号量,以阻止向所述环形缓冲区写入数据;
在所述第一判断结果为否时,所述有边界虚拟消息设备将所述第一消息数据拆分为N条第一消息子数据后写入所述环形缓冲区,, 表示向上取整,M为所述第一消息数据的长度,K为所述环形缓冲区的大小,所述第一消息数据的长度等于所述头文件的长度与所述数据长度之和;
所述有边界虚拟消息设备具有进程读写的多路复用机制模式,当第三进程处于所述多路复用机制模式时,所述第三进程调用所述有边界虚拟消息设备的文件状态监测进程,所述文件状态监测进程判断所述环形缓冲区是否处于读阻塞状态得到第四判断结果,如果所述第四判断结果为是,判断所述环形缓冲区是否有消息数据,如果是,则唤醒读阻塞以阻塞其他进程对所述环形缓冲区的读操作,所述第三进程从所述环形缓冲区中读出消息数据;如果所述第四判断结果为否,则判断所述环形缓冲区是否处于写阻塞状态,如果是,则判断所述环形缓冲区是否还有空间剩余,如果是,则唤醒写阻塞以阻塞其他进程对所述环形缓冲区的写操作,所述第三进程将消息数据写入所述环形缓冲区;
所述有边界虚拟消息设备设置对所述环形缓冲区设置操作权限,其他进程欲使用该设备时,若权限不足则无法打开使用。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京翼辉信息技术有限公司,未经北京翼辉信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010570711.8/1.html,转载请声明来源钻瓜专利网。





