一种微内核嵌入式实时操作系统的任务级资源管理方法

文档序号:6536076阅读:205来源:国知局
专利名称:一种微内核嵌入式实时操作系统的任务级资源管理方法
技术领域
本发明涉及嵌入式实时操作系统技术,主要是实现一种微内核嵌入式实时操作系统的任务级资源管理方法。
背景技术
资源管理是嵌入式实时操作系统的重要组成部分。任务级资源管理是用来协调多个优先级不同任务对共享资源的访问,比如,管理实体(调度器),程序序列,内存,硬件,外设等。任务级资源管理必须要保证两个任务不能在同一时刻占有相同的资源,不会发生优先级反转(Priority Inversion),使用资源时不会发生死锁。
目前,市场上占有率比较高的商业实时操作系统有VxWorks、PSOS、QNX、LynxOS、VRTX,、Windows CE等。这些为数众多的实时操作系统绝大多数都是多任务实时微内核的结构,采用的是基于优先级的可抢占式调度策略。系统为每一个任务分配一个优先权,调度程序保证当前运行的进程是优先权最高的进程。大多数的实时操作系统采用了一种称作信号量(semaphore)的机制来实现对共享资源的管理。但是,有时候会出现一种比较奇怪的现象由于多进程共享资源,具有最高优先权的进程被低优先级进程阻塞,反而使具有中优先级的进程先于高优先级的进程执行,导致系统的崩溃,这就是所谓的优先级反转,具体示例如下假设在一个全抢占的实时嵌入式操作系统中有4个任务(T1,T2,T3,T4),T4优先级较低,占有信号量S1。T1优先级最高,抢占T4并请求相同的信号量。由于信号量S1已经被占据,T1进入等待状态。这时,低优先级的T4被一个优先级在T1和T4之间的任务(T2或T3)中断并抢占。T1只有在低优先级任务完成后才能执行,因为信号量S1那时才能被释放。虽然T2和T3不使用信号量S1,他们的运行时间延迟了T1。
另一个在任务级资源管理的同步机制中的普遍问题就是死锁问题。在这种情况下,死锁意味着任务由于相互锁定资源而无限制的等待,从而任务也就无法运行。
假设在系统中有两个任务(T1,T2),高优先级的任务T1占有信号量S1,由于等待一个事件而无法运行。低优先级的任务T2占有信号量S2,转入运行状态。如果T1又进入就绪状态并且试图占有信号量S2,它又会进等待状态。这时,T2运行,如果T2试图占有信号量S1,这样T1和T2互相等待对方占有的信号量,就导致了死锁。

