您的位置 首页 资料

嵌入式体系中优先级回转的发生原因及2种解决方案

嵌入式系统中优先级反转的产生原因及2种解决方案-目前,市场上占有率比较高的商业RTOS有VxWorks/PSOS、QNX、 LynxOS、VRTX,、Windows CE等。这些为数众多的RTOS绝大多数都是多任务实时微内核的结构,采用的是基于优先级的可抢占式调度策略。系统为每一个任务分配一个优先权,调度程序保证当前运行的进程是优先权最高的进程。但是,有时候会出现一种比较奇怪的现象:由于多进程共享资源,具有最高优先权的进程被低优先级进程阻塞,反而使具有中优先级的进程先于高优先级的进程执行,导致系统的崩溃。这就是所谓的优先级反转(Priority Inversion)。

1、 问题的提出

现在,市场上占有率比较高的商业RTOS有VxWorks/PSOS、QNX、 LynxOS、VRTX,、Windows CE等。这些为数众多的RTOS绝大多数都是多使命实时微内核的结构,选用的是根据优先级的可抢占式调度战略。体系为每一个使命分配一个优先权,调度程序确保当时运转的进程是优先权最高的进程。可是,有时分会呈现一种比较古怪的现象:由于多进程同享资源,具有最高优先权的进程被低优先级进程堵塞,反而使具有中优先级的进程先于高优先级的进程履行,导致体系的溃散。这便是所谓的优先级回转(Priority Inversion)。

2、优先级回转

RTOS遍及具有2个特色:实时性和多使命。实时是指体系的呼应时刻有必要在规则的时刻内,超出这个时刻约束将会使体系呈现丧命的过错;一起,实时性还要求对时刻要求十分急切的使命要先于对时刻不是很紧迫的使命履行。正是由于这2个原因,RTOS的进程调度遍及选用的是根据优先级的可抢占式 PBP(Priority Based Preemptive)的调度战略。多使命是嵌入式体系的内涵要求。现在的嵌入式体系遍及要求具有多使命并发履行的才干,因而RTOS中也有必要供给多使命并发履行的支撑。由于多使命并发,必然会导致多个使命同享资源。如有2个使命task1和task2并发履行,都需求向打印机输出成果。由于只要1台打印机,所以在某个时刻段内只能有1个使命,如task1占有打印机并向打印机输出,而这时另一个使命task2处于等候状况。当task1输出结束后,task2由等候转为安排妥当,当RTOS再次调度它时,方可占有打印机向打印机输出。试想假如不采纳这种办法,不对打印机这种同享资源加以操控,而让 task1和task2一起向打印机输出,这时分打印机打印的成果谁也看不懂,是一堆杂乱无章的东西。因而,大多数的RTOS选用了一种称作信号量(semaphore)的机制来完成对同享资源的办理。任何一个想运用临界资源(如打印机等同享资源)的进程在进入临界区(如task1或task2中拜访临界资源的代码)之前有必要具有运用临界资源的信号量,不然不能够履行临界区代码。假定体系中有3个使命,分别为task1、task2和task3。 task1的优先权高于task2,而task2的优先权高于task3。恰在此刻task1和task2 因某种原因被堵塞,这时分体系调度task3履行。task3履行一段时刻后,task1被唤醒。由于采纳的是PBP的调度战略,因而task1抢占 task3的CPU, task1履行。task1履行一段时刻后要进入临界区,但此刻task3占有此临界资源的信号量。因而task1被堵塞,处于等候状况,等候task3 开释此信号量。经过这么一段时刻后,task2此刻此刻处于安排妥当状况。因而体系调度task2履行。假如task3在task2的履行期间一向没有能够被调度履行的话,那task1和task3将一向比及task2履行完后才干履行,task1更要比及task3开释它所操纵的信号量才干履行;而这段时刻彻底有或许超出task1的Deadline,使得task1溃散。当体系看到有高优先级的使命溃散时分,体系以为此刻有重大事故发生,为了抢救体系,看门狗电路起作用,体系或许被主动复位。从上面的剖析能够看到,导致体系溃散的原因是由于优先级高的使命task1要获取被低优先级使命task2占有的临界资源而被task2堵塞,而具有中优先级的使命task2抢占task3的CPU,然后导致task2先于task1履行。这时分体系便呈现了优先级回转的状况,如图1所示。

嵌入式体系中优先级回转的发生原因及2种处理计划

3、 优先级回转的处理办法

现在处理优先级回转有许多种办法。其间遍及运用的有2种办法:一种被称作优先级承继(priority inheritance);另一种被称作优先级极限(priority ceilings)。

在优先级承继计划中,当高优先级使命在等候低优先级的使命占有的信号量时,让低优先级使命承继高优先级使命的优先级,即把低优先级使命的优先权提高到高优先级使命的优先级;当低优先级使命开释高优先级使命等候的信号量时,立即把其优先权降低到本来的优先权。选用这种办法能够有效地处理上面所述的优先权回转的问题。当高优先级使命task1想要进入临界区时,由于低优先级使命task3占有这个临界资源的信号量,导致task1被堵塞。这时分,体系把 task3的优先权升到task1的优先权,此刻优先权处于task1和task3之间的使命task2,即便处于安排妥当状况也不能够被调度履行,由于此刻 task3的优先权现已高于task2,所以task3此刻被调度履行。当task3开释task1需求的信号量时,体系立即把task3的优先权降到本来的高度,来确保task1和task2正常有序履行。整个状况如图2所示。现在,有许多RTOS是选用这种办法来避免优先级回转的,如我们比较了解的业界有名的WindRiver公司的VXWORKS。

嵌入式体系中优先级回转的发生原因及2种处理计划

在优先权极限计划中,体系把每一个临界资源与1个极限优先权相联系。这个极限优先权等于体系此刻最高优先权加1。当1个使命进入临界区时,体系便把这个极限优先权传递给这个使命,使得这个使命的优先权最高;当这个使命退出临界区后,体系立即把它的优先权康复正常,然后确保体系不会呈现优先权回转的状况。如上例中,当task3进入临界区时,立即把它的优先权升高到极限优先权,确保task3此刻能赶快退出临界区,然后开释其占有的信号量。当高优先级使命task1履行的时分就不会呈现其等候低优先级使命task3开释信号量而被堵塞的状况,然后确保不会呈现上面所说的优先级回转。选用这种计划的另一个有利之处,是只是经过改动某个临界资源的优先级就能够使多个使命同享这个临界资源,如下所示。

嵌入式体系中优先级回转的发生原因及2种处理计划

以上就RTOS中优先级回转问题呈现的原因以及处理办法进行了具体的阐明。21世纪将是嵌入式体系的年代。从事嵌入式体系规划的人员深化了解RTOS 的原理和内部潜在的问题,如优先级回转等,将有助于开宣布愈加牢靠的产品。

责任编辑:gt

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/95348.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部