电子大神的日记本,供应链专家的功夫茶盘,在这里记录、分享与共鸣。

登录以开始

关于优先级反转的解决(ucosii的学习)

首先解释下什么是优先级反转,举个例子说明

优先级:任务1〉任务2〉任务3

任务1与任务2处于挂起状态,等待某一事件的发生,任务3正在运行,任务3要使用共享资源,在使用共享资源之前,必须得到一个信号量。任务3得到该信号量,开始占有该共享资源,由于任务1的优先级比任务3的要高,任务1等待的事件到来是要剥夺任务3的CPU使用权,任务1开始运行,任务1运行过程中需要使用任务3使用中的共享资源,由于该信号量被任务3占有着,所以任务1挂起,任务3得以继续运行,这个时候任务2等到的事件发生,由于任务2的优先级比任务3的优先级要高,所以这个时候任务2要剥夺任务3的cpu使用权,任务2运行,任务3再次挂起,知道处理完任务2,再把CPU使用权归还给任务3,任务3运行,直到把该共享资源的信号量释放出来,任务3挂起,任务1得以运行,任务1运行完才再次把cpu使用权归还给任务3.

在这个过程中,实际上任务1的优先级降到了任务3的水平,比任务2的优先级低了,这个就叫做优先级反转。

后果:这样会严重的增加任务1的延迟时间

解决的方法:在任务1运行时需要被任务3占有的共享资源的信号量,把任务3的优先级提升至任务1的优先级水平,等到任务3释放出该共享资源的信号量时任务3的优先级水平恢复到初始的水平,这样,任务1完成后,介于任务1到任务3之间的任务可以得以处理。

博主
liang0321.yu@gmail.com
yuliang0321
My Group:http://group.ednchina.com/619/
点击跳转