支持osek标准的嵌入式实时操作系统的任务调度方法

文档序号:6542827阅读:224来源:国知局
专利名称:支持osek标准的嵌入式实时操作系统的任务调度方法
技术领域
本发明涉及嵌入式实时操作系统技术,主要是一种支持OSEK标准的嵌入式操作系统的任务调度优化方法。
背景技术
随着软硬件技术的快速发展,嵌入式操作系统已经应用到各个领域,自动控制、交通、航空航天等等。嵌入式实时操作系统(Real-Time Operating System,简称RTOS)与其他普通的系统之间的最大的不同就是要严格满足事务与时间的关系。比如大型设备的控制部分、汽车电控系统,都要求所采用的实时操作系统能快速响应,快速进行调度,来应对各种对时间要求很苛刻的情况。
任务调度是嵌入式实时操作系统中最核心、最关键的部分,调度效率直接影响到RTOS的实时性能。衡量一个RTOS的技术,最重要的指标就是调度的任务切换时间Ts。
市场上占有率比较高的商用实时操作系统大多数是多任务实时微内核的结构,采用的是基于优先级的可抢占式调度策略。在各种调度情况上,调用同一个函数来完成任务的切换。开放源代码的uC/OS-II提供的实时任务调度方法,就是采用调度函数OSSched()完成的。在OSSched()中,先找到最高优先级的任务,然后用宏调用OS TASK_SW通过系统软中断来完成实际的任务切换的过程,将被挂起任务的运行环境压入堆栈,后面运行的较高优先级任务的运行环境从堆栈中恢复。
其实这是最复杂的任务切换情况需要做的工作,即当前正在运行的任务被打断,需要保存当前任务的运行环境,再切换到一个原先运行过的任务,需要恢复原先的运行环境,保存和恢复运行环境占据了整个任务切换的大部分时间。对一些简单调度点,如结束当前任务再运行刚激活的任务这种情况,保存和恢复运行环境的过程都是浪费的。这是因为结束任务意味着任务已经完成其功能,不需要保存其运行环境,而激活的任务刚开始运行,也没有以前的运行环境。这也就说明了不考虑所切换任务的状态而采用统一调度,势必会大大影响嵌入式实时操作系统的调度效率。

