前言
- CPU调度:执行多到程序操作系统时,CPU进行上下文切换,并且有各种CPU调度算法
- 当一个进程等待时,操作系统就从该进程接管CPU控制,并将CPU交给另一个进程执行
1.基本概念
1.抢占调度
- 需要进行CPU调度的情况
- 一个进程从运行状态切换到等待状态(非抢占)
- 一个进程从运行状态切换到就绪状态(抢占)
- 一个进程从等待状态切换到就绪状态(抢占)
- 一个进程终止时(非抢占)
- 在非抢占调度下,一旦进程分配到CPU,该进程就会一直使用CPU,直到它终止或切换到等待状态
2.调度程序
调度程序是一个模块,用来将CPU控制权交给由短期调度程序选择的进程.
功能有:
- 切换上下文
- 切换到用户模式
- 跳转到用户程序的合适位置,以便开始程序
2.调度准则
指标:
- CPU利用率: 0% ~ 100%,范围从40% ~ 90%
- 吞吐量:单位时间内进程完成的数量
- 周转时间:从进程提交到进程完成的时间段.
- 等待时间:在就绪队列中等待所花时间之和
- 响应时间:从提交请求到产生响应的时间
总之就是:
- 最大化CPU使用率和吞吐量
- 最小化周转时间,等待时间和响应时间
3.调度算法
1.单处理器系统
1.先到先服务(First-Come First-Served, FCFS)
FCFS是非抢占的.一旦CPU分配给一个进程,该进程就会一直使用CPU知道释放CPU
例子
进程 | 执行时间 |
---|---|
p1 | 24 |
p2 | 3 |
p3 | 3 |
执行顺序:p1,p2,p3
缺点:平均等待时间长:p1等待0,p2等待24,p3等待27
2.最短作业优先(Shortest-Job-First, SJF)
例子
进程 | 执行时间 |
---|---|
p1 | 6 |
p2 | 8 |
p3 | 7 |
p4 | 3 |
执行顺序:p4,p1,p3,p2
优点:平均等待时间最小
两种类型:
- 背景:当一个新进程到达就绪队列而以前进程正在执行时,就需要选择,因为新进程的执行时间可能比当前进程未完成部分的执行时间还要小
- 非抢占SJF算法:允许当前运行进程先完成CPU执行
- 抢占SJF算法(最短剩余时间优先调度):立即执行新进程
3.最短剩余时间优先调度(抢占SJF算法)
当一个新进程到达就绪队列而以前进程正在执行时,就需要选择,因为新进程的执行时间可能比当前进程未完成部分的执行时间还要小,这时立即执行新进程
例子
进程 | 到达时间 | 执行时间 |
---|---|---|
p1 | 0 | 8 |
p2 | 1 | 4 |
p3 | 2 | 9 |
p4 | 3 | 5 |
执行的时间轴:
4.优先级调度
每个进程都一个优先级与其关联,具有最该优先级的进程会分配到CPU,相同优先级的进程按FCFS调度
例子
进程 | 执行时间 | 优先级 |
---|---|---|
p1 | 10 | 3 |
p2 | 1 | 1 |
p3 | 2 | 4 |
p4 | 1 | 5 |
p5 | 5 | 2 |
执行顺序:p2,p5,p1,p3,p4
两种类型
- 背景:当一个新进程到达就绪队列而以前进程正在执行时,就需要选择,因为新进程的优先级可能比当前进程的优先级还要小
- 非抢占:允许当前运行进程先完成CPU执行
- 抢占:立即执行新进程
可能导致的一个最主要的问题:无穷阻塞或者饥饿问题,即某个进程的优先级可能很低,一直得不到执行
解决:老化.老化逐渐增加在系统中等待很长时间的进程的优先级
5.轮转调度(Round-Robin, RR)
专门为分时系统设计的,总体上类似于FCFS调度,但是增加了抢占
时间片:一个较小的时间单元,10ms ~ 100ms
每个进分配不超过一个时间片的CPU执行
时间片时间到,产生中断,CPU进行上下文切换
RR算法的性能很大程度取决于时间片的大小:时间片很大,RR与FCFS一样;时间片很小,会导致频繁的上下文切换
6.多级队列调度
- 将就绪队列按照某个指标(进程的属性,如队列的优先级)分成多个单独队列,一个进程永久分配到一个队列.每个队列都有自己的调度算法
- 每个队列与更低层队列相比有绝对的优先
- 可能存在饥饿问题
7.多级反馈队列调度
- 高优先级队列中的进程的CPU使用时间过多,就会把该进程移到优先级更低的队列
- 在较低队列的进程等待时间过长,进程会被移动到更高优先级队列中
- 优点:能够将IO密集型,交互进程(使用CPU时间少的进程)与CPU密集型进程分开,前者向更高优先队列移动,后者向更低优先队列移动
3.多处理器系统
1.非对称多处理
让一个处理器处理所有调度决定,IO处理以及其他活动,其他处理器只执行用户代码
2.多对称处理(Symmetric MultProcessing, SMP)
- 即每个处理器自我调度
- 每个CPU都比较独立
- 每个处理器的调度程序都检查共同就绪队列,以便选择执行一个进程
4.实时CPU调度
目的:为实现最小化延迟
软实时系统和硬实时系统:
- 软实时系统不保证调度关键实时进程,只保证这类进程会优先于非关键进程
- 硬实时系统要求一个任务应该在截止期限之前完成
1.最小化延迟
事件延迟:从事件发生到事件得到服务的这段事件
影响实时系统的性能的两种类型:
- 中断延迟:从CPU收到中断到中断处理程序开始的时间.当一个中断发生时,操作系统应先完成正在执行的指令,再确定发生中断的类型,然后保存当前进程的状态,再采用特定的中断服务程序(Interrupt Service Routine, ISR)来处理中断.执行这些任务需要的总时间为中断延迟
- 调度延迟:从停止一个进程到启动另一个进程所需要的时间量
2.优先权调度
- 根据每个进程的重要性分配优先级.进程越重要,分配的优先级越高
- 支持抢占
- 提供抢占的,基于优先级调度程序仅保证软实时功能
- 硬实时系统需要给任务附加调度特征,以保证实时任务在截止期限内得到服务
- 硬实时系统在分时系统里面,获得CPU执行权的进程的调度特征:固定的处理时间t,CPU应处理的截止期限d和周期p,周期任务速率1/p,应满足t<=d<=p
- 根据进程的截止期限或速率要求来分配优先级
- 如果满足满足t<=d<=p,调度程序承认进程,保证进程完成;如果t>d,调度程序会拒绝请求
3.单调速率调度
- 单调速率调度算法采用抢占的,静态优先级的策略,调度周期性任务
- 进入系统时,每个周期性任务会分配一个优先级,优先级与周期成反比
- 问题:两个进程p1和p2,周期分别为50和100,处理时间分别为20和35,截止时间为一个周期结束前,假设p2比p1的优先级更高,由于硬实时系统的优先权调度,就会使得p1的完成时间在55,超过了其截止时间50了
若使用的是单调速率调度的话,P1的优先级会比p2的优先级更高
但是假设p2 的周期是80的话,使用单调速率调度就会造成p2的完成时间在85,超过了截止期限,如图
- 所以单调速率调度的CPU利用率是有限的,调度N个进程的最坏情况下的CPU利用率为N(2 1 / N ^{1/N} 1/N-1),单调速率调度需要保证CPU利用率不超过这个值,否则就不能保证满足进程的截止期限
4.最早截止期限优先调度(Earlist-Deadline-First, EDF)
- 根据截止期限动态分配优先级.截止期限越早,优先级越高
- 根据EDF策略,当一个进程可运行时,应向系统公布截止期限要求,重新分配进程的优先级
- 例子:p1的周期和执行时间分别为50,25;p2的周期和执行时间分别为80,35.如何理解动态分配:
- EDF调度不要求进程的CPU执行长度是固定的
5.比例分享调度
- 将CPU所有的执行时间分成T股,若一个应用程序接收到N股的时间,那么这个应用将有N/T的总处理时间
- 假设总的100股,A,B,C分别50,15,20股则ABC的处理时间分别为50%,15%,20%
- 准入控制策略,100-50-15-20=15,如果进程D请求30股,那么准入控制器会拒绝D进入系统