HPT -> 最高优先级任务。
MPT -> 中等优先级任务
LPT -> 低优先级任务
嘿,朋友我从许多网站(例如 http://www.embeddedheaven.com/priority-inversion-2.htm)阅读了优先级倒置。但我想知道,为什么HPT不能抢占LPT?如果您将阅读第 3.3 节无界反转,它说 LPT 是否已经获得了资源,同时如果 HPT 已准备就绪但由于 LPT 而被阻止。但是,如果 MPT 准备就绪,那么它会抢占 LPT 并自行执行。然后LPT必须等到MPT完成。MPT 完成后,LPT 将恢复。一旦LPT完成,HPT就会开始。所以我的问题是为什么HPT不能抢占LPT或MPT?
维基百科的解释可能比你提供的链接更容易理解:https://en.wikipedia.org/wiki/Priority_inversion
用稍微不同的话回答你的问题,大致按时间顺序发生的事情是
- LPT收购R
- MPT 变得可运行,从而抢占 LPT
- HPT 变得可运行,从而抢占 MPT
- HPT 尝试获取 R 和块
- 调度程序选择可运行的最高优先级任务,即 MPT。
- MPT 无界运行(可能"永远"),从而阻止 LPT 运行和释放 R,从而阻止 HPT 运行。
如果优先级较低的任务还拥有一些独占资源,则抢占(以便任务获得 CPU 时间)是不够的。然后,优先级较高的任务将尝试获取资源(例如,通过锁定互斥锁),这将阻止它,直到低优先级任务完成对资源的处理。
因此,较高 prio 的任务最终被阻止(未运行),而较低 prio 的任务将运行。
优先级倒置是一种无限期推迟具有共享资源的先发制人的高管的形式。
当高优先级任务请求访问当前分配给低优先级任务的共享资源时,会发生优先级倒置。在低优先级任务释放资源之前,必须阻止高优先级任务。
当一个或多个中优先级任务阻止低优先级任务执行时,此问题变得复杂。由于低优先级任务未执行,因此它无法完成与资源的交互并释放该资源。因此,低优先级任务有效地阻止了高优先级任务的执行。