时间片轮转调度中的时间片分配问题

7
如果在轮询调度程序中设置了非常大的时间片(比如说过大),那么操作系统会受到什么样的性能影响呢?
我的想法是,需要大量时间的进程会受益,但大多数进程只使用很少的时间,因此这会导致完成所有较小进程的延迟?
例如:50个时间片和进程P1 = 400,P2 = 10,P3 = 150,P4 = 20,P5 = 10,P6 = 10。
这是我最好的猜测,我想知道是否有任何东西可以分享关于时间片太小或太大的情况。
2个回答

8
轮流调度算法的问题在于任务并不相等。
对于CPU绑定的任务,如果你有一个非常重要的任务和成千上万个不重要的任务,那么所有这些不重要的任务都会瘫痪重要任务的性能。对于这种情况,时间片有多大并不重要。
对于IO绑定的任务,轮流调度会导致严重的延迟。如果一个重要的任务解除阻塞(例如在调用“sleep()”后唤醒,接收它正在等待的文件IO等),则可能需要等待成千上万个不重要的任务完成它们的时间片,然后重要任务才有机会做任何事情。缩短时间片长度将减少重要任务开始执行有用工作之前所需的时间,但也会减少重要任务可以执行有用工作的时间。
注意:您可能会尝试通过使解除阻塞的任务排在列表的最前面来“修复”此问题。在这种情况下,由于不重要的任务一直睡眠和唤醒,重要任务可能会被饿死。
基本上,轮流调度是一堆“无用”的东西,在你使用完全不同的调度算法之前,无论你做什么都没有意义,而这种算法至少应该尊重不同任务的重要性/优先级。
举个过于简单的例子;您可以有3个不同的任务优先级,其中操作系统只运行它能够运行的最高优先级任务(包括确保较高优先级任务立即抢占较低优先级任务),而轮流调度用于相同优先级的任务。在这种情况下,您可以为不同的优先级设置不同的时间片长度(例如,高优先级任务只有1毫秒,中等优先级任务有10毫秒,低优先级任务有125毫秒)。
对于一个“不那么过度简化”的例子;您可以有几个完全不同的调度策略(例如,一个用于实时任务,一个用于正常任务,一个用于后台/空闲任务),它们都使用不同的方法(例如,最早截止时间优先,可变时间片等),其中每个调度策略有256个任务优先级。

1
从时间片的角度来看,有两种极端情况会降低性能。如果时间片过大:会导致小进程等待很长时间,而如果时间片更小,它们本可以更早地完成。此外,这对于需要较小但频繁的CPU时间的交互式进程也不利。如果时间片太小:会导致频繁的上下文切换,从而造成重大开销。历史上,操作系统开发人员一直在努力在这两个极端之间取得平衡,并且有各种基于优先级的算法与轮转法相结合以获得更好的性能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接