2

所以这就是问题所在。在研究进程调度时,我遇到了两个看似矛盾的例子,我无法理解。

如果例如在优先级非抢占式调度算法中总是选择具有最高优先级的进程下一个运行并且一旦运行,进程只能自愿放弃其CPU时间,即没有其他进程可以运行,直到当前运行的进程完成。看来这本书提出的解决方案是,如果一个进程的结束和新的高优先级进程的到来同时发生,那么新的高优先级进程将被加入到就绪队列中,然后由接下来要运行的调度程序。

但是在循环算法的另一个例子中,如果就绪队列中只有一个进程并且它当前正在运行,如果同时它的时间片已经过去并且新进程说它准备好了,那么建议的解决方案似乎是调度将首先完成,因此当前正在运行的进程将继续运行,而新进程将被添加到队列中。

如果有人向我澄清这一点,我将不胜感激,因为我从其他一些帖子中知道,对于队列中的单个进程,上下文切换不会在循环中发生,但总的来说,调度是在将新进程添加到队列之前完成的.

4

1 回答 1

2

我从你的描述中得到的是:

时间 0:

进程 1 开始使用它的时间片,例如 5 个单位。

时间 5:

过程 2 到达。进程 1 用完它的时间片并得到补充。

循环调度程序通过选择剩余时间的下一个进程来检查就绪队列。在时间 0,您的就绪队列如下所示:

P1

在时间 5:

P1 转到 P1 -> P2

Tanenbaum 在现代操作系统中写道:当一个进程用完它的时间片时,它会在最后排队。所以发生的情况是,P1 在 P2 第一次入队之前再次入队。这节省了从 P1 到 P2 并返回到 P1 的额外上下文切换。如果要先运行 P2,则可以使用优先级基础循环。

于 2013-12-05T09:48:24.987 回答