优先级反转

实时操作系统中,在信号量使用过程中,则可能出现优先级反转的不合理情况。

1.优先级翻转出现场景
高优先级的任务被低优先级的任务阻塞,导致高优先级任务得不到调度和运行。但是其他中等优先级的任务却能抢占到CPU资源。从现象看好像是中优先级任务比高优先级任务具有更高的优先权。
当系统高优先级任务正在等待信号量(此信号量被一个低优先级任务持有)时,一个介于高和低之间的中等优先级任务进入可执行态,将抢占CPU资源,先运行了中等优先级任务,此时高优先级任务由于无法持有信号量而无法运行,而持有该信号量的任务由于优先级很低导致无法继续运行释放信号量让高优先级任务运行,由此出现了优先级反转的问题。

例如当前系统有3个任务和一个信号量:
任务A、任务B和任务C,其优先级为A>B>C,信号量为D.
(1)当前系统运行C,且C正持有信号量D。
(2)当A进入就绪态时,由于优先级高,则获得CPU资源,A开始运行,C进入就绪。
(3)A执行中,需要信号量D,此时由于D被C持有,于是A进入阻塞态,C回到运行态。
(4)当B进入就绪态时,由于优先级比C高,因此C被抢占,B获得CPU资源,进入运行态,C又回到就绪态。
此时A作为最高优先级任务,不能执行,CPU被优先级更低的B占有,如果此时还存在更多介于A与C之间的优先级任务,则A将迟迟得不到运行,此为优先级反转。

解决方法:
(1)优先级继承
当高优先级任务因低优先级任务占用资源被阻塞时,将低优先级任务的优先级提升到等待它所持有资源的最高优先级任务的优先级。

(2)优先级天花板
将申请到某资源的任务的优先级提升到可能访问该资源的所有任务中最高优先级任务的优先级,这个优先级称为该资源的优先级。

二者的区别是,优先级继承只有发生阻塞时才会提高,而优先级天花板不管是否发生阻塞,则都直接提升。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值