常用的调度算法(包含实例)|操作系统

Posted 桃陉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用的调度算法(包含实例)|操作系统相关的知识,希望对你有一定的参考价值。


1.先来先服务调度算法(FCFS)

原 理 : {\\color{Violet}原理:}

∙ \\bullet 先来先服务(First-Come-First-served)调度算法是最简单非抢占的调度算法。

∙ \\bullet 它通过管理一个FIFO就绪队列来实现,从前到后按顺序将CPU分配给进程。

举 例 : {\\color{Violet}举例:}

∙ \\bullet 现在有如下一组进程:

进程执行时间
P130
P25
P32

所以执行顺序为 < P 1 、 P 2 、 P 3 > <P_{1}、P_{2}、P_{3}> <P1P2P3> ,我们画出它的甘特图来形象的理解:

下面的时刻表示该进程占用CPU的执行时间。(后面的几种调度方法也使用甘特图来帮助理解。)

所以可以计算求得三个进程的平均等待时间为:
0 + 30 + 35 3 ≈ 21.7 {\\color{Red}\\frac{0+30+35}{3}≈21.7} 30+30+3521.7

特 点 : {\\color{Violet}特点:}

∙ \\bullet FCFS调度算法对短进程不利,尤其当一个短进程跟在长进程后面时,它需要等待很长的时间。有时候会导致CPU和设备的利用率很低,在实际情况中,FCFS算法通常与其他算法结合使用。


2.优先级调度算法

原 理 : {\\color{Violet}原理:}

∙ \\bullet 由用户或者系统按照某种原则给进程一个优先级,系统总是调度优先级最高的那个进程运行。

∙ \\bullet 优先级可以分为静态优先级动态优先级。静态优先级就是指优先级确定以后就不再改变,比如说按照它们的执行时间长短来确定等等;动态优先级会随着进程的不断执行而发生改变,比如说可以按照等待时间的长短划分优先级等等。

∙ \\bullet 对优先级动态调整可以改善系统性能,但是动态优先级调度算法会增加系统开销。

举 例 : {\\color{Violet}举例:}

∙ \\bullet 现在有如下一组进程(采用静态优先级调度算法):

进程执行时间优先级
P195
P241
P323
P414

所以执行顺序为 < P 2 、 P 3 、 P 4 、 P 1 > <P_{2}、P_{3}、P_{4}、P_{1}> <P2P3P4P1>,我们画出它的甘特图如下:


所以可以计算求得四个进程的平均等待时间为:
0 + 4 + 6 + 7 4 = 4.25 {\\color{Red}\\frac{0+4+6+7}{4}=4.25} 40+4+6+7=4.25

特 点 : {\\color{Violet}特点:}

∙ \\bullet 可能会出现“饥饿”现象,就是优先级低的进程会一直等待CPU,未来避免这种问题的出现,我们可以采用“老化”的策略,就是按一定时间间隔提高等待进程的的优先级数值。

∙ \\bullet 我们假设它们几乎同时到达,但是实际情况中总会有先后顺序,在支持抢占的系统中,当新进程进入就绪队列时,如果它的优先级高于当前运行进程的优先级,那么就会抢占CPU;在非抢占系统中,只是将新进程加入了就绪队列中。


3.最短作业优先调度算法(SJF)

原 理 : {\\color{Violet}原理:}

∙ \\bullet 最短作业优先(Shortest-Job First)调度算法克服了FCFS的对短进程不利的缺点,它在就绪队列中选择处理时间最短的进程,如果时间相同则可以按照FCFS准则来处理。

∙ \\bullet 它提高了系统的吞吐量,但是反过来又对长进程不利。

∙ \\bullet 它分为抢占式和非抢占式两种情况

举 例 : {\\color{Violet}举例:}

∙ \\bullet 现在有如下一组进程,假设它们同时到达(非抢占式):

进程执行时间
P15
P24
P39
P43

