操作系统调度算法

来源:互联网 发布:电子图书数据库 编辑:程序博客网 时间:2024/06/07 12:36

作业调度算法

对于操作系统的周转时间,我们有以下定义:
1. 作业周转时间:作业完成时间-作业提交时间
2. 带权周转时间=周转时间/服务时间
3. 平均周转时间=作业周转总时间/作业个数
4. 平均带权周转时间=带权周转总时间/作业个数

先来先服务(First Come, First Served,FCFS)

  • 按照作业进入系统的先后次序来挑选作业。这种算法容易实现,但效率不高,没有考虑作业要求服务时间的长短,
  • 不利于短作业而优待了长作业,或者说有利于 CPU 繁忙型作业不利于 I/O 繁忙型作业
  • 有时为了等待场作业的执行,使短作业的周转时间变大,从而使平均周转时间也变大。

    • 如下所示:
    作业名 所需CPU时间 作业1 28 作业2 9 作业3 3
  • 所需总时间为 (28+37+40)/3 = 35 ,如果按作业3->2->1进行,所需时间为(3+12+40)/3 ~= 18.3,FCFS 调度算法的平均作业周转时间与作业提交的顺序有关

最短作业优先算法(Shortest Job First,SJF)

  • 以进入系统的作业所要求的CPU时间为标准,总是选取估计计算时间最短的作业投入运行。易于实现,但效率不高。
  • 缺点是忽视了作业的等待时间,由于系统不断地接受新作业,而作业调度又总是选择计算时间短的作业投入运行,因此,使进入系统时间早但计算时间长的作业等待时间过长,会出现饥饿的现象。
  • 若对于以下4个作业同时到达系统并立即进入调度:

    作业名 所需CPU时间 作业1 9 作业2 4 作业3 10 作业4 8
  • 根据SJF调度算法,调度顺序为2、4、1、3,

    • 平均作业周转时间 T = (4+12+21+31)/4 = 17
    • 平均带权作业周转时间 W = (4/4+12/8+21/9+31/10)/4 = 1.98
  • 根据FCFS调度算法:
    • 平均作业周转时间 T = (9+13+23+31)/4 = 19
    • 均带权作业周转时间 W = (9/9+13/4+23/10+31/8)/4 = 2.51

SJF 的平均作业周转时间比 FCFS 要小,故它的调度性能比 FCFS 好。但实现 SJF 调度算法需要知道作业所需运行时间,否则调度就没有依据,作业运行时间只知道估计值,要精确知道一个作业的运行时间是办不到的。

SJF 算法既可以是非抢占式的,也可以是抢占式的。当一个作业正在执行时,一个新作业进入就绪状态,如果新作业需要的 CPU 时间比当前正在执行的作业剩余下来还需的 CPU 时间短,抡占式短作业优先算法强行赶走当前正在执行作业,这种方式也叫最短剩余时间优先算法(Shortest Remaining Time First)算法。此算法不但适用于 JOB 调度,同样也适用于进程调度

对于以下例子:

作业名 到达系统时间 CPU时间 作业1 0 8 作业2 1 4 作业3 2 9 作业4 3 5

Job1 从 0 开始执行,这时系统就绪队列仅有一个作业。Job2 在时间 1 到达,而 Job1的剩余时间(7毫秒)大于 JOB2 所需时间(4 毫秒),所以,Job1 被剥夺,Job2被调度执行。这个例子的平均等待时间是((10-1)+(1-1)+(17-2)+(5-3))/4=26/4=6.5 毫秒。如果采用非抢占式 SJF 调度,那么,平均等待时间是 7.75 毫秒

响应比最高者优先 (HRN) 算法

既考虑作业等待时间,又考虑作业的运行时间,这样既照顾了短作业又不使长作业的等待时间过长,改进了调度性能。我们把作业进入系统后的等待时间与估计运行时间之比称作响应比,现定义:

响应比 =已等待时间/估计计算时间

现对于以下作业:

作业名 到达时间 所需 CPU 时间 作业 1 0 20 作业 2 5 15 作业 3 10 5 作业 4 15 10
  • 假设系统中没有其他作业,现对它们实施 SJF 调度算法(非抢占),这时的作业调度顺序为作业 1、3、4、2
    • 平均作业周转时间 T = (20 + 25-10 + 35-15 + 50-5)/4 = 25
    • 平均带权作业周转时间 W = (20/20+15/5+25/10+45/15)/4 = 2.25
  • 如果对它们施行 FCFS 调度算法,
    • 平均作业周转时间 T = (20+30+30+35)/4 = 38.75
    • 平均带权作业周转时间 W = (20/20+30/15+30/5+35/10)/4 = 3.13
  • 如果对这个作业流执行 HRN 调度算法,
    • 开始时只有作业 1,作业 1 被选中,执行时间 20;
    • 作业 1 执行完毕后,响应比依次为 15/15、10/5、5/10,作业 3 被选中,执行时间 5;
    • 作业 3 执行完毕后,响应比依次为 20/15、10/10,作业 2 被选中,执行时间 15;
    • 作业 2 执行完毕后,作业 4 被选中,执行时间 10;
    • 平均作业周转时间 T = (20+15+35+35)/4 = 26.25
    • 平均带权作业周转时间 W = (20/20+15/5+35/15+35/10)/4 = 2.42

优先数法

根据确定的优先数来选取作业,每次总是选择优先数高的作业,作业的优先度由两种方法确定:
1. 静态优先数法:
用户自己提出作业的优先数或由系统综合考虑有关因素来确定用户作业的优先数。例如,根据作业的缓急程度;作业的类型;作业计算时间的长短、等待时间的多少、资源申请情况等来确定优先数。确定优先数时各因素的比例应根据系统设计目标来分析这些因素在系统中的地位而决定
2. 动态优先数法:
在作业运行过程中,根据实际情况和作业发生的事件动态的改变其优先数

轮转算法

以一个周期性间隔产生时钟中断,此时当前正在运行的进程被置于就绪队列,基于FCFS选择下一个就绪进程运行

0 0