多处理器系统的消息通信方法及装置的制作方法

文档序号:6649790阅读:142来源:国知局
专利名称:多处理器系统的消息通信方法及装置的制作方法
技术领域
本发明涉及多处理器系统,尤其涉及多处理器系统中进程之间以及软件功能单元之间的消息通信方法和装置。
背景技术
在多处理器系统中,各个处理器之间需要相互协调其运算处理过程,以配合完成工作。每个处理器上通常都有多个进程,为了协调处理过程,处于同一个处理器上的进程之间和处于不同处理器之间的进程之间都需要进行数据传输,数据通常以消息的形式在进程之间传递。
现有技术中,同一个处理器上的进程之间通常是采用操作系统提供的消息队列进行消息通信;而不同处理器上进程之间的消息通信则一方面需要依赖于硬件提供的传输通道,如网络接口、串行接口、HPI(Host Port Interface,主机接口)总线、处理器间共享的DPRAM(Dual Port Random Access Memory,双端口随机存储器)等等,另一方面需要借助于为每一种硬件通道提供的相驱动模块,以实现通过硬件通道向目的处理器上的目的进程发送消息和从硬件通道接收源处理器上的源进程所发送的消息的功能。
例如,一个多处理器系统的硬件连接结构如图1所示,处理器A通过串口和处理器B连接,通过HPI总线和处理器C连接,处理器B和处理器C之间的硬件通道为共享DPRAM。在处理器A上有进程A1和A2,处理器B上有进程B1和B2,处理器C上有进程C1、C2和C3。这样,进程A1和进程A2之间、进程B1和进程B2之间、进程C1和进程C2之间的消息通信需要利用操作系统提供的消息队列来进行;而处理器A上的进程和处理器B上的进程之间的通信需要调用为串口提供的驱动模块,处理器A上的进程和处理器C上的进程之间的通信需要调用为HPI总线提供的驱动模块,处理器B上的进程和处理器C上的进程之间的通信需要调用为DPRAM提供的驱动模块。
可见,这样的进程间消息通信方法存在以下两个问题其一是应用软件设计复杂由于在多处理器系统中处于同一个处理器上进程之间的通信和处于不同处理器上进程之间的通信采用了截然不同的方式,所以,通信中的源进程必须很清楚地知道与自己通信的目的进程是否位于同一处理器上,以此来决定双方的通信采用什么样的方式;如果通信双方处于不同的处理器,则还必须知道双方通信所依赖的物理通道,并需要调用相应的驱动模块进行通信。这使得多处理器系统的应用软件开发比单处理器系统应用软件复杂了很多,对开发人员的要求比较高。
其二是应用软件可移植性差由于多处理器系统中位于不同处理器上的进程间消息通信需要调用与特定的硬件通道相对应的驱动模块,所以一旦多处理系统的硬件平台发生了改动,例如两个处理器间原来的通信通道是串口,在硬件平台改版后改为了HPI总线,则应用软件代码中涉及到这两个处理器的进程间消息通信的部分就需要进行修改,从原来调用串口驱动模块改为调用HPI总线驱动模块。这样大大降低了应用软件在不同硬件平台上的可移植性。

