什么是优先级反转+有何危害+如何避免和解决 优先级的优先级反转的发生的防止

作者&投稿:栾径 (若有异议请与网页底部的电邮联系)

什么是优先级反转

优先级反转,英文是priority inversion,也有其他叫法:

优先级倒置

优先级逆转

优先级翻转

任务之间谁可以得到执行,是通过任务调度来完成的

2.任务调度有多种方法(算法)

罗宾环调度算法:Round-robin scheduling algorithm

基于优先级的调度算法:Priority-controlled scheduling algorithm

3.任务调度的一种常见调度算法就是

根据优先级高低去调度,优先让高优先级的任务去执行的

任务调度器,总是去激活某个,在所有任务中优先级是最高的,且处于就绪状态的,任务,即让其去执行

4.任务有多种状态:就绪,挂起,等等

当然,任何任务,都可能由于,需要某种资源,而该资源被别人(别的任务)占用,而无法继续运行下去

此时就变成:挂起 –> 等待其所需要的资源被释放

然后才可以继续变成,就绪,等待下次调度时,就可以继续执行了。

5.任务一般被称为:进程,或更小粒度的线程

此处,均以进程为例来说明

任务调度器,总是去激活某个,在所有任务中优先级是最高的,且处于就绪状态的,任务,即让其去执行

但是,当某个最高优先级的任务A,由于其所需要的某个资源被某个低优先级的任务C占用了(还没使用完,还没释放),所以高优先级任务A就被阻塞了。

此高优先级的任务A,必须等到低优先级任务C,把其所占用的资源释放掉后,才能继续运行。

但是要等到低优先级任务C释放其所占用的资源的话,则很明显,必须要先让低优先级的任务C去执行,等低优先级任务C执行完毕后,才能去释放,高优先级任务A所希望得到的那个资源。

所以,任务调度去,就去调度,让低优先级任务C去执行了。

但是,此时,的问题就来了:

在高优先级任务A执行的这段时间内,某个中优先级的任务B,已经处于就绪状态了。

当高优先级的任务A,由于所需资源被占用而挂起,然后中优先级的任务B,由于比(本来打算去调度执行的)低优先级任务C的优先级高,所以被调度执行,然后B去一直执行,直到结束。

一个具有中等优先级的任务(B),却比一个更高优先级的任务(A)先执行

本来应该是优先级最高的任务A先执行的,结果却变成了,比优先级最高的任务A,的优先级低一些,中等优先级任务B,先执行了。

好像是:高优先级任务A和中优先级任务B,两者之间的优先级调换了,反转了一样。

优先级反转有何危害?

说实话,很久之前,对于:

计算机的概念,都完全只是概念到时候

完全不懂相关技术和概念背后的逻辑的时候

像对于此处的优先级反转,也无法完全理解的时候,自然也不会去考虑此概念背后的含义。

而实际上,不对一个问题背后的现象,原因,去搞清楚的话,自然也是无法理解相关的概念的

(对于,对现实世界中的应用情况不了解,对于概念也理解的不深的话,很可能就会问)

(不就是个优先级反转嘛)即使,发生了优先级反转了,又如何?(地球还不是照转?!)

优先级的反转,有很大危害。

但是,在具体解释优先级反转的危害之前,需要知道相关背景知识:

1.优先级反转,这个概念,往往都是在嵌入式领域内,尤其是嵌入式实时系统方面,才会提及

关于嵌入式实时操作系统,不熟悉的,可以参考:

【整理】嵌入式实时操作系统

2.嵌入式实时操作系统,最最重要的指标就是:确保任务执行时间是可预测的,即涉及到最后期限deadline

要确保,任何时刻,执行某个任务,都不能超过某个时间,比如1ms(我随便举例的)

然后再来解释,优先级反转的危害:

由于优先级反转,造成任务调度时,时间的不确定性。

时间不确定,破坏了实时系统的实时性

严重时可能导致系统崩溃

由于本身基于优先级设计的任务,每个优先级不同的任务,往往对应着实际的现实中的执行的任务

