优先级调度算法:抢占式、非抢占式

⚡ 智能摘要

优先级调度是一种CPU调度方法,它根据优先级选择进程,优先运行优先级较高的任务。它可以是抢占式的,也可以是非抢占式的;优先级相同的进程则按照先到先得或轮询的方式处理。

  • 🎯 定义: 进程按优先级排序,优先级较高的任务先于优先级较低的任务执行。
  • 🔢 优先级编号: 数字越小,优先级通常越高。
  • ⏸️ 先发制人: 优先级更高的进程到达可能会中断当前正在运行的优先级较低的进程。
  • ▶️ 非抢占式: 运行中的进程会占用 CPU,直到它终止或切换上下文为止。
  • 优势: 重要进程运行速度快,与 CPU 占用时间的相对重要性相匹配。
  • ⚠️ 退税: 低优先级进程可能会因为资源不足而无限期等待。

优先级调度算法

什么是优先级调度?

优先调度 是一种基于优先级的进程调度方法。在此算法中,调度程序根据优先级选择要执行的任务。

优先级较高的进程应首先执行,而优先级相同的作业则在循环或 FCFS 的基础上执行。 优先级取决于内存要求、时间要求等。

优先级调度的类型

优先级调度主要分为两种类型:

抢先调度

在抢占式调度中,任务大多按优先级分配。有时,在运行另一个优先级较低的任务之前运行优先级较高的任务很重要,即使优先级较低的任务仍在运行。优先级较低的任务会保留一段时间,并在优先级较高的任务完成执行后恢复。

非抢占式调度

在这种调度方法中,CPU 已被分配给特定进程。占用 CPU 的进程会通过切换上下文或终止来释放 CPU。它是唯一一种可以用于各种硬件平台的调度方法,因为它不像抢占式调度那样需要特殊的硬件(例如定时器)。

优先级调度的特点

  • 根据优先级调度进程的 CPU 算法。
  • 它用于 Opera用于执行批处理过程的系统。
  • 如果两个具有相同优先级的作业都处于 READY 状态,则它按 先来先服务 基础。
  • 在优先级调度中,每个进程都会被分配一个数字来表示其优先级。
  • 数字越低,优先级越高。
  • 在这种调度算法中,如果一个优先级高于当前正在运行的进程的新进程到达,则当前正在运行的进程将被抢占。

优先级调度示例

考虑以下五个进程 P1 至 P5。每个进程都有其独特的优先级、运行时间和到达时间。

工艺应用 优先 爆发时间 到达时间
P1 1 4 0
P2 2 3 0
P3 1 7 6
P4 3 4 11
P5 2 2 12

步骤0) 在时间 0 时,进程 P1 和 P2 到达。P1 的优先级高于 P2。程序从进程 P1 开始执行,其执行时间为 4。

优先调度

步骤1) 在时间 1 时,没有新进程到达。程序继续执行,进程为 P1。

优先调度

步骤2) 在时间 2 时,没有新进程到达,因此可以继续执行 P1。P2 处于等待队列中。

优先调度

步骤3) 在第 3 个时刻,没有新的进程到达,因此您可以继续执行 P1。P2 进程仍在等待队列中。

优先调度

步骤4) 在时间 4 时,P1 完成执行。P2 开始执行。

优先调度

步骤5) 当时间 = 5 时,没有新的进程到达,因此我们继续执行 P2。

优先调度

步骤6) 在时间 6 时,程序 P3 到达。P3 的优先级 (1) 高于优先级 (2) 的程序 P2。程序 P2 被抢占,程序 P3 开始执行。

工艺应用 优先 爆发时间 到达时间
P1 1 4 0
P2 2 1 项中有 3 项待定 0
P3 1 7 6
P4 3 4 11
P5 2 2 12

优先调度

步骤7) 在第 7 时刻,没有新进程到达,所以我们继续处理 P3。P2 在等待队列中。

优先调度

步骤8) 当时间 = 8 时,没有新的进程到达,因此我们可以继续执行 P3。

优先调度

