强大的信号量排队纪律和饥饿

时间:2011-11-05 16:26:55

标签: algorithm queue semaphore

在William Stallings的“操作系统”一书中,他将强信号量定义为具有FIFO排队规则的弱信号量,它是无序的。当然还有其他强大信号量的排队规则,例如优先级?或者这不再是一个强大的信号量,因为饥饿会变得可能吗? (Stallings说强大的信号量不允许饥饿。)强弱有序/无序或饥饿可能/不可能的主要区别是什么?

3 个答案:

答案 0 :(得分:3)

是的,一个非FIFO非饥饿的可能性(在许多中)是以循环方式选择下一个进程。例如,如果订单是1,2,3,4,而1是持有信号量,则4然后3请求它,然后下一个进程为3.没有进程P饿死因为,在P的每个请求之后,在P的请求被授予之前,每个其他进程最多只有一个关键部分。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我认为没有带有队列元素预定义优先级的优先级队列的饥饿。正如您所看到的,它只是一个常规队列,除了下一个元素具有最高优先级。因此,如果使用FIFO逻辑(首先具有最高优先级)实现优先级,则不会出现饥饿。否则会导致饥饿。