一种系统进程调度下无效超时消息的方法及消息发送方法

文档序号:6610633阅读:167来源:国知局
专利名称:一种系统进程调度下无效超时消息的方法及消息发送方法
技术领域
本发明涉及采用优先级调度的嵌入式实时系统的开发领域,具体涉及 在嵌入式多任务环境上实现的二级进程调度环境中,无效超时消息的方法 及超时消息发送方法。
背景技术
实时系统是指能及时响应外部随机事件,并以足够快的速度完成相应 处理,否则会引起严重后果的系统,其广泛应用于通信设备、军事、航空 航天等领域。
很多公司在嵌入式实时多任务系统之上,实现了 二级进程调度管理、 时间管理、通信管理、内存管理等几部分功能。
二级调度,即在嵌入式实时操作系统提供的任务基础上承载多个进程, 每个进程拥有独立的堆栈,任务相当于一个操作系统内核,而且是一个基 于消息驱动的、非抢占式、未定义优先级的、无时间片轮转的简单内核, 进程的调度称为二级调度。定时器模块为操作系统中的任务和进程提供定 时功能,对于实时操作系统而言,定时器模块作为操作系统时间管理的核 心就显得尤为重要。
由于嵌入式多任务环境的不可预知性,在实际运行中,任务的执行常 常因为高低优先级的差异而存在被抢占的情况,从而被其他高优先级任务 所阻塞。被抢占的任务就有可能无法及时清除自身设置的定时器,而导致 一些不应该超时的定时器超时,甚至会在消息队列中堆积大量的超时消息 以及待处理的消息,其包括定时器到达消息,而前面被积压的消息在处理
流程中,可能有杀定时器的操作,此操作正常来讲只能操作在定时器管理 队列里的定时器,而不能清除已经进入任务消息队列的定时器超时消息, 于是导致系统进入^f艮多异常流程。例如,进程A和进程B分别属于两个任
务,进程A向进程B发送请求消息(REQ),同时启动一个定时器,如果在 该定时器超时前收到进程B的应答消息(ACK),则清除定时器,执行相应 处理,如果该定时器超时则执行复位操作。设想如下情况,进程B向进程 A发送了 ACK消息,但进程A所在任务被其他高优先级任务阻塞,无法得 到CPU资源处理ACK消息,无法清除定时器,所以进程A又会收到定时 器模块发来的定时器超时消息,从而积压很多待处理的消息。当进程A所 在任务获得CPU资源开始执行时,进程A会先后处理ACK消息和超时消 息,就可能会导致异常处理。
因此,现有技术中存在一定的问题,需要进一步的改进。

发明内容
本发明的目的是提供一种嵌入式操作系统进程调度下无效超时消息的 方法及消息发送方法,其解决了因为多任务环境而产生的 一些不必要的定 时器超时消息,避免引发异常处理。本发明的方法实现简单,通用性强, 适用于大多数定时器模块。
为了达到上述目的,本发明采用如下技术方案。
本发明的嵌入式操作系统中定时器超时消息的发送方法,其应用于嵌 入式操作系统的定时器模块上,所述方法按照以下步骤进行a、预先在定 时器控制结构中添加一指针变量;b、当系统定时器模块向进程发送定时器 超时消息时,将所述指针变量指向定时器超时消息。所述步骤b中,所述 指针变量指向定时器超时消息在任务消息接收队列中的首地址。
基于上述思想,本发明还提供了一种系统进程调度下无效超时消息的 方法,其应用于嵌入式操作系统的定时器模块上,所述方法按照以下步骤
进行
A、 系统进程所在的任务获取CPU资源,并处理消息接收队列中的消
息;
B、 系统定时器模块判断当前进程对应的定时器是否已经超时;如果该 定时器已经超时,则执行步骤D,否则执行步骤C;
C、 清除当前进程对应的定时器;
D、 所述定时器^^莫块利用一指向定时器超时消息的指针变量,在任务消 息接收队列中查找该定时器超时消息,并将该定时器超时消息的标志置为无效。
其中,所述步骤D之后还包括以下步骤E、在当前进程所在的任务向 下属进程分发消息时,删除消息体的消息标志为无效的消息,循环获取下 一条有效的消息。
其中,所述步骤A之前还包括以下步骤AOl、系统进程向另一进程发
送请求消息,并启动一定时器计时;A02、所述另一进程向系统当前进程反
馈应答消息,并将应答消息置于当前进程所在任务的消息接收队列中。
其中,所述步骤A包括以下步骤Al、判断当前进程所在任务是否获 得CPU资源;如果是,则执行步骤A2; A2、当前进程处理所述应答消息, 并执行步骤B。
其中,所述步骤A01还包括以下步骤AOll、定时器^t块定时扫描定 时器队列;A012、当定时器模块检测到设置的定时器超时时,则向设置定 时器的进程发送定时器超时消息,同时将一指针变量指向该定时器超时消 息。所述步骤A012中,所述指针变量指向定时器超时消息在任务消息接收 队列中的首地址。
发明效果本发明的定时器模块能够提供追杀定时器超时消息的功能, 即将处于消息接收队列中的定时器超时消息设置为无效状态的功能,其对
系统的稳定性和流程的正确性起到了至关重要的作用。本发明提供的嵌入 式操作系统进程调度下追杀定时器超时消息的方法,可以追杀已经发出的 但还没有被接受任务处理的定时器超时消息,防止异常流程的出现。