步骤9) 当时间 = 9 时,没有新的进程到来,因此我们可以继续执行 P3。

优先调度

步骤10) 时间间隔 10 时,没有新的进程到来,因此我们继续执行 P3。

优先调度

步骤11) 在时间 = 11 时,P4 到达,优先级为 4。P3 的优先级更高,因此它继续执行。

工艺应用 优先 爆发时间 到达时间
P1 1 4 0
P2 2 1 项中有 3 项待定 0
P3 1 2 项中有 7 项待定 6
P4 3 4 11
P5 2 2 12

优先调度

步骤12) 在时间 12 时,程序 P5 到达。由于程序 P3 的优先级更高,因此它继续执行。

优先调度

步骤13) 在时间 t = 13 时,P3 执行完毕。此时就绪队列中有 P2、P4 和 P5。P2 和 P5 优先级相同。P2 的到达时间早于 P5,因此 P2 开始执行。

工艺应用 优先 爆发时间 到达时间
P1 1 4 0
P2 2 1 项中有 3 项待定 0
P3 1 7 6
P4 3 4 11
P5 2 2 12

优先调度

步骤14) 在时间 14 时,P2 进程已执行完毕。P4 和 P5 处于等待状态。P5 优先级最高,开始执行。

优先调度

步骤15) 在时间 = 15 时,P5 继续执行。

优先调度

步骤16) 在时间 16 时,进程 P5 执行完毕。只剩下进程 P4,它开始执行。

优先调度

步骤17) 时间 = 20 时,P4 已完成执行,没有剩余进程。

优先调度

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

等待时间 = 开始时间 - 到达时间 + 等待下一次突发的时间

P1 = 0 - 0 = 0
P2 = 4 - 0 + 7 = 11
P3 = 6 - 6 = 0
P4 = 16 - 11 = 5
Average Waiting time = (0 + 11 + 0 + 5 + 2)/5 = 18/5 = 3.6

优先级调度的优点

以下是使用优先级调度方法的优势/优点:

  • 简单易用的日程安排方法。
  • 进程按优先级执行,因此高优先级进程无需长时间等待,从而节省时间。
  • 该方法提供了一种良好的机制,可以精确地定义每个过程的相对重要性。
  • 适用于时间和资源需求波动的应用程序。

优先级调度的缺点

以下是优先级调度的一些缺点/不足之处:

  • 如果系统最终崩溃,所有低优先级进程都会丢失。
  • 如果高优先级进程占用大量 CPU 时间,则低优先级进程可能会陷入困境,并将无限期地推迟。
  • 该调度算法可能会让一些低优先级的进程无限期地等待。
  • 当一个进程准备运行但由于当前正在运行其他进程而必须等待 CPU 时,它将被阻塞。
  • 如果新的更高优先级的进程不断进入就绪队列,那么处于等待状态的进程可能需要等待很长时间。

常见问题

当优先级较高的进程不断到达时,低优先级进程就会无限期地等待,从而导致进程饥饿。老化机制通过逐步提高等待时间较长的进程的优先级来解决这个问题,最终确保每个进程都能运行。

在大多数操作系统中,优先级数字越小,优先级越高。例如,优先级为 1 的进程会在优先级为 3 的进程之前运行。但是,有些系统会反其道而行之,因此务必查看所使用的优先级约定。

优先级可以由内部根据内存需求、时间要求和 CPU 突发性能等因素进行分配,也可以由用户或管理员根据重要性、成本或截止日期等因素进行外部分配。优先级可以是静态的(固定的),也可以是动态的(运行时变化的)。

人工智能可以通过学习工作负载模式和截止日期,动态地分配和调整流程优先级。这有助于重要任务按时完成,同时降低任务耗竭的风险,从而提高复杂多变系统中的整体吞吐量和响应速度。

是的。人工智能可以监控等待时间,并自动提升长时间等待进程的优先级,就像智能​​老化一样。通过预测拥堵情况,它比固定规则更能平衡公平性和性能,从而避免低优先级任务无限期地被拖延。

总结一下这篇文章: