抢占式与非抢占式调度之间的区别

2025年4月28日 | 阅读 6 分钟

在本文中,您将学习抢占式非抢占式调度之间的区别。但在讨论区别之前,您需要了解抢占式和非抢占式调度。

什么是抢占式调度?

抢占式调度是一种在进程从运行状态切换到就绪状态或从等待状态切换到就绪状态时可能使用的方法。资源分配给进程一段时间,然后移除。如果资源仍有剩余的 CPU 时间片,则将进程放回就绪队列。进程将保留在就绪队列中,直到它有机会再次执行。

当一个高优先级进程进入就绪队列时,它不必等待正在运行的进程完成其 CPU 时间片。但是,正在运行的进程会在执行过程中被中断,并被放入就绪队列,直到高优先级进程使用资源。结果,每个进程都能在就绪队列中获得一些 CPU 时间。它增加了从运行状态到就绪状态以及反之亦然的进程切换开销,提高了抢占式调度的灵活性。它可以包含也可以不包含 SJF 和优先级调度。

例如

让我们以抢占式调度为例。我们有四个进程:P0、P1、P2P3

过程到达时间CPU 爆发时间(以毫秒为单位)。
P032
P124
P206
P314

Preemptive vs Non-Preemptive Scheduling
  • 首先,进程 P2 在时间 0 到达。因此,CPU 分配给进程 P2
  • 当进程 P2 运行时,进程 P3 在时间 1 到达,而进程 P2 的剩余时间(5 ms)大于进程 P3 所需的时间(4 ms)。因此,CPU 分配给 P3。
  • 当进程 P3 运行时,进程 P1 在时间 2 到达,而进程 P3 的剩余时间(3 ms)小于进程 P14 ms)和 P25 ms)所需的 CPU 时间。因此,P3 继续执行。
  • 当进程 P3 继续执行时,进程 P0 在时间 3 到达。P3 的剩余时间(2 ms)等于 P0 所需的时间(2 ms)。因此,进程 P3 继续执行。
  • 当进程 P3 完成时,CPU 分配给 P0,它的 CPU 爆发时间比其他进程短。
  • 进程 P0 完成后,CPU 分配给进程 P1,然后分配给进程 P2

抢占式调度的优点和缺点

抢占式调度有各种优点和缺点。非抢占式调度的优点和缺点如下:

优点

  1. 它是一种更健壮的方法,因为一个进程不会垄断处理器。
  2. 每个事件都会中断正在进行的任务的执行。
  3. 它提高了平均响应时间。
  4. 在多道程序设计环境中,使用此方法更有益。
  5. 操作系统确保所有正在运行的进程使用相同数量的 CPU。

缺点

  1. 它需要使用有限的计算资源。
  2. 它花费更多时间来暂停正在执行的进程,切换上下文,然后调度新到达的进程。
  3. 如果多个高优先级进程同时到达,低优先级进程将不得不等待更长时间。

什么是不可抢占调度?

非抢占式调度是一种在进程终止或从运行状态切换到等待状态时可能使用的方法。当 CPU 分配给进程时,它会一直保留该进程,直到该进程被终止或达到等待状态。当 CPU 开始执行进程时,必须先完成该进程,然后才能执行其他进程,并且不能在执行过程中间断。

当一个具有长 CPU 爆发时间的非抢占式进程运行时,其他进程将不得不长时间等待,这会增加进程在就绪队列中的平均等待时间。但是,在非抢占式调度下,将进程从就绪队列转移到 CPU 没有开销。调度是严格的,因为执行中的进程即使是为了更高优先级的进程也不会被抢占。

例如

让我们以上面的抢占式调度示例为例,并以非抢占式方式解决。

Preemptive vs Non-Preemptive Scheduling
  • 进程 P20 时刻到达,因此 CPU 分配给进程 P2,并需要 (6 ms) 来执行。
  • 所有进程,P0、P1P3,都在此期间到达就绪队列。但所有进程都将等待,直到进程 P2 完成其 CPU 爆发时间。
  • 之后,在进程 P2 之后到达的进程,即 P3,被分配给 CPU,直到它完成其爆发时间。
  • 当进程 P1 完成其执行后,CPU 被分配给进程 P0

非抢占式调度的优点和缺点

非抢占式调度有各种优点和缺点。非抢占式调度的优点和缺点如下:

优点

  1. 它提供了较低的调度开销。
  2. 它是一种非常简单的方法。
  3. 它使用较少的计算资源。
  4. 它提供了更高的吞吐量。

缺点

  1. 它的进程响应时间较差。
  2. 机器可能由于错误而冻结。

抢占式与非抢占式调度之间的主要区别

Preemptive vs Non-Preemptive Scheduling

在这里,您将了解抢占式和非抢占式调度之间的主要区别。抢占式和非抢占式调度之间的各种区别如下:

  1. 在抢占式调度中,CPU 分配给进程一段时间。相比之下,CPU 分配给进程,直到它被移除并切换到等待状态。
  2. 在抢占式调度中,当高优先级进程频繁出现在就绪队列中时,低优先级进程必须等待很长时间,可能会导致饿死。相比之下,当 CPU 分配给具有长爆发时间的进程时,具有短爆发时间的进程可能会在非抢占式调度中饿死。
  3. 当高优先级进程到达 CPU 时,抢占式调度中正在运行的进程将在执行过程中被暂停。另一方面,非抢占式调度中正在运行的进程不会在执行过程中间断,而是等待直到完成。
  4. 抢占式调度在处理上更灵活。另一方面,非抢占式是严格的。
  5. 抢占式调度非常灵活,因为关键进程可以访问 CPU,因为它们会进入就绪队列,而不管当前哪个进程正在运行。非抢占式调度很困难,因为如果一个重要进程被分配到就绪队列,CPU 进程不会被中断。
  6. 在抢占式调度中,CPU 利用率比非抢占式调度更有效。另一方面,在非抢占式调度中,CPU 利用率不如抢占式调度有效。
  7. 抢占式调度具有成本效益,因为它确保了共享数据的完整性。相比之下,在非抢占式调度的情况下则不是。

抢占式与非抢占式调度的逐项比较

在这里,您将了解抢占式和非抢占式调度的逐项比较。抢占式和非抢占式调度之间的主要区别如下:

抢占式调度非抢占式调度
资源分配给进程的时间较长。一旦资源分配给进程,它们将一直保留,直到进程完成其爆发周期或切换到等待状态。
其进程可能在中途被暂停。当 CPU 开始执行进程时,必须先完成该进程,然后才能执行其他进程,并且不能在执行过程中间断。
当高优先级进程持续进入就绪队列时,低优先级进程可能会饿死。当具有长爆发时间的进程使用 CPU 时,具有较短爆发时间的另一个进程可能会饿死。
它很灵活。它是刚性的。
它是有成本的。它没有成本。
它有与进程调度相关的开销。它没有开销。
它影响操作系统的内核设计。它不影响操作系统内核的设计。
其 CPU 利用率非常高。其 CPU 利用率非常低。
示例:轮转调度和最短剩余时间优先FCFS 和 SJF 是非抢占式调度的示例。

结论

抢占式调度优于非抢占式调度,反之亦然,这并非绝对。这完全取决于调度算法如何减少平均进程等待时间同时提高 CPU 利用率。