说下你知道的调度算法
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等