批作业调度算法

首先理清概念:

​ 作业周转时间 = 完成时间 - 提交时间

​ 作业的带权周转时间 = 作业的周转时间 / 运行时间

​ 平均周转时间 = 各作业的带权周转时间之和 / 作业数目

常用的作业调度算法:

  • 先来先服务算法(First Come Serve , FCFS)

    是按作业进入系统的先后次序进行调度,即每次调度都在后被作业中选择一个最先进入队列的作业

    特点:实现简单,有利于长作业,不利于短作业**

    示例:

起始:

作业 提交时间 运行时间(min) 开始时间 结束时间 周转时间 T/min 带权周转时间 Wi /min
J1 8:00 60
J2 8:50 30
J3 9:00 12
J4 9:10 6

第一轮:

  1. 先选择先来的,即先提交的 J1 :8:00 ,将其作为第一个开始的,由于他前面没有等待队列,所以它的开始时间为:8:00。

  2. 结束时间为开始时间加上运行时间:8:00 + 60min = 9:00

  3. 周转时间为:完成时间(结束时间) - 提交时间 = 9:00 - 8:00 = 60min

  4. 带权周转时间 : 作业的周转时间 / 运行时间 = 60 / 60 = 1

作业 提交时间 运行时间(min) 开始时间 结束时间 周转时间 T/min 带权周转时间 Wi
J1 8:00 60 8:00 9:00 60 1
J2 8:50 30
J3 9:00 12
J4 9:10 6

第二轮:

  1. 由于按照先来先选择的算法,选l择第二的, J1 :8:50 ,将其作为第二,由于他还需要等待他前面的完成了才到他,所以它的开始时间为:9:00。

  2. 结束时间为:开始时间 + 运行时间 = 9:00 + 30min = 9:30

  3. 周转时间为:完成时间(结束时间) - 提交时间 = 9:30 - 8:50 = 40min

  4. 带权周转时间 : 作业的周转时间 / 运行时间 = 40 / 30 = 4/3

作业 提交时间 运行时间(min) 开始时间 结束时间 周转时间 T/min 带权周转时间 Wi
J1 8:00 60 8:00 9:00 60 1
J2 8:50 30 9:00 9:30 40 4/3
J3 9:00 12
J4 9:10 6

剩下的以此类推。。。

最终为:

作业 提交时间 运行时间(min) 开始时间 结束时间 周转时间 T/min 带权周转时间 Wi
J1 8:00 60 8:00 9:00 60 1
J2 8:50 30 9:00 9:30 40 4/3
J3 9:00 12 9:30 9:42 42 21/6
J4 9:10 6 9:42 9:48 38 19/3

平均周转时间 = 各作业的带权周转时间之和 / 作业数目

​ = (1+4/3+21/6+19/)/4 ≈ 3.0417


  • 最短作业优先(Shortest Job First SJF)

    总是选择估计计算时间最短的作业投入运行

    特点:克服了FCFS 偏爱长作业的缺点,易于实现,会使系统平局周转时间最短,系统吞吐量大;缺点是:1)需要预先知道作业所需的CPU时间 2)护士了作业等待时间,容易出现饥饿想象

    示例:

    起始:

    作业 提交时间 运行时间(min) 开始时间 结束时间 周转时间 T/min 带权周转时间 Wi /min
    J1 8:00 60
    J2 8:50 30
    J3 9:00 12
    J4 9:10 6

第一轮:

  1. 由于J1是最先来的,此时没有别的等待队列,故先进行J1 ,所以它的开始时间为:8:00。

  2. 结束时间为:开始时间 + 运行时间 = 8:00 + 60min = 9:00

  3. 周转时间为:完成时间(结束时间) - 提交时间 = 9:00 - 8:00 = 60min

  4. 带权周转时间 : 作业的周转时间 / 运行时间 = 60 / 60 = 1

作业 提交时间 运行时间(min) 开始时间 结束时间 周转时间 T/min 带权周转时间 Wi /min
J1 8:00 60 8:00 9:00 60 1
J2 8:50 30
J3 9:00 12
J4 9:10 6

第二轮:

  1. 选取在第一轮执行结束之后的时间之前9:00提前的作业中运行时间最低段的作为第二轮作业,即:在J2:8:50J3:9:00中选取运行时间最短的,即J3.所以第二轮的开始时间为:9:00。

  2. 结束时间为:开始时间 + 运行时间 = 9:00 + 12min = 9:12

  3. 周转时间为:完成时间(结束时间) - 提交时间 = 9:12 - 9:00 = 12min

  4. 带权周转时间 : 作业的周转时间 / 运行时间 = 12 / 12 = 1

作业 提交时间 运行时间(min) 开始时间 结束时间 周转时间 T/min 带权周转时间 Wi /min
J1 8:00 60 8:00 9:00 60 1
J2 8:50 30 9:00 9:12 12 1
J3 9:00 12
J4 9:10 6

第三轮:

  1. 选取在第二轮执行结束之后的时间之前9:12提前的作业中运行时间最低段的作为第二轮作业,即:在J2:8:50J4:9:10中选取运行时间最短的,即J4.所以第二轮的开始时间为:9:12。

  2. 结束时间为:开始时间 + 运行时间 = 9:12 + 6min = 9:18

  3. 周转时间为:完成时间(结束时间) - 提交时间 = 9:18 - 9:10 = 8min

  4. 带权周转时间 : 作业的周转时间 / 运行时间 = 8 / 6 = 4/3

作业 提交时间 运行时间(min) 开始时间 结束时间 周转时间 T/min 带权周转时间 Wi /min
J1 8:00 60 8:00 9:00 60 1
J2 8:50 30
J3 9:00 12 9:00 9:12 12 1
J4 9:10 6 9:12 9:18 8 4/3

