1、优先级反转
优先级反转,又叫优先级翻转、优先级倒置,是操作系统在基于优先级抢占方式进行进程(任务)调度的时候可能出现的一种现象。在原本的调度算法设计中,高优先级进程可以抢占低优先级的CPU资源,先执行高优先级任务。
优先级反转的概念,通俗来讲就是这样的:
再以专业的描述形式演示优先级反转现象:
优先级反转最坏的一种情况就是,一个高优先级任务很紧急,但其资源已经被一个低优先级任务占有,且该低优先级任务前还有很多个耗时很长的中优先级任务。
对于针对任务的紧急重要程度而设计的优先级调度机制,优先级反转导致的这种情况是对优先级调度本身的践踏,
其公平,无错,循规蹈矩,但后果恶劣。
办法总比问题多,程序也是可以灵活变通的。解决优先级反转有一种常见方法:优先级继承。
2、优先级继承
优先级继承算法是有效解决优先级反转问题的一种方法,其“继承”的思路其实不复杂。简言之,优先级继承就是临时把低优先级任务的优先级升高,让CPU优先并尽快执行完该低优先级任务,执行完时将其优先级再降至原优先级,并释放资源,原本的高优先级任务拿到资源后则可以抢占CPU并执行。
以上面那个通俗的例子为例,优先级继承的方式雷同于指任“钦差大臣”:
以专业的描述看待优先级继承算法:
通常,内核在检测到优先级反转的发生后,会执行优先级继承机制,临时升高低优先级任务的优先级,按照正常设计思路,优先级低的任务通常不繁杂,会尽快的执行完毕并释放资源,这样就大大缩短了一个高优先级任务因为等待资源而阻塞的等待时间,消除了中优先级任务对其在优先级上“反转”的效果。