通信处理器间消息通信方法和系统的制作方法

文档序号:6603645阅读:156来源:国知局
专利名称:通信处理器间消息通信方法和系统的制作方法
技术领域
本发明实施例涉及通信技术领域,尤其涉及一种通信处理器间消息通信方法和系 统。
背景技术
在共享存储器系统中,多个处理器通过对共享存储器的访问来交换信息。当共享 存储器系统为基于非均勻存储器访问(Non Uniform Memory Access ;以下简称NUMA)的系 统时,各个处理器对共享存储器的访问效率及访问功能各不相同。其中,在NUMA系统中,邮 箱通讯技术为处理器间交换信息的一种典型方法。现有的邮箱通讯技术中,在共享存储器中两个方向的数据通道上分别设置环形数 据队列和数据索引队列,其中,每个环形数据队列由N个长度为M的数据项构成,通过读指 针和写指针来控制对环形数据队列的循环读写,每个数据索引队列用于存放环形数据队列 中某个数据包的指针。作为发送方的处理器直接从数据写指针所指位置开始填写发送数 据,然后更新数据写指针,并将发送数据的首地址写入数据索引队列中写指针所指的存储 单元中,然后更新索引写指针,使其指向下一个存储单元。作为接收方的处理器则根据数据 索引队列的读指针和写指针来计算待接收的数据包的个数,从索引读指针所指的存储单元 开始逐个读取各个数据包的首地址,然后根据该地址接收数据,并更新索引读指针和数据 读指针。现有技术中共享存储器系统在两个方向上的环形数据队列均占据固定大小的共 享存储空间,对共享存储资源的利用率较低。

