今天小编要和大家分享的是嵌入式技术相关信息,接下来我将从关于嵌入式系统优先级反转的原因及解决方法探讨,tornado&vxworks使用ppt这几个方面来介绍。

嵌入式技术相关技术文章关于嵌入式系统优先级反转的原因及解决方法探讨tornado&vxworks使用ppt

嵌入式技术相关技术文章关于嵌入式系统优先级反转的原因及解决方法探讨

引 言

VxWorks是美国Wind River(风河)公司的一个实时操作系统,具有良好的可靠性和实时性。该系统采用基于优先抢占式调度策略,系统为每一个任务分配一个优先级,调度程序保证当前运行的是优先权最高的任务。但在实际开发中,由于任务间资源共享,信号量及中断的引入,往往会出现高优先级任务被低优先级任务长时间阻塞或阻塞一段不确定时间的现象,即所谓优先级反转(Priority Inversion)。优先级反转会造成任务调度的不确定性,严重时可能导致系统崩溃。本文在参考文献的基础上,结合实际项目开发过程中遇到的优先级反转问题,对造成优先级反转的原因及其解决方法进行了探讨。

优先级反转一般性描述

优先级反转发生在一个高优先级的任务被迫等待一段不确定时间,图1中3个任务分别为ta sk1、task2和task3,其优先级由高到低。从图1可知,当task3占有由信号量(semaphore)保护的某种共享资源而进入临界区执行时,task1就绪,由于系统的抢占式调度策略,出现task1抢占task3执行。task1执行一段时间后也进入临界区,但此时task3仍占有此临界资源的信号量,task1被阻塞,等待task3释放此信号量。在经过这么一段时间后,task2已处于就绪状态,于是系统调度task2执行。如果task3在task2的执行期间一直没有能够被调度执行的话,那task1和task3将一直等到task2执行完后才能执行,task1更要等到task3释放它所占有的信号量才能执行;如果这段时间超出task1的最后期限,task1的调度出现了问题,此时轻则任务被长时间阻塞,重则造成系统崩溃。

关于嵌入式系统优先级反转的原因及解决方法探讨

图1 优先级反转示意图

优先级反转原因可归纳为:高优先级的任务task1由于要等待被低优先级任务task3占有的临界资源而被task2阻塞,而此时具有中优先级的任务task2抢占了task3的CPU时间,导致task2先于task1执行。此类优先级反转问题的解决方法大致有2种:一种被称作优先级继承(inheritance);另一种被称作优先级极限(ceilings)。下面介绍本文所遇到的优先级反转问题。