【操作系统学习】CPU调度(七)
1. CPU调度概念
CPU 调度指的是操作系统将 CPU 资源分配给不同进程的过程。CPU 调度的整个过程,由操作系统中的短期调度程序(一种进程调度程序)负责完成。每当 CPU 处于空闲状态时,短期调度程序就会从位于内存的就绪队列中挑选一个进程,交给 CPU 执行。
CPU调度分类
不可抢占
- 调度程序必须等待事件结束
可以抢占
- 调度程序在中断被响应后执行
- 当前的进程从运行切换到就绪,或者一个进程从等待切换到就绪
- 当前运行的进程可以被换出
调度原则
- CPU使用率
- CPU处于忙状态所占时间的百分比
- 吞吐量
- 在单位时间内完成的进程数量
- 周转时间
- 一个进程从初始化到结束,包括所有等待时间所花费的时间
- 等待时间
- 进程在就绪队列的总时间
- 响应时间
- 从一个请求被提交到产生第一次响应所花费的时间
2. CPU调度算法
(1) 先来先服务(FCFS)
- 优点
- 简单
- 缺点
- 平均等待时间波动较大
- 花费时间少的任务可能排在花费时间长的任务后面
- 可能导致I/O和CPU之间的重叠处理
- CPU密集型进程会导致I/O设备闲置时,I/O密集型进程也在等待
(2) 短进程优先(SPN)
- 可能导致饥饿
- 连续的短任务会使长任务饥饿
- 短任务可用时的任何长任务的CPU时间都会增加平均等待时间
- 需要预知未来
- 怎么评估下一个CPU突发的持续时间
- 简单的解决方法:询问用户
- 如果用户欺骗就杀死进程
- 如果用户不知道怎么办
(3) 最高响应比优先(HRRN)
- 在SPN调度的基础上改进
- 不可抢占
- 关注进程等待了多长时间
- 防止无限期推迟
- R=(w+s)/s w:等待时间 s:service time执行时间 选择R最高的进程
(4) 轮询(Round Robin)
- RR花销:额外的上下文切换
- 时间量子太大
- 等待时间过长
- 极限情况退化成FCFS
- 时间量子太小
- 反应迅速,但是
- 吞吐量由于大量的上下文切换开销受到影响
- 目标
- 选择一个合适的时间量子
- 经验规则:维持上下文切换开销处于1%以内
(5) 多级反馈队列(MLFQ)
- 就绪队列被划分成独立的队列
- 例如,前台(交互),后台(批处理)
- 每个队列拥有自己的调度策略
- 例如,前台-RR,后台-FCFS
- 调度必须在队列间进行
- 固定优先级
- 先处理前台,然后处理后台
- 可能导致饥饿
- 时间切片
- 每个队列都得到一个确定的能够调度其进程的CPU总时间
- 例如,80%给使用RR的前台,20%给使用FCFS的后台
- 固定优先级
(6) 公平共享调度(Fair Share Scheduling)