CN1222882C - 一种任务间通信的实现方法 - Google Patents
一种任务间通信的实现方法 Download PDFInfo
- Publication number
- CN1222882C CN1222882C CN 02153977 CN02153977A CN1222882C CN 1222882 C CN1222882 C CN 1222882C CN 02153977 CN02153977 CN 02153977 CN 02153977 A CN02153977 A CN 02153977A CN 1222882 C CN1222882 C CN 1222882C
- Authority
- CN
- China
- Prior art keywords
- message
- task
- communication
- memory block
- pointer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明涉及在任务支持消息并行处理的多任务操作系统中,任务间通信的方法。一种任务间通信的实现方法,使用消息包进行通信,其特征在于任务发送方将欲通信的消息存放在缓冲区队列中,并在所述的消息包中存放消息指针,任务接收方根据消息指针来判断消息位置并取得消息,完成任务间的通信。本发明结合了消息包通信和共享内存两方面的优点,既保持了操作系统中任务调度的均衡,又减少了内存拷贝方面的消耗,同时又是一套通用的系统解决方案,并且满足了消息并行处理的需求。
Description
技术领域
本发明涉及通信领域,尤其涉及在任务支持消息并行处理的多任务操作系统中,任务间通信的方法。
技术背景
在多任务的操作系统中,不可避免的要进行任务间的通信,常用的通信方法包括直接的函数调用和消息包通信,以及共享内存等。
就消息包通信而言,在某些情况下,接收方任务在接收到消息包后,因为本身业务处理上的要求,需要对某些消息进行并行处理,以下简称这些消息为并行消息。
这些并行消息最显著的特征就是:不会在任务的一次调度中处理完毕,而需要任务的多次调度才能处理完毕。因为任务在处理消息过程中,可能需要同其它任务通信,获得必要的信息后才会继续对该消息进行处理。该并行处理有如下特征:
(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中的缓冲区,在任务处理中,临时缓冲区不断地把加工的部分添补到缓冲区队列的内存块中。在对内存块中的消息处理完之前,可以多次访问该消息,从而在宏观上形成对此类消息的并行处理。
比较本发明的技术方案与原方案就可以明显感觉到在系统内存消耗上的差别,任务发送方将消息指针发送给任务接收方,任务接收方根据消息指针对消息直接进行操作,避免了保存消息的内存拷贝过程,而且保存消息的内存块由缓冲区队列来统一规划和管理,保证了操作的安全,同时也增强了系统的通用性。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。
Claims (5)
1、一种任务间通信的实现方法,使用消息包进行通信,其特征在于任务发送方将欲通信的消息存放在缓冲区队列中,并在所述的消息包中存放消息指针,所述消息指针指向所述缓冲区队列中的内存块;任务接收方根据消息指针来判断消息位置并取得消息,完成任务间的通信。
2、如权利要求1所述的任务间通信的实现方法,其特征在于具体包括以下步骤:
a、任务发送方在其临时缓冲区队列中构造欲通信的消息;
b、任务发送方将构造好的消息拷贝到缓冲区队列的内存块中;
c、任务发送方将缓冲区队列内存块的指针通过任务间通信消息包发送给任务接收方;
d、任务接收方接收通信消息包,根据指针取得通信消息。
3、如权利要求1或2所述的任务间通信的实现方法,其特征在于任务接收方接收任务后,保留从消息包取出的消息指针。
4、如权利要求1或2所述的任务间通信的实现方法,其特征在于所述的任务接收方在接收消息包后的调度过程中,在对内存块中的消息处理完之前,可以多次访问该消息。
5、如权利要求2所述的任务间通信的实现方法,其特征在于步骤b中,所述的内存块,是从缓冲区队列中申请的内存块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 02153977 CN1222882C (zh) | 2002-12-05 | 2002-12-05 | 一种任务间通信的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 02153977 CN1222882C (zh) | 2002-12-05 | 2002-12-05 | 一种任务间通信的实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1504892A CN1504892A (zh) | 2004-06-16 |
CN1222882C true CN1222882C (zh) | 2005-10-12 |
Family
ID=34235393
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 02153977 Expired - Fee Related CN1222882C (zh) | 2002-12-05 | 2002-12-05 | 一种任务间通信的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1222882C (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7694061B2 (en) * | 2004-09-08 | 2010-04-06 | Fisher-Rosemount Systems, Inc. | Discarding a partially received message from a data queue |
CN101634956B (zh) * | 2009-08-25 | 2012-08-08 | 华为技术有限公司 | 多核处理器消息调度方法及调度器 |
CN102831053B (zh) * | 2011-06-17 | 2015-05-13 | 阿里巴巴集团控股有限公司 | 一种测试执行的调度方法及装置 |
CN102541773A (zh) * | 2011-12-31 | 2012-07-04 | 曙光信息产业股份有限公司 | 数据访问的实现方法和装置 |
CN106980595B (zh) * | 2014-12-05 | 2019-08-13 | 三星半导体(中国)研究开发有限公司 | 共享物理内存的多处理器通信系统及其通信方法 |
CN112114982B (zh) * | 2020-09-09 | 2022-03-08 | 天津津航计算技术研究所 | 基于VxWorks系统的多任务间共享内存的管理方法 |
CN112116729B (zh) * | 2020-09-09 | 2022-07-26 | 天津津航计算技术研究所 | 一种基于VxWorks系统的机载数据采集方法 |
-
2002
- 2002-12-05 CN CN 02153977 patent/CN1222882C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN1504892A (zh) | 2004-06-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1291315C (zh) | 有状态程序实体的数据处理方法和系统 | |
CN1306430C (zh) | 基于构件的用户自定义事件方法 | |
CN101080712A (zh) | 旁路三层同步系统的中间同步服务器 | |
CN1298147A (zh) | 向虚拟主机提供服务品质保证的技术 | |
CN1222882C (zh) | 一种任务间通信的实现方法 | |
CN1777194A (zh) | Pat模式下支持多会话应用层协议的网络地址转换方法 | |
CN1658145A (zh) | 可升级打印假脱机系统 | |
CN100343826C (zh) | 一种实现内存管理的方法 | |
CN102469064A (zh) | 通信实现方法及通信设备 | |
CN1855940A (zh) | 数据处理的方法和系统 | |
CN100351799C (zh) | 嵌入式实时操作系统中基于消息对象的任务间通信方法 | |
JP2009213065A (ja) | Tcpバッファコピー分散並列処理装置、方法及びプログラム | |
CN1297880C (zh) | 控制打印工作调度的方法及应用该方法的打印系统 | |
CN1852160A (zh) | 一种数据慢同步的实现方法及系统 | |
CN1851671A (zh) | 一种节省全局变量内存空间的方法 | |
CN1297154C (zh) | 无线通信系统中维护高速缓存一致性的系统和方法 | |
CN104410725A (zh) | Gpu的处理方法、系统以及基于gpu的dns解析方法和系统 | |
CN1277196C (zh) | 一种实现计算机系统应用服务器的方法 | |
CN1742465A (zh) | 无线/lan路由器排队方法和系统 | |
CN1801806A (zh) | 一种实时环境下的零拷贝通信方法 | |
CN1881895A (zh) | 一种网络管理系统中的设备操作方法 | |
CN1889038A (zh) | 以类为单位的远程构件生命周期的管理方法 | |
CN1744554A (zh) | 协同系统中可扩展的动态容错方法 | |
CN1151635C (zh) | 一种适用于集群网络服务的基于内容的通用调度系统 | |
CN101075978A (zh) | 一种通讯客户端系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20170922 Address after: 065000 Langfang city of Hebei province Guangyang District Dongan Road Express home 19 Building 2 unit 404 room Patentee after: Miao Shenhong Address before: 518057 Guangdong city of Shenzhen province Nanshan District Science Park Branch Road No. 1 HUAWEI Service Center Building Patentee before: Huawei Technologies Co., Ltd. |
|
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20051012 Termination date: 20171205 |