发明内容
本发明要解决的是现有技术中多处理器系统的应用软件中对位于同一处理器上与位于不同处理器上的进程间消息通信需进行不同方式,以及涉及不同处理器上进程间消息通信的应用软件的可移植性依赖于硬件平台的问题。
本发明所述多处理器系统中软件功能单元SFU间的消息通信方法,其中SFU为隶属于进程的通信实体,包括以下步骤SFU进行包括其地址的信息注册,由所述地址能够得知该SFU所在的处理器;
建立与源SFU不在同一处理器上的目的SFU地址与消息到达该目的SFU所使用的驱动模块的对应关系;源SFU根据目的SFU的地址向其发送消息;当目的SFU与源SFU不在同一处理器上时,使用该目的SFU地址对应的驱动模块进行消息发送。
优选地,当处理器之间有多个硬件通道时,建立目的SFU地址与驱动模块的对应关系具体为建立源SFU地址、与该源SFU不在同一处理器上的目的SFU地址、消息从该源SFU到达该目的SFU所使用的驱动模块三者之间的对应关系。
优选地,所述方法还包括当目的SFU所在处理器的驱动模块接收到所述消息时,根据所述消息中目的SFU的地址在同一处理器上向其发送消息。
优选地,所述方法还包括建立SFU地址与该SFU所在进程之间的对应关系;所述向同一处理器上的目的SFU发送消息具体为将消息发送给目的SFU所在进程的消息队列;接收到消息的进程根据消息中目的SFU的地址,将消息分发给目的SFU。
优选地,所述方法还包括为每个进程绑定一个消息队列供该进程中SFU接收消息。
优选地,SFU的注册信息还包括该SFU的消息处理函数;所述接收到消息的进程将消息分发给目的SFU具体为在所述进程的消息队列上阻塞接收发送给所述进程的消息;根据消息中目的SFU地址查找目的SFU注册的消息处理函数,调用该消息处理函数处理接收到的消息。
优选地,所述SFU的地址包括该SFU所在的处理器标识和该SFU的标识,其中处理器标识在多处理器系统中具有唯一性,SFU标识在该SFU所在的处理器上具有唯一性。
本发明还提供了一种多处理器系统中软件功能单元SFU间的消息通信装置,包括SFU、SFU通信管理模块、SFU路由模块、SFU信息模块和驱动模块组,其中SFU信息模块用来存储包括SFU地址的SFU信息,由所述地址能够得知该SFU所在的处理器;SFU路由模块用来存储本处理器上的源SFU地址、接收消息的其他处理器上的目的SFU地址、发送消息至该目的SFU所使用的驱动模块的对应关系;驱动模块组包括至少一个驱动模块,用来与其他处理器上对应的驱动模块进行消息通信;SFU通信管理模块用来发送和接收消息,当SFU的发送指令中目的SFU地址在其他处理器上时,通过SFU路由模块中存储的所述对应关系查找到对应的驱动模块,将消息传输到所述驱动模块进行发送。
优选地,所述装置还包括SFU本地通信模块,用来进行至本处理器上目的SFU的通信;当SFU的发送指令中目的SFU地址在本处理器上,SFU通信管理模块将发送指令传输至SFU本地通信模块。
优选地,所述SFU信息模块包括SFU地址模块和SFU注册模块,其中SFU地址模块用来存储SFU地址,SFU地址包括SFU所在的处理器标识和SFU在其所属处理器上的唯一标识;SFU注册模块用来存储SFU的注册信息,包括SFU所在的进程标识。
优选地,所述驱动模块组包括发送模块组和接收模块组,其中发送模块组包括至少一个发送驱动模块,用来向其他处理器上的SFU发送消息;接收模块组包括至少一个接收驱动模块,用来接收发送给本处理器上SFU的消息并将该消息传输至SFU通信管理模块;SFU通信管理模块将该消息传输至SFU本地通信模块,SFU本地通信模块从SFU注册模块中查找目的SFU所在的进程,将消息通过所述进程分发给目的SFU。
本发明所述多处理器系统中进程间的消息通信方法包括以下步骤设定进程的地址,所述地址中包括该进程所在的处理器标识;建立与源进程不在同一处理器上的目的进程地址与消息到达该目的进程所使用的驱动模块的对应关系;源进程根据目的进程的地址向其发送消息;当目的进程与源进程不在同一处理器上时,使用该目的进程地址对应的驱动模块进行消息发送。
优选地,当处理器之间有多个硬件通道时,建立目的进程地址与驱动模块的对应关系具体为建立源进程地址、与该源进程不在同一处理器上的目的进程地址、消息从该源进程到达该目的进程所使用的驱动模块三者之间的对应关系。
优选地,所述方法还包括目的进程所在处理器上的驱动模块接收到所述消息后,根据目的进程的地址将消息发送至目的进程。
优选地,所述方法还包括根据发送消息的源进程地址与目的进程地址判断源进程与目的进程是否在同一处理器上;当目的进程与源进程在同一处理器上时,使用操作系统的消息队列向目的进程发送消息。
本发明还提供了一种多处理器系统中进程间的消息通信装置,包括进程、进程通信管理模块、进程地址模块、进程路由模块和驱动模块组,其中进程地址模块用来存储进程的地址信息,包括进程所在的处理器标识;进程路由模块用来存储本处理器上的源进程标识、接收消息的其他处理器上的目的进程地址、发送消息至该目的进程所使用的驱动模块的对应关系;驱动模块组包括至少一个驱动模块,用来与其他处理器上对应的驱动模块进行消息通信;进程通信管理模块用来发送和接收消息,当进程的发送指令中目的进程地址在其他处理器上时,通过进程路由模块中存储的所述对应关系查找到对应的驱动模块,将消息传输至所述模块进行发送。
优选地,所述装置还包括进程本地通信模块,用来进行至本处理器上目的进程的通信;当进程的发送指令中目的进程地址在本处理器上,进程通信管理模块将发送指令传输至进程本地通信模块。
优选地,所述驱动模块组包括发送模块组和接收模块组,其中发送模块组包括至少一个发送驱动模块,用来向其他处理器上的进程发送消息;接收模块组包括至少一个接收驱动模块,用来接收发送给本处理器上进程的消息并将该消息传输至进程通信管理模块;进程通信管理模块通过进程本地通信模块将接收驱动模块接收的消息发送给目的进程。
本发明中通过在通信主体的地址中标识其所在的处理器,为源通信主体维护其他处理器上的目的通信主体与所调用的驱动模块的对应关系,为应用软件提供了只需要目的通信主体的地址即可进行消息通信的统一平台,而根据目的通信主体的地址来进行同一处理器上或处理器间的消息通信,从而为应用软件的进程间消息通信提供了统一的实现方式,降低了应用软件的设计复杂度;并且向应用软件屏蔽了处理器间硬件通道的不同,增强了应用软件的可移植性;进而,本发明向接收消息的驱动模块也提供了统一的接口,进一步增强了本发明的可移植性。


