优先级反转以及解决思路

什么是优先级反转

优先级反转是指使用信号量时,出现的一种不合理的反常现象,既是一个 高优先级任务 试图通过信号量机制访问某个共享资源时,哎,发现这个资源已经被低优先级任务占有。

人家抢先了就只能等呗,但是这就导致了低优先级任务 阻塞高优先级任务的现象,导致 高优先级任务低优先级任务 阻塞,影响了 高优先级任务 的实时性。

最坏的情况下在 高优先级任务 等待低优先级任务的时候,出现一个中优先级任务,中优先级任务卡住了低优先级任务,却在被 高优先级任务 卡住,这就出现了类似死锁的情况发生。

解决方法 1 :优先权极限

在优先权极限方案中,系统把每一个临界资源与1个极限优先权相联系。这个极限优先权等于系统此时最高优先权加1。当1个任务进入临界区时,系统便把这个极限 优先权传递给这个任务,使得这个任务的优先权最高;
当这个任务退出临界区后,系统立即把它的优先权恢复正常,从而保证系统不会出现优先权反转的情况。如上例中,当 低优先权任务 进入临界区时,立即把它的优先权升高到极限优先权,保证低优先权任务 此时能尽快退出临界区,进而释放其占有的信号量。当 高优先级任务 执行的时候就不会出现其等待 低优先级任务 释放信号量而被阻塞的情况,从而保证不会出现上面所说的优先级反转。采用这种方案的另一个有利之处,是仅仅通过改变某个临界资源的优先级就可以使多个任务共享这个临界资源

解决方法 2 :优先级继承

在优先级继承方案中,大致原理是让低优先级线程在获得同步资源的时候(如果有高优先级的线程也需要使用该同步资源时),临时提升其优先级。以前其能更快的执行并释放同步资源。释放同步资源后再恢复其原来的优先级。

高优先级任务 想要进入临界区时,由于 低优先级任务 占有这个临界资源的信号量,导致 高优先级任务 被阻塞。这时候,系统把 低优先级任务 的优先权升到 高优先级任务 的优先级,此时优先级处于 低优先级任务高优先级任务 之间的任务 中优先级任务,即使处于就绪状态也不可以被调度执行,因为此时低优先级任务 的优先权已经高于 中优先级任务,所以低优先级任务 此时被调度执行。当 低优先级任务 释放 高优先级任务 需要的信号量时,系统立即把 低优先级任务 的优先权降到原 来的高度,来保证task1和task2正常有序执行。
于是只有中优先级受伤的世界出现了

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值