0

Silberschatz/Galvin(第 9 版)的《操作系统原理》一书以及 Wikipedia 上关于优先级反转的文章都说,在优先级反转中,高优先级进程不能使用低优先级进程持有的资源作为中等优先级进程抢占低优先级进程并获取该资源。但如果是这样(即,如果允许基于优先级的抢占),为什么高优先级进程不能抢占低优先级进程本身并获取资源?

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

考虑两个任务 H 和 L,分别具有高和低优先级,其中任何一个都可以获得共享资源 R 的独占使用权。如果 H 在 L 获得 R 之后尝试获得 R,则 H 将被阻塞,直到 L 放弃资源。在一个设计良好的系统中共享一个独占使用的资源(在这种情况下为 R)通常涉及 L 迅速放弃 R,以便 H(更高优先级的任务)不会在过多的时间段内保持阻塞。然而,尽管设计良好,但有可能第三个中等优先级的任务 M (p(L) < p(M) < p(H),其中 p(x) 表示任务 (x) 的优先级)在L 对 R 的使用。此时,优先级高于 L 的 M 抢占 L,导致 L 无法及时放弃 R,进而导致 H(最高优先级的进程)无法运行。

4

1 回答 1

1

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

假设有 3 个不同优先级的进程。低、中和高。(就其优先级而言,低、中和高)。

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

最低优先级进程正在运行,Med 和 High 被阻止并超出其临界区。

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

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

High 然后尝试进入关键资源,但由于 Low 在那里而被阻止。

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

直到 Low 放弃资源,High 才能运行。低无法运行,直到 Med 阻塞或结束。任务的优先级已倒置;尽管它具有最高优先级,但它位于执行链的底部。

要“解决”优先级反转,必须将 Low 的优先级提高到至少与 High 一样高。

底线:Med 导致 High 等待。 临界区由同步工具保护,高优先级进程不会抢占共享资源,直到低优先级进程主动放弃。

但是低优先级进程需要 Med 进程当前正在使用的资源。=> 高优先级进程必须等待。

阅读本文: 什么是优先级反转?

感谢在其中一个评论中编写示例的人。

于 2016-10-08T23:04:20.863 回答