同理可得第四轮结果为:

作业 提交时间 运行时间(min) 开始时间 结束时间 周转时间 T/min 带权周转时间 Wi /min
J1 8:00 60 8:00 9:00 60 1
J2 8:50 30 9:18 9:48 58 29/15
J3 9:00 12 9:00 9:12 12 1
J4 9:10 6 9:12 9:18 8 4/3

平均周转时间 = 各作业的带权周转时间之和 / 作业数目

​ = (1+29/15+1+4/3)/4 ≈ 1.3167


  • 响应比高者优先算法(Highest Response Ratio First ,HRRF)

    计算后备作业队列中每个作业的响应比,然后挑选响应比最高者。

    其中响应比计算公式为:\(\frac {作业的响应时间}{作业的运行时间}\) = \(\frac {作业的等待时间+作业的运行时间}{作业的运行时间}\)= 1+ \(\frac {作业的等待时间}{作业的运行时间}\)

    特点:即考虑作业的等待时间,有考虑作业的运行时间,是介于上述两种算法的折中算法。缺点是每次都要计算各道的作业响应比,有一定的时间开销。

    示例:

    起始:

    作业 提交时间 运行时间(min) 开始时间 结束时间 周转时间 T/min 带权周转时间 Wi /min
    J1 8:00 60
    J2 8:50 30
    J3 9:00 12
    J4 9:10 6

    第一轮:

    1. 首先还是一样的先执行第一个提交的作业J1,所以提交时间时间即为运行时间:8:00

    2. 结束时间为:开始时间 + 运行时间 = 8:00 + 60min = 9:00

    1. 周转时间为:完成时间(结束时间) - 提交时间 = 9:00 - 8:00 = 60min

    2. 带权周转时间 : 作业的周转时间 / 运行时间 = 60 / 60 = 1

    3. 更新第一轮结束时间之前提交的作业的等待时间。

      显然,满足条件(在结束时间9:00之前提交作业的)有J2,J3

      ​ 等待时间为:上个作业结束时间 - 该作业提交时间

      ​ 显然,J1 = 0

      ​ J2 = 9:00 - 8:50 = 10

      ​ J3 = 9:00 - 9:00 = 0

作业 提交时间 运行时间(min) 开始时间 结束时间 等待时间/min 周转时间 T/min 带权周转时间 Wi /min
J1 8:00 60 8:00 9:00 0 60 1
J2 8:50 30 10
J3 9:00 12 0
J4 9:10 6

第二轮:

  1. 首先在满足条件(在第一轮完成时间之前提交的作业)中选取响应比最大的作为第二轮作业任务

    • J2 = 1 + 10/30
    • J3 = 1 + 0/12

    显然,响应比:J2 > J3

    因此选取J2作为第二轮的任务,其开始时间为第一轮结束时间:9:00

  2. 结束时间为:开始时间 + 运行时间 = 9:00 + 30min = 9:30

  1. 周转时间为:完成时间(结束时间) - 提交时间 = 8:50 - 9:30 = 40min

  2. 带权周转时间 : 作业的周转时间 / 运行时间 = 40 / 30 = 4/3

  3. 更新第二轮结束时间之前提交的作业的等待时间。

    显然,满足条件(在结束时间9:30之前提交作业的)有J3,J4

    ​ 等待时间为:上个作业结束时间 - 该作业提交时间

    ​ J3 = 9:30 - 9:00 = 30

    ​ J4 = 9:30 - 9:10 = 20

作业 提交时间 运行时间(min) 开始时间 结束时间 等待时间/min 周转时间 T/min 带权周转时间 Wi /min
J1 8:00 60 8:00 9:00 0 60 1
J2 8:50 30 9:00 9:30 10 40 4/3
J3 9:00 12 30
J4 9:10 6 20

第三轮:

  1. 首先在满足条件(在第二轮完成时间之前提交的作业)中选取响应比最大的作为第二轮作业任务

    • J3 = 1 + 30/12
    • J4 = 1 + 20/6

    显然,响应比:J4 > J3

    因此选取J4作为第三轮的任务,其开始时间为第二轮结束时间:9:30

  2. 结束时间为:开始时间 + 运行时间 = 9:30 + 6min = 9:36

  1. 周转时间为:完成时间(结束时间) - 提交时间 = 9:36 - 9:10 = 26min

  2. 带权周转时间 : 作业的周转时间 / 运行时间 = 26 / 6 = 13/3

  3. 更新第二轮结束时间之前提交的作业的等待时间。

    显然,满足条件(在结束时间9:36之前提交作业的)有J3

    ​ 等待时间为:上个作业结束时间 - 该作业提交时间

    ​ J3 = 9:36 - 9:00 = 36

作业 提交时间 运行时间(min) 开始时间 结束时间 等待时间/min 周转时间 T/min 带权周转时间 Wi /min
J1 8:00 60 8:00 9:00 0 60 1
J2 8:50 30 9:00 9:30 10 40 4/3
J3 9:00 12 36
J4 9:10 6 9:30 9:36 20 26 13/3

同理可得第四轮结果:

作业 提交时间 运行时间(min) 开始时间 结束时间 等待时间/min 周转时间 T/min 带权周转时间 Wi /min
J1 8:00 60 8:00 9:00 0 60 1
J2 8:50 30 9:00 9:30 10 40 4/3
J3 9:00 12 9:36 9:48 36 48 4
J4 9:10 6 9:30 9:36 20 26 13/3

平均周转时间 = 各作业的带权周转时间之和 / 作业数目

​ = (1+4/3+4+13/3)/4 ≈ 2.6667

并且不难看出,响应比高者优先算法的效率是介于最短作业优先来先服务算法