其优先级反转,导致低优先级比高优先级先执行了

直接就导致任务错乱,逻辑错乱了

程序也就异常了?(待确定此部分的理解是否有误)

1.当年火星探路者号(Mars Pathfinder),就由于,此处所说的,优先级反转,而导致了内部执行逻辑出错的bug:

在1997年7月4号发射后,在开始搜集气象数据之后没几天,系统(无故)重启了。

后来,当然,被相关技术人员找到问题根源,就是,这个优先级反转所导致的,然后修复了此bug。

当年火星探路者号用的软硬件是:

硬件:

CPU:RS6000

总线:VME Bus

各种接口卡/外设:

音频

摄像头

1553总线接口

软件:

OS:(Wind River的)VxWorks

What really happened on Mars ?

What really happened on Mars?

如何解决或避免优先级反转?

既然,相对来说,优先级反转,这样的问题,对于,尤其是嵌入式实时系统中,危害这么大,

那么肯定N年前,就有人找到解决办法了:

优先级反转的解决办法:

禁止所有中断(以保护临近区)

当使用,禁止所有中断,来避免优先级反转时,需要满足下面的条件:

可被抢占的

中断已禁止的

由于没有别的第三种的优先级了,所以,也就不可能发生反转了。

(暂时没有完全理解此种的含义。。。。)

priority inheritance 优先级继承:

对于,占了高优先级任务A的某种所需资源的,低优先任务级C,

当A被阻塞,要去调度,即使存在另一个中优先级任务B,则也可以实现:

由于此时低优先级任务C已有和A同样的优先级了,

则调度器自然会去执行:

比中优先级任务B的优先级高的C了。

然后,等C执行完毕后,就可以继续执行A了。

优先级继承的实际例子


What really happened on Mars ?


中为例来来说明如何应用此,优先级继承:


HOW WAS THE PROBLEM CORRECTED?


VxWorks中的mutex对象,添加一个布尔值的参数,表示:


mutex是否使用优先级继承


当mutex初始化时,该参数是关闭的;


当此参数被打开时,低优先级的任务,就从高优先级的任务中继承了相同的优先级,


当然,背后是对应的检测机制:


可以判定出,当然被阻塞的高优先级的任务,所需要的资源,被当前自己这个低优先级任务所占用了


由此,解决了优先级反转的问题,避免了系统再次发生无故重启。


Priority Celling(最高优先级/优先级天花板)


给临界区,即上述的mutex等公用资源的部分


凡是想要用到,临界区的资源的任务,


要进入临界区之前,都将临界区的优先级赋值给该任务,


使得该任务有了最高的优先级,可以不被打断,而始终继续运行,直到用到资源


这样,就避免了,被高优先级A发现某资源被低优先级的C占用之类的问题了



什么是操作系统的优先级反转?~

如果任务之间由于有共享资源出现了竞争或者死锁,是会严重影响系统安全的。因此uC/OS对共享资源提供了保护机制。一般情况下使用的是信号量方法。创建一个信号量并对他进行初始化,当一个任务需要使用一个共享资源时,他必须先申请得到这个信号量。在这个过程中即使有优先权更高的任务进入了就绪态,因为无法得到信号量,也不能使用该资源。在uC/OS中称为优先级反转。简单地说,就是高优先级任务必须等待低优先级任务的完成。

ucos中可以利用互斥型信号量解决上述问题。互斥型信号量创建函数申请一个比使用某共享资源的所有进程中比最高优先级更高的优先级作为预留。当某个进程调用pend函数申请使用该共享资源,同时该资源已经被占用时,pend函数会判断是否需要提升占用该资源进程的优先级,以使其尽快释放所占用的资源,从而防止优先级反转的发生 。

优先级反转有什么危害
答:简答:优先级反转的危害:由于优先级反转,造成任务调度时,时间的不确定性。时间不确定,破坏了实时系统的实时性 严重时可能导致系统崩溃 由于本身基于优先级设计的任务,每个优先级不同的任务,往往对应着实际的现实中的执行的任务 其优先级反转,导致低优先级比高优先级先执行了 直接就导致任务错乱,逻辑...

