操作系统概念——第5章 CPU调度

1. 基本概念

1.1 什么是CPU调度

调度程序在就绪队列中选择一个进程,让它在CPU上执行
(调度程序 + 分派程序)

1.2 抢占调度

CPU调度会在四种环境下发生
(1)进程从运行状态切换到阻塞状态(例如:IO请求)
(2)进程从运行状态切换到就绪状态(例如:发生中断)
(3)进程从阻塞状态切换到就绪状态(例如:IO完成)
(4)进程终止

问题:选择与调度
在(1)(4)情况下,没有选择只有调度
在(2)(3)情况下,即就绪队列有进程存在时,可以进行选择

1. 非抢占调度
定义
进程在CPU上执行时,会一直使用CPU资源直到进程结束或切换到阻塞状态(情况(1)(4))

2. 抢占调度
定义
会剥夺原在CPU上执行的进程对CPU资源的使用权(情况(2)(3))

3. 分派程序
定义
用来将CPU的控制交给调度程序选择的进程
功能
① 切换上下文
② 切换到用户模式
③ 跳转到用户程序的合适位置,以重新启动程序

2. 调度准则

提出的一些准则用于衡量调度算法的好坏
最大化
(1)CPU利用率:
(2)吞吐量:单位时间完成进程的数量
最小化
(1)等待时间:进程在就绪队列中等待的时间
(2)响应时间:从提交请求到开始响应的时间(包括:等待进入内存+在就绪队列中等待)
(3)周转时间:从提交请求到进程完成的时间(包括:等待进入内存+在就绪队列等待+在CPU上执行和IO执行)

计算方法
(1)等待时间:
① 一段:开始时间 - 到达时间
② 多段:结束时间 - 执行时间 - 到达时间
理解:从进程到达就绪队列后到进程执行结束前,进程不是在运行,就是在等待。因此

问题:CPU调度算法会改变进程运行和执行I/O的时间吗?
解答:不会。调度算法只影响进程在就绪队列等待的时间

3. 调度算法

3.1 先到先服务调度(FCFS)

定义
先请求CPU的进程先分配CPU(非抢占型)
优点
可以通过FIFO队列很容易地实现
缺点
(1)如果进程CPU区间时间变化很大时,平均等待时间变化也很大
(不同CPU区间时间的进程的执行顺序变化)
(2)护航效应:当大进程最先执行时,所有其他进程等待大进程释放CPU、I/O设备空闲,CPU和设备的利用率较低
Gantte图
在这里插入图片描述
1.平均等待时间: ( 0 + 24 + 27 ) 3 = 17 \frac{(0+24+27)}{3}=17 3(0+24+27)=17
2.周转时间: ( 24 + 27 + 30 ) 3 = 27 \frac{(24+27+30)}{3}=27 3(24+27+30)=27
3.吞吐量: 3 30 = 0.1 \frac{3}{30}=0.1 303=0.1

3.2 最短作业优先(SJF)

定义
当CPU空闲时,它会赋给具有最短CPU区间的进程。当两个进程具有相同长度时,采用FCFS调度(非抢占)
优点
最优调度算法,SJF的平均等待时间最少
困难
下一CPU区间长度的计算
① 长期调度:可以将用户提交作业时所指定的进程时间极限作为长度
② 短期调度:指数平均
下一个CPU区间通常可以预测为以前CPU区间的测量长度的指数平均
τ n + 1 = α t n + ( 1 − α ) τ n τ n + 1 = α t n + α ( 1 − α ) t n − 1 + ⋯ + ( 1 − α ) n + 1 τ 0 \tau_{n+1}=\alpha t_n+(1-\alpha)\tau_n \\ \tau_{n+1}=\alpha t_n+\alpha(1-\alpha)t_{n-1}+\dots+(1-\alpha)^{n+1}\tau_0 τn+1=αtn+(1α)τnτn+1=αtn+α(1α)tn1++(1α)n+1τ0
由于 α , ( 1 − α ) \alpha,(1-\alpha) α,(1α)小于或等于1,更早信息的权重更小
Gantte图
在这里插入图片描述
1.平均等待时间: ( 0 + 3 + 9 + 16 ) 4 = 7 \frac{(0+3+9+16)}{4}=7 4(0+3+9+16)=7
2.周转时间: ( 3 + 9 + 16 + 24 ) 4 = 13 \frac{(3+9+16+24)}{4}=13 4(3+9+16+24)=13
3.吞吐量: 4 24 = 1.67 \frac{4}{24}=1.67 244=1.67

3.3 最短剩余时间优先调度(抢占型SJF)

