在优先级倒置中,为什么高优先级进程不能抢占中优先级进程?

时间:2016-10-08 14:54:10

标签: process operating-system semaphore preemption

Silberschatz / Galvin(第9版)的“操作系统原理”一书,以及关于优先级倒置的维基百科上的文章都说,在优先级倒置中,高优先级的流程不能使用低优先级的资源。作为中优先级进程的优先级进程优先于低优先级进程并获取该资源。但如果是这样(,如果允许基于优先级的抢占)为什么高优先级进程不能抢占优先级较低的进程本身并获取资源?

以下是本书以及维基百科文章中提到的内容:

  

考虑两个任务H和L,分别为高优先级和低优先级,   其中任何一个都可以获得共享资源R的独占使用。如果是H.   在L获得R之后尝试获得R,然后H被阻挡   直到L放弃资源。共享专用资源   (在这种情况下为R)在精心设计的系统中通常涉及L.   及时放弃R,以便H(更高优先级的任务)不会   过度停留一段时间。尽管设计很好,   然而,中等优先级的第三任务M(p(L)<1)可能是有可能的。   p(M)&lt; p(H),其中p(x)表示任务(x)的优先级变为   在使用R的过程中可以运行。此时,M更高   优先于L,抢占L,导致L无法放弃R.   及时,反过来导致H-最优先的过程 - 无法   跑步。这称为优先级倒置,其中优先级较高的任务   被优先级较低的人抢占。

1 个答案:

答案 0 :(得分:1)

这是一个更好的例子,可以帮助您理解。 我将在最后解释并回答你的问题。

让3个不同优先级的流程。 低,中,高。 (低,中,高优先)。

让低和高进程在不同时间访问相同的关键资源。

最低优先级进程正在运行,Med和High被阻止并超出其关键部分。

Low进入临界区并获取High所需的资源。

高解除阻塞,因为它是系统中最高优先级的任务,所以它会运行。

高然后尝试输入关键资源,但阻止为低位。

Med取消阻止,因为它现在是系统中最高优先级的任务,所以它会运行。

高,直到低放弃资源才能运行。在Med阻止或结束之前,低值无法运行。任务的优先级已被颠倒;虽然它具有最高优先级,但它位于执行链的底部。

To&#34;解决&#34;优先级倒置时,Low的优先级必须提高到至少与High一样高。

底线: Med引起高等待。 关键部分受同步工具保护,高优先级进程不会抢占共享资源,直到低优先级进程自愿放弃。

但是低优先级流程需要Med流程当前使用的资源。 =&GT;高优先级流程必须等待。

阅读本文: What is priority inversion?

相信在其中一条评论中写下这个例子的人。