一种任务间通信的实现方法

文档序号:6601834阅读:164来源:国知局
专利名称:一种任务间通信的实现方法
技术领域
本发明涉及通信领域,尤其涉及在任务支持消息并行处理的多任务操作系统中,任务间通信的方法。
背景技术
在多任务的操作系统中,不可避免的要进行任务间的通信,常用的通信方法包括直接的函数调用和消息包通信,以及共享内存等。
就消息包通信而言,在某些情况下,接收方任务在接收到消息包后,因为本身业务处理上的要求,需要对某些消息进行并行处理,以下简称这些消息为并行消息。
这些并行消息最显著的特征就是不会在任务的一次调度中处理完毕,而需要任务的多次调度才能处理完毕。因为任务在处理消息过程中,可能需要同其它任务通信,获得必要的信息后才会继续对该消息进行处理。该并行处理有如下特征(1)任务不会在当前调度时间内将接收到的并行消息彻底处理完毕,而很有可能在处理到一定阶段后,发送消息包与其它任务进行通信,等得到相关信息后才会继续原并行消息的处理。
(2)任务需要将这类尚未处理完毕的并行消息进行保存,并记录相关信息以便以后任务再次运行时继续处理以前保存的这类消息。
(3)当任务再次运行时,又会接收到新的消息,这些消息包含我们定义的并行消息和其它消息。对于并行消息,将会重复上面的并行处理过程;对于那些非并行消息,任务将会在一次调度处理过程中处理完毕,但这类消息很有可能会触发任务对以前保留的并行消息进行继续处理。
如图1所示,是对现有技术中,任务间通信的一个方案示例图,图2是现有技术中,任务间通信方案的操作流程图。
从几个示意图描述,我们对并行消息的过程中做一个分析,进而可找出现有技术的不足之处1、有关内存拷贝的问题(1)内存拷贝次数假定任务1要给任务2发送一个并行消息,那么任务1首先需要在自己的临时缓冲区中组装好该消息,然后从操作系统申请一个消息包,将临时缓冲区中的消息拷贝到消息包中,然后发送给任务2。
如图1所示,任务2接收到来自任务1的消息包,该消息因为业务处理上的需求,是一个并行消息,在一次调度中处理不完,那么就需要将该消息保存下来,这样任务2也需要一个消息缓冲区,因为并行处理的原因,消息缓冲区的数目是无法预知的,这往往取决于应用的最大处理能力或者其它因素。既然要保存,这就需要再进行一次拷贝过程。
所以,在整个任务1与任务2通信的过程中,总共需要进行两次内存拷贝过程。
(2)内存拷贝量由于业务处理复杂的原因造成了并行消息的出现,并行消息的内容往往一次处理不完,这里有消息流程处理的原因,也有消息量大的原因,但这也暗示并行消息携带的信息量较大,对于这种消息少则几百字节,多则数K。如果进行两次内存拷贝,这个消耗量可想而知。
2、有关内存管理的问题任务2需要消息缓冲区来保存这些并行消息,但是对消息缓冲区的数目无法预知,这样就造成了管理的不便,另外,因为只是针对某些特定任务,对并行消息进行缓冲管理也缺乏通用性,假使其它任务也有对并行消息的需求,那么又存在移植的困难。
在某些系统的实现方案中,也有解决问题一(内存拷贝)的方法,这种方法就是采取任务间函数直接调用的方法,实际上相当于只有一个任务在运行,另外一个任务也是占用该任务的CPU处理时间,这样就减少了任务间通信的那次内存拷贝过程。但这样也隐含了一定的问题,这种方案将原来两个任务的处理工作量放在一个任务调度时间内处理,无形中就会造成操作系统调度的不均衡,特别是对于不可抢占式的系统来说,将会对其它任务的调度产生不可预知的影向。
归纳以上所述,可以得出现有技术的如下不足(1)首先是内存拷贝开销大,这包括拷贝次数和拷贝量两方面的消耗,在某些特定系统中,这种并行消息往往占了绝大多数,这种情况下,内存拷贝开销对于整个系统效率带来很大的冲击。
(2)任务往往需要开辟比较大的空间来保存并行消息,因为业务处理的原因,缓冲区的数目往往不好预知或者难于规划。
(3)这种针对某些特定任务的消息缓冲方案不具有通用性,不便于其它任务的并行消息的共用。
(4)采取函数直接调用的方法虽然可以避免一次内存拷贝,但是这种方案将原来两个任务的处理工作量放在一个任务调度时间内处理,无形中就会造成操作系统调度的不均衡,特别是对于不可抢占式的系统来说,将会对其它任务的调度产生不可预知的影响。

