优先级反转与死锁

本文通过实例详细解释了实时系统中常见的优先级反转与死锁现象,并提出了利用OS的优先级天花板协议来解决这些问题的有效方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.优先级反转

指资源被锁时低优先级任务抢占高优先级任务。
举例:任务A、B、C,优先级从低到高依次为1、2、3,所有任务都是完全抢占式,任务A和C共享资源R。
1.任务A运行,并对资源R加锁;
2.任务C被激活抢占任务A,并尝试对资源R加锁,因此C进入WAITING状态,A从被抢占的地方恢复;
3.任务B被激活并抢占任务A,任务B成功执行;
4.任务A恢复执行并释放资源R,任务A执行完成;
5.任务C恢复并对资源R加锁并完成执行。
我们观察到任务B优先级低于任务C却实际上抢占了任务C,这就是优先级反转。在实时要求较高的系统中这种高优先级的任务被意外延迟是难以接受的。更严重的是由于优先级反转,任务C的延迟时间是无法确定的,因为任何比任务A优先级高的任务都可以抢占任务A。
这里写图片描述

2.死锁

对资源加锁造成两个任务的冲突,每个任务都锁住了另一个任务需要的资源,使得每个任务都不能完成。
举例:任务A、B,共享两个资源R1、R2,其他情况与优先级反转中相同。
1.任务A对R1加锁;
2.任务B抢占A,并对R2加锁,之后尝试对R1加锁,由于R1已经被锁,所以任务B进入WAITING状态;
3.任务A恢复执行,尝试对R2加锁,由于R2已经被锁,所以任务A进入WAITING状态;
4.其他任务进入执行状态,而任务A和B永远无法继续执行。
死锁很可能在正常测试中不能被发现,而在交付客户后由于问题难以复现而更难被排查到。
这里写图片描述
解决优先级反转和死锁的方法很多,在OSEK中利用OS的优先级天花板协议(priority ceiling protocol)是最有效的方法。

原文:
OSEK study notes – 优先级反转与死锁

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值