进程调度算法
1、批处理系统中的调度
(1)先来先服务:
⾮抢占式的调度算法,按照请求的顺序进⾏调度。
有利于长作业,但不利于短作业,因为短作业必须⼀直等待前⾯的长作业执⾏完毕才能执⾏,⽽长作业又需要执⾏
很长时间,造成了短作业等待时间过长。
(2)最短作业优先:
⾮抢占式的调度算法,按估计运⾏时间最短的顺序进⾏调度。
长作业有可能会饿死,处于⼀直等待短作业执⾏完毕的状态。因为如果⼀直有短作业到来,那么长作业永远得不到
调度。
(3)最短剩余时间优先:
最短作业优先的抢占式版本,按剩余运⾏时间的顺序进⾏调度。
当⼀个新的作业到达时,其整个运⾏时间与当前进程的剩余时间作⽐较。如果新的进程需要的时间更少,则挂起当
前进程,运⾏新的进程。否则新的进程等待。
2、交互式系统中的调度
(1)时间⽚轮转调度
将所有就绪进程按 FCFS 的原则排成⼀个队列,每次调度时,把 CPU 时间分配给队⾸进程,该进程可以执⾏⼀个时
间⽚。当时间⽚⽤完时,由计时器发出时钟中断,调度程序便停⽌该进程的执⾏,并将它送往就绪队列的末尾,同
时继续把 CPU 时间分配给队⾸的进程。
(2)优先级调度
为每个进程分配⼀个优先级,按优先级进⾏调度。为了防⽌低优先级的进程永远等不到调度,可以随着时间的推移
增加等待进程的优先级。
(3)多级队列
⼀个进程需要执⾏ 100 个时间⽚,如果采⽤时间⽚轮转调度算法,那么需要交换 100 次。
多级队列是为这种需要连续执⾏多个时间⽚的进程考虑,它设置了多个队列,每个队列时间⽚⼤⼩都不同,例如
1,2,4,8,..。进程在第⼀个队列没执⾏完,就会被移到下⼀个队列。这种⽅式下,之前的进程只需要交换 7 次。
每个队列优先权也不同,最上⾯的优先权最⾼。因此只有上⼀个队列没有进程在排队,才能调度当前队列上的进
程。(在优先度同级的基础上采用时间片轮转调度)
可以将这种调度算法看成是时间⽚轮转调度算法和优先级调度算法的结合。
(4)最短进程优先
如果我们将每⼀条命令的执⾏看作是⼀个独⽴的“作业”,则我们可以通过⾸先运⾏最短的作业来使响应事件最短