优先级反转

来源:互联网 发布:linux删除一个目录 编辑:程序博客网 时间:2024/04/28 16:46

问题:在火星车工作过程中,一个气象任务(低优先级)获得互斥量并写总线的时候,一个中断的发生导致了通信任务(中优先级)被调度并就绪,调度的时机正好是总线管理任务(高优先级)等待在总线访问互斥量上的时候。这种情况下,因为通信任务比气象任务优先级高,所以会抢占气象任务,当然,这也就更让总线管理任务失去了运行的机会。通信任务运行时间稍长,总线管理任务就会等待互斥量超时,返回错误,提示总线任务没有能够在一定的时间内完成总线操作,在探路者中,这种情况被当作严重错误处理,作为错误处理的结果就是――整个系统被重启。

 

解决方法:优先级继承。当气象任务获得互斥量,做写操作,在还没有完成写操作的时候,总线管理任务(优先级最高)申请信号量,互斥量的所有者气象任务将继承总线任务的高优先级,那么当中优先级的通信任务被调度的时候,是不可能影响无辜的已经具有高优先级的气象任务的。这样优先级翻转就被避免了。

0 0