任务的优先级翻转

(这里任务=线程==进程)

0.不可剥夺型内核

       只有进程执行结束,或者进程自动放弃CPU的使用权,其他就绪任务才能获得CPU的使用权,按照这种方式调度处理器使用权转移的内核属于不可剥夺型内核。  

1.可剥夺型内核

      若当前进程正在运行,且没有主动放弃CPU的使用权,而被调度器强制终止执行,使得CPU的使用权归其他进程,这种内核属于可剥夺型内核。

1. 优先级翻转 
  任务优先级反转出现于可剥夺型的内核中。任务以独占方式使用共享资源,会出现低优先级任务先于高优先级的任务执行的现象。
  例如,系统中有优先级为A、B和C的三个任务,其优先级为A > B > C,任务A、B处于挂起状态,等待某一事件发生,任务C正在运行,且任务C以独占的方式使用某一共享资源,此时任务A等待的事件到来,即A转为就绪态,因任务A的优先级比C高,所以任务A抢占CPU立即得到执行。这时任务A也要获取同一的共享资源,由于该资源正被任务C使用,因此任务A被挂起,任务C继续执行。若此时任务B等待的事件到来了,则任务B变为就绪态,因任务B的优先级比C高,任务B抢占CPU开始运行,直至任务B运行完毕,任务C才得以执行,直到任务C释放共享资源,任务A才得以执行。

2. 解决优先级翻转的方法
  (1)设置天花板优先级 
  实现:当任务申请到某时间资源时,将该任务的优先级提升到系统中可访问该资源的所有任务中的最高优先级,该优先级称为天花板优先级,当任务释放资源后改回原优先级。 
  优点:简单易行,不需要复杂的判断操作。 
  缺点:改变任务的优先级需要耗费时间,若不发生优先级翻转而去提升任务的优先级,任务释放资源后有需要改回原优先级,造成了CPU时间的浪费,影响了系统的实时性。

  (2)优先级继承 
  实现:当任务A申请共享资源时,若资源正在被任务C使用,则比较任务C与自身的优先级,若任务C的优先级<自身的优先级,则将任务C的优先级提升到自身的优先级,待其释放资源后再恢复其原来的优先级。 
  优点:在占有资源的低优先级任务阻塞了高优先级任务时才改变任务的优先级,尽量省去CPU的浪费。 
  缺点:同优先级的任务数量不止一个。

猜你喜欢

转载自blog.csdn.net/u012308586/article/details/90201882