调度策略的目标
- 确定如何从就绪队列中选择下一个执行的计算
- 在有限的计算资源条件下达到尽可能好的效果(如何定义好)
调度策略要解决的问题
- 挑选队列中的哪一个目标
- 通过什么样的准则来挑选
调度算法的比较准则
- 如何确定最优的调度算法
- 使用率,CPU处于忙状态的百分比
- 吞吐量,单位时间完成的任务数
- 周转时间,单个任务从开始到结束(包括等待)的总时间
- 等待时间,单个任务处于等待状态的总时间
- 响应时间,从任务请求到产生响应的时间
调度算法的要求
- 希望更快的服务
- 什么是更快
- 传输文件时的高带宽,要求高吞吐量,类比装满蓄水池
- 减少开销(调度系统的开销,上下文切换等)
- 系统资源的高效利用(操作系统CPU、I/O设备,网页中的网络I/O,worker等)
- 玩游戏时的低延迟,要求低响应时间,类比洗手间水龙头出水。如果网页长时间执行计算无响应,用户很可能会F5,之前的计算都是无意义的
- 减少响应时间,及时处理用户输入并反馈结果
- 减少响应时间的波动,在交互系统中,可预测性比高差异的低平均更重要,最慢的那一个才是用户体验瓶颈
- 减少任务等待时间
- 有利于提高吞吐量并降低延迟
- 吞吐量不受用户交互的影响
- 即使有大量的用户交互,也应当正常进行调度
- 传输文件时的高带宽,要求高吞吐量,类比装满蓄水池
- 希望保证公平性
- 什么是公平
- 每个任务占用相同的时间
- 每个任务的等待时间相同
- 公平会通常会增加响应时间
- 什么是公平
调度算法-先来先服务算法(FCFS)
- 根据任务在队列中的先后顺序执行
- 优点:简单
- 缺点
- 等待时间波动较大(短任务排在长任务后面)
- 资源利用率低(计算密集型任务导致I/O空闲,I/O密集型任务导致计算资源空闲)
- 不公平
调度算法-短进程优先算法
- 考虑任务执行时间的特征,优先选择(预期)执行时间最短的任务
- 优点: 最短平均周转时间(平均每个任务从开始到结束所花的时间)
- ri表示第i个任务从开始到结束需要的时间(包括等待时间),ci表示第i个任务执行所花的时间(不包括等待时间),假设第i个任务需要花费i的时间
- 缺点
- 可能导致饥饿,连续的短任务会导致长任务的饥饿
- 不公平
- 如何预测执行时间
-
最简单:问用户
-
用历史信息预测未来(下一次的预测时间根据上一次的实际时间和预测时间计算)
-
调度算法-短进程优先改进-最高响应比优先
- 基于短进程优先,加入等待优先级 R = (W+S)/S ,W:等待时间,S:执行时间
- 等待越久,优先级越高,防止无限期等待
调度算法-时间片轮转(RR)
- 将执行时间分成小段,轮流处理任务
- 额外的切换上下文开销
- 如何分配每个时间片的长度
- 考虑时间片极大的情况:退化为先来先服务
- 考虑时间片极小的情况:反应迅速,但产生大量的切换开销
- 根据经验取合适的值,比如10ms(1%开销)
- 特点:稳定,波动小,平均等待时间较差但交互性好
调度算法-多级队列(MQ)
- 任务队列被分为多个独立的子队列,如交互相关(前台队列),计算和网络相关(后台队列)
- 每个队列使用单独的调度策略,如前台使用时间片轮转(RR),后台用先来先服务(FCFS)
- 队列之间的调度使用时间片轮转,如80%用于前台队列,20%用于后台队列
调度算法-多级反馈队列(MQ)
- 按照优先级分为n个队列,任务可以在多个队列间移动
- 如果任务在第i个队列没有执行完,则移动到i+1个队列
- 第n个队列分配2^N个时间片,第1个队列优先度最高
- 特点:
- CPU密集型任务(执行时间长)会很快降级并分配较多的计算资源
- I/O密集型任务(执行时间短)会停留在高优先级,保证低延迟
调度算法-公平共享调度
- 按照用户组分配优先级,保证重要用户的优先级
- 省略
调度算法-多处理机调度
- 优先级、同步互斥、信号量、死锁。。。省略