赞
踩
什么叫做饥饿?就是进程一直不被CPU处理。FCFS算法不会导致饥饿是因为,它的所有的进程按到来的时间先后顺序依次执行,所以每个进程都会被执行到。SJF/SPF算法会导致饥饿,是因为可能有大量的短作业,这样长作业进程永远也不会进行。HRRN算法不会导致饥饿是因为,它会先执行高响应比(你可以粗略地理解成等待时间长,但是并不是)的进程,所以不会有进程一直等待被CPU处理,因此不会饥饿。
注:这几种算法主要关心对用户的公平性、平均周转时间、平均等待时间等评价系统整体性能的指标,但是不关心“响应时间”,也并不区分任务的紧急程度,因此对于用户来说,交互性很糟糕。因此这三种算法一1111111111般适合用于早期的批处理系统。
例题:各进程到达就绪队列的时间、需要的运行时间如下表所示。使用先来先服务调度算法,计算各进程的等待时间、平均等待时间、周转时间、平均周转时间、带权周转时间、平均带权周转时间。
先来先服务调度算法:按照到达的先后顺序调度,事实上就是等待时间越久的越优先得到服务。因此,调度顺序为:P1–>P2–>P3–>P4
周转时间=完成时间-到达时间 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; (注意:本例中的进程都是纯计算型的进程,一个进程到达后要么在等待,要么在运行。如果是又有计算、又有I/O操作的进程,其等待时间就是周转时间-运行时间-I/O操作的时间)
平均周转时间=(7+9+8+11)/4=8.75
平均带权周转时间=(1+2.25+8+2.75)/4=3.5
平均等待时间=(0+5+7+7)/4=4.75
例题:各进程到达就绪队列的时间、需要的运行时间如下表所示。使用非抢占式(短进程优先调度算法(SPF))的短作业优先调度算法,计算各进程的等待时间、平均等待时间、周转时间、平均周转时间,带权周转时间、平均带权周转时间。
短作业/进程优先调度算法:每次调度时选择当前已到达且运行时间最短的作业/进程。因此调度顺序为:P1–>P3–>P2–>P4
刚开始时刻为0的时候,只有P1进程,虽然它的运行时间很长,但P1仍是第一个被调度的,然后P3的运行时间是1,所以P3优先调度,而P2和P4的运行时间都是4,但是P2先来的,所以P2会优先调度。
周转时间=完成时间-到达时间 P1=7-0=7; P3=8-4=4; P2=12-2=10; P4=16-5=11
带权周转时间=周转时间/运行时间 P1=7/7=1; P3=5/1=5; P2=10/4=2.5; P4=11/4=2.75;
等待时间=周转时间-运行时间 P1=7-7=0; P3=4-1=3; P2=10-4=6; P4=11-4=7;
平均周转时间=(7+4+10+11)/4=8
平均带权周转时间=(1+4+2.5+2.75)/4=2.56
平均等待时间=(0+3+6+7)/4=4
对比FCFS算法的结果,显然SPF算法的平均等待/周转/带权周转时间都要更低
例题:各进程到达就绪队列的事件、需要的运行时间如下表所示。使用抢占式(抢占式的短作业优先算法又称"最短剩余时间优先算法(SRTN)")的短作业优先调度算法,计算各进程的等待时间、平均等待时间、周转时间、平均周转时间、带权周转时间、平均带权周转时间。
最短剩余时间优先算法:每当有进程加入就绪队列改变时就需要调度,如果新到达的进程运行的剩余时间比当前运行的进程运行的剩余时间更短,则由新进程抢占处理机,当前运行进程重新回到就绪队列。另外,当一个进程完成时也需要调度剩余时间最短的进程
需要注意的是,当有新进程到达时就绪队列就会改变,就要按照上述规则进行检查。一下Pn(m)表示当前Pn进程剩余时间为m。各个时刻的情况如下:
0时刻(P1到达):P1(7) 此时P1进程运行
2时刻(P2到达):P1(5),P2(4) 此时会停止P1进程运行,切换P2进程
4时刻(P3到达):P1(5),P2(2),P3(1) 此时会停止P2进程,切换P3进程
5时刻(P3完成且P4刚好到达):P1(5),P2(2),P4(4) 此时P2剩余运行时间最少,会切换到P2进程
7时刻(P2完成):P1(5),P4(4) 此时P4剩余运行时间最少,会切换到P4进程
11时刻(P4完成):P1(5) 此时只剩P1进程,会切换到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+5+1+6)/4=7
平均带权周转时间=(2.28+1.25+1+1.5)/4=1.50
平均等待时间=(9+1+0+2)/4=3
对比非抢占式的短作业优先算法,显然抢占式的平均周转/带权周转/等待时间又要更低。
FCFS算法是在每次调度的时候选择一个等待时间最长的作业(进程)为其服务。但是没有考虑到作业的运行时间,因此导致了对短作业不友好的问题。
SJF算法是选择一个执行时间最短的作业为其服务。但是又完全不考虑各个作业的等待时间,因此导致了对长作业不友好的问题,甚至还会造成饥饿问题。
能不能设计一个算法,即考虑到各个作业的等待时间,也能兼顾运行时间呢?可以,那就是高响应比优先算法。
例题:各进程到达就绪队列的事件、需要的运行时间如下表所示。使用高响应比优先调度算法,计算各进程的等待时间、平均等待时间、周转时间、平均周转时间、带权周转时间、平均带权周转时间。
高响应比优先算法:非抢占式的调度算法,只有当前运行的进程主动放弃CPU时(正常/异常完成,或主动阻塞),才需要进行调度,调度时计算所有就绪进程的响应比,选响应比最高的进程上处理机。
0时刻:只有P1到达就绪队列,P1上处理机
7时刻(P1主动放弃CPU):就绪对垒中有P2(响应比=(5+4)/4=2.25)、P3((3+1)/1=3)、P4((2+4)/4=1.5)
8时刻(P3完成):P2(2.5),P4(1.75)
12时刻(P2完成):就绪队列中只剩下P4
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。