发明内容
本发明的目的是针对上述缺陷,提供一种支持OSEK标准的嵌入式操作系统的任务调度优化方法。
本发明解决其技术问题所采用的方案是通过详细分析支持OSEK标准的操作系统的任务切换状态,细分不同的调度点情况,针对每种调度点采用专用的调度策略,使任务切换时间在多数情况下明显减少,大大优化实时操作系统的时间性能。
本发明的实现步骤如下1)、根据任务状态分析各类调度切换情况1.1)、OSEK标准中根据任务状态分类的不同,将系统分为BCC1(基本任务)、ECC1(扩展任务)两种情况;其中BCC1中的任务状态包含三种情况运行、就绪、挂起,ECC1中的任务状态包含四种情况运行、就绪、等待、挂起。本发明将其中的任务就绪状态细分为中间态和初始态,中间态即是任务运行到一半被抢占或等待的事件发生后进入就绪的状态,初始态是任务从挂起被激活到就绪状态或系统启动时任务直接进入的就绪状态;1.2)、在BCC1下的调度情况分为以下三种调度情况1当前任务运行结束进入挂起状态,即将运行的高优先级任务为初始态;不用保存当前任务运行环境,直接进行指针赋值等操作后,即可运行后一高优先级任务;调度情况2当前任务运行结束进入挂起状态,即将运行的高优先级任务为中间态;不用保存当前任务运行环境,进行指针赋值等操作后,恢复后一高优先级任务的运行环境,再运行;调度情况3当前任务被抢占进入就绪状态,即将运行的高优先级为初始态;保存当前任务运行环境,进行指针赋值等操作后即可运行高优先级任务。
1.3)、在ECC1下的调度情况,除上述1.2)以外,再加以下三种调度情况4当前任务进入等待状态,即将运行的高优先级任务为中间态;保存当前任务运行环境,进行指针赋值等操作后,恢复后一高优先级任务的运行环境,再运行;调度情况5当前任务进入等待状态,即将运行的高优先级任务为初始态;保存当前任务运行环境,进行指针赋值等操作后即可运行高优先级任务;
调度情况6当前任务被抢占进入就绪状态,即将运行的高优先级任务为中间态,且该任务是因为其等待的事件发生了而进入中间态的;保存当前任务运行环境,进行指针赋值等操作后,恢复高优先级任务的运行环境,再运行;2)、把调度过程可以分为以下四个步骤2.1)、在就绪任务中查找到最高优先级的任务;2.2)、保存当前运行任务的运行环境;2.3)、进行CPU占用指针赋值,即交换CPU占有权;2.4)、恢复最高优先级任务的运行环境;3、根据对调度过程四个步骤的覆盖情况,优化调度策略,分为以下四类3.1)、调度策略A最简单情况,只做调度过程步骤的2.1)、2.3);3.2)、调度策略B一般情况,只做调度过程步骤的2.1)、2.2)、2.3);3.3)、调度策略C一般情况,只做调度过程步骤的2.1)、2.3)、2.4);3.4)、调度策略D最复杂情况,做全部调度过程步骤的2.1)、2.2)、2.3)、2.4);4、根据任务运行时实际调度情况的不同,选用不同的调度策略每种情况的调度所耗费的时间T根据所选策略的不同有所不同,D对应的TSD最多,A对应的TSA最少,B和C对应的TSB、TSC为中间值。
本发明的显著优点统一函数的调度方法的任务切换时间设为TS,从分析上可以直观的看到,本发明的优化调度策略涉及过程少,具有以下调度时间上的明显优势,明显的优化了系统调度的性能TSA<TS,TSB<TS,TSC<TS,而TSD和TS基本持平。


