1.先来先服务调度算法(FCFS):
按照到达的先后顺序进行调度。
周转时间=完成时间 - 到达时间
带权周转时间=周转时间 / 运行时间
等待时间=周转时间 - 运行时间
特殊情况:当有I/O操作(输入/输出)的进程的时候,等待时间=周转时间 - 运行时间 - I/O操作时间
非抢占式的算法:由系统主动结束进程,而非外界将进程中断。
“饥饿”:某进程长期得不到服务,进而导致’饥饿‘
2.短作业优先算法(SJF):
(1)短进程优先调度算法(SPF):
该算法是非抢占式的。
P1P3
P2
P4 :
因为P1到达时间为0,所以P1先进行运算。等P1运算完成时,时间来到了7秒,这时候P2,P3,P4都已经到达。根据短进程优先的原则,P3的运行时间为1秒,所以先进行P3的运算。P3结束后,由于P2与P4的运行时间相同,所以比较到达时间,P2的到达时间比P4快,所以先进行P2的运算,再进行P4的运算。
(2)最短剩余时间优先算法(SRTN):
该算法是抢占式的。
P1P2
P3
P2
P4
P1 :
因为P1的到达时间为0,所以先进行P1的运算,当P1运行了两秒时,P2到达,(这时候P1还需要5秒运算完成,而P2只需要4秒完成。根据最短剩余时间优先的规则 ,这时候停止P1的运算,进行P2的运算。 )当P2运行2秒的时候,P3到达就绪队列(P3只需要1秒就可运行完毕,而P2还需要2秒才能运行完毕。根据最短剩余时间优先的规则,停止P2的运算,进行P3的运算)当P3运行完1秒时(P3已结束),P4已到达。这时候 P1因为一开始已经运行了两秒,所以还剩5秒。同理,P2还剩2秒,P4还剩4秒。进行比较剩余时间,根据最短剩余时间优先的规则,先进行P2的运行,再进行P4的运行,最后进行P1的运行。
注意:
3.高响应比优先算法(HRRN):
该算法是非抢占式的。
P1P3
P2
P4 :
首先P1先到达,先进行运算,由于该调度算法是非抢占式的,所以P1会进行到底,进行到底之后,时间过了7秒,这时候P2,P3,P4都到达了,所以要比较响应比,在P1进行到了第4秒的时候,P3开始进入就绪队列,开始进行准备,当P1结束时,P3的等待时间为3秒,要求服务时间为1秒,所以P3的响应比为3。同理,P2,P4的响应比为2.25,1.5。 P3的响应比最大,所以先进行P3的进程。由于该调度算法是非抢占式的,所以P3会进行到底,所以等P3运行结束后,再比较P2与P4的抢占比(要重新计算),所以就是先进行P2,在进行P4。
4.时间片轮转调度算法(RR,Round-Robin):
时间片轮转常出现在分时操作系统中,更注重“响应时间”
时间片不易过大也不能过小。(过大会增大进程的响应时间,过小会使进程切换过于频繁)
一般来说,设计时间片时要让切换进程的开销占比不超过百分之一
5.优先级调度算法:
(1)非抢占式的优先级调度算法:
一般来说,优先数越大,优先级越高,但还是要以题目为准。
(2)抢占式的优先级调度算法:
小结:
静态优先级:创建进程时确定,之后一直不变。
动态优先级:会根据情况动态地调整优先级,当某个进程在就绪队列中等待很长时间后,可以适当提升其优先级,若某进程占用处理机很长时间,则可适当降低其优先级。
6.多级反馈队列调度算法:
多级反馈队列调度算法是对其他算法的折中权衡
总结:
哇哇哇,今天写了一天的文章,真的好多字呀,不过很开心,这些内容我都看了好几遍,都理解了呢,好开心,再写上了自己的见解,感觉蛮不错,哈哈,表扬自己一下下,我会好好加油呐。