低级调度算法
先来先服务算法(FCFS)
先来先服务算法按照作业进入系统后备作业队列的先后次序来挑选作业,和名字一样,谁先到就先服务谁。是一种非剥夺式调度算法。用下面这个例子来具体说明:
作业名 | 所需CPU时间/ms |
作业1 | 28 |
作业2 | 9 |
作业3 | 3 |
所以三个作业的周转时间为28ms,37ms,40ms(有同学可能会好奇为什么 第二个作业的周转时间是37ms而不是9ms,注意!是周转时间,周转时间指的是从作业到达后备作业队列到完成这个作业的时间,作业2的周转时间即28+9=37ms,即包括了在等待作业1做完的这段时间,同理作业3)
故平均作业周转时间T=(28+37+40)/3=35ms
FCFS算法的缺点是只顾及作业等待时间,未考虑作业要求服务时间的长短,就是不管多长时间的作业,只要是第一个来到的,就第一个服务,不能进行调度。如果按上面的例题把作业顺序调为2,1,3,那平均作业周转时间就缩短为约29ms。所以FCFS算法的平均作业周转时间与作业的提交和调度顺序有关。
最短作业优先算法(SJF)
最短作业优先算法以进入系统作业所要求的CPU运行时间的长短为标准,总是选取预计计算时间最短的作业投入运行。也是一种非剥夺式的算法。以下用例子来具体说明:
作业名 | 所需CPU时间/ms |
作业1 | 9 |
作业2 | 4 |
作业3 | 10 |
作业4 | 8 |
如表格所见,四个作业已经进入了系统的后备作业中,按照最短作业优先算法的要求,作业的调度顺序为2,4,1,3.
则平均作业周转时间T为:
T=(4+12+21+31)/4=17ms
平均带权作业周转时间W为:
W=(4/4+12/8+21/9+31/10)/4=1.98
什么是平均带权周转时间?和平均作业周转时间有什么不同?
看上面的计算过程可知,平均作业周转时间只是把周转时间加起来后除以对应的作业数量,平均带权周转时间则在每个作业的周转时间上除以每个作业的所需CPU时间,即带权周转时间=周转时间/所需CPU时间
对比FCFS算法
平均作业周转时间T为
T=(9+13+23+31)/4=19ms
平均带权作业周转时间W为
W=(9/9+13/4+23/10+31/8)/4=2.61ms
可见SJF算法的平均作业周转时间比FCFS要短。但是实现SJF算法要事先知道作业的运行时间,否则调度没有依据。
最短剩余时间优先算法(SRTF)
最短剩余时间优先算法是SJF算法的变种,SJF是非剥夺式的,SRTF是剥夺式的SJF。假设当前某进程/线程正在运行,如果有新进程/线程移入就绪队列,若它所需要的CPU运行时间比当前运行进程/线程所需要的剩余CPU时间还短,抢占式最短作业优先算法强行剥夺当前执行者的控制权,调度新进程/线程执行。以下用例题来具体讲解:
进程 | 到达系统时间 | 所需CPU时间/ms |
p1 | 0 | 8 |
p2 | 1 | 4 |
p3 | 2 | 9 |
p4 | 3 | 5 |
注意看以下的步骤:
①p1在0开始执行,然后p2在时间1到达,由于p2的所需CPU时间小于p1,所以p2抢占了p1从而占用CPU
②当p2运行完后,时间已经到了5
③这个时候p3,p4也已经进入了就绪队列,但是p4的所需CPU时间小于p1和p3,故先运行p4
④p4运行完后,时间由5+5=10,这个时候由于p1所需CPU时间小于p3,所以先运行p1
⑤因为前面p1已经运行了1ms,所以现在p1只需要运行7ms,时间到了17
⑥最后运行p3,从17开始,加上p3所需要的9,所以完成时间是26
故平均等待时间=((10-1)+(1-1)+(17-2)+(5-3))/4=6.5ms
平均周转时间=((17-0)+(5-1)+(26-2)+(10-3))/4=13ms
平均等待时间怎么算的?10-1,因为时间10后p1才开始执行,然后前面已经执行了时间1(执行了时间1后就被p2剥夺了),所以是10-1;p2是1-1,因为一进来就是时间1,因为是时间最短的就被当场执行;p3是17-2,因为P3达到系统时间是2,然后在时间17开始执行,所以是17-2;P4在时间3出场,时间5执行,所以是5-3。
平均周转时间就是从进入到结束的时间,这里不再叙述。
最高响应比优先算法(HRRF)
最高响应比优先算法在进行调度时需要计算每个作业的最高响应比。
响应比怎么算呢?
最高响应比=作业周转时间/作业处理时间=(作业等待时间+作业处理时间)/作业处理时间=1+作业等待时间/作业处理时间
根据谁的响应比最高来决定谁先执行
以下用例题来具体说明:
作业名 | 到达系统时间 | 所需CPU时间/ms |
作业1 | 0 | 20 |
作业2 | 5 | 15 |
作业3 | 10 | 5 |
作业4 | 15 | 10 |
执行HRRF算法计算过程如下:
①作业1执行完后,执行时间为20ms
②作业2的响应比为 1+15/15,怎么算的?到达系统时间5,等cpu等了时间15(这15ms作业1正在用CPU),所以响应比=(15+15) /15=1+15/15
作业3的响应比为1+10/5,怎么算的?到达系统时间是10,等CPU等了时间10(这10ms作业1正在用CPU),所以响应比=(10+5)/5=1+10/5
同理作业4也一样,是1+5/10。
每个作业的响应比都要根据第一个作业来进行计算
③因为作业3的响应比最高,所以执行作业3,剩余作业的响应比为1+20/15、1+10/10
④所以执行为作业2后执行作业4
平均作业周转时间T为
T =(20+(25-10)+(40-5)+(50-15))/4=26.25ms
平均带权作业周转时间W为
W=(20/20+15/5+35/15+35/10)/4=2.46ms
本例题来自书
操作系统教程(第5版)费翔林 骆斌 编著
p100-p105
其余操作系统的算法可在博主空间找到!
感谢大家浏览,谢谢!