1

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?

4

3 回答 3

7

维基百科的解释可能比您提供的链接更容易理解:https ://en.wikipedia.org/wiki/Priority_inversion

用稍微不同的话回答你的问题,大致按时间顺序发生的是

  1. LPT获得R
  2. MPT 变得可运行,从而抢占 LPT
  3. HPT 变得可运行,从而抢占 MPT
  4. HPT 尝试获取 R 和块
  5. 调度程序选择可运行的最高优先级任务,即 MPT。
  6. MPT 无限运行(可能“永远”),从而阻止 LPT 运行并释放 R,从而阻止 HPT 运行。
于 2012-05-23T10:40:26.680 回答
1

如果较低优先级的任务拥有一些独占资源,那么抢占(以便任务获得 CPU 时间)是不够的。然后,高优先级任务将尝试获取资源(例如,通过锁定互斥锁),这将阻塞它,直到低优先级任务完成资源。

因此,较高优先级的任务最终被阻塞(未运行),而较低优先级的任务开始运行。

于 2012-05-23T09:42:55.310 回答
1

优先级倒置是一种无限期推迟具有共享资源的优先执行官的形式。

当高优先级任务请求访问当前分配给低优先级任务的共享资源时,就会发生优先级反转。高优先级任务必须被阻塞,直到低优先级任务释放资源。

当一个或多个中等优先级任务阻止执行低优先级任务时,这个问题变得复杂。因为低优先级任务没有执行,它不能完成与资源的交互并释放该资源。因此,有效地防止了高优先级任务被低优先级任务执行。

于 2012-06-14T06:17:26.383 回答