目录
调度算法指的是根据系统的资源分配策略所规定的资源分配算法。
对于不同的系统和系统目标,通常采用不同的调度算法。
1. 先来先服务算法
- 先来先服务算法(FCFS: First Come, First Served)
- 是一种依据进程进入就绪状态的先后顺序排列的算法
- 当进程进入等待或者结束状态时,就绪队列中的下一个进程占用 CPU
优点
- 易于理解且实现简单
缺点
- 平均等待时间波动较大
- 周转时间:进程从初始化到结束(包含等待时间)的总时间
- 短进程可能排在长进程后面,假如有三个进程,计算时间分别为 P1(12),P2(3),P3(3),任务的到达顺序为 P1,P2,P3,那么周转时间就是 (12 + 15 + 18) / 3 = 15。
- 若任务的到达顺序为 P2,P3,P1,则周转时间为 (3 + 6 + 18) / 3 = 9。
- 可见平均等待时间波动较大
- I/O 资源和 CPU 资源的利用率较低
- CPU 密集型进程会导致 I/O 设备闲置时,I/O 密集型进程也等待
2. 短进程优先算法
- 短进程优先算法(SPN:Shortest Process First)
- 是一种选择就绪队列中执行时间最短的进程占用 CPU 进入运行状态的算法,其中 就绪队列按照预期的执行时间来排序,该算法具有最优平均周转时间。
SPN 算法的可抢占改进:短剩余时间优先算法(SRT)
- 假设一个正在执行的进程的预期执行时间比较长,其剩余的执行时间大于某个将要执行的进程的预期时间时,允许该预期时间短的进程抢先执行。
缺点:
- 可能导致饥饿(连续的短进程流会使得长进程无法获得 CPU 资源)
- 需要预知未来
- 如何预估下一个 CPU 计算的持续时间?
- 简单的解决方法:询问用户 用历史的执行时间来预估未来的执行时间
3. 最高响应比优先算法
- 最高响应比优先算法(HRRN:Highest Response Ratio Next)
- 是一种选择就绪队列中响应比 R 值最高的进程的算法。
- 响应比 R 定义如下:R = (w + s) / s
- 其中 w 表示等待时间,s 表示执行时间,等待时间越长,R 值越高。
- 这解决了短进程优先算法中连续的短进程流会使得长进程无法获得 CPU 资源。
4. 时间片轮转算法
- 时间片轮转算法(RR:Round-Robin)
- 是一种让就绪队列上的每个进程只运行一个时间片的算法。
- 当时间片结束时,按照 FCFS 算法切换到下一个就绪进程。
缺点:
- 额外的上下文切换
- 时间片太大,导致等待时间过长,极限情况退化成 FCFS
- 时间片太小,导致反映迅速,产生大量上下文切换,而大量上下文切换开销会影响到系统吞吐量
5. 多级反馈队列算法
- 多级反馈队列算法(MLFQ:Multilevel Feedback Queue)
- 是一种进程可以在不同队列间移动的多级队列算法,其实质是多种算法的集成。
- 时间片大小随着优先级别增加而增加,若进程在当前的时间片还没有完成,则降到下一个优先级。
- CPU 密集型进程(时间片大)的优先级下降很快,I/O 密集型进程(时间片小)会停留在高优先级。