调度程序
当计算机系统是多道程序设计系统时,通常就会有多个进程或线程同时竞争 CPU。只要有两个或更多的进程处于就绪状态,这种情形就会发生。如果只有一个 CPU 可用,那么就必须选择下一个要运行的进程。在操作系统中,完成选择工作的这一部分称为调度程序,该程序使用的算法称为调度算法。
进程行为
- CPU 密集型进程
- I/O 密集型进程
何时调度
- 在创建一个新进程之后,需要决定是运行父进程还是运行子进程。(任意决定,调度程序可以选择)
- 在一个进程退出时必须所处调度决策。
- 当一个进程阻塞在 I/O 和信号量上或由于其他原因阻塞时,必须选择另一个进程运行。
- 在一个 I/O 中断发生时,必须做出调度决策。
调度模式
- 抢占式
- 非抢占式
调度算法的分类
- 批处理
- 交互式
- 实时
调度算法的目标
- 所有系统
- 公平——给每个进程公平的 CPU 份额
- 策略强制执行——保证所有规定的策略被执行
- 平衡——保持系统的所有部分都忙碌
- 批处理系统
- 吞吐量——每小时最大作业数
- 周转时间——从提交到终止间的最小时间
- CPU 利用率——保持 CPU 始终忙碌
- 交互式系统
- 响应时间——快速响应请求
- 均衡性——满足用户期望
- 实时系统
- 满足截止时间——避免丢失数据
- 可预测性——在多媒体系统避免品质降低
批处理系统中的调度
- 先来先服务
- 最短作业优先
- 最短剩余时间优先
交互式系统中的调度
- 轮转调度
- 优先级调度:在各个优先级类中使用轮转调度
- 多级队列:属于最高优先级类的进程运行一个时间片,次高运行2个,再次运行4个。。。
- 最短进程优先:根据进程过去的行为进程预测,并执行估计运行时间最短的那个,可以和之前的运行时间做加权和来预测
- 保证调度:确保 n 个进程中每个进程占用 CPU 的时间约为 1/n
- 彩票调度:反应迅速,所有的进程都是平等的,但是可以给更重要的进程额外的彩票
- 公平分享调度:以进程的所有者均分 CPU 时间而不论进程数目
实时系统中的调度
- 分类1:
- 硬实时:必须满足绝对的截止时间
- 软实时:虽然不希望偶尔错失截止时间,但是可以容忍
- 分类2:
- 周期性:事件以规则的时间间隔发生
- 非周期性:事件发生的时间不可预知
- 分类3:
- 静态调度:在系统开始运行前作出调度决策
- 动态调度:在运行过程中进行调度决策
- 最小延误调度
- 优先级调度
- 速率单调调度
- 最早截止优先调度
- 成比例分享调度
- POSIX 实时调度
线程调度
- 内核级线程
- 用户级线程
用户级线程和内核级线程之间的差别在于性能。
用户级线程可以使用专门为应用程序定值的线程调度程序。