定义
抢占型SJF,若一个新进程比当前运行进程有一个更短的CPU区间,则抢占当前运行的进程
Gantte图
在这里插入图片描述
1.平均等待时间: ( ( 10 − 1 ) + ( 1 − 1 ) + ( 5 − 3 ) + ( 17 − 2 ) ) 4 = 6.5 \frac{((10-1)+(1-1)+(5-3)+(17-2))}{4}=6.5 4((101)+(11)+(53)+(172))=6.5
(开始时间 - 到达时间)

2.周转时间: ( ( 17 − 0 ) + ( 5 − 1 ) + ( 26 − 2 ) + ( ) 10 − 3 ) 4 = 13 \frac{((17-0)+(5-1)+(26-2)+()10-3)}{4}=13 4((170)+(51)+(262)+()103)=13
3.吞吐量: 4 26 \frac{4}{26} 264

3.4 优先级调度(SJF)

定义
每个进程都有一个优先级,具有最高优先级的进程分配到CPU,具有相同优先级的按照FCFS处理(抢占/非抢占)
优先级
优先级可通过内部或外部方式定义
问题
饥饿:优先级调度会使某个低优先级进程无限等待
老化:逐渐增加在系统中等待很长时间的进程的优先级

Gantte图
考虑下面一组进程,它们在时间0按顺序 P 1 , P 2 , … , P 5 P_1,P_2,\dots,P_5 P1,P2,,P5到达:
在这里插入图片描述
1.平均等待时间: ( 0 + 1 + 6 + 16 + 18 ) 5 = 8.2 \frac{(0+1+6+16+18)}{5}=8.2 5(0+1+6+16+18)=8.2
2.周转时间: ( 1 + 6 + 16 + 18 + 19 ) 5 = 12 \frac{(1+6+16+18+19)}{5}=12 5(1+6+16+18+19)=12
3.吞吐量: 5 19 \frac{5}{19} 195

3.5 轮转法调度(RR)

定义
定义一个较小的时间单元时间片,遍历循环队列为每个进程分配不超过一个时间片的CPU(可抢占)
实现
设置定时器在一个时间片后中断,发生上下文切换,将进程加入到队列尾部。接着CPU调度程序会选择就绪队列的下一个进程
可抢占
如果进程的CPU区间超过一个时间片,该进程就会被抢占。
优缺点
是专门为分时系统设计的,但等待时间通常较长。每个进程必须等待的CPU时间不会超过(n-1)q
时间片大小与上下文开销
① 如果时间片过大,就相当于FCFS
②== 如果时间片过小,会产生额外的上下文切换开销,相应的进程执行减慢==
在这里插入图片描述
③ 如果绝大多数进程在一个时间片内完成,则平均周转时间会改善
Gantte图
在这里插入图片描述
1.平均等待时间: ( 4 + 7 + ( 10 − 4 ) ) 3 = 5.66 s \frac{(4+7+ (10-4))}{3}=5.66s 3(4+7+(104))=5.66s
析: P2,P3的等待时间分别为4和7,而由于10s后仅P1在CPU上执行,因此再次发生的进程的等待时间=再次开始时间-初次结束时间=10-4=6
或者使用结束时间 - 开始时间 - 区间时间 = 等待时间
2.周转时间: ( 30 + 7 + 10 ) 3 = 15.66 s \frac{(30+7+10)}{3}=15.66s 3(30+7+10)=15.66s
3.吞吐量: 3 30 = 0.1 \frac{3}{30}=0.1 303=0.1

3.6 多级队列调度

定义
将就绪队列分成多个独立队列,每个进程被用就分配到一个队列。每个队列有自己的调度算法
队列间调度
固定优先级抢占调度:每个队列比较低层队列有绝对的优先级
在这里插入图片描述
优点
低调度开销
缺点
不够灵活,进程不能从一个队列转移到另一个队列

3.7 多级反馈队列调度

定义
允许进程在队列之间移动
主要思想
根据不同CPU区间以区分进程。如果进程使用过多CPU区间,它会被转移到较低优先级队列。如果在较低优先级队列中等待时间过长,进程会转移到更高优先级队列。
在这里插入图片描述
特点
最通用的CPU调度算法。不过需要选择参数以确定最佳的调度程序,也是最复杂的算法

4. 多处理器调度

4.1 多处理器的调度方法

(1)非对称多处理
让一个处理器(主服务器)处理所有调度决定、I/O处理以及其他系统活动,其他处理器只执行用户代码
(2)对称多处理
每个处理器检查共同的就绪队列并选择一个进程执行

4.2 处理器的亲和性

定义
试图避免进程从一个处理器转移到另一个处理器,而努力使一个进程在同一处理器上执行
分类
(1)软亲和性
(2)硬亲和性:指定进程不允许移动到其他处理器

4.3 负载平衡

定义
将工作负载平均分配到SMP系统中所有处理器上
方式
进程从超载处理器移到空闲或不太忙的处理器上
push migration和pull migration

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冠long馨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值