在 CPU调度中,我们有两种调度,下面来看看它们:
抢占式调度:在这种情况下,调度程序可以在高优先级进程进入就绪状态时抢占低优先级正在运行的进程。当调度来自以下任何一种情况时,它是抢占式调度 :
- 当进程从运行状态切换到就绪状态时(例如,发生中断时)。
- 当进程从等待状态切换到就绪状态时(例如,在 I/ 完成时)。
非抢占式调度:在这种情况下,一旦一个进程进入运行状态,它就不能被抢占,直到它完成它的分配时间。当调度仅在以下情况下发生时,我们说调度方案是非抢占式或协作式的。
- 当进程从运行状态切换到等待状态时(例如,作为 I/O 请求的结果或调用 wait() 以终止子进程)。
- 当一个进程终止时。
下面来看看抢占式调度和非抢占式调度的区别:
编号 | 抢占式调度 | 非抢占式调度 |
---|---|---|
1 | CPU 在一定时间内分配给进程。 | CPU被分配给进程,直到它结束执行或切换到等待状态。 |
2 | 抢占式调度的执行过程在执行过程中被中断。 | 非抢占式调度的执行过程在执行过程中不会中断。 |
3 | 抢占式调度通常将进程从就绪状态切换到运行状态,反之亦然,并维护就绪队列。 | 非抢占式调度不会将进程从运行状态切换到就绪状态。 |
4 | 如果一个高优先级的进程频繁到达就绪队列,那么低优先级的进程就得等待很长时间,它可能要饿死。 | 如果 CPU 分配给突发时间较长的进程,那么突发时间较短的进程可能不得不饿死。 |
5 | 抢占式调度非常灵活,因为关键进程在进入就绪队列时被允许访问 CPU,无论当前正在执行什么进程。 | 非抢占式调度是刚性的,即使关键进程进入就绪队列,运行 CPU 的进程也不会受到干扰。 |
6 | 抢占式调度与成本相关,因为它必须维护共享数据的完整性。 | 非抢占式调度与成本无关。 |
抢占式调度优于非抢占式调度,反之亦然,不能肯定。这取决于调度如何最小化进程的平均等待时间并最大化 CPU 利用率。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/266884.html