一、背景
1、上下文切换与CPU调度:【承上启下】
(1)上下文切换
- 切换CPU的任务,切换的实体为线程或进程
- 要保存当前CPU的状态,便于之后的现场恢复【也就是保存TCB/PCB的上下文】
- 读取下一个线程/进程的上下文
(2)CPU调度
- 从就绪队列中挑选一个进程/线程作为CPU将要运行的下一个进程/线程
- 调度程序:挑选进程/线程的内核函数(通过一些调度策略)
2、在进程/线程的生命周期中的什么时候进行调度?
在一个状态变换到另一个状态,特别是与运行状态相关的变换【运行 >> 就绪、运行 >> 退出、运行 >> 阻塞】
3、什么情况下内核会运行调度程序?
(1)可以为一个进程从运行状态切换到等待状态
(2)可以为一个进程结束了
- 大部分情况下我们调度的是应用程序【运行时以用户态的进程形式存在】
- 分为两种情况:
(1)不可抢占(非抢占式)
调度程序必须等待事件结束,也就是进程启动之后不能被打断
(2)可以抢占(抢占式)
调度程序在中断被响应后执行
当前进程从运行切换到就绪,或者一个进程从等待切换到就绪
当前运行的进程可以被换出
二、调度准则
3、进程在操作系统中的运行状态是怎样的?【程序执行模型】
此处以一个进程为例,可以看到CPU的使用频率是波动的,说明程序在CPU突发和I/O中交替
- 每个调度决定的是在下一个CPU突发时将哪个工作交给CPU
- 在时间分片机制下,线程可能在结束当前CPU突发前被迫放弃CPU【抢占式】
4、可以从哪些方面了比较一个调度算法?
(1)CPU使用率:CPU处于忙状态所占时间百分比
(2)吞吐量:在单位时间内完成的进程数量【操作系统的计算带宽】
(3)周转时间:一个进程从初始化到结束,包括所有等待时间所花费的时间
(4)等待时间:进程在就绪队列中的总时间
(5)响应时间:从一个请求被提交到产生第一次响应所花费的总时间【操作系统的计算延迟】
- 更快:高宽带、低延迟、
- 减少响应时间:及时处理用户的输出并且尽快将输出提供给用户
- 减少平均响应时间的波动:在交互系统中,可预测性比高差异低平均更重要
- 增加吞吐量:减少系统开销、提高系统资源的利用率
- 减少等待时间:减少每个进程的等待时间
5、公平是调度算法的一种重要衡量指标:
(1)保证每个进程占用CPU的时间大致相同
(2)进程等待的时间也大致相同
三、调度算法
1、先来先服务调度算法(FCFS)
- 该算法是采用先进先出队列实现的:如果进程在执行过程中阻塞,队列中的下一个会得到CPU
- 通过案例分析:
从程序开始执行计算周转时间,我们看到的平均周转时间;
通过对比可以发现,短队列如果在前面会降低周转时间
- 先来先服务调度算法的特点:
(1)优点:实现简单
(2)缺点:
平均等待时间波动较大
花费时间少的任务可能排在花费时间长的任务后面【这就导致等待的时间会很长】
没有考虑抢占,可能导致I/O和CPU之间的重叠处理
2、短任务优先调度算法
- 进程的执行时间越短,调度的优先级就越高
- 通过案例分析:
pw、px、py、pz为四个进程,c代表预测的执行时间
通过调度算法来完成就绪进程队列的的排序
- 如果新来一个进程,而且它的执行时间比当前运行进程的时间短怎么办?
(1)方案一:继续运行当前的进程,将新来的进程插入到就绪队列的队首,不会立刻去执行这个新来的队列【非抢占式,SPN】
(2)方案二:将当前进程从运行态切换到就绪态,并重新挂回到就绪队列中,让这个新进程去占用CPU执行【抢占式,最短剩余时间的策略,SRT】
SPN方法可以保证平均周转时间是最短的
- 短任务优先调度算法的问题:
(1)连续的短任务流会使长任务饥饿
(2)短任务可用时的任何长任务的CPU时间都会增加平均等待时间
(3)要预先知道进程任务的执行时间【利用执行的历史数据去预测】
3、最高响应比优先调度算法(HRRN)
- 属于短进程优先调度算法的一种改进 >> 不可抢占 + 进程等待时间【防止无限期推迟】
- 最高相应比公式:
R = (w + s) / s
【w:等待时间、s:执行时间】
4、轮循调度算法(RR)
- 各个进程轮流占用CPU【体现了公平策略】
- 案例分析:
p1-p4四个进程,甘特图为占用CPU的时间片,计算了每个进程的等待时间和平均等待时间
- 轮循算法的局限性:【时间量子就是时间片】
(1)额外的上下文切换导致很大的开销
(2)如果时间片太小。尽管反应迅速,不过吞吐量会受到大量上下文切换的影响
(3)如果时间片太大。会导致等待时间过长,极限情况下退化到先到先处理调度算法
所以应该选择一个合适大小的时间量子,维持上下文切换开销处于1%以内
- 分析不同时间片的大小对平均等待时间的影响:
5、多级队列调度算法
- 就绪队列被划分为独立的队列,不同的队列采用不同的调度算法
- 当高优先级的任务完成之后,再去执行低优先级的任务
6、多级反馈队列调度算法(MFQ)
- 反馈体现在进程可以在不同的队列中移动
- 进程任务随着等待时间变长,它的优先级会不断变高
7、公平共享调度算法(FFS)
8、调度算法的测评方法与汇总:
四、实时调度
之前为面向通用操作调度算法,实时操作系统一般用于工业控制
1、什么是实时系统?
-
一种正确性依赖于其时间和功能两方面的操作系统
-
性能指标体现在两方面:时间约束的及时性、速度和平均性能相对不重要
-
主要特性:时间约束的可预测性
-
实时系统又分为两类:
(1)强实时系统:需要在保证的时间内完成重要的任务,必须完成
(2)弱实时系统:要求重要的进程的优先级更高,尽量完成,并非必须
- 一次实时任务:
(1)就绪后不会立刻执行,在这段时间内执行
(2)Relative deadline 是相对截止时间,Absolute deadline是真正结束的时间
(3)Execution time 是实际执行的时间
- 周期任务:
从图中可以看出时限为5,蓝色部分为实际执行
2、对于强弱实时系统的时限有什么要求呢?
(1)硬时限
- 如果错过了最后期限,可能发生非常严重的后果
- 必须事先验证在最坏的情况下是否能满足时限
- 保证确定性
(2)软时限
- 理想情况下,时限应该被最大满足,没有满足就相应的降低要求
- 尽最大努力保证
3、设置什么样的调度算法满足硬实时和软实时的调度需求?
- 静态优先级调度:在任务执行前就已经确定了任务的优先级
- 动态优先级调度:在任务执行过程中,任务的优先级不断变化
五、多处理器调度
1、在有多个CPU的情况下,如何完成多个进程并行的调度?
这就要涉及到我们多处理器的调度算法了。
如何确保CPU的负载平衡?
六、优先级反转
通过优先级继承来解决,访问共享资源速度变快