比较调度算法的准则
- CPU使用率:CPU处于忙状态的时间百分比
- 吞吐量:单位时间内完成的进程数量
- 周转时间:进程从初始化到结束(包括等待)的总时间
- 就绪等待时间:进程在就绪队列中的总时间
- 响应时间:从提交请求到产生响应所花费的总时间
决策模式
决策模式说明选择函数在执行的瞬间的处理方式,通常分为以下两类:
非抢占:一旦进入运行状态,就不会终止直到运行结束。
抢占:当前正在运行的进程可以被打断,并转移到就绪态。一个调度算法是否能抢占,对进程的顺序有着极大的影响。
一、先来先服务(FCFS)
先来先服务是最简单的策略,也称为先进先出FIFO。首先它是一个非抢占的。如字面意思,它根据进程到达时间决定先运行哪一个进程。
示例:3个进程,计算时间分别为12,3,3

简单
- 平均等待时间波动较大:短进程可能排在长进程后面
- I/O资源和CPU资源的利用率较低:CPU密集型进程会导致I/O设备闲置时,I/O密集型进程也等待。
二、短进程优先算法(SPN)
选择就绪队列中执行时间最短进程占用CPU进入运行状态,就绪队列按预期的执行时间来排序,短进程优先算法具有最优平均周转时间。


- 可能导致饥饿:连续的短进程流会使长进程无法获得CPU资源
- 需要预知下一个CPU计算的持续时间,简单的解决办法—询问用户,用户欺骗就杀死相应进程,用户不知道到,则...
- 短进程优先算法的执行时间预估:用历史的执行时间来预估未来的执行时间。

三、最高响应比优先算法(HRRN)
选择就绪队列中响应比R值最高的进程

- 在短进程优先算法的基础上改进
- 不可抢占
- 关注进程的等待时间
- 防止无限期推迟
四、时间片轮转算法(RR, Round-Robin)
1.时间片:分配处理及资源的基本时间单元

2.算法思路
- 时间片结束时,按FCFS算法切换到下一个就绪进程
- 每隔(n-1)个时间片进程执行一个时间片q
3.时间片为20的RR算法示例

4.时间片轮换算法中的时间片长度
- 等待时间过长
- 极限情况退化为FCFS
- 反映迅速,但产生大量的上下文切换
- 大量的上下文切换开销影响到系统吞吐量
- 选择一个合适的时间片长度
- 经验规则:维持上下文切换开销处于1%以内
五、多级队列调度算法(MQ)
1. 就绪队列被划分为多个独立的子队列
2.每个队列拥有自己的调度策略
3. 队列间的调度
- 固定优先级
2.时间片轮换
- 每个队列得到一个确定的能够调度其进程的CPU总时间
- 如:80%CPU时间用于前台,20%CPU时间用于后台
六、多级反馈队列算法(MLFQ)
进程可在不同队列中移动的多级队列算法
- 时间片大小随优先级级别增加而增加
- 如进程在当前的时间片没有完成,则降到下一个优先级

MLFQ算法的特征:
- CPU密集型进程的优先级下降很快
- I/O密集型进程停留在高优先级
操作系统调度算法
原文:https://www.cnblogs.com/cjsword/p/12178442.html