发明内容
本发明要解决上述现有任务级资源管理存在的缺陷,提供一种微内核嵌入式实时操作系统的任务级资源管理方法。
本发明解决其技术问题所采用的技术方案。这种微内核嵌入式实时操作系统的任务级资源管理方法,把微内核嵌入式实时操作系统中的资源分为两部分内部资源和外部资源。这两者的作用是一致的,根本区别就是内部资源是不需要通过调用系统API来获取和释放的,对于用户来说,内部资源使用方便,开销小。外部资源需要通过调用系统特定的应用程序接口(API)来获取和释放,在功能较为复杂的任务中使用比较合适。一个任务最多只能占有一个内部资源。当任务进入运行状态的时候,资源被自动的获取;当任务自动结束或主动发生强制调度并退出运行状态时,其内部资源被自动的释放。一个任务可以占有多个外部资源,占有和释放外部资源必须按照先进后出(FILO)的顺序进行。
本发明用资源优先级置顶方案解决优先级反转和死锁的问题。在资源优先级置顶方案中,系统给每一个资源(包括内部和外部)分配一个优先级,该优先级等于需要使用该资源的所有任务的最高优先级。
本发明实现的具体步骤如下一、建立优先级的就绪队列;二、设计任务控制块(TCB),增加外部资源的指针和内部资源的优先级以及内部资源使用时所需保存的任务控制块指针;三、建立任务控制块数组以及用其优先级索引的任务控制块指针数组;四、设计外部资源的控制块(RCB),包括优先级、外部资源链表、所需保存的任务控制块指针;五、设计内部资源的获取和释放功能。如果任务T1试图获取内部资源R1,则在T1运行起来前将内部资源R1的优先级放入就绪队列,接着将R1的优先级对应的TCB指针数组中的值保存在T1的TCB中,最后将R1的优先级对应的TCB指针数组中的值置为T1。当任务T1释放内部资源R1时,先将在T1的TCB中保存的TCB恢复,然后重新设置就绪队列;六、设计外部资源的应用程序接口,主要实现获取和释放功能。当任务T2获取外部资源R2时,将R2的优先级放入就绪队列,接着将R2的优先级对应的TCB指针数组中的值保存在R2的RCB中,然后将R2的优先级对应的TCB指针数组中的值置为T2,最后把其外部资源R2和T2原有的资源组成堆栈链表,并把堆栈链表头保存在T2的TCB中。当任务T2释放资源R2时,先将R2从其堆栈链表中删除,并重置T2的TCB中的资源,接着将R2的RCB中保存的TCB恢复,最后设置就绪队列。
在本发明中,当多任务(T1,T2,T3)试图占有同一内部资源R1时,当低优先级任务T1开始运行后,将T1本身的优先级置为资源R1的优先级。其他想试图占有资源R1的任务(T2、T3)因为优先级都低于或等于资源R1的优先级(任务T1的运行的优先级),所以在任务T1释放资源前其他任务无法抢占它,而只有当任务T1自动结束或主动发生强制调度并退出运行状态时才释放内部资源R1,也就是只有任务T1主动结束(即释放内部资源)后,其他想占有资源R1的任务T2和T3才有可能运行从而获得资源R1。
当多任务(T1,T2,T3)试图占有同一外部资源R2时,低优先级任务T1开始运行后,当T1调用相应的应用程序接口(API)来获得资源R2后,任务T1的优先级为R2的优先级。当任务T1占有资源后,其他想试图占有相同资源R2的任务因为其优先级低于任务T1的运行的优先级,并且T1不能因为等待其他事件发生而进入等待状态,所以在任务T1主动释放资源前其他想占有资源R2的任务无法抢占它,这就避免了传统任务级资源管理方法所引起的优先级反转和死锁的发生。
本发明具有如下优点1.本发明把资源分成内部资源和外部资源,使对资源的使用和管理更加方便。如果某个任务只有在获取资源后才有意义,就可以把该任务所要获取的资源设置为内部资源,当该任务开始运行就占有此资源,任务主动结束就释放该资源,任务本身就不需要再显示调用应用程序接口来获取和释放资源。
2.在本发明中,实现任务级资源管理的所需要的时间开销和空间开销很少。在使用内部资源的时候基本上和无资源时任务执行的开销相接近,非常适合微内核嵌入式实时操作系统。
3.本发明中的任务级资源管理可以和具体调度策略相结合,可以灵活运用于各种调度场合,比如全抢占调度、混合抢占调度、非全抢占调度。
4.本发明有效的防止了任务级资源管理中存在的优先级反转和死锁的发生。


