所以这是问题。在研究流程调度时,我遇到了两个看似矛盾的示例,但我还是无法理解。
例如,如果优先级非抢占式调度算法始终选择具有最高优先级的进程下一个要运行的进程,并且一旦运行该进程只能自愿放弃其CPU时间,则只有其他进程才能运行,才会出现问题。当前正在运行的进程完成。本书提出的解决方案似乎是,如果一个流程的结束和新的高优先级流程的到来同时发生,则新的高优先级流程将被添加到就绪队列中,然后由管理员选择。调度程序接下来要运行。
但是在循环算法的另一个示例中,如果就绪队列中只有一个进程并且该进程当前正在运行,则同时它的量子已耗尽并且新进程表明它已经就绪,那么看来拟议的解决方案是调度将首先完成,因此当前正在运行的进程将继续运行,而新进程将被添加到队列中。
如果有人向我澄清了这一点,我将不胜感激,因为我从其他一些帖子中知道,对于队列中的单个进程,上下文切换不会在循环中发生,但是总的来说,在添加新进程到队列之前进行调度是真的吗? 。
我从您的描述中得到的是:
时间0:
进程1开始使用其时间片,例如5个单位。
时间5:
进程2到达。进程1用尽了其时间片并进行了补充。
循环调度程序通过选择剩余时间的下一个进程来检查就绪队列。在时间0,您的就绪队列如下所示:
P1
在时间5:
P1转到P1-> P2
Tanenbaum在《现代操作系统》中写道:当一个进程用完了它的时间片时,它就在最后排队。因此发生的是,在第一次将P2入队之前,再次将P1入队。这样可以节省从P1到P2再回到P1的附加上下文切换。如果要先运行P2,则可以使用优先级基本循环。