发明内容
本专利的目的就是针对现有技术中,任务间通信存在效率低下的问题,提出一种高效的任务间通信的技术方案。
一种任务间通信的实现方法,使用消息包进行通信,其特征在于任务发送方将欲通信的消息存放在缓冲区队列中,并在所述的消息包中存放消息指针,任务接收方根据消息指针来判断消息位置并取得消息,完成任务间的通信。
所述的消息指针,是指向缓冲区队列中存放消息的内存块的指针。
所述的任务间通信的实现方法,具体包括以下步骤
a、任务发送方在其临时缓冲区队列中构造欲通信的消息;b、任务发送方将构造好的消息拷贝到缓冲区队列的内存块中;c、任务发送方将缓冲区队列内存块的指针通过任务间通信消息包发送给任务接收方;d、任务接收方接收通信消息包,根据指针取得通信消息。
所述的任务间通信的实现方法,任务接收方接收任务后,保留从消息包取出的消息指针。
所述的任务接收方在接收消息包后的调度过程中,在对内存块中的消息处理完之前,可以多次访问该消息。
所述的任务间通信的实现方法,步骤b中,所述的内存块,是从缓冲区队列中申请的内存块。
本发明所提出的基于缓冲区队列的任务间通信方案是结合了消息包通信和共享内存两方面的优点,既保持了操作系统中任务调度的均衡,又减少了内存拷贝方面的消耗,同时又是一套通用的系统解决方案,可以满足不同的并行消息处理的需求。


图1是现有技术中任务间通信的示意图;图2是现有技术中任务间通信的流程示意图;图3是本发明的任务间通信的示意图;图4是本发明任务间通信的流程示意图。
具体实施例方式
下面结合说明书附图来说明本发明的具体实施方式