图1BCC1基本任务状态转换图;图2本发明的细化后的BCC1基本任务状态转换图;图3ECC1扩展任务状态转换图;图4本发明的细化后的ECC1扩展任务状态转换图;图5本发明的实施例1;图6本发明的实施例2;具体实施方式
下面结合附图和两个实施例对发明作进一步介绍。这种支持OSEK标准的嵌入式操作系统的任务调度优化方法,实现步骤如下一、根据任务状态仔细分析各类调度切换情况。
OSEK标准中根据任务状态分类的不同,将系统分为BCC1(基本任务)、ECC1(扩展任务)两种情况。
按照OSEK标准,BCC1中的任务状态包含三种情况运行、就绪、挂起。运行状态的任务是指当前占用CPU的任务,就绪状态的任务是已经做好运行准备、只等CPU时间的任务或运行一半后被其他任务抢占、又在等待CPU时间的任务,挂起状态的任务是自行运行结束或刚刚产生而等待激活的任务。
ECC1中的任务状态包含四种情况运行、就绪、等待、挂起。等待状态是任务等待某一事件发生的状态。其他三种状态和BCC1的情形一样。
BCC1的基本任务状态转换关系如图1所示。任务就绪态又可以细分为中间态、初始态。中间态即是任务运行到一半被抢占后进入就绪的状态,初始态是任务从挂起被激活到就绪状态或系统启动时任务直接进入的就绪状态。细化后的BCC1任务状态转换关系如图2所示。
因此,在BCC1下的调度情况可以分为以下几种(RunningTask代表当前运行的任务,HighestTask代表已经找到的最高优先级任务,PCPUCur代表当前占用CPU的任务的指针,调度前PCPUCur指向RunningTask)调度情况1RunningTask运行结束进入挂起状态,HighestTask为初始态。
不用保存RunningTask运行环境,直接进行PCPUCur的赋值等操作(把PCPUCur指向HighestTask)后,即可运行HighestTask任务体。这是最简单的情况,只做指针的赋值,不用保存也不用恢复相关运行环境。
调度情况2RunningTask运行结束进入挂起状态,HighestTask为中间态。
不用保存RunningTask运行环境,进行PCPUCur的赋值等操作后,恢复原来HighestTask的运行环境,继续运行。这是一般情况,需要指针的赋值,恢复相关运行环境,不用保存当前运行环境。
调度情况3RunningTask被抢占进入就绪状态,HighestTask为初始态。
保存RunningTask运行环境,进行PCPUCur的赋值等操作后即可运行HighestTask任务体。这也是比较一般的情况,需要指针的赋值,需要保存当前运行环境,但不用恢复原先运行环境。
ECC1情况下扩展任务状态转换关系如图3所示。和BCC1类似,把任务就绪态分为中间态、初始态。不过中间态除了任务被抢占造成的,还可能是因为处于等待状态的任务其等待的事件发生了,该任务进入就绪状态,这种就绪状态也归属到中间态。细化后的ECC1任务状态转换关系如图4所示。
因为增加了等待状态,分析后可以知道,除了BCC1下已有的四种调度情况,ECC1还有另外三种情况调度情况4RunningTask进入等待状态,HighestTask为中间态。
保存RunningTask运行环境,进行PCPUCur的赋值等操作后,恢复原来HighestTask的运行环境,继续运行。这就是最复杂的调度情况,指针赋值、保存当前运行环境、恢复原先运行环境三种操作都需要。
调度情况5RunningTask进入等待状态,HighestTask为初始态。
保存RunningTask运行环境,进行PCPUCur的赋值等操作后,直接运行函数体,不需要恢复运行环境的操作。这在操作复杂度上和调度情况3一样。
调度情况6RunningTask被抢占进入就绪状态,HighestTask为中间态,且HighestTask是因为其等待的事件发生了而进入中间态的。
保存RunningTask运行环境,进行PCPUCur的赋值等操作后,恢复原来HighestTask的运行环境,继续运行。这在操作复杂度上和调度情况4一样,也是最复杂的情况。
二、把调度过程分段分析并综合各类情况,调度过程可以分为以下四步1.在就绪任务中查找到最高优先级的任务(HighestTask)准备切换(必要步骤)2.保存当前运行任务(RunningTask)的运行环境(可选步骤)3.进行PCPUCur的指针赋值,即交换CPU占有权(必要步骤)4.恢复最高优先级任务(HighestTask)的运行环境(可选步骤)三、对调度策略进行分类。
根据对调度过程四个步骤的覆盖情况,将调度策略分为以下四类调度策略A最简单情况,只做调度过程步骤的1、3。
调度策略B一般情况,只做调度过程步骤的1、2、3。
调度策略C一般情况,只做调度过程步骤的1、3、4。
调度策略D最复杂情况,做全部调度过程步骤的1、2、3、4。
四、根据任务运行时实际调度情况的不同,选用优化的调度策略。
每种情况的调度所耗费的时间T根据所选策略的不同有所不同,D对应的TSD最多,A对应的TSA最少,B和C对应的TSB、TSC为中间值。
实施例1如图5所示。在BCC1状态下的操作系统,采用全抢占方式。共有三个基本任务,P1,P2,P3,优先级从高到低排列,即P1优先级最高,P2次之,P3优先级最低。
t0时刻系统启动,此时任务P1挂起,P2、P3就绪,P2优先级高而先运行,P3处于就绪状态中的初始态。到t1时刻,发生第一次调度,当前任务P2运行结束,初始态的高优先级任务P3运行,这属于最简单的调度情况,采用优化后的调度策略A。
P3一直运行,直到其激活P1。因为P1优先级高于P3,则P3被抢占,t2时刻发生第二次调度,P3进入就绪状态的中间态,P1运行。因为P3没有运行完毕,所以被抢占时需要保存其上下文环境,P1是从挂起直接被激活而进入就绪状态的,所以采用调度策略B。
P1一直运行到结束,t3时刻发生第三次调度,当前就绪任务中只有P3,P3得到CPU并运行。因为P1是运行结束后进入挂起状态的,所以不需要保存其运行环境。而P3是从就绪状态的中间态开始运行的,所以需要恢复其运行环境,因此采用调度策略C。
在CME555开发板上对比运行采用统一调度函数和采用本发明后的优化调度策略的操作系统,CPU为MPC555,频率40MHz。在逻辑分析仪上,采用100M的采样频率,测试得到各时刻的任务切换时间分别如下表1所示

