一、优先级翻转
在使用二值信号量的时候会遇到很常见的一个问题——优先级翻转,优先级翻转在可剥夺内核中是非常常见的,在实时系统中不允许出现这种现象,这样会破坏任务的预期顺序,可能会导致严重的后果。
高优先级任务被低优先级任务阻塞,导致高优先级任务迟迟得不到调度。但其他中等优先级的任务却能抢到CPU资源。-- 从现象上来看,好像是中优先级的任务比高优先级任务具有更高的优先权。
二、优先级翻转流程图
- (1)任务H和任务M处于挂起状态,等待某一事件的发生,任务L正在运行。
- (2)某一时刻任务L想要访问共享资源,在此之前它必须先获得对应该资源的信号量。
- (3)任务L获得信号量并开始使用该共享资源。
- (4)由于任务H优先级高,它等待的事件发生后便剥夺了任务L的CPU使用权。
- (5)任务H开始运行。
- (6)任务H运行过程中也要使用任务L正在使用着的资源,由于该资源的信号量还被任务L占用着,任务H只能进入挂起状态,等待任务L释放该信号量。
- (7)任务L继续运行。
- (8)由于任务M的优先级高于任务L,当任务M等待的事件发生后,任务M剥夺了任务L的CPU使用权。
- (9)任务M处理该处理的事。
- (10)任务M执行完毕后,将CPU使用权归还给任务L。
- (11)任务L继续运行。
- (12)最终任务L完成所有的工作并释放了信号量,到此为止,由于实时内核知道有个高优先级的任务在等待这个信号量,故内核做任务切换。
- (13)任务H得到该信号量并接着运行。在这种情况下,任务H的优先级实际上降到了任务L的优先级水平。因为任务H要一直等待直到任务L释放其占用的那个共享资源。由于任务M剥夺了任务L的CPU使用权,使得任务H的情况更加恶化,这样就相当于任务M的优先级高于任务H,导致优先级翻转。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)