2011-10-07 287 views
1

在阅读上的优先级队列的话题Data Structures And Algorithms我碰到下面的段落来了......优先级队列

一种可能的方式有利于短流程尚未锁定长的人 是给进程Pi优先100 t(used)-t(init)其中t(used) 是过程所用的时间,t(init)是 过程启动的时间,从某个time 0开始测量。请注意,100是 神奇的数字,因为它是选择比最大 数的过程,我们期待一次激活稍大。读者可能会注意到,如果我们总是选择具有最小优先级 号码的流程,并且混合中没有太多的短流程,那么在 长期运行的流程不会很快完成,将会收到1%的 处理器的时间。

任何人都可以解释的过程是怎样占用1%?如果你能以数学方式推导出结果,那将是一件好事。

回答

1

当然,所以最初曾经进程有一个负的优先级值。不管它是什么,只是它是负面的,并且基于当前时间,但是这是表示的。为了简单起见,我们假设它只是一个整数值。

过程A开始为0的优先级(假设我们在t = 0)。它执行的,说10个时间单位,但还没有完成,因此它需要排队在未来的某个时刻,继续处理。因此,优先级将基于公式

priority = priority + 100*(endtime - starttime) 

priorityA = 0 + 100*(10-0) 
priorityA = 1000 

过程B的初始优先级在t = 5时初始化,因此它是-5。这是队列中两个优先级中最低的,所以它也会占用一些时间。假设它也运行10个时间单位。完成后,B的优先级为:

priorityB = -5 + 100*(20-10) 
priorityB = 995 

所以它会重新排队。我们假设它再次运行10个单位。在它的时间片之后,它的新优先级将是:

priorityB = 995 + 100*(30-20) 
priorityB = 1995 

这样就会在优先级队列中A之后重新定位B. A然后运行,但这次只能运行5个时间单位。这是新的优先事项是:

priorityA = 1000 + 100*(35-30) 
priorityA = 1500 

和处理将再次在队列的顶部,并得到重视。假设现在再次运行5个时间单位,它的新任务是:

priorityA = 1500 + 100(40-35) 
priorityA = 2000 

进程B后,将它定位并因此B会得到一些处理器时间。假设这次使用5个时间单位。

priorityB = 1995 + 100(45-40) 
priorityB = 2495 

现在它又轮到了。看看这两个过程如何有效地获得每个处理器50%的关注度?如果我们添加第三个长时间运行的过程(像A和B这样的“长时间运行”是“长时间运行”,因为它们没有运行10个单位,然后完成,而是重新排序),这些过程由于每次运行并且没有完成时,每个处理器的时间可能会分别占处理器时间的大约33%,因此根据运行时间调整其优先级。在这种情况下,新进程始终首先运行,因为它们的优先级值为负,并且实际上最终会以较高的(较低的数值)优先级 一段时间。但是,这不会永远持续下去 - 新流程将开始获得越来越大的优先价值。

但是,由于我们已经基于本书示例的假设,在任何时候都有大约100个进程在等待一些处理时间,并且假设没有太多短时间运行的进程,那里通常会有大约100个进程争夺处理器注意力,所以每个进程都会得到相同的时间量,并且很快它们的相对数值优先级值将全部聚集在一起(这意味着与具有最高优先级的进程在数值上没有太大差别和优先级最低的那个),所以在“顶级”进程运行之后,它将获得足够的优先级以将其推到底部(或接近底部)。冲洗和重复,你基本上会得到一个循环的事情,假设他们都使用大约相同的时间每个周围。在任何时候都有大约100个,所以再次假设存在少量短时间运行的进程,每个进程都会获得处理器注意力的1/100。