循环时间调度中的时间片

时间:2012-11-29 03:07:50

标签: c operating-system scheduling job-scheduling round-robin

如果循环调度程序的时间片非常大(比如太大),我应该在操作系统中获得什么样的性能影响?

我唯一的想法是,需要大量时间的流程会受益,但大多数流程会占用少量时间,因此会导致延迟完成所有较小的流程?

示例:时间片为50,过程P1 = 400,P2 = 10,P3 = 150,P4 = 20,P5 = 10,P6 = 10

这是我最好的猜测我想知道,如果时间片太小或太大,你们有什么可以分享的。

2 个答案:

答案 0 :(得分:6)

循环问题是任务不相等。

对于CPU绑定任务;如果你有一项非常重要的任务和数千项不重要的任务,那么所有这些不重要的任务都会削弱重要任务的执行力。对于这种情况,切片的时间长度并不重要。

对于IO绑定任务,循环导致潜在延迟。如果一个重要的任务解除阻塞(例如,在调用“sleep()”之后唤醒,接收文件IO等待等等)那么它可能必须等待数千个不重要的任务在重要任务之前通过他们的时间片工作有机会做任何事情。减少时间片长度将减少重要任务开始执行有用的操作所需的时间,但也会减少重要任务执行某些操作所需的时间。

注意:您可能会通过将取消阻止的任务转到列表的头部来“修复”此问题。在这种情况下,一项重要的任务可能会永远缺乏,因为不重要的任务会保持沉睡和醒来。

基本上,循环法是一堆“无用”的东西,除非用完全不同的调度算法替换它,否则你做什么都无关紧要,这种调度算法至少要尊重不同任务的重要性/优先级。 / p>

一个过于简单的例子;您可以拥有3个不同的任务优先级,其中操作系统只能运行其可以执行的最高优先级任务(包括确保更高优先级的任务立即抢占优先级较低的任务),并且循环用于具有相同优先级的任务。在这种情况下,您可以为不同的优先级设置不同的时间片长度(例如,高优先级任务仅获得1 ms,中优先级任务获得10 ms,低优先级任务获得125 ms)。

对于“不太简单”的例子;你可以有几个完全不同的调度策略(例如一个用于实时任务,一个用于正常任务,一个用于后台/空闲任务),它们都使用不同的方法(例如,最早的截止日期,可变时间片等);每个调度策略都有256个任务优先级。

答案 1 :(得分:0)

从时间切片的角度来看,有两种极端情况会降低性能。如果时间片是:

  1. 太大:导致小进程等待很长时间,因为如果时间片变小,它们可以提前完成。而且,这对于需要较小但频繁的CPU时间的交互式过程是不利的。
  2. 太小:导致频繁的上下文切换,这相当于显着的开销。
  3. 从历史上看,操作系统开发人员一直在努力在这两个极端之间取得平衡,并且有各种基于优先级的算法可以使用循环法来获得更好的性能。