一种基于共享存储器的双CPU通信方法技术

技术编号:2834624 阅读:261 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种基于共享存储器的双CPU通信方法,在第一CPU和第二CPU之间存在双向传输通道,每一通道使用两个环形队列,一个用于存放消息索引,一个用于存放消息实体;并且每一通道传输过程包括以下步骤:初始化流程:通信前完成本CPU负责的队列读写指针的初始化;发送消息流程:将新消息实体写入消息实体队列,并更新消息实体队列写指针,即指向新消息实体之后的可用单元;更新消息索引队列写指针所指单元的内容,指向消息实体队列中的新消息实体,并更新消息索引队列写指针指向下一单元;接收消息流程。本发明专利技术方法由于在共享存储器中引入索引队列和实体队列,支持可变消息长度,减少了发送方和接收方的等待时间,提高了CPU的利用率,提高了数据吞吐量和处理速度。

【技术实现步骤摘要】

本专利技术涉及一种通信
的通信方法,具体涉及的是一种基于共享存储器的双CPU通信方法
技术介绍
在现有技术的两个CPU之间通过共享存储器通信时,目前丰支常见的有两种方法。一种方法是将共享存储区划分为两块,分别作为两个CPU的发送、接收通道,如附图说明图1所示。每个通道提供一个读写标志位,该标志初始为可写 态。发送方发送数据后将读写标志由可写态修改为可读态,等待接收方接 收。接收方接收数据后将读写标志由可读态修改为可写态,以便发送方可 以继续发送。采用这种方法,每一次的数据交互都需要等待对方读或写完 毕,效率很低。另一种方法也是将共享存储区分为两块,分别作为两个CPU的发送、 接收的通道,每个通道用一个环形队列实现循环读写,如图2所示。环形 队列通过存放在邮箱中的读写指针进行管理。以CPU1发送为例,CPU1有数据需要发送时,首先通过环形队列1的读、写指针计算是否有足够的剩 余空间,如果空间足够,则将消息包写入写指针所指位置,并更新写指针。CPU2定时轮询环形队列1,发现有新的消息包时,则读取消息包,并更新 读指针。由于发送方和接收方可以同时操作共享存储区,比前述方法在效 率上大大提高。但是还是存在以下问题 (1)数据一般按定长打包发送,对于消息包长度相差大,例如最小长度为4字节,最大长度为40字节,都要按最大的40字节打包发送,造成浪费。(2) 数棍不接定长打包发送时,需要在消息包中包含长度信息,由于 消息包不定长,接收方无法通过读写指针计算出待处理的消息条数。(3) 消息包不定长时,在连续发送消息的过程中,其中某条出现故障 将引起后面的读写指针全部紊乱。(4) 在队列尾端空间不够存放新消息包时, 一般为了操作方便不允许 消息包巻绕,就需要填充特殊值(例如0xFFFF)指示该尾端空间无效,并 将消息包放置到队列头部。接收时需要和特殊值比较,判断是正常消息包 还是巻绕时的填充值。如果正常消息包中包含特殊值,就会产生冲突。因此,现有技术还有待于改进和发展。
技术实现思路
本专利技术的目的在于提供一种基于共享存储器的双CPU通信方法,针对 前述两种方法的缺点,提供了一种支持可变消息长度,高效、可靠的双CPU 通信方法。本专利技术的技术方案如下一种基于共享存储器的双CPU通信方法,在第一 CPU和第二 CPU之间 存在双向传输通道,每一通道使用两个环形队列, 一个用于存放消息索引, 一个用于存放消息实体;并且每一通道传输过程包括以下步骤A、 初始化流程通信前完成本CPU负责的队列读写指针的初始化;B、 发送消息流程将新消息实体写入消息实体队列,并更新消息实体 队列写指针,即指向新消息实体之后的可用单元;更新消息索引队列写指 针所指单元的内容,指向消息实体队列中的新消息实体,并更新消息索引 队列写指针指向下一单元;C、 接收消息流程消息索引队列读指针前移一个单元,根据该单元中的索引计算待处理消息实体的读指针,并更新消息索引队列读指针;读取 待处理消息实体并处理。所述的方法,其中,所述步骤A还包括写指针指向队列头部第一个单元,读指针指向队列尾部最后一个单元。 所述的方法,其中,所述步骤B还包括BOl、根据消息实体队列读、写指针和消息实体队列大小,判断是否可 以写入新消息实体;是,则继续;否,则延迟后再发;B02、根据消息索引队列读、写指针和消息索引队列大小,判断是否可 以写入新消息索引;是,则继续;否,则延迟后再发。所述的方法,其中,所述步骤C还包括COl、根据消息索引队列读、写指针和消息索引队列大小,计算待处理 消息条数,如果没有消息处理则返回。所述的方法,其中,所述步骤C中,所述消息索引队列读指针前移一个 单元时,如果前移到达消息索引队列大小则回绕到0。所述的方法,其中,所述步骤C中还包括C02、更新消息实体队列读指针;C03、待处理消息条数减1;循环处理直到待处理消息条数为0。所述的方法,其中,所述消息索引是大小固定为4字节、指向消息实体 的指针;所述消息实体大小可变。所述的方法,其中,所述每个环形队列通过存放在邮箱中的读写指针管 理,写指针表示发送方可写,接收方只读;读指针表示发送方只读,接收 方可写。所述的方法,其中,对所述邮箱采用镜像保护,以避免指针的同时读 写冲突。所述的方法,其中,所述发送方发送消息的同时,通过中断产生和控制装置设置对方的中断状态标志位;所述接收方通过响应中断接收,或用轮 询的方式接收。本专利技术所提供的一种基于共享存储器的双CPU通信方法,与现有技术 相比,由于在共享存储器中引入索引队列和实体队列,减少了发送方和接 收方的等待时间,减少了接收方重复进中断或查询的次数,提高了CPU的 利用率,提高了数据吞吐量和处理速度,能够支持可变消息长度,高效、 可靠,尤其适用于消息流量大、且消息包不定长的情况。附图i兌明图1是现有技术的共享存储器的双CPU通信示意图; 图2是现有技术的每个通道用 一个环形队列的双CPU通信示意图; 图3是本专利技术所述方法中的每个通道用两个环形队列的双CPU通信示 意图4是本专利技术所述方法中的消息索引与消息实体关系示意图; 图5是作为本专利技术具体实施方式的双CPU通信示意图; 图6是作为本专利技术具体实施方式的邮箱分配示意图; 图7示例了典型情况下的待处理消息条数计算示意图。具体实施例方式下面结合具体实施方式对本专利技术所述方法作进一步的描述。 本专利技术的基于共享存储器的双CPU通信方法,如图3和图4所示的, 为了描述方便,定义CPU1发送、CPU2接收的通道为正向通道,CPU2发 送、CPU1接收的通道为反向通道。正向通道和反向通道各使用了两个环形 队列, 一个用于存放消息索引, 一个用于存放消息实体;消息索引是大小 固定为4字节、指向消息实体的指针,消息实体大小可变。每个环形队列通过存;^文在邮箱中的读写指针管理,写指针表示发送方可写,接收方只读。读指针表示发送方只读,接收方可写。对邮箱采用镜像 保护,可以完全避免指针的同时读写冲突问题。本专利技术方法中发送方发送消息的同时,可以通过中断产生和控制装置, 设置对方的中断状态标志位,接收方可以通过响应中断接收,也可以用轮 询的方式接收。根据系统需要,分别设定正向通道和反向通道的消息索引队列大小和消息实体队列大小。在两个CPU的处理程序中包含如下三个基本流程 第一部分,初始化流程通信前完成本CPU负责的队列读写指针的初始化,写指针指向队列头 部第一个单元,读指针指向队列尾部最后一个单元。 第二部分,发送消息流程(1) 根据消息实体队列读、写指针和消息实体队列大小,判断是否可 以写入新消息实体。是,则继续;否,则延迟后再发。(2) 根据消息索引队列读、写指针和消息索引队列大小,判断是否可 以写入新消息索引。是,则继续;否,则延迟后再发。(3) 将新消息实体写入消息实体队列,并更新消息实体队列写指针, 即指向新消息实体之后的可用单元。(4) 更新消息索引队列写指针所指单元的内容,指向消息实体队列中 的新消息实体,并更新消息索引队列写指针,即指向下一单元。第三部分,接收消息流程(1 )才艮据消息索引队列读、写指针和消息索引队列大小,计算待处理 消息条数。如果没有消息处理则返回。(2) 消息索引队列读指针前移一个单元,如果前移到达消息索本文档来自技高网
...

【技术保护点】
一种基于共享存储器的双CPU通信方法,在第一CPU和第二CPU之间存在双向传输通道,每一通道使用两个环形队列,一个用于存放消息索引,一个用于存放消息实体;并且每一通道传输过程包括以下步骤:A、初始化流程:通信前完成本CPU负责的队列 读写指针的初始化;B、发送消息流程:将新消息实体写入消息实体队列,并更新消息实体队列写指针,即指向新消息实体之后的可用单元;更新消息索引队列写指针所指单元的内容,指向消息实体队列中的新消息实体,并更新消息索引队列写指针指向下一单元; C、接收消息流程:消息索引队列读指针前移一个单元,根据该单元中的索引计算待处理消息实体的读指针,并更新消息索引队列读指针;读取待处理消息实体并处理。

【技术特征摘要】

【专利技术属性】
技术研发人员:江帷官华伯张绪广
申请(专利权)人:中兴通讯股份有限公司
类型:发明
国别省市:94[中国|深圳]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1