μC/OS2Ⅱ中优先级调度算法的改进及实现
引 言
实时系统是对时间有特殊要求的系统,系统运行结果的正确性不仅要求系统的逻辑正确,而且依赖于运行结果产生的时间。尤其是硬实时系统,具有明确的实时参数,如果在某个限定的时刻前不能完成任务将导致整个应用的失败。μC/OS2 Ⅱ是一个为实时嵌入式应用而设计的抢占式多任务的实时操作系统,全部μC/OS2Ⅱ的函数调用与服务执行时间是可知的。在μC/OS2Ⅱ中,涉及到的重要概念有实时内核、任务间的通信、任务切换与调度、任务优先级分配、任务间的竞争、死锁等。其中,内核负责管理各个任务,为每个任务分配CPU时间,并负责任务之间的通信。μC/OS2Ⅱ内核最多可以管理64个任务,其中系统保留了8个任务,用户最多可以有56个应用任务。因此,当工程的复杂性增大,在μC /OS2Ⅱ操作系统上运行的任务数目不断增加时,如果任务数目超过64个,就必须换用其他的开发平台,这样就可能造成大量的前期开发工作作废。我们考虑到这种情况,根据μC/OS2Ⅱ本身的任务可扩展性,在原有的优先级调度算法基础上,提出了两种可行的大量增加可管理任务的算法。
基于优先级的抢占式调度算法
当系统响应时间很重要时,要使用占先式内核。μC/OS2Ⅱ的实时内核就是占先式内核。其特点是能够确定最高优先级的就绪任务什么时候可以执行,可以得到CPU的控制权,从而使任务级响应时间得以最优化。相应地,μC/OS2Ⅱ内核采用的是基于优先级的抢占式调度策略。系统为每个任务分配一个优先级,最高优先级的任务一旦就绪,总能得到CPU的控制权。当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的CPU使用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了CPU的控制权。
μC/OS2Ⅱ中优先级调度算法的第一种改进方法
为增加μC/OS2Ⅱ内核可管理任务的数目,该算法利用μC/OS2Ⅱ原有的优先级判定表格,重新定义了存放任务优先级的字节,并重新建立任务就绪表,把64个任务扩充到256个任务,最后给出了新的最高就绪任务的查找算法。
对优先级字节的改动和规定
在 μC/OS2Ⅱ中,原有的基于64个任务调度的优先级调度算法分别用3个比特位来定位任务优先级在就绪表(readylist) 中的行和列,即0~2位标识该任务在总就绪表中的列信息,3~5位标识该任务在就绪表中的行信息。因此,存放任务优先级的字节中8个比特位只会用到6位,而有两个比特位空闲。该算法直接扩展定位就绪任务优先级在就绪表中位置的行和列信息的比特位,使其能够区分256个不同的任务优先级。扩展后的算法规定任务优先级字节的定义如图1所示。
评论