图1现有技术资源管理中的优先级反转的示例;图2现有技术资源管理中的死锁示例;图3本发明任务状态以及状态之间的转换关系;图4本发明内部资源的主动获取流程图;图5本发明任务级外部资源的获取流程图;图6本发明内部资源的主动释放流程图;图7本发明任务级外部资源的释放流程图;图8本发明任务级外部资源管理的例子;图9本发明内部资源管理的例子;具体实施方式
下面结合附图和实例对本发明作进一步介绍图3指出任务的状态以及状态之间的转换关系。任务状态分为就绪、运行、挂起、等待四个状态。任务在就绪时,如果其优先级最高,则进入运行状态。任务运行时,有三种状态转移情况1.当任务由于等待某事件发生时,该任务就进入等待状态。在等待状态的任务如果其等待的事件发生,则进入就绪状态;2.当任务被其他高优先级的任务抢占时,该任务就进入就绪状态;3.当任务自己主动结束时,该任务就进入挂起状态。挂起的任务可以通过被激活而进入就绪状态。
就绪状态的任务的优先级都反映在系统的优先级就绪队列中。优先级就绪队列使用长整型数来表示,如果第n位为1表示第n个优先级对应的任务为就绪状态,而为0表示其对应的任务不是就绪状态。
运行于MPC555平台上的微内核嵌入式实时操作系统主要包括任务模块、资源模块、中断模块、事件模块、定时器模块。任务模块是操作系统的核心模块,任务级资源管理功能的实现也是以任务模块为基础的。通过在任务控制块TCB数组和TCB指针数组中增加相应的属性、设计特定的数据结构来满足任务级资源管理的需要,其中TCB指针数组使用优先级索引是资源优先级置顶方案实现的关键数据结构。
图4指出了本发明的内部资源的自动获取的流程图,具体如下1.找到优先级最高的的任务控制块HighPrioTCB,并得到其想占有的内部资源R的优先级RPrio;2.找到优先级RPrio对应的TCB指针,并将其保存到HighPrioTCB中;3.将RPrio索引的TCB指针数组中的值置为HighPrioTCB;4.最后将RPrio放入就绪队列中。
5.改变当前运行的优先级值。
设置完内部资源获得后的优先级变化后,就可以启动该任务。
图5指出了当任务运行后,对外部资源获取的流程图,具体如下1.找到将要获取的外部资源R的控制块RCB,并得到R的优先级RPrio;2.把优先级RPrio对应的TCB指针保存到RCB中;3.把RPrio索引的TCB指针数组中的值置为当前运行的任务指针;4.将RPrio放入就绪队列中;5.将RCB放入当前运行的任务已占有的外部资源堆栈链表的表头;6.改变当前运行的优先级值。
图6指出了本发明的内部资源的自动释放的流程图,具体如下1.得到当前任务占有的内部资源的优先级RPrio;2.将RPrio索引的TCB指针数组的值设定为保存在当前运行任务的TCB中的值;3.判断RPrio对应的任务是否已经在就绪状态,如果不在就绪状态,就把该优先级RPrio从就绪队列中取出;4.把当前运行的优先级恢复为当前任务的优先级。
释放完内部资源后,任务就可以进入等待或挂起状态。
图7指出了本发明的任务级外部资源的释放流程图,具体如下1.从当前任务的TCB中得到外部资源堆栈链表的表头RCB,并得到其优先级RPrio;2.将RPrio索引的TCB指针数组的值设定为保存在RCB中的值;3.判断RPrio对应的任务是否已经在就绪状态,如果不在就绪状态,就把该优先级RPrio从就绪队列中取出;4.从TCB的外部资源堆栈链表中把RCB删除;5.判断TCB的外部资源堆栈链表是否为空,如果为空,把当前运行的优先级恢复为当前任务的优先级,否则将当前运行的优先级置为TCB中外部资源堆栈链表表头的优先级。
图8阐明了本发明针对于外部资源的具体应用。任务T0优先级最高,任务T4优先级最低。任务T1和任务T4要访问相同的外部资源。T4先占有外部资源,形成置顶优先级,此时T1、T2、T3都无法抢占T4,只有T0可以抢占,当T0运行结束后,此时的T4还占有资源,故又轮到T4运行,等T4释放资源后,其优先级恢复,此时在就绪状态中具有最高优先级的T1运行,T1占有资源后,形成置顶优先级,等T1自动释放资源并结束后,T2、T3才能依次运行。这就避免了优先级反转的出现。又由于占有外部资源的任务不能进入等待状态,所有也避免了死锁的发生。
图9阐明了本发明针对于内部资源的具体应用。任务T0优先级最高,任务T4优先级最低。任务T2和任务T4要访问相同的内部资源。T4先占有内部资源,形成置顶优先级,此时在就绪状态的T1、T2、T3都无法抢占T4。T4因为等待事件E1而进入等待状态后,T4恢复原来的优先级,接着T1运行,当T0激活后,就抢占了T1而运行,并设置了事件E1,使T4又进入就绪状态。当T0运行结束后,此时的T1优先级最高,故进入运行状态。当T1主动结束后,T2运行,因为T2占有内部资源,所以马上进入置顶优先级,等T2主动结束后,T3、T4才依次运行,T4运行时又主动占有内部资源,形成优先级置顶。这就避免了优先级反转和死锁的发生。
权利要求
1.一种微内核嵌入式实时操作系统的任务级资源管理方法,其特征是把微内核嵌入式实时操作系统中的资源分为两部分不需要通过调用系统API来获取和释放的内部资源,通过调用应用程序接口来获取和释放的外部资源;一个任务最多只能占有一个内部资源,当任务进入运行状态的时候,资源被自动的获取,当任务自动结束或主动发生强制调度并退出运行状态时,其内部资源被自动的释放;一个任务可以占有多个外部资源,占有和释放外部资源必须按照先进后出的顺序进行;系统给每一个内部资源或外部资源分配一个优先级,该优先级等于需要使用该资源的所有任务的最高优先级。
2.根据权利要求1所述的微内核嵌入式实时操作系统的任务级资源管理方法,其特征在于具体步骤如下1)、建立优先级的就绪队列;2)、设计任务控制块,增加外部资源的指针和内部资源的优先级以及内部资源使用时所需保存的任务控制块指针;3)、建立任务控制块数组以及用其优先级索引的任务控制块指针数组;4)、设计外部资源的控制块,包括优先级、外部资源链表、所需保存的任务控制块指针;5)、设计内部资源的获取和释放功能如果任务T1试图获取内部资源R1,则在T1运行起来前将内部资源R1的优先级放入就绪队列,接着将R1的优先级对应的任务控制块指针数组中的值保存在T1的任务控制块中,最后将R1的优先级对应的任务控制块指针数组中的值置为T1;当任务T1释放内部资源R1时,先将在T1的任务控制块中保存的任务控制块恢复,然后重新设置就绪队列;6)、设计外部资源的获取和释放功能的应用程序接口当任务T2获取外部资源R2时,将R2的优先级放入就绪队列,接着将R2的优先级对应的任务控制块指针数组中的值保存在R2的外部资源的控制块中,然后将R2的优先级对应的任务控制块指针数组中的值置为T2,最后把其外部资源R2和T2原有的资源组成堆栈链表,并把堆栈链表头保存在T2的任务控制块中;当任务T2释放资源R2时,先将R2从其堆栈链表中删除,并重置T2的任务控制块中的资源,接着将R2的外部资源的控制块中保存的任务控制块恢复,最后设置就绪队列。
3.根据权利要求1或2所述的微内核嵌入式实时操作系统的任务级资源管理方法,其特征在于当多任务T1,T2,T3试图占有同一内部资源R1时,当低优先级任务T1开始运行后,将T1本身的优先级置为资源R1的优先级,其他想试图占有资源R1的任务T2、T3因为优先级都低于或等于资源R1的优先级,所以在任务T1释放资源前其他任务无法抢占它,而只有当任务T1自动结束或主动发生强制调度并退出运行状态时才释放内部资源R1,也就是只有任务T1主动结束,即释放内部资源后,其他想占有资源R1的任务T2和T3才有可能运行从而获得资源R1。
4.根据权利要求1或2所述的微内核嵌入式实时操作系统的任务级资源管理方法,其特征在于当多任务T1,T2,T3试图占有同一外部资源R2时,低优先级任务T1开始运行后,当T1调用相应的应用程序接口来获得资源R2后,任务T1的优先级为R2的优先级;当任务T1占有资源后,其他想试图占有相同资源R2的任务因为其优先级低于任务T1的运行的优先级,并且T1不能因为等待其他事件发生而进入等待状态,所以在任务T1主动释放资源前其他想占有资源R2的任务无法抢占它。
全文摘要
本发明涉及一种微内核嵌入式实时操作系统的任务级资源管理方法,把资源分为两部分内部资源和外部资源,内部资源是不需要通过调用系统API来获取和释放的;外部资源需要通过调用系统特定的应用程序接口来获取和释放,在功能较为复杂的任务中使用比较合适。一个任务最多只能占有一个内部资源。当任务进入运行状态的时候,资源被自动的获取;当任务自动结束或主动发生强制调度并退出运行状态时,其内部资源被自动的释放。一个任务可以占有多个外部资源,占有和释放外部资源必须按照先进后出的顺序进行。本发明的优点使对资源的使用和管理更加方便,实现任务级资源管理的所需要的时间开销和空间开销很少,资源管理可以和具体调度策略相结合。
文档编号G06F9/50GK1702623SQ20051005008
公开日2005年11月30日 申请日期2005年6月13日 优先权日2005年6月13日
发明者吴朝晖, 赵民德, 厉蒋, 李红, 潘杭平, 孙洁 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1