文章目录
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