RTOS优先权反转问题

来源:互联网 发布:程序员考试时间安排 编辑:程序博客网 时间:2024/05/21 10:10

RTOS优先权反转问题定义:

高优先级的任务由于要等待被低优先级任务占有的临界资源而被中优先级任务阻塞,而此时具有中优先级的任务抢占了低优先级任务的CPU时间,导致具有中优先级的任务先于高优先级任务而执行。

举例:3个任务优先级的高低为T1>T2>T3,T1和T3在运行过程中都需要使用同一临界资源,T2不需要使用该资源。当T3先占用该资源,T1任务需要等待,直到T3任务释放占用的共享资源。由于T2的优先级比T3高,所以剥夺了T3的CPU使用权,使得T3释放信号量的时间向后拖延,所以T1的运行情况更加恶化,T1取得信号量的时间随之推迟。这样,原本优先级最高的T1任务,在经过以上过程后,优先级反而降到了最低。这时,系统中就发生了优先级反转的现象。

解决方案:

优先级极限

这个极限优先权等于系统此时最高优先权 + 1。

举例:3个任务优先级的高低为T1>T2>T3,T1和T3在运行过程中都需要使用同一临界资源,T2不需要使用该资源。当T3先占用该资源,进入临界区,此时T1任务进来,并开始启动,请求该临界资源时,由于该临界资源已被T3占用,故提高T3的任务优先权,使之高于T1,当T3释放了临界资源后又回到原来的优先级。

在ucos_ii中,由于不同任务不能对应同一个优先级,故采用优先级极限方案来解决优先级反转问题。

优先级继承

当高优先级任务在等待低优先级的任务占有的信号量时,让低优先级任务继续高优先级任务的优先级,即把低优先级任务的优先权提高到高优先级任务的优先级;当低优先级任务释放高优先级任务等待的信号量时,立即把其优先权降低到原来的优先权。这里采用类似于时间片轮番调度法的方案,在同一优先级上对不同任务进行调度。

目前,有许多RTOS是采用这种方法来防止优先级反转的,如大家比较熟悉的业界有名的WindRiver公司的VXWORKS。