1 相关概念
a.剥夺式:与非剥夺式相反,即进程可能在没有运行完毕就被置换出来
非剥夺式:进程进入处理器后直至运行结束,否则不会让出处理器。
b.周转时间:从向系统提交作业开始到作业完成为止的时间间隔
加权周转时间:记周转时间 x, 所需运行时间y,加权周转时间= x/y
周转时间用于比较同一作业流调度性能,而加权周转时间用于比较不同作业流调度性能
2 先来先服务算法
简介:根据作业添加到就绪队列的顺序进行调度。此算法为非剥夺式,即一个作业运行完毕,另一个作业才会被调度到处理器。
分析:
作业名 | 所需CPU时间/ms |
---|---|
作业一 | 28 |
作业二 | 9 |
作业三 | 3 |
按此执行顺序,平均周转时间=(28+ 28+9 + 28+9+3)/ 3 = 35ms。倘若将作业顺序换为2、1、3,则平均周转时间为29ms。可见先来先服务算法的平均作业周转时间与作业的提交的调度顺序有关。
3 最短作业优先算法
简介:顾名思义,即在就绪作业队列中挑选最短运行市场的作业先执行。
分析:
作业名 | 所需CPU时间/ms |
---|---|
作业一 | 28 |
作业二 | 9 |
作业三 | 3 |
根据所需CPU时间升序排列,平均周转时间为(3+ 3+9 + 3+9+28)/ 3 = 18ms。
面临问题:一是此算法需要先预估运行时间,倘若预估时间过短,系统会提前终止作业。二是忽视作业等待时间,由于系统不断接受新作业,因此长作业的等待时间会过长,出现饥饿现象。但是此算法执行性能仍优于先来先服务算法,可比较两者平均周转时间。
4 最短剩余时间优先算法
简介:此算法根据最短运行时间进行调度处理的。和上述最短作业优先算法明显区别是此算法为剥夺式算法。
分析:
作业名 | 所需CPU时间/ms | 到达系统时间 |
---|---|---|
作业一 | 8 | 0 |
作业二 | 4 | 1 |
作业三 | 9 | 2 |
作业四 | 5 | 3 |
作业一从0开始执行,此时就绪队列中只有一个进程;作业二在时间1到达,而作业一的剩余时间(7ms)大于作业二所需CPU时间(4ms),所以作业一被剥夺,作业二被调度执行;作业三在时间2到达,此时作业二CPU时间少于作业三,则作业二继续执行,当作业二执行完毕后,作业四已在就绪队列中,作业四根据调度原则被调度进处理器开始执行,作业四执行完毕后根据算法原则,作业一被调度进处理器,最后作业三被调度执行。所以可得相关时间为:
平均等待时间:((10-1)+(1-1)+(17-2)+(5-3))/ 4 = 6.5ms
平均周转时间:((17-0)+(5-1)+(26-2)+(10-3))/ 4 = 13ms
5 优先级调度算法
简介:该算法根据预先设置的优先级进行调度。
分析:该算法可以是剥夺式,也可以是非剥夺式。两者区别可以参考上述概念。除此之外,该算法的优先级可以是静态的也可以是动态的。
静态优先级:线程/进程在创建时便确立优先级,生命周期内不再改变
动态优先级:优先级会在运行过程中动态改变。例如,进程随占用CPU时间增多而优先级减少,进程随等待CPU时间增多而优先级增加。
这样的好处是不至于出现饥饿现象,即优先级低的进程一直得不到执行。
6 轮转调度算法
简介:调度程序为每个进程分配一个运行时间,简称时间片
分析:
此算法为剥夺式,即随时间的消耗而让出处理器。因此带来一个问题,即时间片的长短分配问题。倘若时间片过长,则运行周期边长。倘若时间片过短,则进程间来回切换,切换的开销也是可观的。