文章目录
- 一、先来先服务(FCFS)调度算法
- 二、最短作业优先(SJF)算法
- 1. 非抢占式SJF
- 2. 抢占式SJF
- 三、优先级调度算法
- 1. 非抢占式优先级调度算法
- 2. 抢占式优先级调度算法
- 四、时间片轮转(RR)算法
- 五、多级队列调度
一、先来先服务(FCFS)调度算法
非抢占式调度,选择就绪队列中等待最长时间的进程。
评价:简单;系统开销小;对长进程有优势;更利于多CPU处理的进程。
带权周转时间=周转时间/服务时间
例子:下图中,P1到P5五个进程根据到达时间,每个进程结束之后,下一个进程才开始运行。
二、最短作业优先(SJF)算法
选择下一个期望最短处理时间的进程运行。
1. 非抢占式SJF
当运行进程主动放弃CPU控制权时进行调度。
例子:P1进程0时刻到达,开始运行,运行到2时刻时,P2进程到达并等待。P1在3时刻运行完,此时只有P2在等待,故P2开始运行。运行期间,4时刻时,P3到达,6时刻时P4到达,8时刻时P5到达,9时刻时P2运行完,此时P3、P4、P5都在等待,根据最短作业优先算法,P5运行时间最短,故先调度P5。P5结束后,P3和P4中,P3运行时间最短,故调度P3,最后调度P4。
2. 抢占式SJF
进程主动离开CPU时调度运行时间最短的进程。
当新到达进程的运行时间小于正在运行进程的剩余运行时间时,调度新进程。
缺点:需要知道或者估计进程会执行多长时间;可能使长进程产生饥饿;因为没有剥夺,所以不适合在实时系统中实现。
例子:P1在0时刻到达,开始运行。2时刻时P2到达,此时P1剩余运行时间为1,P2的运行时间为6,P1更小,故P1继续运行。3时刻时,P1运行结束。此时只有进程P2在等待,故P2开始运行。4时刻时,P3到达,此时P2的剩余运行时间为5,P3的运行时间为4,P3更小,故P2中断,调度P3运行,P2进入等待队列。6时刻时,P4到达,此时P3的剩余运行时间为2,P4的运行时间为5,P3更小,故继续运行P3,P4进入等待队列。8时刻时,P4运行结束,P5到达。此时等待队列中又P2、P4和P5,运行时长分别为5、5和2。故P5先运行。由于时长一样,故P5结束后从队列中按FCFS运行P2和P4。
三、优先级调度算法
非抢占式/抢占式
每个进程有一个优先级,优先级由优先数来表示。
优先级不同时调度优先权最高的进程,优先级相同时按照FCFS顺序调度。
1. 非抢占式优先级调度算法
优先数在括号中给出,优先数越小,优先级越大。
例子:0时刻P1到达开始运行。2时刻P2到达后等待。P1运行之后,等待的进程P2开始运行。P2运行期间,P3、P4、P5都到达了,都在等待队列中。此时由于优先级P5>P3>P2,故P2运行完之后,按着优先级依次调度P5、P3和P2。
2. 抢占式优先级调度算法
新进程到达时,若其优先级高于正在运行的进程,则调度新进程。
四、时间片轮转(RR)算法
抢占式调度算法
时钟每隔一段时间产生一个中断,运行状态的进程进入就绪状态,用FCFS方法从就绪队列中选择一个进程去执行。
若时间片太短,则系统开销大;若时间片太长,则变成FCFS算法。
例子:假设时间片长度设为4,P1运行时间长度3,长度小于4,用不完一个时间片。2时刻P2进入就绪队列。3时刻P1结束进程后,P2开始运行,期间4时刻P3到达,6时刻P4到达,P3和P4依次进入就绪队列。7时刻P2中断,运行P3,P2进入就绪队列,此时就绪队列中进程顺序为P4、P2。8时刻P5到达,进入就绪队列,此时就绪队列中进程顺序为P4、P2、P5。11时刻P3运行完,运行P4,此时就绪队列中进程顺序为P2、P5。15时刻,P4中断并进入就绪队列,此时就绪队列中进程顺序为P2、P5、P4,运行时间均小于4,按FCFS依次运行完。
五、多级队列调度
将就绪队列划分为多个队列,各个队列有不同的优先级。一个进程进入系统后根据其具体情况(比如内存大小、优先级大小、进程的类型等)分批到固定的队列中,队列之间用优先级调度,同一队列用自己的调度算法。
例如:前台交互进程和后台批处理进程放到不同的队列中,前台交互式进程优先级更高。前台交互式进程采用RR,后台批处理进程用FCFS。
高优先级的进程没有运行完,低优先级的进程无法运行。低优先级的进程正在运行时,有高优先级的进程到达的话,可以抢占CPU。