发明名称 一种嵌入式实时操作系统中任务多次激活的方法
摘要 本发明公开了一种嵌入式实时操作系统中任务多次激活的方法,通过使用就绪块,每个就绪块中有两个元素,即指向下一个就绪块的指针(pointerToNextRB)和指向对应任务控制块的指针(pointerToTCB)。同时,对传统的任务控制块的数据结构进行了改进,在任务控制块中增加了记录任务当前激活次数的元素。这样,在就绪任务队列中排队的结构是就绪块,它只有两个元素,它对存储空间的占用少于直接用任务控制块排队的空间;系统中每一个任务始终只有一个控制块存在,只有在其前一个实例运行完成或被终止后,其后面的实例才能运行,即一个任务的多个实例之间不完全独立,任务的多次激活的行为不会创建新的线程。
申请公布号 CN102043668B 申请公布日期 2013.05.22
申请号 CN201010582446.1 申请日期 2010.12.10
申请人 成电汽车电子产业园(昆山)有限公司 发明人 陈丽蓉;李允;丁旭阳
分类号 G06F9/46(2006.01)I 主分类号 G06F9/46(2006.01)I
代理机构 成都行之专利代理事务所(普通合伙) 51220 代理人 温利平
主权项 一种嵌入式实时操作系统中任务多次激活的方法,其特征在于,包括以下步骤:(1)、建立一个就绪任务队列数组用于管理就绪任务对相同优先级的就绪任务进行排队,形成与优先级数量相同的多个就绪任务队列;所有的就绪任务队列形成数组,数组的长度等于优先级数,每个数组元素为一个就绪任务队列,并且对应一个优先级;就绪任务队列中的就绪任务用就绪块指示,每个就绪块中有两个元素,即指向下一个就绪块的指针和指向对应任务控制块的指针,如果就绪块位于就绪任务队列最后一个位置,则其指向下一个就绪块的指针为空;每个就绪任务队列有一个头指针和尾指针,分别指向就绪任务队列的第一个就绪块和最后一个就绪块,头指针用于对应优先级的任务执行时,查找该优先级对应的就绪任务队列中的第一个任务,尾指针用于新的就绪块插入时,查找该新的就绪块的优先级对应的就绪任务队列尾部的就绪块,如果就绪任务队列中没有就绪任务,则头指针和尾指针为空;(2)、对任务控制块的数据结构进行了改进2.1、任务控制块中包括以下元素:●任务状态任务状态用于记录任务状态,其取值为:运行、就绪、挂起和就绪及第一次运行;当任务的状态值为就绪时,任务是通过恢复其上下文来运行的;当任务的状态为就绪及第一次运行时,操作系统从任务代码入口地址开始执行;●任务当前激活次数任务当前激活次数用于记录任务当前的激活次数,每当任务增加一个激活实例,任务当前激活次数的值加1;每当任务的一个实例运行结束,任务当前激活次数的值减1;当任务当前激活次数被减到0时,该任务的状态变为挂起态;●任务当前优先级任务当前优先级,用于记录任务当前的优先级,其值代表了任务最早可能运行的那个实例的优先级;●任务配置信息表指针任务配置信息表指针指向任务配置信息结构体,通过它可以获取任务的静态配置的信息;●任务上下文指针任务上下文指针指向操作系统存储的任务上下文信息,通过它可以获取任务的上下文信息,当任务的状态值为就绪时,该任务是通过恢复其上下文信息来运行的;2.2、任务配置信息结构体中的信息都是通过用户静态配置,在任务的运行过程中不改变的,其相关元素如下:●任务代码入口地址通过任务代码入口地址可以获取任务的第一条功能代码,当任务的状态为就绪及第一次运行时,操作系统是从任务代码的入口地址处执行的;●任务的基本优先级每当任务被新激活一个实例时,该实例的就绪块是根据这个优先级被插入到相应的队列尾部的;●任务的最大激活次数任务的最大激活次数记录该任务所允许的最大激活次数,每当试图激活一个任务时,如果其当前激活次数小于配置的最大激活次数,则任务可以被成功激活,即增加一个可运行任务实例,否则不能被激活;(3)、任务多次激活的操作3.1、增加任务的一个激活实例a、对该任务的任务控制块进行以下操作:1)、首先判断任务控制块中的任务当前激活次数是否已经等于任务配置信息结构体中的任务的最大激活次数;2)、如果任务当前激活次数等于任务的最大激活次数,不能再增加一个激活实例,程序返回;3)、如果任务当前激活次数小于任务的最大激活次数,则获取一个空闲的就绪块,并设置该空闲的就绪块指向对应任务控制块的指针指向任务控制块以形成新的就绪块,将新的就绪块插入到任务的基本优先级所对应的就绪 任务队列的尾部:该就绪任务队列原最后的就绪块的指向下一个就绪块的指针指向新插入的就绪块,该就绪任务队列的尾指针指向新插入的就绪块;任务当前激活次数加1;如果任务当前状态为挂起态,则修改任务控制块中任务状态为就绪及第一次运行;b、如果操作系统当前运行任务的优先级比新激活任务的优先级低,并且系统满足调度程序的执行条件,则操作系统进行任务调度;如果调度的结果是新激活的任务运行,则通过当前运行任务的任务控制块中的任务上下文指针,保存当前运行任务的上下文,并修改激活任务的任务控制块的任务状态为就绪,跳转到激活任务的任务控制块的任务代码入口地址处,开始激活任务的运行;3.2、结束任务的当前运行实例1)、将当前运行实例的就绪块归还给系统;2)、对任务控制块的任务当前激活次数减1;3)、判断任务当前激活次数的值是否为0,如果不为0,则将任务状态设置为就绪及第一次运行;如果任务当前激活次数为0,则将任务状态置为挂起态;4)、调整任务当前优先级为任务配置信息结构体中的任务的基本优先级;5)如果系统满足调度程序的执行条件,则操作系统进行任务调度;对于新调度的需要运行的任务就绪块,查看就绪块所指向的任务控制块的任务状态,如果为就绪,则直接通过恢复其上下文来恢复任务的运行,如果为就绪和第一次运行,则修改任务状态为就绪,跳转到任务代码入口地址处,开始任务的运行。
地址 215311 江苏省昆山市巴城镇学院路88号