[发明专利]一种增删任务的方法和单元有效
申请号: | 200810115891.X | 申请日: | 2008-06-30 |
公开(公告)号: | CN101299197A | 公开(公告)日: | 2008-11-05 |
发明(设计)人: | 冯备战 | 申请(专利权)人: | 北京中星微电子有限公司 |
主分类号: | G06F9/48 | 分类号: | G06F9/48 |
代理公司: | 北京安信方达知识产权代理有限公司 | 代理人: | 龙洪;霍育栋 |
地址: | 100083北京市*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 增删 任务 方法 单元 | ||
技术领域
本发明涉及计算机领域,尤其涉及一种增删任务的方法和单元。
背景技术
任务调度机制是实时操作系统的一个重要机制。各个需要运行的任务Task组成一任务链表,当进行任务调度时,调度算法首先实现优先级调度。系统按照优先级从高到低的顺序从就绪任务链表数组中寻找优先级最高的任务,据此实现优先级调度。若此优先级下只有一个就绪任务,则此就绪任务进入运行态;若此优先级下有多个就绪任务,则需采用轮换调度算法实现多任务轮流执行。
下面是一个常见的任务链表结构:
typedef structtag_TSysTaskLink{
intstatus;//Task的状态;
PFTaskFunc PInit;//在Task被添加时运行的程序,比如该Task的初始化;
PFTaskFunc PRun;//在Task里真正运行的程序,当各Task进行切换后,都是运行每个Task的PRun程序;
PFTaskFunc PFinalize;//当Task被删除时,将运行该程序,比如释放该task占用的资源;
structtag_TSysTaskLink*next;//指向后一个Task的Task指针;
struct tag_TSysTaskLink*previous;//指向前一个Task的Task指针;
}TSysTaskLink,*PTSysTaskLink;
任务运行起来后,当需要添加Task时,除了要将Task加入链表以外,还需要运行该Task的初始化程序;而当删除Task时,除了要将Task从链表中删除外,还要进行释放该Task占用的资源等步骤。由于运行初始化程序和释放资源需要一定时间,如果在初始化或释放过程中由于硬件产生中断,则初始化或释放会被打断;在中断里添加或删除Task时,有可能系统的中断连续来多次,造成添加Task或删除Task的嵌套执行,导致同一个Task被多次添加或删除,从而使程序报错,造成系统崩溃。
发明内容
本发明要解决的技术问题是提供一种增删任务的方法和单元,能够避免增删任务的过程中被打断,并且避免重复增删任务的情况。
为了解决上述问题,本发明提供了一种增删任务的方法,包括:
在任务链表中添加不能被中断的任务“维护临时Task链表”;
当添加任务Task时,如果任务已进入Task运行,则将该Task添加到临时Task链表里,将该Task的状态置为未定状态“TASK_PENDING”;
当删除Task时,如果任务已进入Task运行,则将该Task从Task链表移动到临时Task链表里,将该Task的状态置为删除状态“TASK_DELETE”;
当系统运行任务“维护临时Task链表”时,检测临时Task链表,将其中状态是未定状态的Task移动到Task链表里,将其状态置为就绪状态;将临时Task链表中状态是删除状态的Task从临时Task链表里删除。
进一步的,所述的方法还包括:
如果移动到Task链表的Task存在PInit程序则运行其PInit程序;如果从临时Task链表里删除的Task存在PFinalize程序则运行其PFinalize程序;
当满足以下各条件时本次“维护临时Task链表”任务结束:
临时Task链表中各Task都已被检测过;
未定状态“TASK_PENDING”的Task都已移动到Task链表,删除状态“TASK_DELETE”的Task都已从临时Task链表里删除;
移动到Task链表的Task中,存在PInit程序的Task的PInit程序已运行完毕;从临时Task链表里删除的Task中,存在PFinalize程序的Task的PFinalize程序已运行完毕;
所述PInit程序是在Task被添加时运行的程序;所述PFinalize程序是当Task被删除时将运行的程序。
进一步的,所述的方法还包括:
将未定状态的Task从临时Task链表移动到Task链表前,先判断该Task的PRUN是否为空,如果不为空则将该Task移动到Task链表;如果为空则判断该Task是否存在PInit程序,存在则运行其PInit程序后将其从临时Task链表删除,否则直接从临时Task链表删除;
所述PInit程序是在Task被添加时运行的程序;所述PRUN程序是在Task里运行的程序。
进一步的,所述的方法还包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京中星微电子有限公司,未经北京中星微电子有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200810115891.X/2.html,转载请声明来源钻瓜专利网。