调度种类:
- 高级调度:(High-Level Scheduling)又称为作业调度,它决定把后备作业调入内存运行;
- 中级调度:(Intermediate-Level Scheduling)又称为在虚拟存储器中引入,在内、外存对换区进行进程对换。
- 低级调度:(Low-Level Scheduling)又称为进程调度,它决定把就绪队列的某进程获得CPU;
非抢占式调度与抢占式调度
-
非抢占式:分派程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生进程调度进程调度某事件而阻塞时,才把处理机分配给另一个进程。
-
抢占式:操作系统将正在运行的进程强行暂停,由调度程序将CPU分配给其他就绪进程的调度方式。
调度算法:
FIFO或First Come, First Served (FCFS)先来先服务
-
调度的顺序就是任务到达就绪队列的顺序。
-
公平、简单(FIFO队列)、非抢占、不适合交互式。
-
未考虑任务特性,平均等待时间可以缩短。
Shortest Job First (SJF)
-
最短的作业(CPU区间长度最小)最先调度。
-
SJF可以保证最小的平均等待时间。
Shortest Remaining Job First (SRJF)
-
SJF的可抢占版本,比SJF更有优势。
-
SJF(SRJF): 如何知道下一CPU区间大小?根据历史进行预测: 指数平均法。
优先权调度
-
每个任务关联一个优先权,调度优先权最高的任务。
-
注意:优先权太低的任务一直就绪,得不到运行,出现“饥饿”现象。
Round-Robin(RR)轮转调度算法
-
设置一个时间片,按时间片来轮转调度(“轮叫”算法)
-
优点: 定时有响应,等待时间较短;缺点: 上下文切换次数较多;
-
时间片太大,响应时间太长;吞吐量变小,周转时间变长;当时间片过长时,退化为FCFS。
多级队列调度
-
按照一定的规则建立多个进程队列
-
不同的队列有固定的优先级(高优先级有抢占权)
-
不同的队列可以给不同的时间片和采用不同的调度方法
-
存在问题1:没法区分I/O bound和CPU bound;
-
存在问题2:也存在一定程度的“饥饿”现象;
多级反馈队列
-
在多级队列的基础上,任务可以在队列之间移动,更细致的区分任务。
-
可以根据“享用”CPU时间多少来移动队列,阻止“饥饿”。
-
最通用的调度算法,多数OS都使用该方法或其变形,如UNIX、Windows等。
多级反馈队列调度算法描述:
-
进程在进入待调度的队列等待时,首先进入优先级最高的Q1等待。
-
首先调度优先级高的队列中的进程。若高优先级中队列中已没有调度的进程,则调度次优先级队列中的进程。例如:Q1,Q2,Q3三个队列,只有在Q1中没有进程等待时才去调度Q2,同理,只有Q1,Q2都为空时才会去调度Q3。
-
对于同一个队列中的各个进程,按照时间片轮转法调度。比如Q1队列的时间片为N,那么Q1中的作业在经历了N个时间片后若还没有完成,则进入Q2队列等待,若Q2的时间片用完后作业还不能完成,一直进入下一级队列,直至完成。
-
在低优先级的队列中的进程在运行时,又有新到达的作业,那么在运行完这个时间片后,CPU马上分配给新到达的作业(抢占式)。
本文来自博客园,作者:topass123,转载请注明原文链接:https://www.cnblogs.com/topass123/p/12801694.html