本发明的任务间通信的实现方法,任务之间的通信仍然采用消息包通信,这样可以与现有技术中的通信方案相兼容,但是与原方案中消息包中存放的是具体的消息不同的是,在新方案中,消息包中存放的是欲通信的消息的指针,该指针指向存放消息的内存块。而欲通信的消息则存放在通用的缓冲区队列中,这样既实现了消息通信,又减少了内存拷贝的开销。
如图3所示,是本发明任务间通信的实现方法的示意图,在图4中,构造出两个任务任务1和任务2,当任务1要给任务2发送一个请求消息时,因为无法预知消息的大小有多大,所以不便直接在缓冲区队列的内存块中加工消息。这时,任务1先在其临时缓冲区中构造好消息,然后将消息拷贝到缓冲区队列的内存块中,将缓冲区队列内存块的指针通过任务间通信消息发送给任务2。
同样,当任务2要给任务1发送一个响应消息时,遵循相同的方法。
如图4所示,是本发明具体通信过程的一个流程图,从图中可以看到,本发明的通信过程具体包括以下几个步骤a、任务发送方在其临时缓冲区队列中构造欲通信的消息;如果有任务间通信的需要,则任务发送方首先要在其临时缓冲区队列中构造出欲通信的消息,该消息指的是通信消息的具体的内容部分;b、任务发送方将构造好的消息拷贝到缓冲区队列的内存块中;任务发送方在缓冲区队列中申请一个内存块,并将构造好的消息拷贝到缓冲区队列的内存块中,该内存块用来存放欲通信的消息,该内存块的具体地址,即是后面要用到的指针;c、任务发送方将缓冲区队列内存块的指针通过任务间通信消息包发送给任务接收方;任务发送方申请一个任务间通信的消息包,并将前面的消息指针存放于该消息包中,将该消息包发送给任务接收方。
d、任务接收方接收通信消息包,根据指针取得通信消息。
任务接收方接收到该消息包后,即可根据消息包内指针来正确地定位欲通信消息的位置,在需要的时候对其进行处理。
在任务接收方接收该任务后,保留从消息包中取出的消息指针。接收方的任务保留此指针,可以在以后的调度中多次处理该指针指向的消息,实现并行处理的需求。
在本发明的任务间通信过程中,任务发送方或者任务接收方可能要支持并行处理,其并行消息的加工和处理都不是一次可以完成的,中间可能穿插着该任务的其它并行消息的加工处理,如何保证这些操作能有条不紊地进行呢?这主要依靠各个任务中的临时消息缓冲区,也就是图4中的缓冲区,在任务处理中,临时缓冲区不断地把加工的部分添补到缓冲区队列的内存块中。在对内存块中的消息处理完之前,可以多次访问该消息,从而在宏观上形成对此类消息的并行处理。
比较本发明的技术方案与原方案就可以明显感觉到在系统内存消耗上的差别,任务发送方将消息指针发送给任务接收方,任务接收方根据消息指针对消息直接进行操作,避免了保存消息的内存拷贝过程,而且保存消息的内存块由缓冲区队列来统一规划和管理,保证了操作的安全,同时也增强了系统的通用性。
以上所述,仅为本发明较佳的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。
权利要求
1.一种任务间通信的实现方法,使用消息包进行通信,其特征在于任务发送方将欲通信的消息存放在缓冲区队列中,并在所述的消息包中存放消息指针,任务接收方根据消息指针来判断消息位置并取得消息,完成任务间的通信。
2.如权利要求1所述的任务间通信的实现方法,其特征在于所述的消息指针,是指向缓冲区队列中存放消息的内存块的指针。
3.如权利要求2所述的任务间通信的实现方法,其特征在于具体包括以下步骤a、任务发送方在其临时缓冲区队列中构造欲通信的消息;b、任务发送方将构造好的消息拷贝到缓冲区队列的内存块中;c、任务发送方将缓冲区队列内存块的指针通过任务间通信消息包发送给任务接收方;d、任务接收方接收通信消息包,根据指针取得通信消息。
4.如权利要求1、2或3所述的任务间通信的实现方法,其特征在于任务接收方接收任务后,保留从消息包取出的消息指针。
5.如权利要求1、2或3所述的任务间通信的实现方法,其特征在于所述的任务接收方在接收消息包后的调度过程中,在对内存块中的消息处理完之前,可以多次访问该消息。
6.如权利要求3所述的任务间通信的实现方法,其特征在于步骤b中,所述的内存块,是从缓冲区队列中申请的内存块。
全文摘要
本发明涉及在任务支持消息并行处理的多任务操作系统中,任务间通信的方法。一种任务间通信的实现方法,使用消息包进行通信,其特征在于任务发送方将欲通信的消息存放在缓冲区队列中,并在所述的消息包中存放消息指针,任务接收方根据消息指针来判断消息位置并取得消息,完成任务间的通信。本发明结合了消息包通信和共享内存两方面的优点,既保持了操作系统中任务调度的均衡,又减少了内存拷贝方面的消耗,同时又是一套通用的系统解决方案,并且满足了消息并行处理的需求。
文档编号G06F12/00GK1504892SQ0215397
公开日2004年6月16日 申请日期2002年12月5日 优先权日2002年12月5日
发明者张鹏, 张 鹏 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1