【问题标题】:In priority inversion, why can't the high priority process preempt the medium priority process?在优先级倒置中,为什么高优先级进程不能抢占中优先级进程?
【发布时间】:2017-02-17 10:20:13
【问题描述】:

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

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

考虑两个任务 H 和 L,分别具有高和低优先级, 其中任何一个都可以获得共享资源 R 的独占使用权。如果 H 在 L 获得 R 后尝试获得 R,然后 H 被阻塞 直到 L 放弃资源。共享专属资源 (在这种情况下为 R)在设计良好的系统中通常涉及 L 立即放弃 R,以便 H(更高优先级的任务)不会 长时间处于阻塞状态。尽管设计不错, 然而,中等优先级的第三个任务 M (p(L)

【问题讨论】:

    标签: process operating-system semaphore preemption


    【解决方案1】:

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

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

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

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

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

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

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

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

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

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

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

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

    阅读: What is priority inversion?

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

    【讨论】:

    • 您分享的链接很有帮助,因为我的确切问题在其中一个 cmets 中。其他人也有和我一样的困惑。
    猜你喜欢
    • 2014-11-26
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 2013-02-13
    • 2014-04-25
    • 1970-01-01
    相关资源
    最近更新 更多