进程调度
背景
上下文切换 cpu调度
- 什么时候调度? 进程状态变化时会发生调度
- 内核运行调度程序的条件
- 一个进程从运行状态切换到等待状态
- 一个进程被终结了
- 不可抢占
- 调度程序必须等待事件结束
- 可以抢占
- 调度程序在中断被响应后执行
- 当前进程从运行切换到就绪,或者一个进程从等待切换到就绪
- 当前运行的进程可以被换出
- 调度程序在中断被响应后执行
调度原则
-
程序执行模型: 程序在cpu突发和I/O中交替
-
量化分析调度算法的指标
- cpu使用率 : cpu处于忙状态所占时间的百分比
- 吞吐量: 在单位时间内完成的进程数量
- 周转时间 : 一个进程从启动到结束,包括所有等待时间所花费地时间 等待时间+服务时间
- 等待时间: 进程在就绪队列中的总时间
- 响应时间 : 从一个请求被提交到产生第一次响应所花费地时间
-
人们通常都需要“更快”的服务
什么是更快- 传输文件的高宽带 吞吐量大
- 玩游戏的低延迟 时间快 这两个因素是独立的
**根据需求不同设计不同的策略 **
-
公平的定义 : 保证每个进程占用相同的cpu时间 但会增加平均响应时间
调度算法
FCFS
- 优点:简单
- 缺点:
- 平均等待时间波动较大
- 花费时间少的任务可能排在时间长的任务后面
- 可能导致I/O和cpu之间的重叠处理
- cpu密集型进程会导致IO设备闲置时,IO密集型进程也在等待
短任务SPN
- 按照预测的完成时间来将任务入队列
- 抢占SRT
- 缺点:
- 可能导致饥饿
- 连续短任务流会使长任务饥饿
- 短任务可用时的任何长任务的cpu时间都会增加平均等待时间
- 需要预知未来
- 怎么预估下一个cpu突发的持续时间
- 不知道进程的执行时间
- 简单的解决办法:询问用户
- 如果用户欺骗就杀死进程
- 如果用户不知道怎么办
- 可能导致饥饿
最高响应比优先算法
- R=(w+s)/s waiting time service time执行时间
- 在SPN上改进
- 不可抢占
- 关注进程等待了多长时间
- 防止无限期推迟
Round robin 时间片轮转
- 缺点:
- 额外的上下文切换
- 时间片的设置 太小 开销大 太大 与FCFS相同
- 目标:
- 选择一个合适的时间片
- 维持上下文切换开销1%
多级反馈对队列
- 就绪队列被划分成独立的队列
前台交互 后台批处理 - 每个队列拥有自己的调度策略
前台RR 后台FCFS - 调度必须在队列间进行
- 固定优先级
- 先处理前台,然后处理后台 可能导致饥饿
- 时间切片
- 每个对列都得到一个确定的能够调度其进程的cpu总时间
- 固定优先级
- 一个进程可以在不同的队列中移动
例如: - n级优先级–优先级调度在所有级别中,RR在每个级别中
时间片大小随优先级级别增加而增加 如果任务在当前的时间片中没有完成,则降到下一个优先级 - 优点:
- cpu密集型任务的优先级下降的很快
- IO密集型任务留在最高优先级
FFS公平共享
- 控制用户对系统资源的访问
- 一些用户组比其他用户组更重要
- 保证不重要的组无法垄断资源
- 未使用的资源按照每个组所分配的资源的比例来分配
- 没有达到资源使用率目标的组获得更高的优先级