1、先来先服务(FCFS)调度算法
FCFS调度算法是最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。
当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。
在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。
FCFS算法比较有利于长作业(进程),而不利于短作业(进程)。
例题:. 填表采用FCFS算法计算其平均周转时间和平均带权周转时间(以十进制进行计算)。并在下面给出计算分析过程。
作业号 | 提交(到达)时间 | 估计运行时间 | 开始运行时间 | 完成时刻 | 周转时间 | 带权周转时间 |
1 | 8.0 | 2.0 | 8.0 | 10.0 | 2.0 | 1 |
2 | 9.0 | 1.2 | 10.0 | 11.2 | 2.2 | 1.83 |
3 | 9.5 | 0.5 | 11.2 | 11.7 | 2.2 | 4.4 |
4 | 10.2 | 0.3 | 11.7 | 12.0 | 1.8 | 6 |
平均周转时间 和 平均带权周转时间 | 2.05 | 3.308 |
分析过程:
作业1先提交,先运行;8.0开始,10.0结束;10.0时作业2、作业3到达,
作业2先到达,故先运行;10.0开始,11.2完成;11.2时作业4到达,作业3、作业4等待;
作业3先到达,故先运行;11.2开始,11.7完成;11.7时作业4在等待;
故作业4运行,11.7开始,12.0完成。
平均周转时间为:2.05
平均带权周转时间为:3.308
注:周转时间 = 完成时间 - 提交时间
带权周转时间 = 周转时间 / 估计运行时间(或 服务处理时间)
2、短作业优先(SJF)调度算法
SJ(P)F,是指对短作业或短进程优先调度的算法。可以分别用于作业调度和进程调度。
短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。
短进程优先(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。
SJ(P)F算法以作业或进程要求的运行时间长短计算优先级,作业越短,优先级越高,作业的长短是以作业所要求的运行时间来衡量的。
例题:. 填表采用SJF算法计算其平均周转时间和平均带权周转时间(以十进制进行计算)。并在下面给出计算分析过程。
作业号 | 提交(到达)时间 | 估计运行时间 | 开始运行时间 | 完成时刻 | 周转时间 | 带权周转时间 |
1 | 8.0 | 2.0 | 8.0 | 10.0 | 2.0 | 1 |
2 | 9.0 | 1.2 | 10.8 | 12.0 | 3.0 | 2.5 |
3 | 9.5 | 0.5 | 10.0 | 10.5 | 1.0 | 2 |
4 | 10.2 | 0.3 | 10.5 | 10.8 | 0.6 | 2 |
平均周转时间 和 平均带权周转时间 | 1.65 | 1.875 |
分析过程:
作业1先提交,先运行;8.0开始,10.0结束;10.0时作业2、作业3到达,
作业3作业时间短,故先运行;10.0开始,10.5完成;10.5时作业4到达,作业2、作业4等待;
作业4作业时间短,故先运行;10.5开始,10.8完成;10.8时作业2在等待;
最后作业2运行,10.8开始,12.0完成。
平均周转时间为:1.65
平均带权周转时间为:1.875
3、高响应比优先调度算法(HRRN)
为每个作业引入动态优先权,使作业的优先级随着等待时间的增加提高,则长作业在等待一定的时间后,必然有机会分配到处理机。该优先权的变化规律可描述为:
等待时间与服务时间之和就是系统对该作业的响应时间,故该优先权又相当于响应比RP。
例题:请给出下表作业利用HRRN进行调度的调度顺序(以十进制进行计算)计算各作业的周转时间,给出计算分析过程。
作业号 | 提交(到达)时间 | 估计运行时间 | 开始运行时间 | 完成时刻 | 周转时间 | 带权周转时间 |
1 | 8.0 | 2.0 | 8.0 | 10.0 | 2.0 | 1 |
2 | 9.0 | 1.2 | 10.5 | 11.7 | 2.7 | 2.25 |
3 | 9.5 | 0.5 | 10.0 | 10.5 | 1.0 | 2 |
4 | 10.2 | 0.3 | 11.7 | 12.0 | 1.8 | 6 |
分析过程:
(1)8.0作业1到,作业1运行,10.0完成
(2)10.0时作业2、作业3均到达,计算响应比分别为:
R2 = 1+(10.0 - 9.0)/ 1.2 = 1.83
R3 = 1+(10.0 - 9.5)/ 0.5 = 2
R2<R3,作业3先运行,10.5作业3运行完毕。
(3)10.5作业4到达,重新计算作业2和作业4的响应比
R2 = 1+(10.5 - 9.0)/ 1.2 = 2.25
R4 = 1+(10.5 - 10.2)/ 0.3 = 2
R2>R4,作业2先运行,11.7作业2运行完毕。
(4)作业4是最后一个要运行的作业,调度作业4执行完毕。
注:响应比 = 1 + 等待时间 / 处理运行时间