什么是操作系统的优先级反转?
答:如果任务之间由于有共享资源出现了竞争或者死锁,是会严重影响系统安全的。因此uC/OS对共享资源提供了保护机制。一般情况下使用的是信号量方法。创建一个信号量并对他进行初始化,当一个任务需要使用一个共享资源时,他必须先申请得到这个信号量。在这个过程中即使有优先权更高的任务进入了就绪态,因为无法...

在嵌入式实时操作中优先级反转,死锁会给系统带来什么后果
答:(3)检测和解除死锁 由于死锁产生的概率总是比较小的,所以在一些相对简单的系统中,为节省预防或避免死锁中所增加的系统开销,系统中允许出现死锁状态。在这种系统中,专门设置了一个检测机构,可以随时检测出死锁的发生,并能确定与死锁有关的进程和资源,然后采用适当的方法解除系统中的死锁状态。常用的...

如何防止优先级反转及其继承 - 如何为远程医疗设备选择合适的实时操作...
答:图4 优先级继承防止优先级反转 确保可用性 对许多系统来说,资源的可用性至关重要。假如某一子系统出现CPU周期匮乏,会导致十分严重的后果。例如,如果心脏监护仪的连接中断可能导致中心监护系统误认为出现报警情况并派出急救人员,或当病人真出现危急状况时,系统却无法发出报警信息。 根据以往经验,解决这...

优先级反转问题在嵌入式系统中是一中严重的问题,必须给与足够重视。请解...
答:所谓优先级翻转问题(priority inversion)即当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,而这个低优先级任务在访问共享资源时可能又被其它一些中等优先级任务抢先,因此造成高优先级任务被许多具有较低优先级任务阻塞,实时性难以得到保证。例如:有优先级为A、B和C三...

劣后级和优先级分别是什么意思
答:由于具有降低优先级的任务长时间占用共享资源,造成申请该资源的优先级最高的进程始终处于等待状态,此时其他比占用资源优先级高但比等待资源进程优先级低的进程将获得处理器的使用权,并先于优先级最高的处于等待状态的进程先结束,称这种现象为优先级反转。3、普通合伙人(General Partner):泛指股权投资...

发动机反转能不能启动?会有什么影响?
答:那么,如果发动机反转,ECU会不会默认点火顺序的调整,来启动发动机呢?试验证明,即使启动机可以人为进行反转,但是发动机在反转的过程中,ECU根本不会进行点火顺序的调整,所以,结果就是点火混乱,无法启动。当然这样也是出于对发动机的保护。柴油机反转危害巨大 柴油机可以反转,并且能够在启动的情况下反转...

如何用互斥信号量解决优先级反转
答:到这里问题就发生了,优先级比较高的a在优先级比较低的b运行的时候无法抢断,可剥夺性内核却剥夺不了,系统故障,在这种故障极大地降低了系统的实时性 以上说的情况就是操作系统的优先级反转 而ucos为了解决这种问题,在互斥信号量中引入了优先级提升的方法,他的基本思想是:让当前获得互斥信号量的任务的优先...

什么是应激?应激有何危害?如何预防?
答:是动物的本能。肉鸡也是一样,在这个范围内生理上不表现异常。但是,如应激过程持续时间过长,应激强度超过耐受限度以上时,则动物的发育、繁殖将会受到影响,严重时对生存都会产生极为恶劣的影响,尤其是肉鸡,对应激最为敏感,应激因素常常带来生产上和经济上的巨大损失。应激的主要危害有:...

vxworks操作系统如何实现实时性
答:虽然当今的实时操作系统已日臻完善,但仍有一些问题存在并干扰着强实时的实现。我们应充分的重视,并通过合理的安排程序减少它们的危害。 ● 优先级反转 这是实时系统中出现得最多的问题。优先级反转是指一个任务等待比它优先级低的任务释放资源而被阻塞,如果这时有中等优先级的就绪任务,阻塞会进一步恶化。它严重影...