表1实施例2在实施例1的基础上,再来看实施例2。如图6所示。实施例2为ECC1状态下的操作系统,采用全抢占方式。共有三个基本任务,P4,P5,P6,优先级从高到低排列,即P4优先级最高,P5次之,P6优先级最低。为了说明的简单,实例2只突出“等待”状态的调度情况。
t0时刻系统启动,此时任务P4挂起,P5、P6均就绪,P5优先级最高而先运行,此时P6处于就绪状态中的初始态。到t1时刻,P5运行结束,发生第一次调度,P6运行,和实例1的t1时刻类似,采用调度策略A。
P6一直运行,直到其激活P4。因为P4优先级高于P6,则P6被抢占,t2时刻发生第二次调度,P6进入就绪状态的中间态,P4运行。和实例1的t2时刻类似,采用调度策略B。
P4一直运行,直到其等待事件1。即t3时刻发生第二次调度,P4进入等待状态,P6运行。因为P4是进入等待状态而并没有运行完毕,所以需要保存其运行环境,同时P6是从就绪态的中间态进入运行,也需要恢复运行环境,所以采用调度策略D,这就是最复杂的调度情况。
P6一直运行,直到其设置了事件1。P4因为等待的事件1发生,则进入就绪态的中间态。因为P4优先级高,则t4时刻就发生第三次调度,P6被抢占进入就绪状态的中间态,P4运行。因为P6运行环境需要保存,P4是从等待状态进入就绪状态的中间态再进入运行的,需要恢复其运行环境,又也是最复杂的调度情况,采用调度策略D。
同样在CME555开发板上对比运行采用统一调度函数和采用本发明的优化调度策略的操作系统。
测试得到各时刻的任务切换时间分别如下表2所示

