2012-05-23 32 views
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?

+2

根据你链接到的文章,我并不感到惊讶,你无法理解它。 –

回答

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运行。
+0

我有一个问题。为什么HPT无法运行(从第5点开始)? –

+0

@RasmiRanjanNayak:因为它被阻止等待R被释放。 – janneb

1

预先制止(使这项工作变得CPU时间)是不够的,如果低优先级任务拥有一些独家资源。然后,优先级较高的任务将尝试获取资源(例如通过锁定一个互斥锁),这会阻止资源,直到资源完成较低优先级的任务。

因此,在较低prio任务运行时,较高prio任务结束阻塞(不运行)。

+0

可否请详细说明一点.. –

+3

@unwind,这不是优先级倒置问题的核心,如果它只是等待LPT发布它不会是一个问题,它会成为一个问题,因为许多MPT抢占了LPT并继续,因为他们不需要上述资源。这可能会导致最低优先级的资源在数小时内阻止HPT。火星漫游者几乎失去了这个能力,减去了从范围和引导负载进行调试的强大能力。 – Kortuk

1

优先倒置是无限期延迟共享资源的先发制人的形式。

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

当低优先级任务被阻止由一个或多个中等优先级任务执行时,此问题变得复杂。由于低优先级任务未执行,因此无法完成与资源的交互并释放该资源。因此,高优先级任务被有效阻止由较低优先级任务执行。