蔡諝的窝

博客园 首页 新随笔 联系 订阅 管理

优先级反转描述:

有3个任务,其优先级由高到低为A > B > C;其中A、C中都有对紧缺资源S的访问;由信号量控制,互斥访问紧缺资源。

场景如下:A、B挂起等待相应事件的发生;C运行,使用资源S,锁信号量;A等待事件发生,转为就绪状态,由于优先级高于C,转运行状态;当A使用资源S时,由于其正在被C使用,所有A挂起,C开始运行;B等待事件发生,转为就绪状态,由于优先级高于C,转运行状态;B运行完毕,C开始运行;C释放资源S后,A才开始运行。

从以上可以看出,优先级低的任务B先于优先级高的任务A运行,也即高优先级的任务被较低优先级的任务诸塞,优先级发生了反转,实时性难以得到保证。

-------

解决方案:

a)优先级天花板

描述:当任务C使用资源S时,将任务C的优先级提高到能访问资源S的最高优先级,即将C的优先级提高到资源S的优先级天花板。

优点:简单、易行

缺点:每次使用紧缺资源都需要改变其优先级,然后还要改回来,这无形中浪费了很多CPU时间

b)优先级继承

描述:任务C访问资源S,此时任务A也访问资源S,发现有人已经在使用资源S,则比较两者的优先级,发现A的优先级更高,则让C继承A的优先级,即将C的优先级提高到A的相同级别,如此类推,在C释放资源后,需要把其优先级改回来。

优点:可以根据实际情况改变优先级,不会浪费太多的CPU时间

缺点:有判断,过程较复杂,而且操作系统需要支持相同优先级(硬伤)

c)优先级天花板的改进

描述:任务C访问资源S,此时任务A也访问资源S,发现有人已经在使用资源S,则比较两者的优先级,发现A的优先级更高,则提升C的优先级至天花板,在C释放资源后,需要把其优先级改回来。

-------------

思考:

b)与c)的区别:打击范围不同,b打击范围小,c打击范围大

 

参考:《uC/OS优先级反转及解决》 http://blog.csdn.net/sunnybeike/article/details/6965210

posted on 2012-09-12 21:42  蔡諝  阅读(1892)  评论(0编辑  收藏  举报