[发明专利]一种基于共享内存的通信方法及装置无效
申请号: | 200910172131.7 | 申请日: | 2009-09-10 |
公开(公告)号: | CN102023961A | 公开(公告)日: | 2011-04-20 |
发明(设计)人: | 秦晓辉 | 申请(专利权)人: | 中兴通讯股份有限公司 |
主分类号: | G06F15/167 | 分类号: | G06F15/167 |
代理公司: | 北京安信方达知识产权代理有限公司 11262 | 代理人: | 解婷婷;龙洪 |
地址: | 518057 广东省深圳市南山*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 共享 内存 通信 方法 装置 | ||
技术领域
本发明涉及通信技术领域,具体涉及一种基于共享内存的通信方法及装置。
背景技术
在两个CPU之间通过共享内存通信时,目前较常见的有以下几种方法。
第一种方法是将共享内存存分为两块,分别作为两个CPU的发送、接收通道,如图1所示。每个通道提供一个读写标志位,该标志初始为可写态。发送方发送数据后将读写标志由可写态修改为可读态,等待接收方接收。接收方接收数据后将读写标志由可读态修改为可写态,以便发送方可以继续发送。采用这种方法,每一次的数据交互都需要等待对方读或写完毕,效率很低。
第二种方法也是将共享内存分为两块,分别作为两个CPU的发送、接收通道,每个通道用一个环形队列实现循环读写,如图2所示。环形队列通过存放在邮箱中的读写指针进行管理。以CPU1发送为例,CPU1有数据需要发送时,首先通过环形队列1的读、写指针计算是否有足够的剩余空间,如果空间足够,则将消息包写入写指针所指位置,并更新写指针。CPU2定时轮询环形队列1,发现有新的消息包时,则读取消息包,并更新读指针。由于发送方和接收方可以同时操作共享内存,比前面的方法效率上大大提高,但是还是存在以下问题:
1、数据一般按定长打包发送,对于消息包长度相差大,例如最小长度为4字节,最大长度为40字节,都要按最大的40字节打包发送,造成浪费。
2、在队列尾端空间不够存放新消息包时,一般为了操作方便不允许消息包卷绕,就需要填充特殊值(例如0xFFFF)指示该尾端空间无效,并将消息包放置到队列头部。接收时需要和特殊值比较,判断是正常消息包还是卷绕时的填充值。如果正常消息包中包含特殊值,就会产生冲突。
第三种方法,即现有专利文献《一种基于共享存储器的双CPU通信方法》,专利申请号为200610103231.0,使用了两个环形队列,如图3所示,一个用于存放消息索引,另一个用于存放消息实体。其中,消息索引是大小固定为4字节且指向消息实体的指针,如图4所示,消息实体大小可变。但此方法有如下不足:
1、在程序设计中必须时刻注意消息索引和消息实体队列的同步,需要同时维护两个队列,增加了程序的复杂性。
2、易造成浪费。当有很多小的消息包致使消息索引队列满时,整个消息通道将不可用,即使消息实体队列还有很大的空间也不能使用。
发明内容
本发明所要解决的技术问题是,提供一种基于共享内存的通信方法及装置,可以支持多通道、可变消息长度。
为了解决上述问题,本发明公开了一种基于共享内存的通信方法,包括:
发送方将所要发送的内容作为消息体写入内存的通道,并为该消息体配置定长的消息头以构成传输消息,其中,所述消息头中至少携带所述消息体的长度;
接收方从所述通道中读取所述消息头,根据所述消息头的起始地址以及消息头的长度确定所述消息体的起始地址,再根据所述消息体的起始地址以及所述消息头中消息体的长度,确定所述消息体在所述内存通道的位置,在该位置上读取所述消息体,进行处理。
进一步地,在所述发送方将所述消息体写入内存通道前,上述方法还包括;
所述发送方与所述接收方将内存划分为多个通道,为各通道配置通道描述符,所述通道描述符包括通道的基地址、通道的大小以及通道的读写指针。
其中,发送方将所要发送的消息体写入内存通道时,还将该通道的写指针指向该通道的下一个可用单元;
所述接收方判断所述通道的读、写指针不相等时,才读取所述传输消息,并将所述通道的读指针指向下一个传输消息。
所述消息头还包括下一跳地址,所述下一跳地址表示下一个传输消息的消息头的起始地址。
所述发送方将所述传输消息写入内存的通道时,若所述通道底部空闲空间小于所述传输消息的长度,且所述通道顶部空闲空间大于所述传输消息的长度,则在所述通道的底部写入一空消息头,将所述传输消息写入所述通道的顶部,其中,所述空消息头中消息体的长度为零,下一跳地址为零;
若所述接收方从所述通道中读取到所述空消息头,则从所述通道的顶部读取传输消息,进行处理。
本发明还公开了一种基于共享内存的通信装置,包括发送单元、接收单元,处理单元,其中:
所述发送单元,用于将所述处理单元发送的传输消息写入内存的通道;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中兴通讯股份有限公司,未经中兴通讯股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200910172131.7/2.html,转载请声明来源钻瓜专利网。