进程调度算法1——FCFS、SJF、HNNR

  进程的调度方式有两种:非剥夺调度方式(非抢占式)和剥夺调度方式(抢占方式)。
  非抢占式:只允许进程主动放弃处理机。如进程运行结束、异常结束或主动请求I/O阻塞。在运行的过程中即使有更紧迫的任务到达,当前进程依然会继续使用处理机,直到该进程终止或主动要求进入阻塞态。
  抢占式:当一个进程正在处理机上执行时,如果有一个更重要更紧迫的进程需要处理机,则立即暂停正在执行的进程,将处理机分配给更重要更紧迫的那个进程。
  下面介绍适用于早期操作系统几种进程调度的算法

1 先来先服务算法(FCFS,First Come First Service)

  先来先服务(FCFS):按照到达的先后顺序调度,事实上就是等待时间越久的越优先得到服务。
  下面表示按照先来先服务算法的执行顺序



  计算进程的几个衡量指标:

周转时间 = 完成时间 – 到达时间    P1=7-0=7     P2=11-2=9    P3=12-4=8    P4=16-5=11
带权周转时间=周转时间/运行时间    P1=7/7=1 
   P2=9/4=2.25    P3=8/1=8    P4=11/4=2.75
等待时间=周转时间 - 运行时间     P1=7-7=0     P2=9-4=5    P3=8-1=7    P4=11-4=7
平均周转时间=(7+9+8+11)/4=8.75
平均带权周转时间=(1+2.25+8+2.75)/4=3.5
平均等待时间=(0+5+7+7)/4=4.75

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

  短作业优先算法是非抢占式的算法,但是也有抢占式的版本——最短剩余时间优先算法(STRN,Shortest Remaining Time Next)
  用于进程的调度算法称为短进程优先调度算法(SPF,Shortest Process First)。

   2.1非抢占式的短作业优先调度算法

  短作业/进程优先调度算法:每次调度时选择当前已到达且运行时间最短的作业/进程.。



  因为进程1最先达到,此时没有其他线程,所以进程1先被服务。当进程1运行完后,进程2和3已经到达,此时进程3需要的运行时间比进程2少,所以进程3先被服务…
  计算进程的几个衡量指标:

周转时间 = 完成时间 – 到达时间     P1=7-0=7      P2=12-2=10      P3=8-4=4     P4=16-5=11
带权周转时间=周转时间/运行时间     P1=7/7=1      P2=10/4=2.5     P3=4/1=4     P4=11/4=2.75
等待时间=周转时间 - 运行时间     P1=7-7=0      P2=10-4=6    P3=4-1=3     P4=11-4=7
平均周转时间=(7+10+4+11)/4=8 8.75
平均带权周转时间=(1+2.5+4+2.75)/4=2.56       3.5(先来先服务的平均带权周转时间)
平均等待时间=(0+6+3+7)/4=4

   2.2 抢占式的短作业优先调度算法——最短剩余时间优先算法

  最短剩余时间优先算法:每当有进程加入就绪队列改变时就需要调度,如果新到达的进程的所需的运行时间比当前运行的进程剩余时间更短,则由新进程抢占处理机,当前运行进程重新回到就绪队列。此外,当一个进程完成时也需要调度

当有新的进程达到就绪队列和存在进程完成时,需要调度,Pn(m)表示当>前Pn进程的剩余时间,加粗表示当前调度下获取处理机的进程:
0时刻(P1到达):P1(7)
2时刻(P2到达):P1(5)、P2(4)
4时刻(P3到达):P1(5)、P2(2)、P3(1)
5时刻(P3完成且P4刚好达到):P1(5)、P2(2)、P4(4)
7时刻(P2完成):P1(5) 、P4(4)
11时刻(P4完成):P1(5)
16时刻(P1完成)
周转时间 = 到达时间 – 运行时间     P1 = 16-0=16     P2=7-2=5     P3=5-4=1     P4=11-5=6
带权周转时间 = 周转时间/运行时间     P1=16/7=2.28     P2=5/4-1.25     P3=1/1=1     P4=6/4=1.5
等待时间 = 周转时间 – 运行时间     P1=16-7=9     P2=5-4=1    P3=1-1=0     P4=6-4=2
平均周转时间=(16+6+1+6)/4=7
平均带权周转时间=(2.28+1.25+1+1.5)/4=1.50
平均等待时间=(9+1+0+2)/4=3

通过比较上面三组的平均周转时间、平均带权周转时间和平均等待时间可以看出,短作业优先算法可以减少进程的等待时间,对短作业有利。

3 高响应比优先(HRRN,Highest Response Ratio Next)算法

  高响应比优先算法:非抢占式的调度算法,只有当前运行的进程主动放弃CPU时(正常/异常完成、或主动阻塞),才需要进行调度,调度时计算所有就绪进程的相应比,选响应比最高的进程上处理机。


  响应比 = (等待时间 + 运行时间)/ 运行时间

0时刻:只有P1到达就绪队列,P1上处理机。
7时刻(P1主动放弃CPU):就绪队列中有P2、P3和P4,它们的响应比分别为P2=(5+4)/4=2.25 P3=(3+1)/1=4 P4=(2+4)/4=1.5,所以P3上处理机。
8时刻(P3完成):P2=(6+4)/4=2.5 P4=(3+4)/4=1.75
12时刻(P2完成):就绪队列中只剩下P4。

4 三种调度算法的比较

算法 可抢占 优点 缺点 考虑因素
FCFS 非抢占式 公平,实现简单 对短作业不利 只考虑等待时间
SJF/SPF 抢占、非抢占 最短平均等待/周转时间 对长作业不利,可能导致饥饿 只考虑运行时间
HRRN 非抢占式 上述两种算法的权衡折中 / 考虑了等待和运行时间

  上面的三种调度算法一般适用于早期的批处理系统,没有考虑响应时间也不区分任务的紧急程度。因此对用户来说交互性差。

  本文完


  如发现错误,请指正!!!

你可能感兴趣的:(进程调度算法1——FCFS、SJF、HNNR)