抢占式和非抢占式调度

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

  • 在抢占式调度中,CPU 会在特定时间段内分配给进程,而非抢占式调度中,CPU 会分配给进程直到其终止。
  • 在抢占式调度中,任务根据优先级进行切换,而在非抢占式调度中,不会发生切换。
  • 抢占式算法有将进程从就绪态切换到运行态的开销,而非抢占式调度则没有这种切换的开销。
  • 抢占式调度是灵活的,而非抢占式调度是严格的。
抢占式与非抢占式调度
抢占式与非抢占式调度

什么是抢占式调度?

抢占式调度是一种调度方法,其中任务大多按优先级分配。有时,在运行另一个优先级较低的任务之前运行优先级较高的任务很重要,即使优先级较低的任务仍在运行。

此时,较低优先级的任务将保留一段时间,并在较高优先级的任务完成执行时恢复。

什么是非抢占式调度?

在这种调度方法中,CPU 已分配给特定进程。保持 CPU 繁忙的进程将通过切换上下文或终止来释放 CPU。

它是唯一一种可以用于各种硬件平台的方法。因为它不需要像抢占式调度那样的专用硬件(例如计时器)。

当进程自愿进入等待状态或终止时,就会发生非抢占式调度。

抢占式与非抢占式调度:比较表

以下是抢占式和非抢占式调度的正面比较。操作系统中抢占式和非抢占式调度的主要区别如下:

抢先调度 非抢占式调度
可以在任何当前进程执行过程中抢占一个处理器来执行不同的进程。 一旦处理器开始执行,就必须先完成当前任务,然后才能执行其他任务。中途不能暂停。
与非抢占式调度相比,CPU 利用率更高。 与抢占式调度相比,CPU 利用率较低。
抢占式调度的等待和响应时间较少。 非抢占式调度方法的等待和响应时间较高。
抢占式调度是优先化的,最高优先级的进程是当前正在使用的进程。 当任何进程进入运行状态时,该进程的状态永远不会从调度程序中删除,直到它完成其工作。
抢占式调度是灵活的。 非抢占式调度是严格的。
示例: - 最短剩余时间优先、循环赛等。 例子: 先到先得、最短作业优先、优先级调度等。
抢占式调度算法可以被抢占,即进程可以被调度 在非抢占式调度中进程无法被调度
在此过程中,CPU 会在特定时间段内分配给进程。 在这个过程中,CPU被分配给该进程,直到它终止或切换到等待状态。
抢占式算法具有将进程从就绪状态切换到运行状态和反之亦然的开销。 非抢占式调度没有将进程从运行状态切换到就绪状态的开销。

抢占式调度的优点

以下是抢占式调度方法的优点/好处:

  • 抢占式调度方法更健壮,因此一个进程不能独占 CPU
  • 每次中断后都会重新考虑正在运行的任务的选择。
  • 每个事件都会导致正在运行的任务中断
  • 操作系统确保所有正在运行的进程的 CPU 使用率相同。
  • 其中,CPU的使用率是相同的,即所有正在运行的进程都会平等地使用CPU。
  • 这种调度方法还提高了平均响应时间。
  • 当我们将抢占式调度用于多编程环境时,它很有用。

非抢占式调度的优点

以下是非抢占式调度方法的优点/好处:

  • 提供较低的调度开销
  • 倾向于提供高吞吐量
  • 从概念上来说,这是非常简单的方法
  • Less 调度所需的计算资源

抢占式调度的缺点

以下是抢占式调度的缺点:

  • 需要有限的计算资源进行调度
  • 调度程序需要花费更多时间来暂停正在运行的任务,切换上下文,并分派新的传入任务。
  • 如果一些高优先级进程连续到达,则低优先级进程需要等待更长的时间。

非抢占式调度的缺点

以下是非抢占式调度方法的缺点/缺点:

  • 这可能会导致饥饿,尤其是对于那些实时任务
  • 错误可能导致机器死机
  • 它可以实时 优先级调度
  • 流程响应时间差

非抢占式调度示例

在非抢占式 SJF 调度中,一旦 CPU 周期分配给进程,该进程就会一直持有该周期,直到达到等待状态或终止。

考虑以下五个过程,每个过程都有自己独特的突发时间和到达时间。

进程队列 爆发时间 到达时间
P1 6 2
P2 2 5
P3 8 1
P4 3 0
P5 4 4

步骤0) 在时间=0时,P4到达并开始执行。

非抢占式调度示例

步骤1) 在时间 = 1 时,进程 P3 到达。但是,P4 仍需要 2 个执行单元才能完成。它将继续执行。

非抢占式调度示例

步骤2) 在时间 =2 时,进程 P1 到达并被添加到等待队列。P4 将继续执行。

非抢占式调度示例

步骤3) 在时间 = 3 时,进程 P4 将完成执行。比较 P3 和 P1 的突发时间。进程 P1 被执行,因为它的突发时间比 P3 短。

非抢占式调度示例

步骤4) 在时间 = 4 时,进程 P5 到达并被添加到等待队列。P1 将继续执行。

非抢占式调度示例

步骤5) 在时间 = 5 时,进程 P2 到达并被添加到等待队列。P1 将继续执行。

非抢占式调度示例

步骤6) 在时间 = 9 时,进程 P1 将完成执行。比较 P3、P5 和 P2 的突发时间。进程 P2 被执行,因为它的突发时间最短。

非抢占式调度示例

步骤7) 在time=10的时候,P2正在执行,P3和P5在等待队列中。

非抢占式调度示例

步骤8) 在时间 = 11 时,进程 P2 将完成执行。比较 P3 和 P5 的突发时间。进程 P5 被执行,因为它的突发时间较短。

非抢占式调度示例

步骤9) 在时间 = 15 时,进程 P5 将完成其执行。

非抢占式调度示例

步骤10) 在时间 = 23 时,进程 P3 将完成其执行。

非抢占式调度示例

步骤11) 让我们计算一下上述例子的平均等待时间。

Wait time 
P4= 0-0=0
P1=  3-2=1
P2= 9-5=4
P5= 11-4=7
P3= 15-1=14
Average Waiting Time= 0+1+4+7+14/5 = 26/5 = 5.2

抢占式调度示例

考虑以下三个过程 循环

进程队列 爆发时间
P1 4
P2 3
P3 5

抢占式调度示例

步骤1) 执行从进程 P1 开始,其突发时间为 4。此时,每个进程执行 2 秒。P2 和 P3 仍在等待队列中。

抢占式调度示例

步骤2)在时间 =2 时,P1 被添加到队列末尾,P2 开始执行

抢占式调度示例

步骤3) 在时间=4时,P2被抢占并添加到队列末尾。P3开始执行。

抢占式调度示例

步骤4) 在时间=6时,P3被抢占并添加到队列末尾。P1开始执行。

抢占式调度示例

步骤5) 在时间=8时,P1的突发时间为4。它已完成执行。P2开始执行

抢占式调度示例

步骤6) P2 的突发时间为 3。它已经执行了 2 个间隔。在时间=9 时,P2 完成执行。然后,P3 开始执行,直到完成。

抢占式调度示例

步骤7) 让我们计算一下上述例子的平均等待时间。

Wait time 
P1= 0+ 4= 4
P2= 2+4= 6
P3= 4+3= 7