📜  操作系统调度算法

📅  最后修改于: 2020-12-13 15:40:46             🧑  作者: Mango


进程调度程序根据特定的调度算法调度要分配给CPU的不同进程。我们将在本章中讨论六种流行的流程调度算法-

  • 先来先服务(FCFS)调度
  • 最短作业下一个(SJN)调度
  • 优先排程
  • 剩余时间最短
  • 循环调度(RR)调度
  • 多级队列调度

这些算法是非抢占式或抢占式的。非抢占式算法的设计使进程一旦进入运行状态,就无法抢占它,直到它完成其分配的时间为止,而抢占式调度基于优先级,调度程序可以在高优先级的任何时候抢占低优先级的运行进程。进程进入就绪状态。

先来先服务(FCFS)

  • 作业以先到先得的原则执行。
  • 它是一种非抢占式,抢占式调度算法。
  • 易于理解和实施。
  • 它的实现基于FIFO队列。
  • 由于平均等待时间较长,因此性能较差。

先来先服务调度算法

每个过程的等待时间如下-

Process Wait Time : Service Time – Arrival Time
P0 0 – 0 = 0
P1 5 – 1 = 4
P2 8 – 2 = 6
P3 16 – 3 = 13

平均等待时间:(0 + 4 + 6 + 13)/ 4 = 5.75

最短的下一个工作(SJN)

  • 这也称为最短工作优先,即SJF

  • 这是一种非抢先式,抢先式调度算法。

  • 减少等待时间的最佳方法。

  • 易于在批处理系统中实施,在该系统中预先知道所需的CPU时间。

  • 在未知的所需CPU时间的交互式系统中无法实现。

  • 加工者应事先知道加工将花费多少时间。

给定:进程表及其到达时间,执行时间

Process Arrival Time Execution Time Service Time
P0 0 5 0
P1 1 3 5
P2 2 8 14
P3 3 6 8

最短作业优先调度算法

每个过程的等待时间如下-

Process Waiting Time
P0 0 – 0 = 0
P1 5 – 1 = 4
P2 14 – 2 = 12
P3 8 – 3 = 5

平均等待时间:(0 + 4 + 12 + 5)/ 4 = 21/4 = 5.25

基于优先级的调度

  • 优先级调度是一种非抢占式算法,是批处理系统中最常见的调度算法之一。

  • 每个进程都被分配一个优先级。具有最高优先级的过程将首先执行,依此类推。

  • 具有相同优先级的进程将按照先到先得的原则执行。

  • 可以根据内存需求,时间需求或任何其他资源需求来确定优先级。

给定:进程表及其到达时间,执行时间和优先级。在这里,我们考虑1是最低优先级。

Process Arrival Time Execution Time Priority Service Time
P0 0 5 1 0
P1 1 3 2 11
P2 2 8 1 14
P3 3 6 3 5

优先级调度算法

每个过程的等待时间如下-

Process Waiting Time
P0 0 – 0 = 0
P1 11 – 1 = 10
P2 14 – 2 = 12
P3 5 – 3 = 2

平均等待时间:(0 + 10 + 12 + 2)/ 4 = 24/4 = 6

剩余时间最短

  • 剩余时间最短(SRT)是SJN算法的抢占版本。

  • 处理器被分配给最接近完成的作业,但是它可以被更新的就绪作业抢占,而完成时间较短。

  • 在未知的所需CPU时间的交互式系统中无法实现。

  • 它通常用于需要优先处理短期工作的批处理环境中。

循环调度

  • Round Robin是抢占式进程调度算法。

  • 每个过程都提供了执行的固定时间,称为量子

  • 在给定时间段内执行某个过程后,它将被抢占,而其他进程将在给定时间段内执行。

  • 上下文切换用于保存抢占进程的状态。

循环调度算法

每个过程的等待时间如下-

Process Wait Time : Service Time – Arrival Time
P0 (0 – 0) + (12 – 3) = 9
P1 (3 – 1) = 2
P2 (6 – 2) + (14 – 9) + (20 – 17) = 12
P3 (9 – 3) + (17 – 12) = 11

平均等待时间:(9 + 2 + 12 + 11)/ 4 = 8.5

多级队列调度

多级队列不是独立的调度算法。他们利用其他现有算法对具有共同特征的作业进行分组和调度。

  • 为具有共同特征的流程维护多个队列。
  • 每个队列可以有自己的调度算法。
  • 优先级分配给每个队列。

例如,可以在一个队列中调度CPU绑定的作业,而在另一个队列中调度所有I / O绑定的作业。然后,Process Scheduler从每个队列中交替选择作业,然后根据分配给队列的算法将其分配给CPU。