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