操作系统概念说
CPU 调度决策可能在以下四种情况下发生:
当进程从运行状态切换到等待状态时(例如,由于 I/O 请求或调用 wait() 来终止子进程)
当进程从运行状态切换到就绪状态时(例如发生中断时)
当进程从等待状态切换到就绪状态时(例如,I/O 完成时)
当进程终止时
对于情况1和情况4,有在日程安排方面没有选择。必须选择一个新进程(如果就绪队列中存在)来执行。有一个 选择但是,对于情况 2 和 3。
当调度仅在情况 1 和 4 下发生时,我们称该调度方案是非抢占式或协作式的。否则就是先发制人。
“调度方面的选择”是什么意思?
为什么没有选择协作调度,而可能有抢占式调度?
我认为无论调度是否是抢占式的,
正在运行的进程总是放弃CPU(所以别无选择),并且
总是需要做出选择,从就绪队列中选择一个进程来运行。
谢谢。
答案1
文中说,当别无选择时,
必须选择一个新进程(如果就绪队列中存在)来执行。
我认为这意味着正在讨论的选择并不直接涉及接下来安排哪个流程,而是涉及是否可以安排正在检查的流程。对于情况 1 和 4,则不能。在情况 2 和 3 中,可以。
这里使用的合作与先发制人的术语对我来说似乎很奇怪;协同调度通常意味着进程自愿让出控制权,但将“被阻塞”和“终止”解释为协同调度在我看来有些牵强。
答案2
在情况 1 和 4 中,进程没有工作要做(在情况 1 中还没有,在情况 4 中没有),因此调度程序无法运行。即没有选择:运行或不运行......它总是不运行。在 2 和 3 的情况下有一个选择,因为调度程序必须决定“我运行这个进程还是运行另一个进程?”但只有抢占式调度程序才会做出这样的选择,协作式调度程序将等待,直到正在运行的进程处于状态 1(即等待 i/o 或让步)或 4(成功终止或因错误而终止)