图1为多处理器系统中多处理器连接结构示例图;图2为本发明所述进程间消息通信方法的流程图;图3为本发明所述进程间消息通信装置的结构图;图4为应用本发明进行进程间通信的多处理器系统的分层结构图;图5为本发明所述SFU(Software Function Unit,软件功能单元)间消息通信方法的流程图;图6为本发明所述SFU间消息通信装置的结构图;图7为应用本发明进行SFU间通信的多处理器系统的分层结构图。
具体实施例方式
为了向应用软件提供统一的进程间消息通信方式,需要向应用软件屏蔽同一处理器上与不同处理器上的进程间消息通信的不同,以及不同处理器上的进程间通信与硬件平台的相关性。
本发明提供的多处理器系统中进程间消息通信方法的流程如图2所示。在步骤S210,设定进程的地址,在地址中包括该进程所在的处理器标识。进程的地址用来唯一地标识多处理器系统中的每一个进程,根据进程的地址可以确定地在某个处理器上找到对应的进程。
在现有技术中每个进程在其所在的处理器上都具有唯一的进程ID(标识),本发明中推荐采用如下方式来构成进程的地址
进程所在的处理器ID;进程在该处理器上的进程ID;其他信息。
在步骤S220,为源进程建立位于其他处理器上的目的进程地址与到达该目的进程所使用驱动模块的对应关系。
当每两个处理器之间只有一个硬件通道用于其上的进程间消息通信时,本步骤中可以为源进程所在的处理器建立目的进程地址与消息到达该目的进程所使用的驱动模块的对应关系,也可以建立目的进程所在的其他处理器与消息到达该处理器所使用的驱动模块的对应关系。
当处理器之间有超过一个的硬件通道时,处理器上的进程可以选择不同的硬件通道进行消息通信。此时,可以建立源进程、其他处理器上的目的进程、消息从该源进程到达该目的进程所使用的驱动模块的三者之间的对应关系,以使得用户可以为不同的进程间通信指定不同的硬件通道。
为了更进一步实现与硬件平台的无关,可以令驱动模块提供统一的消息发送接口。
在步骤S230,源进程根据目的进程的地址向目的进程发送消息。换言之,对源进程而言,在向目的进程发送消息时,只需以目的进程的地址和要发送的消息作为参数即可,而不必区分目的进程位于哪个处理器上,也不必区分源进程所在的处理器与目的进程所在的处理器之间的硬件通道。
在步骤S240,判断目的进程与源进程是否位于同一处理器上,如果是,则通过操作系统提供的消息队列向目的进程发送消息;如果否,则执行步骤S250。
由于源进程和目的进程的地址中都包括进程所在的处理器,只需对比两个进程地址中的处理器标识即可知道源进程与目的进程是否位于同一处理器上。对同一处理器上的进程间消息通信采用操作系统提供的消息队列实现,与现有技术中相同,此处不再赘述。
在步骤S250,根据目的进程地址查找与该地址具有对应关系的驱动模块,使用该驱动模块向目的进程发送消息。
在步骤S260,当目的进程所在处理器上的驱动模块接收到发送给目的进程的消息后,根据消息中的目的进程地址将消息发送至目的进程。
驱动模块发送消息的方法与源进程发送消息的方法相同,此时因为驱动模块与目的进程位于同一处理器上,通过操作系统提供的消息队列,消息被发送至目的进程。
在本发明中,在进程间通信的消息可以包括两个部分,消息头和消息体,消息头中有源进程地址和目的进程地址,消息体用来承载源进程和目的进程通信的具体数据。
应用上述进程间消息通信方法的装置如图3所示,进程310分别与进程地址模块350、进程路由模块320、进程通信管理模块330和进程本地通信模块360连接,进程通信模块330与进程路由模块320、进程地址模块350、进程本地通信模块360和驱动模块组340相连接,其中驱动模块组340包括发送模块组341和接收模块组342,均连接至进程通信管理模块330。
进程地址模块350中存储着本处理器上进程的地址信息。地址信息中包括进程所在的处理器标识和进程在该处理器上的进程ID。
在进程路由模块320中,存储着本处理器上的源进程标识、与本处理器上该源进程进行消息通信的其他处理器上的目的进程地址,以及与从该源进程发送消息至该目的进程地址所使用的驱动模块的对应关系。
当每两个处理器之间只有一个硬件通道用于其上的进程间消息通信时,可以在进程路由模块320中存储目的进程地址与消息到达该目的进程所使用的驱动模块的对应关系,或目的进程所在的其他处理器与消息到达该处理器所使用的驱动模块的对应关系。
当处理器之间有超过一个的硬件通道时,可以在进程路由模块320中存储源进程地址、目的进程地址与消息从该源进程到达该目的进程所使用的驱动模块三者之间的对应关系。
驱动模块组340包括至少一个驱动模块,用来通过处理器之间的硬件通道与其他处理器上相应的驱动模块进行消息通信。驱动模块可以按照功能分为发送驱动模块和接收驱动模块,其中发送驱动模块用于向其他处理器上对应的接收模块发送消息,接收模块用来接收其他处理器上对应的发送模块发送的消息。相应地,驱动模块组340可以分为发送模块组341和接收模块组342,分别包括至少一个发送驱动模块和至少一个接收驱动模块。
在进程310发送消息时,向进程通信管理模块330发出发送指令,发送指令中包括目的进程地址和所发送的消息。进程通信管理模块330判断目的进程与源进程310是否位于同一个处理器上,如果在同一处理器上,则将发送指令传输至进程本地通信模块360;如果不在同一处理器上,则向进程路由模块320查询与源进程310和目的进程地址相对应的驱动模块,并将消息传输至驱动模块组340中该驱动模块的发送驱动模块进行发送。
当接收模块组342中的某个接收驱动模块接收到发送给进程310的消息时,将该消息传递给进程通信管理模块330。进程通信管理模块330将该消息传输至进程本地通信模块360,由其将消息发送给目的进程310。
可见,进程本地通信模块360用来完成本处理器上进程间的消息通信。
在本发明中,用于进程间通信的消息推荐采用如下的格式消息包括消息头和消息体,其中消息头中包括源进程地址和目的进程地址,消息体用来承载进程间通信的数据。
在实施本发明后,进行进程间通信的多处理器系统的分层结构如图4所示。本发明在上层应用软件和在现有技术中被应用软件直接调用的驱动模块集合之间增加了一层多处理器系统软件平台(MPSSP,Multiple ProcessorSystem Software Platform),通过MPSSP中包括的进程通信管理模块、进程地址模块、进程路由模块和进程本地通信模块隔离了驱动模块集合和上层应用软件,为上层应用软件提供了进程间统一的消息通信接口,同时也为驱动模块集合提供了统一的消息接收接口。上层应用软件通过目的进程地址即可通过MPSSP调用对应的驱动模块,通过多处理器系统硬件平台将消息发送至目的进程。
以下为本发明中进程间消息通信的一种推荐的具体实现方式。
一个进程的地址包括该进程所在处理器的编号和该进程在该处理器上的进程ID。
进程路由模块要维护源进程ID、目的进程地址、驱动模块三者的对应关系。推荐的实现方案中将这三者的对应关系分为两步实现,第一步实现源进程ID、目的进程地址、驱动编号的对应关系,第二步实现驱动编号与驱动模块的对应关系。这样根据源进程ID和目的进程地址,可以查找到源进程和目的进程进行处理器间通信所需要使用的驱动模块。
实现第一步对应关系的推荐方案是为本处理器上的每一个进程维护一个路由规则实体结构链表,路由规则实体结构应该至少包含以下几个成员目的进程的地址;驱动编号;指向下一条路由规则实体结构的指针。
当需要根据源进程ID和目的进程地址查询驱动编号时,首先根据源进程ID找到该进程的路由规则实体结构链表,然后搜索该链表,找到与目的进程对应的路由规则实体,从而查找到驱动编号。
进程路由模块应该向上层应用软件提供添加路由规则的接口,用于上层应用软件向MPSSP添加一条路由,路由规则添加函数的一种推荐原型是
MPSSP_PRO_REGISTER_RULE(目的进程地址,驱动的编号)实现第二步对应关系的推荐方案是采用驱动实体结构数组,驱动实体结构应该至少包含以下成员驱动模块的发送接口函数指针。
以驱动编号为驱动实体结构数组的索引,进程通信管理模块即可查找到对应的驱动模块的发送接口函数。
进程路由模块应该向驱动模块提供注册的接口,用于向MPSSP注册一个驱动模块,驱动注册接口函数的一种推荐原型是MPSSP_PRO_REGISTER_DD(驱动编号,驱动模块的发送接口函数指针)进程通信管理模块要向上层应用软件提供的进程消息发送接口。进程消息发送接口函数的推荐原型为MPSSP_PRO_SEND(消息指针)消息指针指向的消息包括消息头和消息体,消息头中包括源进程地址和目的进程地址。
进程消息发送接口的流程如下A.根据目的进程地址,判断目的进程是否处在本处理器上,如果在本处理器,执行B,否则执行C;B.目的进程在本处理器上调用操作系统提供的消息队列消息发送函数,将消息发送给目的进程,消息发送成功返回;C.目的进程不在本处理器上调用进程路由模块提供的路由规则查询接口,查找到发送消息至目的进程所需要使用的驱动编号,根据驱动编号,查找到该驱动模块的发送接口函数指针,调用驱动模块的发送接口函数将消息通过硬件通道发送出去,发送成功返回。
驱动模块在接收到其他处理器上进程发送的消息后,调用进程通信管理模块提供的进程消息发送接口函数,将消息发送至本处理器上的目的进程。
在现有技术中,消息通信的主体是进程。在实际应用中,一个进程中可能包括多个功能单元,每个功能单元实现不同功能(如对发送给该进程的消息进行不同的处理),进程根据具体执行情况或接收的消息来决定执行哪个功能单元。当多处理器系统运行于多任务模式时,一个进程所运行的功能单元与其他进程的功能单元常常具有关联性。这种关联性的一种表现方式是在执行某个进程的功能单元a时发送给另一个进程的消息,需要另一个进程的功能单元b来处理。此时,两个进程之间的通信实际上是功能单元a和功能单元b之间的通信,因此消息通信的主体也可以是进程的功能单元。本发明中,将这种作为通信实体的功能单元称为SFU(Software Function Unit,软件功能单元)。可见,SFU是一种比进程更小的单位。一个SFU隶属于且仅隶属于一个进程,一个进程内可以有多个SFU;一个SFU唯一代表了SFU通信中的一个通信实体。
本发明提供了一种SFU间的消息通信方法,其流程如5所示。在步骤S510,SFU进行信息注册。在SFU作为通信主体之前,需要向系统进行注册。注册信息中必须有该SFU的地址,还可以包括该SFU的初始化函数和消息处理函数。
SFU的地址用来表示SFU的身份,因此在整个系统中应当具有唯一性,同时还需要从其地址可以得知该SFU位于哪个处理器上。用户可以自己设定SFU地址的表示方式,为了便于各个处理器上SFU间的通信,本发明推荐在SFU的地址中包括SFU所在处理器的标识和该SFU在所在处理器上的SFU标识,其中处理器的标识在整个多处理器系统中应当具有唯一性,而每个SFU的标识在其所在的处理器上应当具有唯一性。
SFU的初始化函数可以在SFU申请注册时被调用,用来完成该SFU的初始化工作,如全局变量的初始化、所需资源的申请和初始化等等。SFU的消息处理函数用来对发送给该SFU的消息进行处理。
在步骤S520,建立SFU地址与该SFU所在进程之间的对应关系。本发明中,发送给SFU的消息通过该SFU所在的进程到达该SFU,而发送消息通过目的SFU的地址来进行,建立SFU地址与其所在进程的对应关系以便SFU可以正确接收到消息。
在步骤S530,建立与源SFU位于不同处理器上的目的SFU地址与向该目的SFU发送消息所使用的驱动模块的对应关系。
当每两个处理器之间只有一个硬件通道用于其上的SFU间消息通信时,本步骤中可以为源SFU所在的处理器建立目的SFU地址与消息到达该目的SFU所使用的驱动模块的对应关系,或建立目的SFU所在的其他处理器与消息到达该处理器所使用的驱动模块的对应关系。
当处理器之间有超过一个的硬件通道时,处理器上的SFU可以选择不同的硬件通道进行消息通信。此时,可以建立源SFU、其他处理器上的目的SFU、消息从该源SFU到达该目的SFU所使用的驱动模块的三者之间的对应关系,以使得用户可以为不同的SFU间通信指定不同的硬件通道。
本发明建议对驱动模块提出统一的接口原型,使每个驱动模块按照该接口原型提供消息发送的接口,这样可以进一步实现与硬件平台的无关性。
在步骤S540,为每个进程绑定一个消息队列以便该进程中的SFU从该消息队列中接收消息。
在现有技术中,有两种通过消息队列接收消息的方式。第一种是每个进程绑定一个自己的消息队列,当一个进程给其他进程发送消息时,事实上是把消息发送给了目的进程所绑定的消息队列;每个进程从自己绑定的消息队列中接收发送给自己的消息。第二种是消息队列作为一个独立的实体而并不依附于进程存在,此时多个进程可以从同一个消息队列中接收消息。
本发明的SFU消息通信中,要求每个进程绑定一个自己的消息队列。对于采用第一种方式进行消息接收的操作系统而言,不需要执行本步骤;而对于用第二种方式接收消息的操作系统,如在嵌入式应用领域使用很广的VxWorks,则应当执行本步骤,为每个进程创建一个消息队列,并限制每个进程只能从自己所绑定的消息队列上接收消息,从而构造出符合本发明的通信环境。
在步骤S550,源SFU根据目的SFU的地址向目的SFU发送消息。对源SFU而言,在向目的SFU发送消息时,只需以目的SFU的地址和要发送的消息作为参数即可,而不必理会目的SFU位于哪个处理器上,也不必理会源SFU所在的处理器与目的SFU所在的处理器之间是哪种硬件通道。
本发明中,在SFU间通信的消息可以包括消息头和消息体,其中消息头中包括消息的源SFU地址和目的SFU地址,而消息体用来承载两个SFU之间通信的具体数据。
在步骤S560,判断目的SFU与源SFU是否在同一处理器上,如果否,则执行步骤S570;如果是,则通过操作系统提供的消息队列进行本地消息通信,查找目的SFU所在的进程,将消息发送至目的SFU所在进程绑定的消息队列中,由目的SFU所在的进程将消息分发给目的SFU。目的SFU所在的进程可以通过调用SFU注册的消息处理函数来实现将消息分发给目的SFU。
由于由SFU的地址中可以得知其所在的处理器,只需对比源SFU和目的SFU所在的处理器标识即可得知两个SFU是否位于同一个处理器上。
在步骤S570,按照源SFU地址和目的SFU地址,查找在步骤S530中与之建立对应关系的驱动模块,使用该驱动模块向目的SFU发送消息。
在步骤S580,当驱动模块接收到发送给目的SFU的消息时,根据消息中的目的SFU地址向目的SFU发送消息。
接收到消息的驱动模块向目的SFU发送消息的方法与源SFU发送消息的方法相同,此时因为接收到消息的驱动模块与目的SFU位于同一处理器上,通过操作系统提供的消息队列,消息被发送至目的SFU所在的进程。
在步骤S590,目的SFU所在的进程向目的SFU分发消息。目的SFU所在的进程在绑定的消息队列上阻塞接收发送给本进程的消息;当目的SFU所在的进程从绑定的消息队列中接收到消息后,根据消息中的目的SFU地址,查找到该SFU注册的消息处理函数,调用该该消息处理函数处理接收到的消息,从而实现消息至目的SFU的分发。
应用上述SFU间消息通信方法的装置如图6所示,SFU 610分别与SFU信息模块650、SFU路由模块620、SFU通信管理模块630和SFU本地通信模块660连接,SFU通信模块630与SFU路由模块620、SFU信息模块650、SFU本地通信模块660和驱动模块组640相连接,其中驱动模块组640包括发送模块组641和接收模块组642,均连接至SFU通信管理模块630;而SFU信息模块650包括SFU地址模块651和SFU注册模块652,均与SFU 610和SFU通信管理模块630连接。
SFU信息模块650用来存储SFU的信息。SFU地址模块651中存储着本处理器上SFU的地址,由SFU的地址能够得知该SFU所在的处理器。例如,可以用SFU所在处理器的标识和SFU在该处理器上的标识作为每个SFU的地址,处理器标识在多处理器系统中具有唯一性,而SFU的标识在其所在的处理器上应当具有唯一性。SFU注册模块652中存储着SFU通过其地址向多处理器系统注册时携带的信息,包括该SFU所在的进程标识、该SFU的初始化函数和该SFU的消息处理函数。
在SFU路由模块620中,存储着本处理器上的源SFU地址,与本处理器上该源SFU进行消息通信的其他处理器上的目的SFU地址,以及发送消息至该目的SFU地址所使用的驱动模块的对应关系。
当每两个处理器之间只有一个硬件通道用于其上的SFU间消息通信时,可以在SFU路由模块620中存储目的SFU地址与消息到达该目的SFU所使用的驱动模块的对应关系,或存储目的SFU所在的其他处理器与消息到达该处理器所使用的驱动模块的对应关系。
当处理器之间有超过一个的硬件通道时,可以在SFU路由模块620中存储源SFU地址、目的SFU地址与消息从该源SFU到达该目的SFU所使用的驱动模块三者之间的对应关系。
驱动模块组640包括至少一个驱动模块,用来通过处理器之间的硬件通道与其他处理器上相应的驱动模块进行消息通信。驱动模块可以按照功能分为发送驱动模块和接收驱动模块,其中发送驱动模块用于向其他处理器上对应的接收模块发送消息,接收模块用来接收其他处理器上对应的发送模块发送的消息。相应地,驱动模块组640可以分为发送模块组641和接收模块组642,分别包括至少一个发送驱动模块和至少一个接收驱动模块。
在SFU 610发送消息时,向SFU通信管理模块630发出发送指令,发送指令中包括目的SFU地址和所发送的消息。SFU通信管理模块630判断目的SFU与源SFU 310是否位于同一个处理器上,如果在同一处理器上,则将发送指令传输至SFU本地通信模块660;SFU本地通信模块660从SFU注册模块652中查询到目的SFU所在的进程,将消息发送至目的SFU所在进程的消息队列;由目的SFU所在进程将消息分发至目的SFU。如果源SFU 310与目的SFU不在同一处理器上,则向SFU路由模块620查询与源SFU 610和目的SFU地址相对应的驱动模块,并将消息传输至驱动模块组640中该驱动模块的发送驱动模块进行发送。
当接收模块组642中的某个接收驱动模块接收到发送给SFU 610的消息时,将该消息传递给SFU通信管理模块630。SFU通信管理模块630将发送指令传输至SFU本地通信模块660;SFU本地通信模块660从SFU注册模块652中查询到目的SFU 610所在的进程,将消息发送至目的SFU 610所在进程的消息队列;由目的SFU 610所在进程将消息分发至SFU 310。
SFU本地通信模块660用来完成本处理器上SFU间的消息通信。
在实施本发明后,进行SFU间通信的多处理器系统的分层结构如图7所示。可见,本发明在上层应用软件和在现有技术中被应用软件直接调用的驱动模块集合之间增加了一层多处理器系统软件平台MPSSP,通过MPSSP中包括的SFU通信管理模块、SFU信息模块、SFU路由模块和SFU本地通信模块隔离了驱动模块集合和上层应用软件,为上层应用软件提供了SFU间统一的消息通信接口,同时也为驱动模块集合提供了统一的消息接收接口。上层应用软件通过目的SFU地址即可通过MPSSP调用对应的驱动模块,通过多处理器系统硬件平台将消息发送至目的SFU。
以下为本发明中SFU间消息通信的一种推荐的具体实现方式。
一个SFU的地址包括该SFU所在处理器的编号和该SFU在该处理器上的编号。
SFU信息模块要维护本处理器上的SFU地址、SFU所在进程的进程标识、SFU的初始化函数、SFU的消息处理函数四者的对应关系。推荐的实现方案是采用SFU实体结构数组,SFU实体结构应该至少包括以下几个成员SFU所属进程的进程标识;SFU初始化函数指针;SFU消息处理函数指针。
以SFU地址的后半部分,即SFU在本处理器上的编号为SFU实体结构数组的索引,即可以找到对应于本处理器上某个SFU的SFU实体结构。
SFU信息模块应向上层应用软件提供注册SFU的接口,用于上层应用软件向MPSSP注册一个SFU,SFU注册函数的一种推荐原型是MPSSP_REGISTER_SFU(SFU的地址标识符,SFU所属进程的进程标识符,
SFU的初始化函数的函数指针,SFU的消息处理函数的函数指针)SFU路由模块要维护源SFU地址、目的SFU地址、驱动模块三者的对应关系。推荐的实现方案中将这三者的对应关系分为两步实现,第一步实现源SFU地址、目的SFU地址、驱动编号的对应关系,第二步实现驱动编号与驱动模块的对应关系。这样根据源SFU地址和目的SFU地址,可以查找到源SFU和目的SFU进行处理器间通信所需要使用的驱动模块。
实现第一步对应关系的推荐方案是为本处理器上的每一个SFU维护一个路由规则实体结构链表,路由规则实体结构应该至少包含以下几个成员目的SFU的地址;驱动编号;指向下一条路由规则实体结构的指针。
当需要根据源SFU地址和目的SFU地址查询驱动编号时,首先根据源SFU在本处理器上的编号找到该SFU的路由规则实体结构链表,然后搜索该链表,找到与目的SFU对应的路由规则实体,从而查找到驱动编号。
SFU路由模块应该向上层应用软件提供添加路由规则的接口,用于上层应用软件向MPSSP添加一条路由,路由规则添加函数的一种推荐原型是MPSSP_REGISTER_RULE(目的SFU的地址,驱动的编号)实现第二步对应关系的推荐方案是采用驱动实体结构数组,驱动实体结构应该至少包含以下成员驱动模块的发送接口函数指针。
以驱动编号为驱动实体结构数组的索引,SFU通信管理模块即可查找到对应的驱动模块的发送接口函数。
SFU路由模块应该向驱动模块提供注册的接口,用于向MPSSP注册一个驱动模块,驱动注册接口函数的一种推荐原型是MPSSP_REGISTER_DD(驱动编号,驱动模块的发送接口函数指针)SFU通信管理模块要向上层应用软件提供的SFU消息发送接口。SFU消息发送接口函数的推荐原型为MPSSP_SEND(消息指针)消息指针指向的消息包括消息头和消息体,消息头中包括源SFU地址和目的SFU地址。
SFU消息发送接口的流程如下a.根据目的SFU地址,判断目的SFU是否处在本处理器上,如果在本处理器,执行b,否则执行c;b.目的SFU在本处理器上,调用SFU信息模块提供的查询接口,查找到目的SFU所在进程的进程标识,调用操作系统提供的消息队列消息发送函数,将消息发送给目的进程,消息发送成功返回;c.目的SFU不在本处理器上,调用SFU路由模块提供的路由规则查询接口,查找到发送消息至目的SFU所需要使用的驱动编号,根据驱动编号,查找到该驱动模块的发送接口函数指针,调用驱动模块的发送接口函数将消息通过硬件通道发送出去,发送成功返回。
驱动模块在接收到其他处理器上SFU发送的消息后,调用SFU通信管理模块提供的SFU消息发送接口函数,将消息发送至本处理器上的目的SFU。
本发明在很大程度上提高了多处理器系统中上层软件的可移植性,同时在很大程度上降低了多处理器系统中上层软件的设计复杂度。
以上所述的本发明实施方式,并不构成对本发明保护范围的限定。任何在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的权利要求保护范围之内。
权利要求
1.一种多处理器系统中软件功能单元SFU间的消息通信方法,其中SFU为隶属于进程的通信实体,其特征在于,包括以下步骤SFU进行包括其地址的信息注册,由所述地址能够得知该SFU所在的处理器;建立与源SFU不在同一处理器上的目的SFU地址与消息到达该目的SFU所使用的驱动模块的对应关系;源SFU根据目的SFU的地址向其发送消息;当目的SFU与源SFU不在同一处理器上时,使用该目的SFU地址对应的驱动模块进行消息发送。
2.按照权利要求1所述多处理器系统中SFU间的消息通信方法,其特征在于当处理器之间有多个硬件通道时,建立目的SFU地址与驱动模块的对应关系具体为建立源SFU地址、与该源SFU不在同一处理器上的目的SFU地址、消息从该源SFU到达该目的SFU所使用的驱动模块三者之间的对应关系。
3.按照权利要求2所述多处理器系统中SFU间的消息通信方法,其特征在于,所述方法还包括当目的SFU所在处理器的驱动模块接收到所述消息时,根据所述消息中目的SFU的地址在同一处理器上向其发送消息。
4.按照权利要求3所述多处理器系统中SFU间的消息通信方法,其特征在于,所述方法还包括建立SFU地址与该SFU所在进程之间的对应关系;所述向同一处理器上的目的SFU发送消息具体为将消息发送给目的SFU所在进程的消息队列;接收到消息的进程根据消息中目的SFU的地址,将消息分发给目的SFU。
5.按照权利要求4所述多处理器系统中SFU间的消息通信方法,其特征在于,所述方法还包括为每个进程绑定一个消息队列供该进程中SFU接收消息。
6.按照权利要求5所述多处理器系统中SFU间的消息通信方法,其特征在于SFU的注册信息还包括该SFU的消息处理函数;所述接收到消息的进程将消息分发给目的SFU具体为在所述进程的消息队列上阻塞接收发送给所述进程的消息;根据消息中目的SFU地址查找目的SFU注册的消息处理函数,调用该消息处理函数处理接收到的消息。
7.按照权利要求1至6任意一项所述多处理器系统中SFU间的消息通信方法,其特征在于所述SFU的地址包括该SFU所在的处理器标识和该SFU的标识,其中处理器标识在多处理器系统中具有唯一性,SFU标识在该SFU所在的处理器上具有唯一性。
8.一种多处理器系统中软件功能单元SFU间的消息通信装置,其特征在于,包括SFU、SFU通信管理模块、SFU路由模块、SFU信息模块和驱动模块组,其中SFU信息模块用来存储包括SFU地址的SFU信息,由所述地址能够得知该SFU所在的处理器;SFU路由模块用来存储本处理器上的源SFU地址、接收消息的其他处理器上的目的SFU地址、发送消息至该目的SFU所使用的驱动模块的对应关系;驱动模块组包括至少一个驱动模块,用来与其他处理器上对应的驱动模块进行消息通信;SFU通信管理模块用来发送和接收消息,当SFU的发送指令中目的SFU地址在其他处理器上时,通过SFU路由模块中存储的所述对应关系查找到对应的驱动模块,将消息传输到所述驱动模块进行发送。
9.按照权利要求8所述多处理器系统中SFU间的消息通信装置,其特征在于,所述装置还包括SFU本地通信模块,用来进行至本处理器上目的SFU的通信;当SFU的发送指令中目的SFU地址在本处理器上,SFU通信管理模块将发送指令传输至SFU本地通信模块。
10.按照权利要求9所述多处理器系统中SFU间的消息通信装置,其特征在于,所述SFU信息模块包括SFU地址模块和SFU注册模块,其中SFU地址模块用来存储SFU地址,SFU地址包括SFU所在的处理器标识和SFU在其所属处理器上的唯一标识;SFU注册模块用来存储SFU的注册信息,包括SFU所在的进程标识。
11.按照权利要求10所述多处理器系统中SFU间的消息通信装置,其特征在于,所述驱动模块组包括发送模块组和接收模块组,其中发送模块组包括至少一个发送驱动模块,用来向其他处理器上的SFU发送消息;接收模块组包括至少一个接收驱动模块,用来接收发送给本处理器上SFU的消息并将该消息传输至SFU通信管理模块;SFU通信管理模块将该消息传输至SFU本地通信模块,SFU本地通信模块从SFU注册模块中查找目的SFU所在的进程,将消息通过所述进程分发给目的SFU。
12.一种多处理器系统中进程间的消息通信方法,其特征在于,包括以下步骤设定进程的地址,所述地址中包括该进程所在的处理器标识;建立与源进程不在同一处理器上的目的进程地址与消息到达该目的进程所使用的驱动模块的对应关系;源进程根据目的进程的地址向其发送消息;当目的进程与源进程不在同一处理器上时,使用该目的进程地址对应的驱动模块进行消息发送。
13.按照权利要求12所述多处理器系统中进程间的消息通信方法,其特征在于当处理器之间有多个硬件通道时,建立目的进程地址与驱动模块的对应关系具体为建立源进程地址、与该源进程不在同一处理器上的目的进程地址、消息从该源进程到达该目的进程所使用的驱动模块三者之间的对应关系。
14.按照权利要求13所述多处理器系统中进程间的消息通信方法,其特征在于,所述方法还包括目的进程所在处理器上的驱动模块接收到所述消息后,根据目的进程的地址将消息发送至目的进程。
15.按照权利要求12至14任意一项所述多处理器系统中进程间的消息通信方法,其特征在于,所述方法还包括根据发送消息的源进程地址与目的进程地址判断源进程与目的进程是否在同一处理器上;当目的进程与源进程在同一处理器上时,使用操作系统的消息队列向目的进程发送消息。
16.一种多处理器系统中进程间的消息通信装置,其特征在于,包括进程、进程通信管理模块、进程地址模块、进程路由模块和驱动模块组,其中进程地址模块用来存储进程的地址信息,包括进程所在的处理器标识;进程路由模块用来存储本处理器上的源进程标识、接收消息的其他处理器上的目的进程地址、发送消息至该目的进程所使用的驱动模块的对应关系;驱动模块组包括至少一个驱动模块,用来与其他处理器上对应的驱动模块进行消息通信;进程通信管理模块用来发送和接收消息,当进程的发送指令中目的进程地址在其他处理器上时,通过进程路由模块中存储的所述对应关系查找到对应的驱动模块,将消息传输至所述驱动模块进行发送。
17.按照权利要求16所述多处理器系统中进程间的消息通信装置,其特征在于,所述装置还包括进程本地通信模块,用来进行至本处理器上目的进程的通信;当进程的发送指令中目的进程地址在本处理器上,进程通信管理模块将发送指令传输至进程本地通信模块。
18.按照权利要求17所述多处理器系统中进程间的消息通信装置,其特征在于,所述驱动模块组包括发送模块组和接收模块组,其中发送模块组包括至少一个发送驱动模块,用来向其他处理器上的进程发送消息;接收模块组包括至少一个接收驱动模块,用来接收发送给本处理器上进程的消息并将该消息传输至进程通信管理模块;进程通信管理模块通过进程本地通信模块将接收驱动模块接收的消息发送给目的进程。
全文摘要
本发明提供了一种多处理器系统中软件功能单元SFU间的消息通信方法,包括SFU进行包括其地址的信息注册,由所述地址能够得知该SFU所在的处理器;建立与源SFU不在同一处理器上的目的SFU地址与消息到达该目的SFU所使用的驱动模块的对应关系;源SFU根据目的SFU的地址向其发送消息;当目的SFU与源SFU不在同一处理器上时,使用该目的SFU地址对应的驱动模块进行消息发送。本发明还提供一种SFU消息通信装置,和进程消息通信方法及装置。本发明在很大程度上提高了多处理器系统中上层软件的可移植性,同时在很大程度上降低了多处理器系统中上层软件的设计复杂度。
文档编号G06F9/46GK1949206SQ200510112748
公开日2007年4月18日 申请日期2005年10月12日 优先权日2005年10月12日
发明者蒋石竹, 陈剑 申请人:大唐移动通信设备有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1