进程调度算法
进程调度:从就绪进程中选取一个进程,让它占用处理器的工作称为进程调度。
作业调度选中了一个作业,并且把它装入主存储器中时,就为该作业创建了一个用户进程,若有多个作业被装入主存储器,就会创建多个用户进程,这些进程的初始状态都为就绪态。
如果有多个进程出现,去竞争占用处理器,此时,必须按照规则从就绪进程中选择一个进程,让它占用处理器。
处理器的三级调度
高级、中级和低级调度作业从提交开始直到完成,往往要经历下述三级调度:
高级调度:(High-Level Scheduling)又称为作业调度,它决定把后备作业调入内存运行;
低级调度:(Low-Level Scheduling)又称为进程调度,它决定把就绪队列的某进程获得CPU;
中级调度:(Intermediate-LevelScheduling)又称为在虚拟存储器中引入,在内、外存对换区进行进程对换。
处理器的工作方式
包括两种工作方式,非剥夺方式和剥夺方式。
非剥夺方式:分派程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生某事件而阻塞时,才把处理机分配给另一个进程。
剥夺方式:当一个进程正在运行时,系统可以基于某种原则,剥夺已分配给它的处理机,将之分配给其它进程。剥夺原则有:优先权原则、短进程优先原则、时间片原则。
常见的进程调度算法
常见的进程调度算法,包括先来先服务算法、短进程优先算法、时间片轮转法、最高级优先算法和多级反馈队列调度算法。
先来先服务算法——FIFO
就是按照进程进入就绪队列的先后次序,来选择可占用处理器的进程,当有一个进程就绪时,会把该进程排入就绪队列的末尾,而总是把处理器分配给就绪队列中的第一个进程。
一旦一个进程占用了处理器,它就会一直运行下去,直到该进程完成工作而结束,或者等待某事件而不能运行时,才会让出处理器。
FIFO算法服务质量不佳,容易引起作业用户不满,常作为一种辅助调度算法。
短进程优先算法——SCBF
最短CPU运行期优先调度算法(SCBF--Shortest CPU BurstFirst)该算法就是,从就绪队列中选出下一个“CPU执行期最短”的进程,为之分配处理机。
该算法虽可获得较好的调度性能,但难以准确地知道下一个CPU执行期,而只能根据每一个进程的执行历史来预测。
时间片轮转算法
时间片是指允许进程一次占用处理器的最长时间。
该算法就是,按照就绪进程队列,总是选择第一个进程让它占用处理器,但是,规定它一次连续占用处理器的时间不能超过预定的时间片。
如果允许的时间片用完,而进程尚未完成,此时它必须让出处理器给下一个就绪进程,重新排到就绪队列的末尾等待再次执行,此外,当在允许的时间片内该进程出现了等待事件,也必须让出处理器,排入的等待队列。
一次运行未完成的工作的进程,可以再作第二次的轮转,如此反复循环,直到该进程工作完为止。
前几种算法主要用于批处理系统中,不能作为分时系统中的主调度算法,在分时系统中,都采用时间片轮转法。
最高优先级调度算法
就是对每一个进程分配一个优先级,总是让当前优先级最高的进程使用处理器,此时,又分为两种方式,抢占式和非抢占式。
抢占式:保证任何时刻,都是具有最高优先级的进程在处理器上运行,当有一个优先级更高的进程到达时,当前运行进程必须主动让出处理器。
非抢占式:如果来一个具有更高优先级的进程,处理器上的当前进程,不会让出处理器知道运行结束。
多级反馈队列
就是在系统中设置多个就绪队列,并赋予各队列以不同的优先权,UNIX操作系统采取的便是这种调度算法。
1、进程在进入待调度的队列等待时,首先进入优先级最高的等待。
2、首先调度优先级高的队列中的进程,若高优先级中队列中已没有调度的进程,则调度次优先级队列中的进程。
3、对于同一个队列中的各个进程,按照时间片轮转法调度。
4、在低优先级的队列中的进程在运行时,又有新到达的作业,那么在运行完这个时间片后,CPU马上分配给新到达的作业(抢占式)。