什么是循环调度?
在多任务操作系统环境中,有时我们会听到术语"循环调度"。它指的是什么?
还有什么其他类型的调度?
解决方案
回答
循环调度
如果我们是一个由100位客人组成的聚会的主持人,那么循环调度将意味着我们为每位客人花费1分钟(固定的时间)。我们一个接一个地拜访每个来宾,而100分钟之后,我们本来会和每个来宾呆一分钟。有关Wikipedia的更多信息。
还有许多其他类型的调度,例如基于优先级的调度(即,最重要的人优先),先到先服务,最早的截止日期优先(即,最早离开的人)等。我们可以通过谷歌搜索开始用于调度算法或者在Wikipedia上查看调度
回答
轮询是一种简单的调度算法,其中时间在各个工作之间平均分配,没有优先级。
例如,如果我们有5个进程在运行,则每个进程将被允许以1/5的时间单位运行,然后再允许另一个进程运行。轮询通常很容易在OS中实现。
回答
这里的答案甚至是Wikipedia文章都将轮询调度描述为固有地包括周期性时间片。尽管这很常见,但我认为轮转调度和时间分段并非完全相同。当然,为了使时间划分有意义,在轮流执行每个任务时暗含了循环调度,但是我们可以进行循环调度而无需进行时间划分。也就是说,可以允许轮循循环中具有相同优先级的每个任务运行,直到它们达到资源块条件,然后才轮换运行下一个任务。换句话说,当存在同等优先级的任务时,重新安排时间点不是抢先的时间。
上述想法实际上是在Wind River的VxWorks内核中具体实现的。在它们的优先级方案中,每个优先级的任务都是循环运行的,但是如果没有在内核中专门启用该功能,就不会进行时间片。这种灵活性的原因是避免了在已知的时间范围内对已知会在块中运行的任务进行时间片划分的开销。
因此,虽然基于时间片的调度意味着循环调度,但是循环调度不需要等时的基于时间的调度。
回答
在实践中,时间片是任何循环调度系统所固有的,即AFAIK。
我不同意InSciTek Jeff的暗示,即以下是循环调度:
That is, each task at the same priority in the round-robin rotation can be allowed to run until they reach a resource blocking condition before yeilding to the next task in the rotation.
我不知道如何将其视为轮循机制。这实际上是抢先式调度。但是,可能有一种调度算法同时具有循环调度和抢占式调度的元素,如果同时启用了循环调度和抢占(默认情况下禁用了循环调度),则VxWorks会执行此算法。启用循环调度的方法是在kernelTimeSlice中提供非零值。
我同意以下说法:
Therefore, while timeslicing based scheduling implies round-robin scheduling, round-robin scheduling does not require equal time based timeslicing.
我们是对的,它不需要相等的时间。抢先可以使它变得糟透了。实际上,在VxWorks中,如果在循环调度期间抢占了一个任务,则当该任务再次获得控制权时,它将在分配的剩余时间内执行。
直接针对InSciTek Jeff进行编辑(我没有评论权限)
是的,我指的是任务锁定/中断禁用,尽管我显然表示得不太好。我们以第二个评论优先于我(ha!)。我希望辩论一个更显着的观点,即我们认为轮循调度可以不进行时间分割而存在。还是我们只是指相等的基于时间的时间片?我不同意前者,但同意后者。我渴望学习。谢谢。
针对Jeff的Edit2:
Round-robin can exist without timeslicing. That is exactly what happens in VxWorks when kernelTimeSlice is disabled (zero).
我不同意这个说法。请参阅本文档第2.2.3节的"循环调度"标题。
Round-robin scheduling uses time slicing to achieve fair allocation of the CPU to all tasks with the same priority. Each task, in a group of tasks with the same priority, executes for a defined interval or time slice. Round-robin scheduling is enabled by calling kernelTimeSlice( ), which takes a parameter for a time slice, or interval. [...] If round-robin scheduling is enabled, and preemption is enabled for the executing task, the system tick handler increments the task's time-slice count.
时间片是循环调度中固有的。否则,我们将依赖于一项任务来放弃CPU控制,而循环调度旨在解决该问题。
回答
实际上,我们对抢先式调度和轮询机制感到困惑。 Infact RR是抢先式调度的一部分。
回答
一个观点。似乎我们将两种机制交织在一起。假设仅OP的原始断言"在多任务操作系统环境中",则
1循环调度程序始终调度循环队列中的下一个项目。
2调度程序如何重新获得控制权以执行调度是独立且无关的。
我不同意2的最流行方法是时间分片/让资源等待资源,但是如前所述,还有其他方法。如果我没记错的话,第一台Mac没有使用时间片,那么他们使用自愿的产量/产量等待资源(20岁以上的大脑细胞有时可能是错误的;)。