PS:该博文所有的图片均来自课堂授课的 PPT 截图。感谢老师提供的 PPT 。
写在前面
- 评价作业调度算法的优劣,通常看平均周转时间和带权周转时间
- 周转时间 = 作业完成时间 - 作业到达时间
- 平均周转时间 = (作业完成时间 - 作业到达时间)/ 作业数量
- 带权周转时间 = 作业周转时间 / 作业服务时间
先来先服务算法
顾名思义,先来先服务算法就是先来的作业先调度运行,后来的后运行。和队列的先进先出
的意思是一样的。不过先来先服务算法很少单独使用,都是和其他算法一起结合使用。
实例
我们来计算 A 和 B 的周转时间和带权周转时间(C,D 两个的计算就一样了)。
比如 A 的周转时间就是 T完成 - T到达,也就是 1 (个时间单位)。带权周转时间就是 1 / 1 = 1。
B 的周转时间是 101 - 1 = 100,带权周转时间,100 / 100 = 1。
下面给出全部的周转时间和带权周转时间
短作业优先算法
短作业调度算法的核心在于,运行时间越短的作业就先执行。
这里有两个需要注意的地方:
1.首先,第一到达的作业一定先运行,因为经常题目中是给
出所有的作业,很多初学者以为直接从中选取短作业。
2.要注意,在后续比较作业长短的时候,要看作业是否到达,就是上图的到达时间,没
有到达的作业是不能比较的。
3. 短作业优先具有最短的平均周转时间
实例:这个实例包含了先来先服务算法(两者的比较)
这里讲 A 和 D 两个作业(因为 D 短作业优先)。
首先,A 作业是先到达的,毋庸置疑,先计算 A 。
A 周转时间是 T完成 - T到达 = 4,带权周转是 4 / 4 = 1
我们观察,当 A 作业完成的时候,已经过去了 4 个时间单位了。而B,C,D,E 的到达时间为 1,2,3,4。所以所有作业均已到达,这个时候可以比较哪个是短作业了。观察服务时间,D 为 2 是最短的。
D 的周转时间 6 - 3 = 3 , 带权周转时间 3 / 2 = 1.5 。其他的作业也是用同样的方式计算。
高响应比优先调度算法
我们分析上面的两个算法,先来先考虑的是作业的等待时间,而短作业考虑的是作业的运
行时间,都有优劣,但是如果把二者结合起来岂不是更好,这就是高响应比优先调度算
法。
注意:该算法的优先级需要每执行一个进程后重新计算一次。
优先级的计算:
变换上式可以得到:优先权 = 1 + (等待时间 / 要求服务时间)
这个算式在考试分析中更常用。
实例
同样,我这里演示 A 和 B 的计算方式。(这里没有列出完成时间,需要自己计算)
A 先到达,毋庸置疑必须先计算,周转时间:3 - 0 = 3,带权周转时间 3 / 3 =1
当 A 完成的时候,过去了 3 个单位时间(服务时间),此时只有 B 进程到达(B 的到达时间是 2)。
所以 B 的周转时间 , 9 - 2 =7 。 带权周转时间 7 / 6 = 1.17。
再接着看,当 B 完成时,时间到达了 9 这个时间单位。而 C,D,E 都再 9 之前到达了。所以这个时候要看谁的优先级高。
- C 的优先级:1+5/4 = 2.25
- D 的优先级:1+3/5 = 1.6
- E 的优先级:1+1/2 = 1.5
计算得到 C 的优先级最高,所以先计算 C 周转时间和平均周转时间。计算方式同上。
同理,计算 D 和 E 的优先级,计算得到 E 的优先级更高。
同样的方式计算下面的内容。
你可以把这个题的 先来先服务算法 和 短作业调度算法 也计算一下,最后可以得出谁的效率更高。
这是三个算法在这道题上的比较
我们可以看到短作业调度算法的效率更高。但是并不是说这个算法是最好的,每个算法有利有弊,需要看具体情况使用。