本科生操作系统原理学习记录
学习记录全家桶
第五章 CPU调度
5.1 CPU调度概念
5.1.1 长程调度
长程调度:
- 又称作业调度、高级调度
- “新建” 状态换到"就绪 “状态”
- 由调度程序选择
- 控制多道程序的 “道/度” Degree
5.1.2 中程调度
中程调度:
- 又称交换
- 将进程在内存和外存空间换进换出
- 目的:节省内存空间
5.1.3 短程调度
每个操作系统都有短程调度
短程调度:平常说的进程调度
- 又称CPU调度、低级调度
- 调度程序选择下一个执行进程
scheduler dispatch 调度程序调度
5.1.4 进程调度队列
就绪队列:在主内存中处于就绪状态并等待执行的所有进程集合
设备队列:等待某一 IO 设备的进程队列
进程的执行过程实际上就是进程在各种队列之间的迁移
单个处理器的话,处于 运行状态的 进程 最多只有一个,因为只有一个CPU
5.1.5 CPU调度过程
进程运行哪一个是由调度程序决定的,把选中的进程去运行的过程,是由分派程序决定的
调度程序 (scheduler)
- 根据某种策略选择一个就绪进程
- 一个CPU同时只能运行一个进程
分派程序(Dispatcher)
- 负责把CPU的控制权转交给CPU调度程序
- 切换上下文
- 切换到用户态
- 跳转到用户程序的适当位置并重新运行
分派延迟(Dispatch -
5.1.6 CPU调度方式
非抢占式调度
一旦把CPU分配给某进程后,系统不可以抢占已经分配的CPU并分配给其他进程
只有进程自愿释放CPU,才可以把CPU分配给其他进程
优点:易于实现、调度开销小,适合批处理系统
缺点:响应时间长,不适合交互式系统 (比如说,更高级的程序无法中断,
抢占式调度
调度程序可以把CPU控制权交给其他进程
优点:可以防止单一进程长时间独占CPU
缺点:系统开销大
5.1.7 CPU调度时机
排队买票的例子,running 到 ready 发生在,领导买票,你先候着吧,ready。等领导买完,你再买票
CPU调度可能发生在当一个进程:
- 从运行转到等待(非抢占式)是自愿放弃CPU的
- 从运行转到就绪(抢占式)被中断的
- 从等待转到就绪(抢占式)这中间有可能发生调度,也可能不发生。
- 终止运行(非抢占式) 自愿放弃CPU
从等待转到就绪(抢占式)
- 就绪队列里的进程一个都没有:这时,等待态的进程会被马上调度
- 就绪队列里有进程在,CPU也不空:等待态的进程的优先级非常高,
5.1.8 CPU调度准则
基本指标
CPU利用率:固定时间内CPU运行时间的比例
吞吐量:单位时间内运行完的进程数量
周转时间:进程从提交到运行结束的全部时间
等待时间:进程等待调度(不运行,就绪队列里)的时间片总和
响应时间:从进程提交到首次运行(不是输出结果)的时间段,也就是第一段的等待时间
周转时间 = 等待时间 + 运行时间
响应时间 <= 等待时间
优化方法
最大的CPU利用率
最大的吞吐量
最短的周转时间
最短的等待时间
最短的响应时间
解决方法
调度算法:就绪队列中哪个进程被选中运行
平衡点、中庸之道,没有完美的算法
5.2 调度算法
5.2.1 先来先服务算法FCFS
按照进程进入就绪队列的顺序来执行
等待时间定义:进程在等待队列中的所有时间总和,为周转时间减去运行时间
响应时间:从进程提交到首次运行的时间段
算法特点:
- 实现简单,可使用FIFO队列实现
- 非抢占
- 公平
- 适用于长程调度、后台批处理系统的短程的调度
缺点:
当一个长进程后面的多个短进程,让长进程先执行,会让后面的短进程等待较长时间,从而导致CPU和设备利用率降低
5.2.2 短作业优先算法SJF
调度策略:
关联到每个进程下次运行的CPU区间长度,调度最短的进程
经常用于作业调度
具有最短的平均等待时间
存在饥饿问题
非抢占式调度
指一旦进程拥有了CPU,只有当该CPU脉冲时间结束才会让出CPU的控制权
周转时间:P1:7 P2:10 P3:4 P4:11
等待时间:P1:0 P2:6 P3:3 P4:7
响应时间:
抢占式调度
当有比当前进程剩余时间片更短的进程到来时,新来的进程抢占当前进程获得CPU运行,这种调度算法也被称为最短剩余时间优先调度,简写为SRTF
5.2.3 优先级算法(PR)
基于进程的紧迫程度由外部赋予每个进程相应的优先级,CPU分配给最高优先级的进程
每个进程都有一个优先数,优先数为整数
默认:小优先数具有高优先级
目前主流的操作系统调度算法
调度模式:
抢占式
非抢占式
优点
- 实现简单,考虑了进程的紧迫程度
- 灵活,可模拟其它算法
存在问题
- 饥饿 – 低优先级的进程可能永远得不到运行
解决方法
- 老化 – 视进程等待时间的延长提高其优先数
5.2.4 时间片轮转(RR)
专为分时系统设计,类似于FCFS
,但增加了抢占
-
时间片:小单位的CPU时间,通常为10-100毫秒
-
为每个进程分配不超过一个时间片的CPU。时间片用完后,该进程将被抢占并插入就绪队列末尾,循环执行
-
假定就绪队列中有n个进程、时间片为q, 则任何一个进程的等待时间不会超过 (n-1) * q
5.2.5 多级队列调度(MLQ)
不同的类型需要不同的调度方法,因而产生了多级队列调度
分为很多个队列,每个队列的调度方法不一样
要素:
- 队列数
- 每一队列的调度算法
- 决定新进程将进入哪个队列的方法
前台 – RR
后台 – FCFS
5.2.6 多级反馈队列调度(MLFQ)
举例:
三个队列:
Q0
– 时间片为8毫秒Q1
–时间片为16毫秒Q2 – FCFS
调度策略
- 新进程进入
Q0
队列,得到CPU时间片8毫秒,如果不能在该时间片内完成,将被移动到队列Q1
; Q0
内的进程采用FCFS
算法;- 进程在
Q1
队列得到CPU时间片16毫秒,如果还不能完成,将被移至队列Q2
; Q1
内的进程采用FCFS
算法;- 进入
Q2
的进程将采用FCFS
算法一次运行完
5.2.7 多处理器调度
慕课单元作业
有一个操作系统采用多级反馈队列调度,如下图所示。其中第一级采用时间片轮转算法,时间片大小为8ms,第二级同样采用时间片轮转算法,时间片大小为16ms,第三级采用先来先服务算法。
根据下表给出的5个进程的到达时间、执行时间回答下面的问题。(时间以毫秒为单位)
进程 | 执行时间 | 到达时间 |
---|---|---|
P1 | 50 | 0 |
P2 | 10 | 1 |
P3 | 5 | 2 |
P4 | 30 | 3 |
P5 | 23 | 4 |
(1) 请画出5个进程执行的甘特图。
(2) 根据以上的调度算法,分别计算出每个进程的周转时间和响应时间。
2、什么是抢占式调度?什么是非抢占式调度?各适用什么场合?
抢占式调度:调度程序可根据某种原则暂停某个正在执行的进程,将已分配给它的CPU重新分配给另一进程
非抢占式调度:当将资源(CPU)分配给进程时,该进程将保持CPU直到其终止或达到等待状态。
适用场合:
抢占式调度适应于 中断请求场合
非抢占式调度适应于 FCFS调度,IO请求等
3、考虑以下的一个基于优先级(优先数高优先级低)的调度算法,此算法采用根据等待时间和运行时间对优先数进行动态老化算法,具体算法如下:
a) 处于等待队列中的进程的优先数p根据等待时间t(每毫秒计算一次)进行变化,p=p-1;
b) 处于运行状态的进程的优先数p根据运行时间t(每毫秒计算一次)进行变化,p=p+1;
c) 优先数p每隔1毫秒重新计算;
d) 采用抢占式调度策略。
根据下表给出的5个进程的到达时间、执行时间回答下面的问题。(时间以毫秒为单位,当优先级相同时,先进入就绪队列的进程优先)
进程 | 执行时间 | 达到时间 | 优先级p |
---|---|---|---|
P1 | 5 | 0 | 8 |
P2 | 6 | 1 | 4 |
P3 | 3 | 2 | 6 |
P4 | 4 | 3 | 2 |
P5 | 2 | 4 | 10 |
(1) 请画出5个进程执行的甘特图。
(2) 根据以上的调度算法,分别计算出每个进程的周转时间和响应时间。
4、比较作业调度和进程调度的不同点
(1)作业调度是宏观调度,它决定了哪一个作业能进入主存。进程调度是微观调度,它决定各作业中的哪一个进程占有中央处理机。
(2)作业调度是选符合条件的收容态作业装入内存。进程调度是从就绪态进程中选一个占用处理机。
5、考虑下面基于动态优先权的可抢占式调度算法,大优先数表示代表高优先权。当一个进程在等待CPU时(在就绪队列中,但未执行),优先数以α速率变化;当它运行时,优先数以速率β变化。所有进程程在进入就绪队列时被给定优先数为0。请问:
1)β>α>0时是什么算法?为什么?
FCFS算法,先来先服务。
因为进程运行时的速率 β 大于在就绪队列中的速率变化,一开始在就绪队列中都为0,但是最先开始运行的进程,优先级变化更快,在就绪队列中的进程抢占不到。只能等运行的进程结束才能运行下一个进行。
就绪队列优先级 运行进程优先级
0 α 2α 3α… (n-1)α nβ
2)α<β<0时是什么算法?为什么?
LIFO算法,后到先出算法。
因为最新来到就绪队列中的进程的优先级为0,总是大于运行的进程(因为这个进程不论运行还是等待都是优先级在减小),所以最新来到的进程总是先执行。即使没有新的进程来到,在队列尾部的进程的优先级也要更大。
就绪队列优先级 运行进程优先级
α 2α 3α… (n-1)α + β 0