证卡打印机也就是用来打印各种胸卡或证件的打印设备,目前已... [详细]
k3释放task1需要信号量时,系统立即把task3优先权降到原来高度,来保证task1和task2正常有序执行。整个情况如图2所示。目前,有许多RTOS是采用这种方法来防止优先级反转,如大家比较熟悉业界有名WindRiver公司VXWORKS。
PCbfans.cn提示请看下图:

在优先权极限方案中,系统把每一个临界资源与1个极限优先权相联系。这个极限优先权等于系统此时最高优先权加1。当1个任务进入临界区时,系统便把这个极限优先权传递给这个任务,使得这个任务优先权最高;当这个任务退出临界区后,系统立即把它优先权恢复正常,从而保证系统不会出现优先权反转情况。如上例中,当task3进入临界区时,立即把它优先权升高到极限优先权,保证task3此时能尽快退出临界区,进而释放其占有信号量。当高优先级任务task1执行时候就不会出现其等待低优先级任务task3释放信号量而被阻塞情况,从而保证不会出现上面所说优先级反转。采用这种方案另一个有利之处,是仅仅通过改变某个临界资源优先级就可以使多个任务共享这个临界资源,如下所示。
void TaskA(void){
...
SetTaskPriority(RES_X_PRIO);
// 访问共享资源 X.
SetTaskPriority(TASK_A_PRIO);
...
}
以上就RTOS中优先级反转问题出现原因以及解决方法进行了详细说明。21世纪将是嵌入式系统时代。从事嵌入式系统设计人员深入了解RTOS原理和内部潜在问题,如优先级反转等,将有助于开发出更加可靠产品。
|