发明内容
本发明实施例提供一种通信处理器间消息通信方法和系统,实现对共享存储资源 的更有效利用。本发明实施例提供一种通信处理器间消息通信方法,包括由主处理器在共享内存中动态更新发送缓冲区和接收缓冲区;利用所述发送缓冲区或所述接收缓冲区在所述主处理器和从处理器之间进行消
息ifi^[曰o本发明实施例提供一种通信处理器间消息通信系统,包括主处理器、从处理器和 共享内存,其中所述主处理器用于在共享内存中动态更新发送缓冲区和接收缓冲区,并利用所述 发送缓冲区或所述接收缓冲区与所述从处理器进行消息通信;所述从处理器用于利用所述发送缓冲区或所述接收缓冲区与所述主处理器进行 消息通信。本发明实施例的通信处理器间消息通信方法和系统,通过主处理器在共享内存中 动态更新发送缓冲区和接收缓冲区,主处理器利用发送缓冲区或接收缓冲区与处理器进行消息通信,从处理器利用发送缓冲区或接收缓冲区与处理器进行消息通信;本实施例实现 了对共享存储资源的更有效利用。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发 明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以 根据这些附图获得其他的附图。图1为本发明通信处理器间消息通信方法实施例一的流程示意图;图2为本发明通信处理器间消息通信方法实施例二的流程示意图;图3为本发明通信处理器间消息通信方法实施例二中主从处理器的通信示意图;图4为本发明通信处理器间消息通信方法实施例三的流程示意图;图5为本发明通信处理器间消息通信方法实施例四的流程示意图;图6为本发明通信处理器间消息通信方法实施例五的流程示意图;图7为本发明通信处理器间消息通信方法实施例六的流程示意图;图8为本发明通信处理器间消息通信方法实施例七的流程示意图;图9为本发明通信处理器间消息通信系统实施例一的结构示意图;图10为本发明通信处理器间消息通信系统实施例二的结构示意图。
具体实施例方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例 中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是 本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员 在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。图1为本发明通信处理器间消息通信方法实施例一的流程示意图,如图1所示,本 实施例提供了一种通信处理器间消息通信方法,可以包括如下步骤步骤101,由主处理器在共享内存中动态更新发送缓冲区和接收缓冲区;步骤102,利用所述发送缓冲区或所述接收缓冲区在所述主处理器和从处理器之 间进行消息通信。在本实施例中,通信处理器可以包括互相通信的主处理器和从处理器,其中,主处 理器可以由和共享存储器联系更紧密的处理器担任。作为一个示例,在NUMA系统中,由于 主处理器与共享存储器之间的联系更紧密,其对共享存储器的访问效果更高,因此主处理 器用于完成对共享存储器中共享内存的管理。本实施例中,主处理器用于在共享内存中动态更新用于主处理器和从处理器间消 息通信的发送缓冲区和接收缓冲区,此处的更新操作可以包括分配和释放操作,即主处理 器可以用于提供从共享内存中分配缓冲区和向共享内存中释放缓冲区的操作,并利用分配 的接收缓冲区或发送缓冲区与从处理器进行消息通信。而从处理器则不承担缓冲区分配和 释放,其只利用分配的发送缓冲区或接收缓冲区与主处理器进行消息通信。本实施例中,接收和发送相对于主处理器而言,接收为从处理器向主处理器的消息传递,发送为主处理器向从处理器的消息传递,后续不再赘述。本发明实施例提供了一种通信处理器间消息通信方法,通过主处理器在共享内存 中动态更新发送缓冲区和接收缓冲区,主处理器利用发送缓冲区或接收缓冲区与处理器进 行消息通信,从处理器利用发送缓冲区或接收缓冲区与处理器进行消息通信;本实施例中 接收缓冲区和发送缓冲区均由主处理器从同一个共享内存中动态分配,使用完后再由主处 理器动态释放到共享内存中,从而使得共享存储资源得到了重复利用,相比于现有技术更 有效地利用了共享存储资源。图2为本发明通信处理器间消息通信方法实施例二的流程示意图,如图2所示, 本实施例提供了一种通信处理器间消息通信方法,本实施例从从处理器向主处理器发送消 息,主处理器接收消息的角度来说明,具体可以包括如下步骤步骤201,从处理器根据消息的数据量计算所需的接收缓冲区数量n,并从接收缓 冲区索引表获取n个缓冲区索引单元(Buffer Index Unit ;以下简称BIU)。其中,主处理器和从处理器的关系可参见图3,图3为本发明通信处理器间消息通 信方法实施例二中主从处理器的通信示意图,如图3所示,本实施例中的共享内存可以具 体为图3中所示的共享内存池。本实施例中的共享内存为从共享存储空间划分出来的用于 动态分配内存块的区域,在需要使用共享内存块时,主处理器可以从共享内存中分配获取 到空闲内存块,在内存块使用完毕之后,主处理器再将该内存块释放到共享内存池中。如图 3所示,在主从处理器的接收和发送两个方向上各有一个缓冲区索引表,即接收缓冲区索引 表和发送缓冲区索引表。在本实施例中,接收缓冲区索引表和发送缓冲区索引表均由一组 BIU构成,每个BIU包含对应的缓冲区的描述信息,本实施例中的描述信息包括缓冲区指针 (Buffer Pointer ;以下简称:BP)、有效数据长度(Valid Data Length ;以下简称VDL)、控 制域(Control Field ;以下简称:CF)和逻辑通道号(Logic Channel Number ;以下简称 LCN)。其中,一条消息所包含的数据可以保存在一个缓冲区内,也可以保存在多个缓冲区 内,BP用于指示该BIU对应的缓冲区所携带的消息数据的首地址,VDL用于指示该BIU对应 的缓冲区所携带的消息数据的有效数据量。CF包含RF和结尾标志(End;以下简称ED); RF用于标识缓存区中是否缓存数据,RF有效表示该BIU对应的缓存区中已缓冲有数据,RF 无效表示该BIU对应的缓冲区为空,未缓冲数据;ED用于标识对应的接收缓冲区所携带的 数据是否为消息结尾,ED有效表示该BIU对应的接收缓冲区携带的数据为消息结尾,ED无 效表示该BIU对应的接收缓冲区未携带消息结尾的数据,在后续的接收缓冲区中还携带有 本消息的数据。LCN用于标识该BIU对应的缓冲区所携带的消息所属的逻辑通道,不同的逻 辑通道用于建立主处理器和从处理器之间不同的通信连接。在本实施例中,当从处理器向主处理器发送消息前,从处理器先根据待发送消息 的数据量,并结合接收缓冲区的尺寸,来计算本次发送消息过程所需的接收缓冲区的数量 n,并从接收缓冲区索引表中获取n个BIU。其中n为正整数,BIU用于保存缓冲区的信息。步骤202,如果检测到n个BIU对应的缓冲区允许写入消息,从处理器将消息写入 n个BIU对应的接收缓冲区。从处理器在从接收缓冲区索引表中获取到n个BIU后,对该n个BIU的状态进行 检测,如果检测到这n个BIU对应的接收缓冲区允许写入消息,则从处理器将待发送的消息 写入到这n个BIU对应的接收缓冲区中。
例如,从处理器具体可以根据接收缓冲区索引表中BIU的RF来检测是否允许写入 消息,当BIU的RF为无效时,表示允许写入数据;当为有效时表示已经写入数据,尚未读取, 因而不允许写入数据;当BIU中RF为无效的数值较大时,表明这对应的接收缓冲区尚未使 用的缓存较多;如果RF为有效的BIU较多时,表明接收方向已经积压了过多消息等待主处 理器接收。步骤203,如果检测到接收缓冲区被所述从处理器写入消息,主处理器从共享内存 中分配空闲内存块,并将空闲内存块替换承载消息的接收缓冲区。主处理器在接收消息时,对接收缓冲区的状态进行检测。如果检测到接收缓冲区 已经被从处理器写入消息,则主处理器从共享内存中分配空闲内存块,并将分配的空闲内 存块替换承载消息的接收缓冲区。例如,主处理器可以根据接收缓冲区索引表中当前BIU的RF检测对应的接收缓冲 区是否被从处理器写入消息,当接收缓冲区索引表中当前BIU的RF为有效时,表明从处理 器已经发送了新的消息。主处理器根据BIU的RF获取到承载消息的所有n个BIU,从共享 内存中分配n个空闲内存块来替换承载该消息的接收缓冲区,并重新初始化这些BIU,从处 理器可以向这些空闲的接收缓冲区中写入新的消息;而被替换的承载消息的接收缓冲区, 处理完后可释放到共享内存池中。本发明实施例提供了一种通信处理器间消息通信方法,主处理器和处理器利用动 态更新的缓冲区收发消息,共享内存可以重复利用,相比于现有技术更有效地利用了共享 存储资源;并且,进一步的,由主处理器动态更新缓冲区,可以避免对共享存储资源的使用 浪费,减少存储开销。另外,在现有技术中,两个处理器之间的异步运行关系造成它们向一个环形数据 队列发送数据的速度和从这一环形队列接收数据的速度存在差异,即存在收发速度差,且 收发速度差可能随时间变化,因此现有技术中需要预先设定足够大的数据项个数N,以适应 收发速度差的变化。当收发速度差变化幅度较大时,相应地需要设定较大的N,则会造成共 享存储资源的浪费;而设定较小的N时,容易因环形数据队列的溢出而导致数据发送失败。 而在本实施例提供的通信处理器间消息通信方法中,主处理器接收消息和发送消息的时间 开销很短,因此只需设置较短的接收缓冲区索引表便可以适应两个处理器间收发速度差的 较大变化。图4为本发明通信处理器间消息通信方法实施例三的流程示意图,如图4所示, 本实施例提供了一种通信处理器间消息通信方法,本实施例从主处理器向从处理器发送消 息,从处理器接收消息的角度来说明,具体可以包括如下步骤步骤401,如果检测到发送缓冲区索引表的当前BIU对应的发送缓冲区允许写入 消息,主处理器将承载消息的内存块作为发送缓冲区。本实施例可以继续参见上述图3,图3中的发送缓冲区索引表用于在主处理器进 行消息发送时对发送缓冲区进行管理。当主处理器向从处理器发送消息前,主处理器向对发送缓冲区索引表进行扫描, 检测发送缓冲区索引表中的当前BIU对应的发送缓冲区是否允许写入消息,如果检测到送 缓冲区索引表的当前BIU对应的发送缓冲区允许写入消息,则主处理器将承载待发送消息 的内存块直接作为发送缓冲区。例如,主处理器可以具体根据发送缓冲区索引表中的当前发送BIU位置对应的BIU的RF来检测是否允许写入消息,如果当前发送BIU位置对应的 BIU的RF无效,表明该发送缓冲区允许写入消息,则主处理器直接将承载该待发送消息的 内存块作为发送缓冲区,即可以将该内存块的首地址和待发送消息的长度填入该BIU的BP 和VDL中,以完成向从处理器发送消息的过程。步骤402,如果检测到所述发送缓冲区索引表的当前BIU对应的发送缓冲区已写 入消息,从处理器从所述当前BIU对应的发送缓冲区读取消息,并将所述消息加入到所述 BIU的LCN所对应的进程的消息队列中。当主处理器向从处理器发送消息后,从处理器对消息进行接收,从处理器在接收 消息前,先检测发送缓冲区索引表中当前BIU对应的缓冲区中是否已写入消息。例如,从处理器可以具体根据发送缓冲区索引表中当前接收BIU位置对应的BIU 的RF来判断对应的发送缓冲区是否已写入消息,当对应的BIU的RF有效时,表明该发送缓 冲区已由主处理器写入消息。如果当前BIU对应的缓冲区写入消息,从处理器从当前BIU对应的发送缓冲区中 将消息读取出来,并将读取的该消息加入到该BIU的LCN所对应的进程的消息队列中。步骤403,如果检测到发送缓冲区承载的消息已经被所述从处理器读取,主处理器 将被所述从处理器读取的发送缓冲区释放到所述共享内存中。主处理器在维护承载该消息的发送缓冲区时,先检测该发送缓冲区承载的消息是 否被从处理器读取,如果是,则主处理器将被从处理器读取的发送缓冲区释放到共享内存 中,并将发送缓冲区索引表中被从处理器读取的发送缓冲区对应的缓冲区索引单元BIU置 为初始状态。例如,主处理器可以具体维护发送缓冲区索引表中的一个待释放BIU位置,该待 释放BIU位置用于标识最早承载消息且尚未被释放的发缓冲区。如果主处理器检测到发送 缓冲区索引表中当前发送BIU位置与待释放BIU位置重叠时,则将该待释放BIU位置与当 前发送BIU位置之间的未释放BIU对应的发送缓冲区释放到共享内存中,实现对那些消息 已被从处理器接收了的发送缓冲区的释放处理。本发明实施例提供了一种通信处理器间消息通信方法,主处理器和从处理器利用 动态更新的缓冲区收发消息,共享内存可以重复利用,相比于现有技术更有效地利用了共 享存储资源;并且,进一步的,由主处理器动态更新缓冲区,可以避免对共享存储资源的使 用浪费,减少存储开销。另外,在现有技术中,两个处理器之间的异步运行关系造成它们向一个环形数据 队列发送数据的速度和从这一环形队列接收数据的速度存在差异,即存在收发速度差,且 收发速度差可能随时间变化,因此现有技术中需要预先设定足够大的数据项个数N,以适应 收发速度差的变化。当收发速度差变化幅度较大时,相应地需要设定较大的N,则会造成共 享存储资源的浪费;而设定较小的N时,容易因环形数据队列的溢出而导致数据发送失败。 而在本实施例提供的通信处理器间消息通信方法中,主处理器接收消息和发送消息的时间 开销很短,因此只需设置较短的发送缓冲区索引表便可以适应两个处理器间收发速度差的 较大变化。图5为本发明通信处理器间消息通信方法实施例四的流程示意图,如图5所示,本 实施例在上述实施例二的基础之上,提供了一种具体的通信处理器间消息通信方法,具体为从处理器向主处理器发送消息的过程,可以包括如下步骤步骤501,从处理器根据消息的数据量计算所需的接收缓冲区数量n。在从处理器向主处理器发送消息时,从处理器先根据消息的数据量和接收缓冲区 的尺寸计算所需的接收缓冲区数量,此处假设计算得到的所需的接收缓冲区数量为n,其 中,n为正整数。其中,接收缓冲区的尺寸由从处理器向主处理器发送的大多数消息的典型 数据量长度来确定,从而使得一个接收缓冲区就可以容纳从处理器向主处理器传递的大多 数消息的数据量,因此,在本实施例中的大多数情况下,n取1,即需要1个接收缓冲区来接 收消息。步骤502,从处理器从接收缓冲区索引表中获取n个BIU。从处理器在向主处理器发送消息时,从处理器维护接收缓冲区索引表中的当前发 送BIU位置。在接收方向上,即从处理器向主处理器发送消息的方向上,本实施例中的接收 缓冲区索引表中包含当前发送BIU位置和当前接收BIU位置,其中,当前发送BIU位置由从 处理器维护,当前接收BIU位置由主处理器维护。当前发送BIU位置和当前接收BIU位置为实时更新的,当前发送BIU位置紧接在 前一次发送消息所使用的n个BIU之后,当前接收BIU位置紧接在前一次接收消息时获取 的BIU之后。本步骤为从处理器在每次发送消息时,从接收缓冲区索引表的当前发送BIU 位置开始,获取连续的n个BIU,如果从当前发送BIU位置开始到接收缓冲区索引表末尾的 后续BIU不足n个,则回绕到接收缓冲区索引表的开头获取不足的部分。步骤503,从处理器判断n个BIU的RF是否均为无效,如果是,则执行步骤504,否 则结束本流程。在获取到n个BIU之后,从处理器判断这n个BIU的RF是否均为无效,由于BIU 的RF用于指示对应的接收缓冲区中是否缓存有消息,即本步骤为从处理器判断这n个BIU 分别对应的接收缓冲区中是否已缓冲有消息。如果接收方向上已经积压了过多消息等待主处理器接收,以致于没有足够的空闲 的接收缓冲区可以被用来承载新的消息数据,此时从处理器直接退出发送消息的过程,本 流程结束。如果n个BIU的RF均为无效,即获取到的n个BIU对应的接收缓冲区均未积压消 息,可以对本次发送的消息进行缓存,则执行后续步骤504。步骤504,从处理器将消息写入到n个BIU对应的接收缓冲区中。从处理器在获知n个BIU对应的接收缓冲区均可以缓冲消息时,将待发送的消息 写入到n个BIU对应的接收缓冲区中。如果n为1,则从处理器只需将消息数据完整地写入这个BIU对应的接收缓冲区 中。如果n大于1,则从处理器将消息数据进行分段处理,将消息顺序地写入这n个BIU分 别对应的接收缓冲区中。其中,前n-1个BIU分别对应的n-1个接收缓冲区被填满,而第n 个BIU对应的第n个接收缓冲区则承载最后一个消息数据分段,即承载消息的剩余数据,当 消息的数据量不是接收缓冲区尺寸的整数倍时,最后一个消息数据分段不能填满第n个接 收缓冲区。步骤505,从处理器对n个BIU的描述信息进行设置。从处理器在将消息写入到n个BIU对应的n个接收缓冲区之后,对该n个BIU的描述信息分别进行设置。例如,对于n为1,即一个接收缓冲区便能承载消息的完整数据的情况,则只需将 该BIU的VDL设置为消息的实际数据量长度,即将消息的实际数据量填入该BIU的VDL中, 并将该BIU的ED置为有效,表明该消息的数据已经发送完毕,该BIU对应的接收缓冲区中 承载有该消息的结尾。对于n大于1,即消息的数据被分段写入到n个接收缓冲区中的情 况,直接将前n-1个BIU的VDL均设置为接收缓冲区的尺寸,并将这些BIU的ED置为无效, 表明该消息的数据还未发送完毕,该BIU对应的接收缓冲区中未承载有该消息的结尾;将 第n个BIU的VDL设置为该消息的剩余数据量长度,并将这个BIU的ED置为有效,表明该 消息的数据已经发送完毕,该BIU对应的接收缓冲区中承载有该消息的结尾。从处理器将这n个BIU的RF均设置为有效,表明这n个BIU中均已缓存有消息数 据,用于指示主处理器可以接收当前消息。从处理器将这n个BIU的LCN设置为该消息所 属的逻辑通道号,即将当前消息所属的逻辑通道号填入这n个BIU的LCN中。步骤506,从处理器更新接收缓冲区索引表中的当前发送BIU位置。在完成消息的发送以及对应BIU的描述信息的设置之后,从处理器更新接收缓冲 区索引表中的当前发送BIU位置。从处理器将接收缓冲区索引表的当前发送BIU位置更新 到这n个BIU之后的那个BIU,如果这n个BIU已经达到接收缓冲区索引表的末尾,则将当 前发送BIU位置更新到接收缓冲区索引表的第一个BIU。进一步地,在步骤501之前,还可以包括主处理器对接收缓冲区索引表中的各个 BIU进行初始化。本实施例中接收方向上的初始化过程为主处理器对接收缓冲区索引表进 行扫描,逐个初始化接收缓冲区索引表中的BIU的描述信息的过程。其中,对一个BIU的初 始化过程包括主处理器从共享内存池中为该BIU分配一个空闲内存块作为接收缓冲区, 将该空闲内存块的首地址填入该BIU的BP中,即将该空闲内存块的首地址作为该BIU的BP 的初始值;主处理器将该BIU的VDL的初始值设为0,表示该BIU对应的接收缓冲区中不包 含有效数据;主处理器清除该BIU的RF,表示该BIU对应的接收缓冲区中未缓冲有消息,主 处理器等待从处理器向该接收缓冲区写入消息数据;主处理器清除该BIU种的LCN,表示该 接收缓冲区不属于任何逻辑通道。本实施例提供了一种通信处理器间消息通信方法,从处理器利用动态分配的接收 缓冲区向主处理器发送消息,共享内存可以重复利用,且从处理器根据消息的数据量获取 所需的接收缓冲区数量,可以满足变长消息的数据收发需求,实现了对共享存储资源的更 有效利用,减少了消息发送过程中的数据拷贝,降低了处理器的开销,同时通过设置较短的 发送缓冲区索引表来实现消息的发送,能适应两个处理器间收发速度差的较大变化。图6为本发明通信处理器间消息通信方法实施例五的流程示意图,如图6所示,本 实施例在上述实施例二的基础之上,提供了一种具体的通信处理器间消息通信方法,具体 为主处理器接收从处理器发送的消息的过程。本实施例可以在上述实施例四的基础之上, 还可以包括如下步骤步骤601,主处理器判断接收缓冲区索引表中的当前接收BIU位置对应的BIU的 RF是否有效,如果是,执行步骤602,否则结束本流程。主处理器对接收缓冲区索引表中的当前接收BIU位置进行维护,该当前接收BIU 位置紧接在前一次接收消息时获取的BIU之后,当开始一次新的接收消息过程时,首先从该当前接收BIU位置获取一个BIU。主处理器判断该BIU的RF是否有效,如果是,则表明该 BIU对应的接收缓冲区已缓存有消息数据,即确定从处理器已发送了新的消息,执行后续步 骤602,并将n置为1,即至少有一个接收缓冲区承载该消息的数据;否则表明BIU对应的接 收缓冲区未缓存有消息数据,即确定从处理器未发送新的消息,则直接退出接收消息过程, 结束本流程。步骤602,主处理器判断获取到的BIU的ED是否有效,如果是,则执行步骤604,否 则执行步骤603。主处理器继续判断获取到的该BIU的ED是否有效,如果是,则表明该BIU对应的 接收缓冲区包含有消息的数据结尾,则执行后续步骤604 ;否则表明该BIU对应的接收缓冲 区未包含有消息的数据结尾,则执行后续步骤603。步骤603,主处理器将n增加1,获取下一个BIU,并返回执行步骤602。当之前获取到的BIU的ED无效时,主处理器将n增加1,获取下一个BIU,并返回 执行步骤602。即重复执行上述步骤602,对后续的BIU的ED进行判断,直到获取到承载所 述消息的n个接收缓冲区对应的n个BIU。步骤604,主处理器从共享内存池中分配n个空闲内存块,将所述n个空闲内存块 替换承载所述消息的的n个接收缓冲区,并重新初始化n个BIU。主处理器在获取到承载该消息的n个接收缓冲区对应的n个BIU之后,从共享内 存池中分配n个空闲内存块,利用分配的n个空闲内存块来替换承载该消息的n个接收缓 冲区。即将分配的这些空闲内存块的首地址填入到n个BIU的BP中,并对这n个BIU进行 重新初始化,从而从处理器后续可以向这些空闲的接收缓冲区写入新的消息数据。步骤605,主处理器判断n是否大于1,如果是,则执行步骤606,否则执行步骤 609。主处理器判断获取到的承载该消息的BIU的数量n是否大于1,如果是,则执行后 续步骤606,如果n等于1,则执行后续步骤609。步骤606,主处理器根据所述消息的数据量从所述共享内存池中分配一个空闲内 存块。当n大于1时,由于整条消息的全部数据被分段存放在多个接收缓存区中,则需要 将这些分段数据顺序连接起来,则主处理器可以根据获取到的承载该消息的n个BIU的VDL 值,将n个VDL值相加,即获取到该消息的整体数据量长度,根据该消息的数据量长度从共 享内存池中分配一个空闲内存块。步骤607,主处理器将所述n个接收缓冲区中的消息顺序拷贝到所述空闲内存块中。主处理器在为n个BIU对应的接收缓冲区分配到合适尺寸的空闲内存块之后,将 这n个接收缓冲区中的消息按照对应BIU的顺序拷贝到该空闲内存块中,以实现将整条消 息拷贝到空闲内存块中。步骤608,主处理器将承载所述消息的所述空闲内存块加入所述BIU的LCN所对 应的进程的消息队列中,并将承载所述消息的所述n个接收缓存区释放到所述共享内存池 中,并执行后续步骤610。主处理器根据获取到的n个BIU的LCN,将承载该消息的空闲内存块加入该LCN对应的进程的消息队列中。同时,主处理器将原来承载该消息的n个接收缓存区释放到共享 内存池中,并执行后续步骤610。步骤609,主处理器将承载所述消息的接收缓冲区加入所述BIU的LCN所对应的进 程的消息队列中,并执行后续步骤610。当n等于1时,说明一个接收缓冲区完整地承载该消息的全部数据,则只需按照该 BIU中的LCN,将承载该消息的接收缓冲区加入到该LCN对应的进程的消息队列中,并执行 后续步骤610。在本实施例中,由于接收缓冲区的尺寸是根据从处理器向主处理器发送消息 的典型长度而确定的,大多数情况下n等于1,即一个接收缓冲区可以完整地承载该消息的 全部数据,则采用本实施例的方法在大多数情况下不需要进行数据拷贝,对比现有技术中 两个处理器的接收和发送操作都涉及数据拷贝,本实施例可以大大提高数据收发的效率。步骤610,主处理器更新接收缓冲区索引表中的当前接收BIU位置。在完成一条消息的接收处理后,主处理器更新接收缓冲区索引表中的当前接收 BIU位置,将接收缓冲区索引表的当前接收BIU位置更新到上述n个BIU之后的那个BIU。 如果n个BIU已达到接收缓冲区索引表的末尾,则将当前接收BIU位置更新为接收缓冲区 索引表的第一个BIU,然后返回步骤401接收下一条消息。本实施例提供了一种通信处理器间消息通信方法,主处理器利用动态分配的接收 缓冲区接收消息,共享内存可以重复利用,实现了对共享存储资源的更有效利用,减少了接 收过程中的数据拷贝,降低了处理器的开销,提高了数据的接收效率,同时通过设置较短的 接收缓冲区索引表来实现消息的接收和发送,能适应两个处理器间收发速度差的较大变 化。图7为本发明通信处理器间消息通信方法实施例六的流程示意图,如图7所示,本 实施例在上述实施例三的基础之上,提供了一种具体的通信处理器间消息通信方法,具体 为主处理器向从处理器发送消息的过程,可以包括如下步骤步骤701,主处理器判断发送缓冲区索引表中的当前发送BIU位置对应的BIU的 RF是否无效,如果是,执行步骤702,否则结束本流程。在主处理器向从处理器发送消息时,主处理器维护发送缓冲区索引表中的当前发 送BIU位置。在发送方向上,即主处理器向从处理器发送消息的方向上,本实施例中的发送 缓冲区索引表中也包含当前发送BIU位置和当前接收BIU位置,其中,当前发送BIU位置由 主处理器维护,当前接收BIU位置由从处理器维护。当前发送BIU位置和当前接收BIU位 置为实时更新的,当前发送BIU位置紧接在前一次发送消息时获取的BIU之后,当前接收 BIU位置紧接在前一次接收消息时获取的BIU之后。本步骤为主处理器在开始一次新的发 送消息过程时,首先从当前发送BIU位置获取一个BIU。主处理器判断该BIU的RF是否无 效,如果是,则表明该BIU对应的发送缓冲区中未缓存有消息,其中的消息数据已被从处理 器接收,此时可以发送新的消息,执行后续步骤702 ;否则表明该BIU对应的发送缓冲区中 缓存有未被从处理器接收的消息,此时不能发送新的消息,直接退出主处理器发送消息过 程,结束本流程。步骤702,主处理器将承载消息的内存块作为发送缓冲区,并对BIU的描述信息进 行设置。主处理器在获知获取的BIU中未缓存有消息数据时,将承载待发送消息的内存块作为发送缓冲区,直接将该内存块挂在该BIU上,然后对该BIU的描述信息进行设置。具 体地,将该内存块的首地址填入该BIU的BP,将该待发送消息的数据量长度填入该BIU的 VDL,并将该BIU的RF和ED均置为有效,表示该BIU对应的发送缓冲区包含一条完整的消 息数据,等待从处理器接收,主处理器将该待发送消息所属的逻辑通道号填入该BIU的LCN 中。步骤703,主处理器对发送缓冲区索引表中的当前发送BIU位置进行更新。主处理器对发送缓冲区索引表中的当前发送BIU位置进行更新,将发送缓冲区索 引表中的当前发送BIU位置指向下一个BIU,如果更新前的当前发送BIU位置已经达到发送 缓冲区索引表的末尾,则将当前发送BIU位置更新为发送缓冲区索引表的第一个BIU。步骤704,主处理器判断当前发送BIU位置是否与待释放BIU位置重叠,如果是,则 执行步骤705,否则结束本流程。在对当前发送BIU位置进行更新之后,主处理器判断当前发送BIU位置是否与待 释放BIU位置重叠,即判断当前发送BIU位置是否赶上待释放BIU位置。此处的待释放BIU 位置用于标识最早承载消息数据且尚未被释放的发送缓冲区,位于待释放BIU位置与当前 发送BIU位置之间的BIU即为所有未被释放的发送缓冲区。主处理器在向从处理器发送消 息,将消息缓存到发送缓冲区之后,还需要将那些消息数据已经被从处理器接收的发送缓 冲区进行释放处理,因此,主处理器需要对该待释放BIU位置进行维护。经过判断,当当前 发送BIU位置赶上待释放BIU位置时,执行后续步骤705,否则结束本流程。步骤705,主处理器将待释放BIU位置与当前发送BIU位置之间的待释放BIU对应 的发送缓冲区释放到共享内存池中,并重新初始化待释放BIU。当当前发送BIU位置赶上待释放BIU位置时,主处理器开始扫描待释放BIU位置 与当前发送BIU位置之间的那些未释放的发送缓冲区,根据各发送缓冲区对应的BIU的RF, 即当某个BIU的RF无效时,将该BIU对应的发送缓冲区释放到共享内存池中,并重新初始 化该BIU。步骤706,主处理器更新该待释放BIU位置。主处理器在完成一个发送缓冲区的释放之后,对待释放BIU位置进行更新,将待 释放BIU位置指向最后被释放的发送缓冲区对应的BIU之后的那个BIU。进一步地,本实施例在上述步骤701之前,还可以包括主处理器对发送缓冲区索 引表中的各个BIU进行初始化。本实施例中发送方向上的初始化过程为主处理器对发送缓 冲区索引表进行扫描,逐个初始化发送缓冲区索引表中的BIU的描述信息的过程。其中,对 一个BIU的初始化过程包括主处理器清除发送缓冲区索引表中每个BIU的BP、RF和LCN, 并将每个BIU的VDL设置为0。本实施例提供了一种通信处理器间消息通信方法,主处理器利用动态分配的发送 缓冲区向从处理器发送消息,共享内存可以重复利用,实现了对共享存储资源的更有效利 用,减少了消息发送过程中的数据拷贝,降低了处理器的开销,提高了数据的发送效率,同 时通过设置较短的发送缓冲区索引表来实现消息的发送,能适应两个处理器间收发速度差 的较大变化。图8为本发明通信处理器间消息通信方法实施例七的流程示意图,如图8所示,本 实施例在上述实施例三的基础之上,提供了一种具体的通信处理器间消息通信方法,具体为从处理器接收主处理器发送的消息的过程。本实施例在上述实施例六的基础之上,还可 以包括如下步骤步骤801,从处理器判断发送缓冲区索引表中的当前接收BIU位置对应的BIU的 RF是否有效,如果是,则执行步骤802,否则结束本流程。从处理器在接收主处理器发送的消息时,对发送缓冲区索引表中的当前接收BIU 位置进行维护。当前接收BIU位置紧接在前一次接收消息时获取的BIU之后,当开始一次 新的接收消息过程时,首先从当前接收BIU位置开始获取一个BIU,即获取当前接收BIU位 置对应的BIU。从处理器判断获取到的该BIU的RF是否有效,如果是,则表明主处理器已经 发送了新的消息,执行后续步骤802,否则表明主处理器尚未发送新的消息,直接退出从处 理器接收消息的过程,结束本流程。步骤802,从处理器从该BIU对应的发送缓冲区中读取消息。由于该BIU的VDL指示了消息的数据量长度,从处理器根据该BIU的VDL从该BIU 对应的发送缓冲区中读取消息。步骤803,从处理器将所述消息加入到所述BIU的LCN所对应的进程的消息队列中。从处理区在读取到该BIU对应的发送缓冲区中的消息后,根据该BIU的LCN,将该 消息加入到该LCN对应的进程的消息队列中。同时,从处理器将该BIU的RF置为无效。步骤804,从处理器对所述发送缓冲区索引表中的所述当前接收BIU位置进行更 新,并返回执行上述步骤801。在完成一条消息的接收处理后,从处理器对发送缓冲区索引表中的当前接收BIU 位置进行更新,将当前接收BIU位置指向后一个BIU。若更新前的当前接收BIU位置已达到 发送缓冲区索引表的末尾,则将当前接收BIU位置更新为发送缓冲区索引表的第一个BIU, 然后返回步骤801接收下一条消息,直到所述当前接收BIU位置对应的BIU的RF为无效。本实施例提供了一种通信处理器间消息通信方法,处理器利用动态分配的发送缓 冲区接收消息,共享内存可以重复利用,实现了对共享存储资源的更有效利用,减少了消息 接收过程中的数据拷贝,降低了处理器的开销,提高了数据的收发效率,同时通过设置较短 的发送缓冲区索引表来实现消息的接收,能适应两个处理器间收发速度差的较大变化。与现有技术相比,本实施例具有如下优点第一,本实施例提供的方法更有效地利 用共享存储资源。一方面,主处理器从同一个共享内存池中动态分配接收缓冲区和发送缓 冲区,并在使用完成之后将其动态释放进共享内存池,从而使共享存储资源得到重复利用。 另一方面,当两个处理器之间没有消息收发时,接收缓冲区索引表占据固定数目的空闲缓 冲区,而发送缓冲区索引表不占用共享存储资源,则减少了存储开销。第二,本实施例中主 处理器在大多数情况下不需要进行数据拷贝,提高了数据收发效率。在接收方向上,由于 接收缓冲区尺寸是根据消息的典型长度来确定,大多数情况下消息数据由一个接收缓冲区 承载,所以主处理器只需从共享内存池分配一个空闲缓存区替换承载消息数据的接收缓冲 区,再把接收缓冲区加入相应进程的消息队列中;在发送方向上,主处理器只需把承载消息 数据的发送缓冲区直接挂入发送缓冲区索引表即可。第三,本实施例在满足变长消息数据 收发需求的同时,由于主处理器接收消息和发送消息的时间开销很短,因此只要设置比较 短的接收缓冲区索引表和发送缓冲区索引表,就能适应两个处理器之间收发速度差的较大变化。第四,本实施例把主从处理器通信接口划分为多个逻辑通道,使运行于两个处理器上 的多个进程能够互不干扰地通过不同的逻辑通道进行消息交互。本领域普通技术人员可以理解实现上述方法实施例的全部或部分步骤可以通过 程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序 在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括R0M、RAM、磁碟或者 光盘等各种可以存储程序代码的介质。图9为本发明通信处理器间消息通信系统实施例一的结构示意图,如图9所示,本 实施例提供了一种通信处理器间消息通信系统,其可以具体执行上述方法实施例中的各个 步骤,此处不再赘述。本实施例提供的通信处理器间消息通信系统可以具体包括主处理器 1、从处理器2和共享内存3。其中,主处理器1用于在共享内存3中动态更新发送缓冲区和 接收缓冲区,并利用所述发送缓冲区或所述接收缓冲区与从处理器2进行消息通信。从处 理器2用于利用所述发送缓冲区或所述接收缓冲区与主处理器1进行消息通信。图10为本发明通信处理器间消息通信系统实施例二的结构示意图,如图10所示, 本实施例提供了一种通信处理器间消息通信系统,其可以具体执行上述方法实施例中的各 个步骤,此处不再赘述。本实施例在上述实施例一的基础之上,主处理器1可以具体包括分 配单元11或释放单元12。其中,分配单元11用于如果检测到接收缓冲区被所述从处理器 写入消息,从共享内存3中分配空闲内存块,并将所述空闲内存块替换承载消息的接收缓 冲区。释放单元12用于如果检测到发送缓冲区承载的消息已经被所述从处理器读取,将被 所述从处理器读取的发送缓冲区释放到共享内存3中。进一步地,从处理器2可以具体包括获取单元21和消息处理单元22。其中,获取 单元21用于根据消息的数据量计算所需的接收缓冲区数量n,并从接收缓冲区索引表中获 取n个BIU,所述n为正整数,所述BIU用于保存缓冲区的信息。消息处理单元22用于如果 检测到n个所述BIU对应的接收缓冲区允许写入消息,将消息写入n个所述BIU对应的接 收缓冲区。进一步地,主处理器1还可以包括更新单元13,更新单元13用于如果检测到发送 缓冲区索引表的当前BIU对应的发送缓冲区允许写入消息时,将承载消息的内存块作为发 送缓冲区。更进一步地,所述BIU可以包括逻辑通道号,从处理器2还可以包括读取单元23。 读取单元23用于如果检测到所述发送缓冲区索引表的当前BIU对应的发送缓冲区已写入 消息时,从所述当前BIU对应的发送缓冲区中读取消息,并将所述消息加入到所述BIU的 LCN所对应的进程的消息队列中。本发明实施例提供了一种通信处理器间消息通信系统,通过设置主处理器、从处 理器和共享内存,本实施例中接收缓冲区和发送缓冲区均由主处理器从同一个共享内存中 动态分配,使用完后再由主处理器动态释放到共享内存中,从而使得共享存储资源得到了 重复利用,相比于现有技术更有效地利用了共享存储资源。最后应说明的是以上实施例仅用以说明本发明的技术方案,而非对其限制;尽 管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然 可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替 换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
权利要求
一种通信处理器间消息通信方法,其特征在于,包括由主处理器在共享内存中动态更新发送缓冲区和接收缓冲区;利用所述发送缓冲区或所述接收缓冲区在所述主处理器和从处理器之间进行消息通信。
2.根据权利要求1所述的方法,其特征在于,所述由主处理器在共享内存中动态更新 发送缓冲区和接收缓冲区包括如果检测到接收缓冲区被从处理器写入消息,所述主处理器从共享内存中分配空闲内 存块,并将所述空闲内存块替换承载消息的接收缓冲区;或者如果检测到发送缓冲区承载的消息已经被从处理器读取,所述主处理器将被所述从处 理器读取的发送缓冲区释放到共享内存中。
3.根据权利要求1或2所述的方法,其特征在于,利用所述接收缓冲区进行所述主处理 器和从处理器之间的消息通信包括从处理器根据消息的数据量计算所需的接收缓冲区数量n,并从接收缓冲区索引表获 取n个缓冲区索引单元BIU,所述n为正整数,所述BIU用于保存缓冲区的信息;如果检测到n个所述BIU对应的接收缓冲区允许写入消息,所述从处理器将消息写入 n个所述BIU对应的接收缓冲区。
4.根据权利要求1或2所述的方法,其特征在于,利用所述接收缓冲区进行所述主处理 器和从处理器之间的消息通信包括如果检测到发送缓冲区索引表的当前BIU对应的发送缓冲区允许写入消息,所述主处 理器将承载消息的内存块作为发送缓冲区。
5.根据权利要求4所述的方法,其特征在于,所述BIU包括逻辑通道号LCN,利用所述 接收缓冲区进行所述主处理器和从处理器之间的消息通信还包括如果检测到所述发送缓冲区索引表的当前BIU对应的发送缓冲区已写入消息,所述从 处理器从所述当前BIU对应的发送缓冲区读取消息,并将所述消息加入到所述BIU的LCN 所对应的进程的消息队列中。
6.一种通信处理器间消息通信系统,其特征在于,包括主处理器、从处理器和共享内 存,其中所述主处理器用于在共享内存中动态更新发送缓冲区和接收缓冲区,并利用所述发送 缓冲区或所述接收缓冲区与所述从处理器进行消息通信;所述从处理器用于利用所述发送缓冲区或所述接收缓冲区与所述主处理器进行消息通{曰。
7.根据权利要求6所述的系统,其特征在于,所述主处理器包括分配单元,用于如果检测到接收缓冲区被所述从处理器写入消息,从所述共享内存中 分配空闲内存块,并将所述空闲内存块替换承载消息的接收缓冲区;或者释放单元,用于如果检测到发送缓冲区承载的消息已经被所述从处理器读取,将被所 述从处理器读取的发送缓冲区释放到所述共享内存中。
8.根据权利要求6或7所述的系统,其特征在于,所述从处理器包括获取单元,用于根据消息的数据量计算所需的接收缓冲区数量n,并从接收缓冲区索引 表中获取n个BIU,所述n为正整数,所述BIU用于保存缓冲区的信息;消息处理单元,用于如果检测到n个所述BIU对应的接收缓冲区允许写入消息,将所述 消息写入n个所述BIU对应的接收缓冲区。
9.根据权利要求6或7所述的系统,其特征在于,所述主处理器还包括更新单元,用于如果检测到发送缓冲区索引表的当前BIU对应的发送缓冲区允许写入 消息时,将承载消息的内存块作为发送缓冲区。
10.根据权利要求9所述的系统,其特征在于,所述BIU包括逻辑通道号LCN,所述从处 理器还包括读取单元,用于如果检测到所述发送缓冲区索引表的当前BIU对应的发送缓冲区已写 入消息时,从所述当前BIU对应的发送缓冲区中读取消息,并将所述消息加入到所述BIU的 L CN所对应的进程的消息队列中。
全文摘要
本发明提供一种通信处理器间消息通信方法和系统,其中方法包括由主处理器在共享内存中动态更新发送缓冲区和接收缓冲区;利用所述发送缓冲区或所述接收缓冲区在所述主处理器和从处理器之间进行消息通信。系统包括主处理器、从处理器和共享内存,其中所述主处理器用于在共享内存中动态更新发送缓冲区和接收缓冲区,并利用所述发送缓冲区或所述接收缓冲区与所述从处理器进行消息通信;所述从处理器用于利用所述发送缓冲区或所述接收缓冲区与所述主处理器进行消息通信。本实施例实现了对共享存储资源的更有效利用。
文档编号G06F15/167GK101853238SQ20101019265
公开日2010年10月6日 申请日期2010年6月1日 优先权日2010年6月1日
发明者曹兴国 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1