2.2处理机调度
2.2.1 调度的概念
处理机调度时多道程序操作系统的基础,是操作系统设计的核心问题。
- 调度的层次
(1)高级调度(作业调度)外存->内存
[频率最低]创建态->就绪态
- 按照一定的原则从外存上的后备队列挑出一个或多个,给它们分配内存,输入/输出设备,建立相应的进程。
- 多道批处理系统中大多配有作业调度。其他系统不需要配置作业调度。
(2)中级调度(内存调度)外存->内存
[频率中等]就绪态/阻塞态->挂起态
- 目的是提高内存利用率和系统吞吐量。
将暂时不能运行的进程调入外存
- 本质是存储器管理中的对换功能。
(3)低级调度(进程调度)内存->cpu
[频率最高]就绪态->运行态
- 根据算法从就绪队列选择一个进程,分配处理机。
三级调度的联系
1)作业调度为进程活动做准备,进程调度使进程活跃起来
2)中级调度将暂时不能运行的进程挂起,中级调度处于作业调度和进程调度之间
3)进程调度是最基本的。
2.2.2 调度算法的性能指标
- (1) C P U 利用率 = C P U 有效工作时间 C P U 有效工作时间 + C P U 空闲等待时间 CPU利用率=\frac{CPU有效工作时间}{CPU有效工作时间+CPU空闲等待时间} CPU利用率=CPU有效工作时间+CPU空闲等待时间CPU有效工作时间
- (2)系统吞吐量:单位时间内CPU完成作业的数量
- (3)周转时间
周转时间 = 作业完成时间 − 作业提交时间 周转时间 = 作业完成时间-作业提交时间 周转时间=作业完成时间−作业提交时间
平均周转时间 = 作业 1 的周转时间 + . . . + 作业 n 的周转时间 n 平均周转时间 = \frac{作业1的周转时间+...+作业n的周转时间}{n} 平均周转时间=n作业1的周转时间+...+作业n的周转时间
带权周转时间 = 作业周转时间 作业实际运行时间 带权周转时间 = \frac{作业周转时间}{作业实际运行时间} 带权周转时间=作业实际运行时间作业周转时间
带权周转时间 = 作业 1 的带权周转时间 + . . . 作业 n 的带权周转时间 n 带权周转时间 = \frac{作业1的带权周转时间+...作业n的带权周转时间}{n} 带权周转时间=n作业1的带权周转时间+...作业n的带权周转时间 - (4)等待时间
进程等待时间 : 进程建立后等待被服务的时间之和 进程等待时间:进程建立后等待被服务的时间之和 进程等待时间:进程建立后等待被服务的时间之和
作业等待时间 : 进程等待时间 + 外存后备队列等待时间 作业等待时间:进程等待时间+外存后备队列等待时间 作业等待时间:进程等待时间+外存后备队列等待时间 - (5)响应时间: 用户提交请求到系统首次产生响应所用的时间 用户提交请求到系统首次产生响应所用的时间 用户提交请求到系统首次产生响应所用的时间
2.2.3 调度的实现
-
1.调度程序
触发条件
①创建新进程
②进程退出
③进行进程阻塞
④I/O中断(唤醒阻塞进程)
非抢占式调度:只有运行进程阻塞或退出才触发调度程序工作
抢占式调度:只有时钟中断或K个时钟中断才会触发调度程序工作
程序的作用
①排队器。将就绪进程按一定策略排成一个或多个队列
②分派器。根据调度程序所选进程,从就绪队列取出
③上下文切换器。处理机进行切换时,发生上下文切换。
(1)将当前进程上下文保存到PCB中,再装入分派程序上下文。(2)移除分派程序的上下文,将新选进程的CPU的现场信息装入处理机的各个相应寄存器。 -
2.调度的时机,切换和过程
不能进行程序调度与切换的情况
①处理中断过程。
②进程在操作系统内核临界区。
③其他需要完全屏蔽中断的原子操作过程。
进程主动放弃处理机:
①进程正常终止
②进程异常终止
③主动请求阻塞
进程被动放弃处理机
①时间片用完
②有更紧急事件(I/O中断)
③更高优先级进程进入就绪队列 -
3.进程调度方式
非抢占式调度:实现简单,开销小
。适用于大多数批出操作系统。不适用于分时系统和大多数实时系统。
抢占式调度:可以提高系统吞吐率和响应效率。
-
4.闲逛进程
该进程的优先级最低。只有处理机空闲且就绪队列为空时才允许。不需要除CPU外的资源
2.2.4 典型的调度算法
早期批处理调度算法
-
1.先来先服务【作业/进程】(非抢占式)
对所有作业是公平的
特点:
算法简单低效。
长作业有利,短作业不利。
有利CPU繁忙型,不利于IO繁忙型。
不存在饥饿现象。 -
2.短作业优先【作业/进程】(抢占式/非抢占式)
可以分为抢占式和非抢占式两种具体的算法。
抢占式是每次有新的作业/进程加入就会调度;非抢占式只有运行结束才会调度。
默认的都是非抢占式
特点:
对长作业不利
未考虑作业的紧急情况
作业长短由用户估计,可能会导致不能真正的做到短作业优先
优点:
平均等待时间/平均周转时间最短
缺点:
不公平,短作业优先可能产生饥饿现象。 -
3.高响应比优先调度算法【作业/进程】(非抢占式)
仅在当前作业/进程主动放弃处理机才会调度
响应比 = 等待时间 + 要求服务时间 要求服务时间 响应比=\frac{等待时间+要求服务时间}{要求服务时间} 响应比=要求服务时间等待时间+要求服务时间
特点:
兼顾长短作业。
等待时间相同,服务时间越短响应比越高。
克服饥饿现象
交互式操作系统
-
1.时间片轮转算法【进程调度】(抢占式)
每个进程每次调度使用相同大小的时间
时钟中断通知CPU时间片用完
优点:
公平,响应快,是用于分时操作系统。
实现简单,无饥饿现象
cpu利用率高
注意点:
时间片不能过长或过短。
时间片太长会退化成先来先服务算法
时间片太短会导致进程切换频繁,处理机开销大 -
2.优先级调度算法【作业/进程】(抢占式/非抢占式)
特点:
优先处理紧急任务,适用于实时操作系统。
抢占式的是有新进程到达就调度。
非抢占式是只有主动放弃处理机才调度。
追求公平和系统利用率
优先级:
静态优先级
在创建后不会改变。
动态优先级
在运行期间随着进程情况调整。
优先级参考原则:
系统进程>用户进程
交互式进程>非交互式进程
IO型进程>计算型进程(越早响应IO进程可以越早实现CPU与IO设备并行)
动态优先级参考案例:
进程在就绪队列等待时间过长。提高优先级
进程占用处理机时间过长。降低优先级
进程频繁进行IO操作。提高优先级
系统进程(内存管理等)
>交互式进程(游戏软件等)
>批处理进程(AI训练模型)
-
3.多级反馈队列调度算法【进程】(抢占式)
优点:
终端型作业用户:短作业优先
长批处理作业用户:周转时间短
短批处理作业用户:不会长期得不到处理
先来先服务 | 短作业优先 | 高响应比 | 时间片轮转 | 多级反馈队列 | |
---|---|---|---|---|---|
能否是可抢占 | 否 | 能 | 能 | 能 | 队列内算法不一定 |
能否是不可抢占 | 能 | 能 | 能 | 否 | 队列内算法不一定 |
优点 | 公平,实现简单 | 平均等待时间最少,效率最高 | 兼顾长短作业 | 兼顾长短作业 | 兼顾长短作业,有较好的响应时间,可行性强 |
缺点 | 不利于短作业 | 长作业可能会饥饿,估计时间不确定 | 计算响应比的开销大 | 平均等待时间较长 | 无 |
适用于 | 无 | 作业调度,批处理系统 | 无 | 分时系统 | 相当通用 |
默认决策模式 | 非抢占式 | 非抢占式 | 非抢占式 | 抢占式 | 抢占式 |
2.2.5进程切换
-
(1)上下文切换
①挂起进程,保存CPU上下文,包括程序计数器和其他寄存器
②更新PCB
③把进程的PCB移入相应的队列
④选择其他进程执行,并更新其PCB
⑤转跳新进程PCB中PC所指向的位置
⑥恢复处理机上下文
-
(2)上下文切换的消耗
每秒都要进行几百上千次的切换,这些切换都是纳秒级的时间。
若提供多个寄存器组,切换进程只需要简单改变当前寄存器组的指针
-
(3)上下文切换于模式切换
上下文切换只能在内核态。
模式切换是CPU的用户态和内核态的转换。