优先级反转,优先级继承和优先级天花板协议

优先级反转

优先级反转是RTOS(实时操作系统)会遇到的一个问题,简单来说就是由于调度原因,让原本优先级较高的任务慢于优先级较低的任务完成,比如下面这种情况,任务1、2、3的优先级依次升高,其中任务1和任务3都需要用到一个共享资源。
优先级反转

  • 一开始只有任务1,它成功申请到共享资源。
  • t2时刻,优先级更高的任务2抢占了CPU并开始执行,任务1被挂起。
  • t3时刻,优先级更高的任务3抢占CPU并开始执行,任务2被挂起。
  • t4时刻,任务3申请共享资源,但此时资源被任务1持有,因此任务3进入阻塞状态,任务2获得了CPU。
  • t5时刻,任务2完成后,由于共享资源还在任务1手里,因此将会是任务1被调度,而非优先级更高的任务3。
  • 直到t6时刻任务1释放了共享资源,任务3才会被调度并执行完毕。

上面这种情况任务的完成顺序是任务2,任务3,任务1。但我们希望的顺序应该是任务3,任务2,任务1。这就发生了优先级反转

优先级继承

由此就有了第一种解决方案,即优先级继承
站在任务3的角度,t4~t5这段时间是不希望等待的时间,它更愿意让任务1尽快用完共享资源,这样自己才可以尽快地被调度。
优先级继承就是基于这样一种思想,在高优先级任务被低优先级任务阻塞时,让低优先级任务继承它阻塞了的那个高优先级任务的优先级。 如下图:
优先级继承

  • t4时刻任务3申请共享资源,但该资源正在被任务1持有,根据优先级继承,任务1将继承任务3的优先级,因此任务3被阻塞后将会是任务1开始执行,而非之前的任务2。
  • t5时刻任务1释放资源,任务3得以获得CPU。

优先级天花板协议

不同之处在于它也给共享资源以优先级,每个资源的优先级是用到它的任务们中的最高优先级,任务的优先级大于资源的优先级时才可以获取它,当一个任务获得共享资源时,它会获得该资源的优先级,并在释放后回到自己之前的优先级
对于上面的例子,任务1和任务3都用到了共享资源,那么这个资源的优先级就是3(假设越大表示优先级越高),
优先级天花板

  • t2时刻任务2到来,但任务1在获取资源时就讲自己的优先级调整为3,因此此时任务1的优先级是高于任务2的,任务2不能抢占。
  • t3时刻任务1释放资源,它的优先级回到最低,因此被任务3抢占。
  • t5时刻任务3完成,任务2优先级高于任务1,获得CPU。
优先级天花板(Priority Ceiling)和优先级继承(Priority Inheritance)是解决实时系统中优先级反转问题的两种常见方法。 1. 优先级天花板(Priority Ceiling): - 优先级天花板是一种静态分配资源的方法,它假设每个共享资源都有一个最高优先级的任务(称为天花板优先级),任务在访问该资源时会提升到该最高优先级。 - 当一个任务需要访问共享资源时,如果其当前优先级低于资源的天花板优先级,则该任务会被提升到资源的天花板优先级,并在访问完资源后恢复到原始优先级。 - 这样可以避免较低优先级任务占用资源导致较高优先级任务无法执行的情况,从而解决了优先级反转问题。 2. 优先级继承(Priority Inheritance): - 优先级继承是一种动态调整任务优先级的方法,它在任务之间动态地传递优先级。 - 当一个高优先级任务需要访问一个被低优先级任务占用的共享资源时,该低优先级任务会被提升到与高优先级任务相同的优先级,直到高优先级任务完成对共享资源的访问。 - 这样可以确保高优先级任务始终能够及时执行,避免了优先级反转的问题。 - 一旦高优先级任务完成对共享资源的访问,低优先级任务会恢复到原始优先级。 需要注意的是,优先级天花板优先级继承都是为了解决实时系统中的优先级反转问题,但它们的实现方式和适用场景有所不同。在选择使用哪种方法时,需要根据具体的系统需求和资源访问模式进行评估和决策。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值