权利要求
1.一种支持OSEK标准的嵌入式操作系统的任务调度优化方法,其特征是实现步骤如下1)、根据任务状态分析各类调度切换情况1.1)、OSEK标准中根据任务状态分类的不同,将系统分为BCC1(基本任务)、ECC1(扩展任务)两种情况;其中BCC1中的任务状态包含三种情况运行、就绪、挂起,ECC1中的任务状态包含四种情况运行、就绪、等待、挂起;将任务的就绪状态细分为中间态和初始态,中间态即是任务运行到一半被抢占或等待的事件发生后进入就绪的状态,初始态是任务从挂起被激活到就绪状态或系统启动时任务直接进入的就绪状态;1.2)、在BCC1下的调度情况分为以下三种调度情况1当前任务运行结束进入挂起状态,即将运行的高优先级任务为初始态;不用保存当前任务运行环境,直接进行指针赋值等操作后,即可运行后一高优先级任务;调度情况2当前任务运行结束进入挂起状态,即将运行的高优先级任务为中间态;不用保存当前任务运行环境,进行指针赋值等操作后,恢复后一高优先级任务的运行环境,再运行;调度情况3当前任务被抢占进入就绪状态,即将运行的高优先级为初始态;保存当前任务运行环境,进行指针赋值等操作后即可运行高优先级任务。1.3)、在ECC1下的调度情况,除上述1.2)以外,再加以下三种调度情况4当前任务进入等待状态,即将运行的高优先级任务为中间态;保存当前任务运行环境,进行指针赋值等操作后,恢复后一高优先级任务的运行环境,再运行;调度情况5当前任务进入等待状态,即将运行的高优先级任务为初始态;保存当前任务运行环境,进行指针赋值等操作后即可运行高优先级任务;调度情况6当前任务被抢占进入就绪状态,即将运行的高优先级任务为中间态,且该任务是因为其等待的事件发生了而进入中间态的,保存当前任务运行环境,进行指针赋值等操作后,恢复高优先级任务的运行环境,再运行;2)、把调度过程可以分为以下四步2.1)、在就绪任务中查找到最高优先级的任务;2.2)、保存当前运行任务的运行环境;2.3)、进行CPU占用指针赋值,即交换CPU占有权;2.4)、恢复最高优先级任务的运行环境;3)、根据对调度过程四个步骤的覆盖情况,优化调度策略,分为以下四类3.1)、调度策略A最简单情况,只做调度过程步骤的2.1)、2.3);3.2)、调度策略B一般情况,只做调度过程步骤的2.1)、2.2)、2.3);3.3)、调度策略C一般情况,只做调度过程步骤的2.1)、2.3)、2.4);3.4)、调度策略D最复杂情况,做全部调度过程步骤的2.1)、2.2)、2.3)、2.4);4)、根据任务运行时实际调度情况的不同,选用不同的调度策略每种情况的调度所耗费的时间T根据所选策略的不同有所不同,D对应的TSD最多,A对应的TSA最少,B和C对应的TSB、TSC为中间值。
2.根据权利要求1所述的支持OSEK标准的嵌入式操作系统的任务调度优化方法,其特征在于任务的状态分为运行、就绪、挂起、等待四种。运行状态的任务是指当前占用CPU的任务,就绪状态的任务是已经做好运行准备、只等CPU时间的任务或运行一半后被其他任务抢占、又在等待CPU时间的任务,挂起状态的任务是自行运行结束或刚刚产生而等待激活的任务;等待状态的任务是等待某一事件发生的任务。就绪状态又细分为中间态和初始态。因为处于中间态和初始态的任务对恢复运行环境的要求不一样,调度策略针对任务切换时这两种不同的状态进行优化。对于初始态的任务,直接去掉恢复运行环境的步骤,从而减少调度的时间,提高性能。
3.根据权利要求1所述的支持OSEK标准的嵌入式操作系统的任务调度优化方法,其特征在于操作系统采用全抢占的方式,所以任务切换点不仅发生在任务运行结束之后,也发生在高优先级的任务抢占低优先级任务的时候。这两种调度情况,对是否需要保存当前运行任务运行环境的要求也是不一样的。任务运行结束进行调度时,因为已经完成所有操作,所以不需要保存其运行环境。而被抢占的任务还没有完成所有操作,需要在适当的时候继续运行,所以系统需要为其保存运行环境。
4.根据权利要求1所述的支持OSEK标准的嵌入式操作系统的任务调度优化方法,其特征在于OSEK标准规定,ECC1操作系统下的任务状态有一种为等待状态。任务因为等待某一个事件的发生而进入等待状态,主动放弃CPU,等待事件发生后继续运行。因任务等待而发生的调度,进入等待状态的任务也没有完成所有操作,需要在等待的事件发生之后继续运行,所以系统也要为其保存运行环境。
全文摘要
本发明涉及一种支持OSEK标准的嵌入式操作系统的任务调度优化方法,实现步骤如下1)根据任务状态分析各类调度切换情况2)把调度过程可以分为以下四个步骤2.1)在就绪任务中查找到最高优先级的任务;2.2)保存当前运行任务的运行环境;2.3)进行CPU占用指针赋值,即交换CPU占有权;2.4)恢复最高优先级任务的运行环境;3)根据对调度过程四个步骤的覆盖情况,优化调度策略,分为四类调度策略;4)根据任务运行时实际调度情况的不同,选用不同的调度策略每种情况的调度所耗费的时间T根据所选策略的不同有所不同。本发明的优点针对每种调度点采用专用的调度策略,使任务切换时间在多数情况下明显减少,大大优化实时操作系统的时间性能。
文档编号G06F9/46GK1737764SQ20051006073
公开日2006年2月22日 申请日期2005年9月12日 优先权日2005年9月12日
发明者吴朝晖, 赵民德, 李红, 厉蒋, 潘杭平, 姜旭锋, 王磊 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1