【问题标题】:Strong Semaphore Queuing Discipline and Starvation强信号量排队纪律和饥饿
【发布时间】:2011-11-05 16:26:54
【问题描述】:

在 William Stallings 的操作系统一书中,他将强信号量定义为具有 FIFO 排队规则的信号量,而将弱信号量定义为无序的信号量。对于强信号量,肯定还有其他排队规则,比如按优先级?或者这不再是一个强信号量,因为饥饿将成为可能? (Stallings 说强信号量不允许饥饿。)强和弱有序/无序或饥饿可能/不可能之间的主要区别是什么?

【问题讨论】:

    标签: algorithm queue semaphore


    【解决方案1】:

    是的,一种非 FIFO 非饥饿的可能性(在许多可能性中)是以循环方式选择下一个进程。例如,如果顺序是 1、2、3、4,当 1 持有信号量时,4 然后 3 请求它,那么下一个进程是 3。没有进程 P 饿死,因为在 P 的每个请求之后,在 P 的请求被批准之前,每个其他进程最多有一个临界区。

    Google 命中首页中“强信号量”的定义分为“无饥饿”和“先进先出”。哪一个是“正确的”是一个品味问题——鉴于这种混乱(以及在数学写作中普遍过度使用强作为形容词),我可能都不会使用。

    【讨论】:

      【解决方案2】:

      在有关信号量的文献中,我从未见过(据我所知)有人使用 FIFO 或某种形式的排序作为弱/强分类的标准。事实上,无饥饿也并不总是标准。最初的文献(由于Morris('79)Martin and J. R. Burch('85)Udding('86)Friedberg 和 Peterson('87),以及 Haldar 和 Subramanian('88)) 使用了 'P'' 的某些特征V' 操作来定义弱信号量。有趣的是,所引用研究人员的所有定义最终都暗示在信号量较弱的情况下可能存在饥饿。此外,尽管 FIFO 保证了无饥饿,但在我看来,提及术语 FIFO 或某种形式的排序限制了信号量的行为。一种形式的限制可能是,例如,FIFO 排序意味着信号量附加了某种缓冲区,以便跟踪 'P' 上的阻塞进程/线程手术。对于信号量的硬件实现,这个定义可能过于严格。另一种形式的限制可能是,不是考虑所有可能的排序方案具有相同的有界超车 k (即没有进程将被超车超过 k 次),一个将是仅限于将每个方案视为一种不同类型的信号量。因此,我个人的观点是将弱信号量定义为不保证无饥饿(但保证无死锁)的信号量。但是,如果您更深入地研究研究级活动,那么您可以随意使用更多的数学或/和细粒度定义。

      【讨论】:

        【解决方案3】:

        我认为在队列元素上具有预定义优先级的优先级队列不会造成饥饿。如您所见,它只是一个常规队列,但下一个元素具有最高优先级。因此,如果您使用 FIFO 逻辑实现优先级(首先具有最高优先级),就不会出现饥饿。否则会导致饥饿。

        【讨论】:

        • 但它会退化为一个普通的队列,实现稍微复杂一些..
        • 我刚刚发现Wikipedia 说,“当进程具有不同的优先级时,队列可能会按优先级排序,以便首先从队列中取出最高优先级的进程。”但是,问题仍然存在,这与 strongweak 这两个术语有何关系。
        • 这取决于实施.. Starling 对“强”的定义并不是您所说的饥饿。如果我们使用 FIFO 来实现,我们总是确保新项目在最后,所以假设 5 个项目在队列中,我们确信所有项目都将保持平等。但如果是优先队列,它们将有一些优先级编号。 . 其中一些会更重要.. 也许信号量队列的新传入元素总是比队列中的一些元素具有更高的优先级.. 所以旧项目在这种情况下没有机会导致饥饿..
        • 顺便说一句,我的意思是威廉斯托林不是史达琳 :)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-09
        • 1970-01-01
        • 2010-11-12
        • 2012-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多