14

在多任务操作系统上下文中,有时您会听到术语循环调度。它指的是什么?
还有什么其他类型的调度?

4

7 回答 7

23

循环调度

如果您是 100 位客人的聚会的主人,循环调度意味着您为每位客人花费 1 分钟(固定金额)。您一个接一个地检查每位客人,100 分钟后,您将与每位客人共度 1 分钟。更多关于维基百科

还有许多其他类型的调度,例如基于优先级(即最重要的人优先)、先到先服务、最早截止日期优先(即最早离开的人)等。您可以通过谷歌搜索开始用于调度算法或在 Wikipedia 上查看调度

于 2008-09-17T02:47:44.010 回答
7

时间片是实践中任何循环调度系统所固有的,AFAIK。

我不同意 InSciTek Jeff 的暗示,即以下循环调度:

也就是说,轮询轮换中具有相同优先级的每个任务都可以被允许运行,直到它们达到资源阻塞条件,然后才让步给轮换中的下一个任务。

我不明白这怎么能被认为是循环。这实际上是抢占式调度。但是,可以有一个调度算法,它同时包含循环调度和抢占调度的元素,如果同时启用循环调度和抢占(默认禁用循环),VxWorks 就会这样做。启用循环调度的方法是在kernelTimeSlice中提供一个非零值。

我同意这个说法:

因此,虽然基于时间片的调度意味着轮询调度,但轮询调度不需要基于相等时间的时间片。

你是对的,它不需要相同的时间。抢占可以解决这个问题。实际上在 VxWorks 中,如果在循环调度期间任务被抢占,当任务再次获得控制权时,它将在分配的剩余时间内执行。

针对 InSciTek Jeff 的编辑(我没有评论权限)是的,我指的是任务锁定/中断禁用,尽管我显然没有很好地表达。你的第二条评论抢先了我(哈!)。我希望讨论更重要的一点,即您相信循环调度可以在没有时间切片的情况下存在。还是您只是指基于相等时间的时间切片?我不同意前者,但同意后者。我渴望学习。谢谢。

Edit2 针对 Jeff:

轮询可以在没有时间片的情况下存在。这正是禁用 kernelTimeSlice(零)时 VxWorks 中发生的情况。

我不同意这种说法。请参阅本文档第 2.2.3 节,其标题为 Round-Robin Scheduling。

循环调度使用时间片来实现 CPU 公平分配给具有相同优先级的所有任务。在一组具有相同优先级的任务中,每个任务在定义的时间间隔或时间片内执行。通过调用 kernelTimeSlice( ) 启用循环调度,它接受时间片或间隔的参数。[...] 如果启用了循环调度,并且为正在执行的任务启用了抢占,则系统滴答处理程序会增加任务的时间片计数。

时间片是循环调度中固有的。否则,您将依靠任务放弃 CPU 控制权,而循环调度旨在解决此问题。

于 2008-09-17T15:03:50.667 回答
3

这里的答案甚至 Wikipedia 文章都描述了循环调度,以固有地包括周期性时间片。虽然这很常见,但我认为循环调度和时间片并不完全相同。当然,为了使时间片有意义,轮询调度在轮换到每个任务时是隐含的,但是您可以在没有时间片的情况下进行循环调度。也就是说,轮询轮换中具有相同优先级的每个任务都可以被允许运行,直到它们达到资源块条件,然后才让轮换中的下一个任务运行。换句话说,当存在相同优先级的任务时,重新调度点不是时间抢先的。

上面的想法实际上是专门在风河的VxWorks内核的情况下实现的。在他们的优先级方案中,每个优先级的任务循环运行,但如果没有在内核中专门启用该功能,则不会进行时间切片。这种灵活性的原因是为了避免时间片任务的开销,这些任务已知会在有界的时间内运行到一个块中。

因此,虽然基于时间片的调度意味着轮询调度,但轮询调度不需要基于相等时间的时间片。

于 2008-09-17T13:40:38.403 回答
1

一个观点。似乎我们正在将两种机制交织在一起。假设仅 OP 的原始断言“在多任务操作系统上下文中”然后

1 - 循环调度程序总是调度循环队列中的下一个项目。

2 - 调度程序如何重新获得控制以执行调度是独立且不相关的。

I don't disagree that the most prevalent method for 2 is time-slicing / yield waiting for resource, but as has been noted there are others. If I am not mistaken the first Mac's didn't utilize time-slicing, they used voluntary yield / yield waiting for resource (20+ year old brain cells can be wrong sometimes;).

于 2010-05-23T12:35:05.390 回答
0

轮询是一种简单的调度算法,其中时间在没有优先级的作业之间平均分配。

例如 - 如果您有 5 个进程正在运行 - 每个进程将被允许运行 1/5 单位时间,然后才允许另一个进程运行。循环法通常很容易在操作系统中实现。

于 2008-09-17T02:48:13.277 回答
0

实际上,您对抢占式调度和循环法感到困惑。Infact RR 是抢占式调度的一部分。

于 2010-04-09T07:12:21.097 回答
0

循环调度基于时间共享,也称为量子(CPU 一次性给予任何进程的最大时间)。队列中有多个进程(需要不同的时间来完成,也就是突发时间),CPU 必须全部处理它们,因此它不断在进程之间切换,以根据量子值为每个进程提供相等的时间。这种类型的调度称为循环调度。查看这个简单的视频以轻松了解循环调度:https ://www.youtube.com/watch?v=9hw-_qJ55K4

于 2017-02-16T14:41:35.990 回答