CN106293884B - 一种消息驱动系统中无效超时消息的检测方法 - Google Patents
一种消息驱动系统中无效超时消息的检测方法 Download PDFInfo
- Publication number
- CN106293884B CN106293884B CN201510256919.1A CN201510256919A CN106293884B CN 106293884 B CN106293884 B CN 106293884B CN 201510256919 A CN201510256919 A CN 201510256919A CN 106293884 B CN106293884 B CN 106293884B
- Authority
- CN
- China
- Prior art keywords
- message
- time exceeded
- field
- exceeded message
- effective
- 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
- 238000001514 detection method Methods 0.000 title claims abstract description 12
- 238000000034 method Methods 0.000 claims description 19
- 238000012217 deletion Methods 0.000 claims description 3
- 230000037430 deletion Effects 0.000 claims description 3
- 230000000694 effects Effects 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 9
- 230000008569 process Effects 0.000 description 7
- 230000005540 biological transmission Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
- 230000009897 systematic effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Landscapes
- Information Transfer Between Computers (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明提供一种消息驱动系统中无效超时消息的检测方法,包括以下步骤:S1、在超时消息中插入超时消息控制块,其中所述超时消息控制块包括标志字段、引用字段及有效字段;S2、接收任务从消息队列取出所述超时消息,并判断所述超时消息中,是否有效字段大于0且所述有效字段等于引用字段减1;S3、若是,所述接收任务确定所述超时消息为有效消息,否则为无效消息并将其丢弃。
Description
技术领域
本发明涉及针对嵌入式消息驱动的系统中,消息定时器发出的,无效的超时消息的检测方法,具体包括引入计数器来表示超时消息的有效性,以及在消息定时器状态改变时,在超时消息分配或释放时,维护调整这些计数。
背景技术
在嵌入式实时系统中,消息驱动是一种常见的,高性能的软件架构方式。不同的,异步运行的任务,绑定并监听各自的消息队列,当且仅当其消息队列上有消息,即其他的任务给它发送了消息时,它从队列中取出消息,并根据消息类型,负载等信息,决定下一步的执行流程。而在某些特定的应用中,经常会有这样的需求,即任务S希望在一段时间T0后,给任务R发送消息,将任务R唤醒/调度起来。消息定时器就是应这种需求而设计出来的,它可以延迟发送消息,其创建,启动,修改,停止和删除动作,都跟普通的定时器并无差别,唯独它超时后被定制为发送一个用户指定消息,此消息就是超时消息。
由于实时系统包含不同优先级的多个任务,并且高优先级任务往往会抢占低优先级任务的执行,造成了任务运行的不确定性;这可能导致超时消息的接收任务R,在还没来得及处理(完)任务S通过消息定时器发送的超时消息前,消息定时器就被所有者任务S停止或者删除了;当任务R重新拿到CPU资源并继续处理超时消息时,就会认为消息定时器已经被停止或者删除了,为什么还会发送超时消息。更严重的情况是,这些无效的超时消息在任务S认为,其实是不需要任务R去处理的,一旦任务R处理了,就会出现系统空转或者流程出错,极大地浪费系统资源以及影响系统的正确性,稳定性。
特别地,对于周期性超时的消息定时器,由于它每次超时发送的是同样内容的消息,为了更高的效率,需要一种方法来减免重复分配和释放超时消息带来的负担。
于现有技术中,申请号为200710124849.X的发明专利公开了一种系统进程调度下无效超时消息的方法及消息发送方法,其应用于嵌入式操作系统的定时器模块上,首先、在定时器控制结构中添加一指针变量;然后、当系统定时器模块向进程发送定时器超时消息时,将所述指针变量指向定时器超时消息。上述方案能够提供追杀定时器超时消息的功能,但一个定时器仅对应一个超时消息,当同时出现多个超时消息时,没有对应的处理方式,具有一定局限性。
鉴于上述原因,本发明提供一种消息驱动系统中无效超时消息的检测方法,以解决上述问题。
发明内容
本发明提供一种消息驱动系统中无效超时消息的检测方法,包括以下步骤:
S1、在超时消息中插入超时消息控制块,其中所述超时消息控制块包括标志字段、引用字段及有效字段;
S2、接收任务从消息队列取出所述超时消息,并判断所述超时消息中,是否有效字段大于0且所述有效字段等于引用字段减1;
S3、若是,所述接收任务确定所述超时消息为有效消息,否则为无效消息并将其丢弃。
优选的,步骤S1还包括,创建消息定时器,并初始化超时消息控制块中引用字段为1,有效字段为0。
优选的,步骤S1还包括,发送超时消息,并将所述引用字段及有效字段分别加1。
优选的,停止消息定时器时,有效字段清零,且引用字段维持不变。
优选的,所述超时消息控制块位于所述超时消息的消息头之后。
优选的,当超时消息被删除时,引用字段减1,且有效字段维持不变。
优选的,在步骤S3中,所述接收任务用完一个有效超时消息后,引用字段及有效字段分别减1;丢弃一个无效超时消息时,所述引用字段减1且有效字段维持不变。
优选的,引用字段及有效字段的更新均在锁的保护下进行。
根据本发明提供的消息驱动系统中无效超时消息的检测方法,在超时消息中插入超时消息控制块,其中超时消息控制块设置了标志字段、引用字段及有效字段。仅在消息内部进行设计,应用范围广泛。接收任务从消息队列取出超时消息,并判断所述超时消息中是否有效字段大于0且所述有效字段等于引用字段减1,若是,所述接收任务确定所述超时消息为有效消息,否则为无效消息并将其丢弃。如此,能够有效节约系统资源,并提高了系统稳定性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明较佳实施例提供的消息驱动系统中无效超时消息的检测方法流程图;
图2是本发明较佳实施例提供的超时消息结构示意图;
图3是本发明较佳实施例提供的消息队列中有4个超时消息且均为有效消息的场景示意图;
图4是本发明较佳实施例提供的消息队列中有3个超时消息且均为有效消息的场景示意图;
图5是本发明较佳实施例提供的消息队列中有3个超时消息且均为无效消息的场景示意图;
图6是本发明较佳实施例提供的消息队列中有2个超时消息且均为无效消息的场景示意图;
图7是本发明较佳实施例提供的消息队列中有3个超时消息且前两个是无效消息后一个是有效消息的场景示意图;
图8是本发明较佳实施例提供的消息队列中有2个超时消息且前一个是无效消息后一个是有效消息的场景示意图;
图9是本发明较佳实施例提供的消息队列中有1个有效超时消息的场景示意图;
图10是本发明较佳实施例提供的消息队列中无超时消息且定时器未被删除的场景示意图;
图11是本发明较佳实施例提供的消息队列中无超时消息定时器已删除的场景示意图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
图1是本发明较佳实施例提供的消息驱动系统中无效超时消息的检测方法流程图。如图1所示,本发明较佳实施例提供的消息驱动系统中无效超时消息的检测方法包括步骤S1~S3。
步骤S1:在超时消息中插入超时消息控制块,其中所述超时消息控制块包括标志字段、引用字段及有效字段。
具体而言,一个消息通常包括通用消息头和消息负载,所述的超时消息控制块位于通用消息头和消息负载中间。参照图2,所述超时消息控制块位于超时消息的通用消息头之后,通过它来判断一个消息是否定时器发出的超时消息。
程序编码如下:
其中:magic表示标志字段,用于指示超时消息控制块,同时可用于判断一个消息是否超时消息;refCnt表示引用字段,表示超时消息的内存块有几个持有者,规则如下:定时器持有一份,每个发送出去的超时消息也各持有一份(定时器往消息队列中发送的只是消息内存的指针),并约定,一个超时消息的内存块,只有当refCnt为0时才会被释放并归还给动态内存管理器;validCnt表示有效字段,表示所有发送出去的超时消息中,有几个是有效的,并且无效超时消息总是先于有效的超时消息被收到(消息队列先进先出),并约定一个定时器被停止或者删除后,它之前所有发出的超时消息都是无效的。
参照图3,消息队列中有4个超时消息,均是有效消息,并且消息内存块refCnt为5。某些情况下,当需要同时更新两个计数器时,必须保证它们的更新动作是在同一个临界区内完成的,所以必须由额外的锁来保护它们的更新,不同的系统选择的锁可能不一样,比如信号量,互斥锁,或者通过关系统中断实现等。
创建消息定时器,并初始化超时消息控制块中引用字段为1,表示超时消息内存块已经有一个持有者,即定时器;有效字段为0,因为定时器还没有发出任何超时消息。同时定义标志字段magic为TIMEOUT_MSG_MAGIC。
发送超时消息时,将引用字段加1,表示新发出的超时消息拥有一份消息内存使用权;有效字段加1,表示新发出的超时消息可用;标志字段维持不变。本更新在锁的保护下进行,代码表示为:
TimeOutMsg_OnExpire:
TimeOutMsg_Lock();
refCnt++;
val idCnt++;
TimeOutMsg_UnLock();
本实施例中,删除定时器前,先停止消息定时器。停止消息定时器时,有效字段清零,且引用字段维持不变。标志字段同样维持不变。
步骤S2:接收任务从消息队列取出所述超时消息,并判断所述超时消息中,是否有效字段大于0且所述有效字段等于引用字段减1。
具体而言,当超时消息被接收任务R从消息队列取出时,任务R会通过计数器判断其有效性:当且仅当有效字段(即validCnt)大于0,并且validCnt等于引用字段减1(即refCnt-1)时,该消息是有效的,其余情况均视为无效,其中(refCnt-1)表示所有暂存在消息队列中的超时消息数目。
上述判断必须在锁的保护下进行,代码表示为:
TimeOutMsg_checkVal idi ty:
TimeOutMsg_Lock();
if((val idCnt>0)&&(val idCnt==(refCnt-1)))
val id_flag=TRUE;/*Msg is val id*/
TimeOutMsg_UnLock();
当超时消息被删除时,引用字段减1,表示超时消息内存块少了一个所有者(一个定时器或者一个超时消息,包括有效和无效的),如果当前是最后一个所有者,须负责将消息内存块释放。有效字段和标志字段维持不变。有2种情况需要执行该动作:消息定时器被删除时(已提前停止定时器);有效超时消息用完被释放,无效消息被直接丢弃时。
上述更新在锁的保护下进行,代码如下:
TimeOutMsg_onDelete:
TimeOutMsg_Lock();
refCnt--;
refCnt_bk=refCnt;
TimeOutMsg_UnLock();
if(refCnt_bk==0)
{
Free_Msg()
}
步骤S3:若是,所述接收任务确定所述超时消息为有效消息,否则为无效消息并将其丢弃。
具体而言,接收任务用完一个有效超时消息后,引用字段及有效字段分别减1。于此,有效字段减1表示有效消息减少一个,但是需要在当前消息是有效的前提下,以防计数器值异常,因为有可能在判断完有效性,到接收任务R用完消息的时间段内,定时器被停止或者删除,另一种情况是,当前消息是无效消息,接收任务将无效超时消息丢弃,由于程序中调用了TimeOutMsg_onDelete(),因此引用字段减1且有效字段维持不变。于此,对于有效字段的变化,解释为:若超时消息有效则减1;若超时消息无效则维持不变。
上述更新在锁的保护下进行,代码如下:
TimeOutMsg_Free:
TimeOutMsg_Lock();
if((val idCnt>0)&&(val idCnt==(refCnt-1)))
val idCnt--;
TimeOutMsg_UnLock();
TimeOutMsg_onDelete();
举例而言,如图3,当前消息队列中有4个有效的超时消息:validCnt为4,refCnt为5。接收任务R从队列中取出最前面的消息1,发现它是有效消息:(validCnt>0&&validCnt==(refCnt-1))为真,接收任务R根据消息1类型,负载等信息,处理相应流程,结束后释放该消息。
参照图4,释放后validCnt为3,refCnt为4。若定时器被停止,消息队列中所有未处理消息变为无效超时消息,参照图5,此时validCnt为0,refCnt为4。接收任务R继续处理消息队列中的消息2,发现它是一个无效消息,因为(validCnt>0&&validCnt==(refCnt-1))不为真。于是接收任务R直接丢弃消息2,参照图6,丢弃后validCnt为0,refCnt为3。
参照图7,重新启动定时器,定时器超时,并发出消息5,之后validCnt为1,refCnt为4。参照图8,接收任务R继续处理消息队列中的消息3,发现它是无效消息,因为(validCnt>0&&validCnt==(refCnt-1))不为真。丢弃消息3后,validCnt为1,refCnt为3。如图9,接收任务R继续处理消息队列中的消息4,发现它也是无效消息,于是丢弃消息4,validCnt为1,refCnt为2。
参照图10,接收任务R继续处理消息队列中的消息5,发现它是有效消息,因为(validCnt>0&&validCnt==(refCnt-1))为真。于是,根据消息5类型,负载等信息,处理相应流程,结束后释放该消息。此时validCnt为0,refCnt为1。定时器所有者任务S删除定时器,如图11,validCnt维持0,refCnt减为0,将超时消息内存块归还给动态内存管理。
综上所述,根据本发明较佳实施例提供的消息驱动系统中无效超时消息的检测方法,在超时消息中插入超时消息控制块,其中超时消息控制块设置了标志字段、引用字段及有效字段。在消息内部设置控制块,适用任何场景。接收任务从消息队列取出超时消息,并判断所述超时消息中是否有效字段大于0且所述有效字段等于引用字段减1,若是,所述接收任务确定所述超时消息为有效消息,否则为无效消息并将其丢弃。如此,有效节约了系统资源,并提高系统稳定性。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (8)
1.一种消息驱动系统中无效超时消息的检测方法,其特征在于,包括以下步骤:
S1、在超时消息对象中插入超时消息控制块,其中所述超时消息控制块包括标志字段、引用字段及有效字段;采用magic表示标志字段,用于指示消息对象中存在超时消息控制块;采用refCnt表示引用字段,表示超时消息的内存块持有者个数,规则如下,定时器持有一份,每个发送出去的超时消息也各持有一份并约定,一个超时消息的内存块,只有当refCnt为0时才会被释放并归还给动态内存管理器;采用validCnt表示有效字段,其具体解释为:表示所有发送出去的超时消息中,有几个是有效的,并且无效超时消息总是先于有效的超时消息被收到,消息队列先进先出,并约定一个定时器被停止或者删除后,被停止或者删除后的定时器之前所有发出的超时消息都是无效的;
S2、接收任务从消息队列取出所述超时消息,并判断所述超时消息中,是否有效字段大于0且所述有效字段等于引用字段减1;
S3、若是,所述接收任务确定所述超时消息为有效消息,否则为无效消息并将其丢弃。
2.根据权利要求1所述的方法,其特征在于,步骤S1还包括,创建消息定时器,并初始化超时消息控制块中引用字段为1,有效字段为0。
3.根据权利要求2所述的方法,其特征在于,步骤S1还包括,发送超时消息,并将所述引用字段及有效字段分别加1。
4.根据权利要求2所述的方法,其特征在于,停止消息定时器时,有效字段清零,且引用字段维持不变。
5.根据权利要求1所述的方法,其特征在于,在步骤S1中,所述超时消息控制块位于所述超时消息的消息头之后。
6.根据权利要求1所述的方法,其特征在于,当超时消息被删除时,引用字段减1,且有效字段维持不变。
7.根据权利要求1所述的方法,其特征在于,在步骤S3中,所述接收任务用完一个有效超时消息后,引用字段及有效字段分别减1;丢弃一个无效超时消息时,所述引用字段减1且有效字段维持不变。
8.根据权利要求2、3、4、6或7任一项所述的方法,其特征在于,引用字段及有效字段的更新均在锁的保护下进行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510256919.1A CN106293884B (zh) | 2015-05-20 | 2015-05-20 | 一种消息驱动系统中无效超时消息的检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510256919.1A CN106293884B (zh) | 2015-05-20 | 2015-05-20 | 一种消息驱动系统中无效超时消息的检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106293884A CN106293884A (zh) | 2017-01-04 |
CN106293884B true CN106293884B (zh) | 2019-06-07 |
Family
ID=57633850
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510256919.1A Expired - Fee Related CN106293884B (zh) | 2015-05-20 | 2015-05-20 | 一种消息驱动系统中无效超时消息的检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106293884B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109189582B (zh) * | 2018-07-20 | 2020-09-15 | 新华三技术有限公司合肥分公司 | 一种检测信号量超时原因的方法及装置 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101178667A (zh) * | 2007-12-03 | 2008-05-14 | 中兴通讯股份有限公司 | 一种系统进程调度下无效超时消息的方法及消息发送方法 |
CN101221512A (zh) * | 2007-01-12 | 2008-07-16 | 中兴通讯股份有限公司 | 用于实时操作系统的定时方法和系统 |
KR20080074597A (ko) * | 2007-02-09 | 2008-08-13 | 삼성전자주식회사 | 네트워크 시스템에서 라우터의 타이머 관리 장치 및 방법 |
CN101477386A (zh) * | 2009-01-12 | 2009-07-08 | 杭州华三通信技术有限公司 | 一种定时器实现方法和装置 |
CN101529416A (zh) * | 2006-09-20 | 2009-09-09 | 路透美国公司 | 消息传送模型和架构 |
CN101847107A (zh) * | 2010-03-30 | 2010-09-29 | 南京恩瑞特实业有限公司 | 基于消息队列的外界数据接收方法 |
CN102207888A (zh) * | 2011-05-09 | 2011-10-05 | 大唐移动通信设备有限公司 | 定时器管理方法和装置 |
CN102270156A (zh) * | 2011-05-30 | 2011-12-07 | 北京华源格林科技有限公司 | 一种实时嵌入式系统定时器管理方法 |
-
2015
- 2015-05-20 CN CN201510256919.1A patent/CN106293884B/zh not_active Expired - Fee Related
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101529416A (zh) * | 2006-09-20 | 2009-09-09 | 路透美国公司 | 消息传送模型和架构 |
CN101221512A (zh) * | 2007-01-12 | 2008-07-16 | 中兴通讯股份有限公司 | 用于实时操作系统的定时方法和系统 |
KR20080074597A (ko) * | 2007-02-09 | 2008-08-13 | 삼성전자주식회사 | 네트워크 시스템에서 라우터의 타이머 관리 장치 및 방법 |
CN101178667A (zh) * | 2007-12-03 | 2008-05-14 | 中兴通讯股份有限公司 | 一种系统进程调度下无效超时消息的方法及消息发送方法 |
CN101477386A (zh) * | 2009-01-12 | 2009-07-08 | 杭州华三通信技术有限公司 | 一种定时器实现方法和装置 |
CN101847107A (zh) * | 2010-03-30 | 2010-09-29 | 南京恩瑞特实业有限公司 | 基于消息队列的外界数据接收方法 |
CN102207888A (zh) * | 2011-05-09 | 2011-10-05 | 大唐移动通信设备有限公司 | 定时器管理方法和装置 |
CN102270156A (zh) * | 2011-05-30 | 2011-12-07 | 北京华源格林科技有限公司 | 一种实时嵌入式系统定时器管理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106293884A (zh) | 2017-01-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5944778A (en) | Periodic process scheduling method | |
US7549151B2 (en) | Fast and memory protected asynchronous message scheme in a multi-process and multi-thread environment | |
US7752370B2 (en) | Splitting one hardware interrupt to multiple handlers | |
CN106547612B (zh) | 一种多任务处理方法及装置 | |
CN108595282A (zh) | 一种高并发消息队列的实现方法 | |
CN108319495B (zh) | 任务处理方法及装置 | |
CN102455940B (zh) | 一种定时器和异步事件的处理方法及系统 | |
CN102270156A (zh) | 一种实时嵌入式系统定时器管理方法 | |
CN103491174A (zh) | 基于延迟服务器的周期/非周期混合实时任务调度方法 | |
US6907606B1 (en) | Method for implementing event transfer system of real time operating system | |
US20120089990A1 (en) | System and method for reporting a synchronization event in a runtime system of a computer system | |
García et al. | Minimizing the effects of jitter in distributed hard real-time systems | |
CN106293884B (zh) | 一种消息驱动系统中无效超时消息的检测方法 | |
CN112817772A (zh) | 一种数据通信方法、装置、设备及存储介质 | |
US9772888B2 (en) | Semaphore with timeout and lock-free fast path for message passing architectures | |
CN100535864C (zh) | 一种系统进程调度下无效超时消息的方法及消息发送方法 | |
Zhao et al. | HLC-PCP: A resource synchronization protocol for certifiable mixed criticality scheduling | |
CN109819674B (zh) | 计算机存储介质、嵌入式调度方法及系统 | |
US9792419B2 (en) | Starvationless kernel-aware distributed scheduling of software licenses | |
CN111597056B (zh) | 一种分布式调度方法、系统、存储介质和设备 | |
CN108304257A (zh) | 基于延迟服务器的强实时混合任务调度方法 | |
KR101725408B1 (ko) | 실시간 운영체제의 태스크 스케줄링 방법 | |
Harbour | Real-time posix: an overview | |
CN105930397B (zh) | 一种消息处理方法和系统 | |
CN100426222C (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
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: 20190607 |