所以执行顺序为 < P 4 、 P 2 、 P 1 、 P 3 > <P_{4}、P_{2}、P_{1}、P_{3}> <P4P2P1P3>,我们画出它的甘特图如下:

所以可以计算求得三个进程的平均等待时间为:
0 + 3 + 7 + 12 4 = 5.5 {\\color{Red}\\frac{0+3+7+12}{4}=5.5} 40+3+7+12=5.5

∙ \\bullet 现在有如下一组进程,假设它们不同时到达(抢占式):

进程到达时间执行时间
P108
P214
P329
P435

最初只有P1进程,那么执行P1进程;当时间1时P2到达,此时P1剩余执行时间为7,P2执行时间为4,那么执行P2进程;当时间2时,P3到达,此时最短执行时间仍然为P2;时间3时,P4到达,此时P2执行时间为2,P4也为2,所以先让P2执行完在让P4执行,然后再让P1执行,最后在让P3执行。

所以执行顺序为 KaTeX parse error: Expected 'EOF', got '}' at position 31: …{4}、P_{1}、P_{3}}̲>,我们画出它的甘特图如下:


所以可以计算求得三个进程的平均等待时间为:
( ( 10 − 1 ) + 0 + ( 17 − 2 ) + ( 5 − 3 ) ) 4 = 6.5 {\\color{Red}\\frac{((10-1)+0+(17-2)+(5-3))}{4}=6.5} 4((101)+0+(172)+(53))=6.5

分母上面的式子为每个进程开始执行的时间减去开始等待的时间之和。

特 点 : {\\color{Violet}特点:}

∙ \\bullet 对于非抢占的SJF调度算法,可以看作是优先级调度算法的一种特例。


4.最高相应比优先调度算法(HRRN)

原 理 : {\\color{Violet}原理:}

∙ \\bullet 最高响应比(Highest Response Ratio Next)调度算法集合了FCFS算法和非抢占SJF算法的优点,使用响应比R来表征,即:
R = W + S S   ( W 为 等 待 时 间 、 S 为 预 计 执 行 时 间 ) R = \\frac{W+S}{S} \\ (W为等待时间、S为预计执行时间) R=SW+S (WS)

∙ \\bullet 在该算法下,等待时间相同的时候短进程响应比高于长进程,短进程优先被调度;而随着等待时间增长,进程的响应比增加,长进程被调度的可能性也会增加。

举 例 : {\\color{Violet}举例:}

∙ \\bullet 现在有如下一组进程如下:

进程到达时间执行时间
P1010
P211
P322
P431
P545

∙ \\bullet 0时刻P1运行,10时刻P1运行完毕,此时P2 ~ P5的响应比为:

P 2 : 1 + 9 1 = 10 ;     P 3 : 2 + 8 2 = 5 ; P_{2}:\\frac{1+9}{1}=10 ;\\ \\ \\ P_{3}:\\frac{2+8}{2}=5; P2:11+9=10;   P3:22+8=5;

P 3 : 1 + 7 1 = 8 ;     P 4 : 5 + 6 2 = 5.5 ; P_{3}:\\frac{1+7}{1}=8 ;\\ \\ \\ P_{4}:\\frac{5+6}{2}=5.5; P3:11+7=8;   P4:25+6=5.5;

∙ \\bullet 所以P2运行,直到11时刻运行结束,此时P3 ~ P5的响应比为:

P 3 : 2 + 9 2 = 5.5 ;     P 4 : 1 + 8 2 = 9 ;     P 5 : 5 + 7 5 = 2.4 ; P_{3}:\\frac{2+9}{2}=5.5 ;\\ \\ \\ P_{4}:\\frac{1+8}{2}=9; \\ \\ \\ P_{5}:\\frac{5+7}{5}=2.4; P3:22+9=

以上是关于常用的调度算法(包含实例)|操作系统的主要内容,如果未能解决你的问题,请参考以下文章

进程调度算法

操作系统常用调度算法

常用的操作系统进程调度算法

常用调度算法总结

操作系统的常用的进程调度算法

操作系统中常用的进程调度算法