图1是进程A收到应答消息的任务消息接收队列示意图; 图2是进程A收到定时器超时消息的任务消息接收队列示意图; 图3是进程A处理应答消息、置超时消息为无效、删除定时器的任务 消息接收队列示意图4是本发明方法的流程图。
具体实施例方式
下面结合附图对技术方案的实施作进一步的详细描述。 首先,本发明在定时器控制结构的结构定义中添加记录定时器超时消 息的消息体的指针变量,并按照以下过程进行超时消息的发送当系统定 时器模块在定时扫描定时器队列时检测到进程设置的定时超时,则定时器 模块向设置定时器的进程发送定时器超时消息,同时将该定时器控制结构 中的指针指向该定时器超时消息。在系统初始化时将全部定时器控制结构 中的该指针变量置为空。这里,所述指针变量最好指向定时器超时消息在 任务消息接收队列中的首地址,这样便于查找。
然后,本发明利用上述添加的指针变量按照以下过程无效系统进程的 超时消息第一步、系统进程所在的任务需要从CPU获取资源,并处理消 息接收队列中的消息;第二步、系统定时器模块先判断当前进程对应的定 时器是否已经超时;如果该定时器已经超时,则定时器模块利用上述指向 定时器超时消息的指针变量,在任务消息接收队列中查找该定时器超时消 息,并将该定时器超时消息的标志置为无效。如果上述定时器没有超时,则可以直接清除进程对应的定时器,执行后续处理。在进行完上述步骤之 后,在系统当前进程所在的调度任务从自身消息队列里取消息分发给下属 进程时,删除消息体的消息标志为无效的消息,循环获取下一条有效的消 息分发给进程处理,从而彻底肃清了已发出的但还没有来得及处理的定时 器超时消息,避免系统进入异常的处理流程,减少系统的资源浪费。
下面结合图4举例说明上述方法的具体实施过程,其中,进程A和进 程B分別属于两个任务。
步骤200,进程A向进程B发送请求消息(REQ),同时进程A启动一 个定时器l。在此过程之后,需要定时器模块定时扫描定时器队列,当定时 器模块检测到设置的定时器超时时,则向设置定时器的进程发送定时器超 时消息,同时将一指针变量指向该定时器超时消息的消息体首地址,如图2 所示。
步骤205,进程B收到进程A的请求消息后向进程A发送应答消息 (ACK),并将应答消息放入进程A所在任务的消息队列中,如图1所示。
步骤210,判断任务A是否获得CPU资源;若是,则执行步骤215; 若否则继续等待,返回步骤210,直到获取CPU资源。
步骤215,任务A应将应答消息分发给进程A,并激活进程A运行, 进程A处理进程B的应答消息。
步骤220,判断定时器l是否超时,若超时则执行步骤225;若没有超 时,则执行步骤230。
步骤225,此时定时器已超时,即表示定时器超时消息已经发送到进程 A所在任务消息接收队列中,但还没有成为进程A的当前处理消息,则此 时就需要定时器模块利用指向定时器超时消息消息体的指针变量寻找到该 定时器超时消息,并将该超时消息置为无效状态,如图3所示,随后执行步 骤235。
步骤230,清除定时器1。
步骤235,当进程A所在任务从消息队列中取消息时,检测到一个标记 为无效的消息,则丟弃该无效消息,循环取到下一个有效的消息分发给进
程A处理。这样就实现了本发明所述的追杀定时器超时消息的功能。
在上述过程中,如果在定时器l超时前,进程A收到了进程B回送的 应答消息(ACK),则直接清除定时器1,执行后续处理。如果定时器1超时, 仍然没有收到进程B的应答消息,则进程A执行复位操作。
从上述具体过程的描述可以看出,在通常情况下,任务A获取CPU资 源后,将来自进程B的应答消息分发给进程A,并激活进程A运行,进程 A处理进程B的应答消息,并同时清除定时器l。但是,如果进程A所在 任务被其他高优先级任务所阻塞,则无法获得CPU资源处理进程B发来的 应答消息,也就无法按照正常的处理流程清除定时器1,这种情况下,本发 明通过在清除定时器1之前,增加进行定时器1的超时判断的步骤,将对 应的超时消息置于无效状态,彻底封杀了已进入消息接收队列而未被处理 的超时消息,就避免了系统在不必要的消息上浪费资源和时间,避免异常 处理流程的出现。
综上所述,本发明对系统性能基本没有影响,而且改动很小,实现简 单,通用性强。
1述各具体步骤的举例说明较为具体,并不能因此而认为是对本发明 的专利保护范围的限制,本发明的专利保护范围应以所附权利要求为准。
权利要求
1、一种系统进程调度下超时消息的发送方法,其应用于嵌入式操作系统的定时器模块上,其特征在于,所述方法按照以下步骤进行a、预先在定时器控制结构中添加一指针变量;b、当系统定时器模块向进程发送定时器超时消息时,将所述指针变量指向定时器超时消息。
2、 根据权利要求1所述的方法,其特征在于,所述步骤b中,所述指 针变量指向定时器超时消息在任务消息接收队列中的首地址。
3、 一种系统进程调度下无效超时消息的方法,其应用于嵌入式操作系 统的定时器模块上,其特征在于,所述方法按照以下步骤进行A、 系统进程所在的任务获取CPU资源,并处理消息接收队列中的消自 B、 系统定时器模块判断当前进程对应的定时器是否已经超时;如果该 定时器已经超时,则执行步骤D,否则执行步骤C;C、 清除当前进程对应的定时器;D、 所述定时器模块利用一指向定时器超时消息的指针变量在任务消息 接收队列中查找该定时器超时消息,并将该定时器超时消息的标志置为无 效。
4、 根据权利要求3所述的方法,其特征在于,所述步骤D之后还包括 以下步骤E、 在当前进程所在的任务向下属进程分发消息时,删除消息体的消息 标志为无效的消息,循环获取下一条有效的消息。
5、 根据权利要求3所述的方法,其特征在于,所述步骤A之前还包括以下步骤AOl、系统进程向另一进程发送请求消息,并启动一定时器计时; A02、所述另一进程向系统当前进程反馈应答消息,并将应答消息置于 当前进程所在任务的消息接收队列中。
6、 根据权利要求5所述的方法,其特征在于,所述步骤A包括以下步骤Al、判断当前进程所在任务是否获得CPU资源;如果是,则执行步骤A2;A2、当前进程处理所述应答消息,并执行步骤B。
7、 根据权利要求5所述的方法,其特征在于,所述步骤A01还包括以 下步骤AOll、定时器模块定时扫描定时器队列;A012、当定时器模块检测到设置的定时器超时时,则向设置定时器的 进程发送定时器超时消息,同时将该指针变量指向该定时器超时消息。
8、 根据权利要求7所述的方法,其特征在于,所述步骤A012中,所 述指针变量指向定时器超时消息在任务消息接收队列中的首地址。
全文摘要
本发明公开了一种系统进程调度下无效超时消息的方法及消息发送方法,其应用于嵌入式操作系统的定时器模块上,首先、在定时器控制结构中添加一指针变量;然后、当系统定时器模块向进程发送定时器超时消息时,将所述指针变量指向定时器超时消息。本发明的定时器模块能够提供追杀定时器超时消息的功能,其对系统的稳定性和流程的正确性起到了至关重要的作用。本发明提供的嵌入式操作系统进程调度下追杀定时器超时消息的方法,可以追杀已经发出的但还没有被接受任务处理的定时器超时消息,防止异常流程的出现。
文档编号G06F9/46GK101178667SQ200710124849
公开日2008年5月14日 申请日期2007年12月3日 优先权日2007年12月3日
发明者王国兵, 赵井军, 高世洪 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1