目录
第4章 处理机调度
基本概念
-
处理机的调度的层级
-
作业调度:也称宏观调度/高级调度,从外存输入井中选择后备作业并为其分配资源,作业执行完毕后,回收资源
-
交换调度:也称中级调度,从外存交换区中选择就绪状态或等待状态的进程调入内存
-
进程调度:也称微观调度/低级调度,从处于就绪状态的进程中选取一个占用处理机,在调度时需要切换上下文
-
线程调度:与进程调度类似,只不过调度的对象是线程
-
-
作业的状态及转换
-
进程调度控制进程的就绪和执行态切换,可以发现,进入等待态并不是由进程调度控制的,因为进程是自己阻塞自己的
-
在进程的执行过程中,其内部会对属于自身的线程进行调度
-
作业调度决定了某个任务是否能进入整个调度控制流程
-
交换调度用于处理就绪态进程与等待态进程的挂起与换入操作
调度的目标与衡量指标
-
CPU利用率。这个指标考虑到了进程之间的公平性与平衡性
C P U 利 用 率 = C P U 有 效 工 作 时 间 C P U 有 效 工 作 时 间 + C P U 空 闲 等 待 时 间 CPU利用率=\frac{CPU有效工作时间}{CPU有效工作时间+CPU空闲等待时间} CPU利用率=CPU有效工作时间+CPU空闲等待时间CPU有效工作时间
-
周转时间。包括了作业在系统内的等待时间和执行时间,可以体现系统的吞吐量
其中作业 i i i有提交时间 T s i Ts_i Tsi、完成时间 T e i Te_i Tei、周转时间 T i T_i Ti、等待时间 T w i Tw_i Twi、执行时间 T r i Tr_i Tri、带权周转时间 W i W_i Wi
T i = T e i − T s i = T w i + T r i W i = T i T r i T_i=Te_i-Ts_i=Tw_i+Tr_i\\ W_i=\frac{T_i}{Tr_i} Ti=Tei−Tsi=Twi+TriWi=TriTi
-
调度的目标
-
对所有作业公平合理
-
使设备利用率高
-
执行的作业尽可能多
-
响应时间快
-
作业调度
完成的功能
-
记录系统中各作业的状况,包括执行阶段的有关情况
系统通过作业控制块JCB感知作业的存在,JCB中一般有以下内容
-
作业名:用户提供,系统将其作为标识符
-
作业类型:计算型、管理型、图形设计型等,不同的类型主要需求的资源不同
-
资源要求:用户提供
-
资源使用情况:包括作业进入系统时间(作业转为后备状态的时间)、开始执行时间(后备状态转为执行状态的时间)、内存地址(分配到的内存区首地址)、外设台数
-
优先级:用户指定或系统动态生成
-
当前状态
-
…
-
-
从后备队列中挑选一部分作业投入运行(最主要功能)
-
为被选中作业做好执行前准备工作
-
在作业执行结束时做善后处理
进程调度
完成的功能
-
记录系统中所有进程的执行情况
系统通过进程控制块PCB感知进程的存在
-
选择占有处理机的进程
选择处于就绪态的进程进入处理机执行
-
进程上下文切换
检查是否可以进行上下文切换,保留CPU现场,装配即将占有CPU的进程的上下文,最后将CPU控制权交到选中进程
进程调度的时机
即何时需要进行进程调度。进程调度可以分为非剥夺方式和不可剥夺方式,剥夺指的是某进程在执行过程中被系统强制打断。调度都是通过中断完成的
下面六种调度方式都是非剥夺的
-
正在执行的进程执行完毕
-
执行时进程自己调用阻塞原语
-
执行时进程调用P原语,因资源不足被阻塞;或调用V原语操作激活了阻塞队列中的进程
-
执行中进程提出I/O请求,阻塞
-
分时系统中,时间片用完
-
执行完系统调用,从系统程序返回用户进程时
还有一种剥夺方式的调度时机
- 就绪队列中有比当前执行进程优先级更高的,则立即进行进程调度
调度算法
先来先服务FCFS
即简单地按照作业提交或进程到达的顺序进行处理
-
对需要占用较长时间的进程有利,而对较短的进程不利
-
FCFS更适合CPU密集型进程,对I/O密集型进程不利
轮转法RR
将CPU的处理时间分为等长的时间片。一个进程的时间片耗尽后,系统会通过定时中断剥脱其CPU控制权。显然,这种方法只能用于可抢占资源的调度(像打印机这种不可抢占资源就不可使用RR)
在轮转法中,进程加入就绪队列有三种原因
-
时间片耗尽,但进程还未完成
-
时间片未耗尽,但因I/O请求、进程的互斥同步而阻塞
-
新创建的进程进入就绪队列
时间片长度 q q q可以由系统对响应时间的要求 R R R与就绪队列中能存放的最大进程数 N m a x N_{max} Nmax得到
q = R N m a x q=\frac{R}{N_{max}} q=NmaxR
事实上,时间片长度不一定要始终保持不变,在新一轮调度开始时,系统可以根据就绪队列中当前进程数目计算一次 q q q,以作为新一轮调度中的时间片长度
多级反馈队列法MFQ
也称为多级反馈轮转法,这是对轮转法RR的一种改进。区别进程加入就绪队列的情况,给予不同优先级与时间片。
在这种方法中,会有若干优先级不同的就绪队列,在同一就绪队列中的进程优先级相同,遵循FCFS原则调度。
例如上图中,进程第一次进入0号就绪队列,第二次再需要进入就绪队列时,就会进入1号,以此类推。为了公平,就绪队列 R Q i RQ_i RQi的时间片长度可以定为 q = 2 i q=2^i q=2i
优先级法HPF
系统或用户为作业或进程指定优先级,以表示其享有的调度优先权。在这种方法中,如何确认作业、进程的优先级是关键。对于优先级的确认,一般可以分为静态优先级和动态优先级两种。
静态优先级
优先级可以用户自行输入(对于作业);可以根据作业/进程的类型给予优先级;由于某作业创建的进程,其优先级可以与作业保持一致
动态优先级
一般来说,动态优先级的策略遵循如下两条原则
-
进程占有CPU时间的长短。占有时间越长,在阻塞之后再次获得调度的优先级越低
-
就绪进程等待CPU时间的长短。等待时间越长,获得调度的优先级越高
线性优先级调度SRR
这是优先级法中的一种具体调度算法,使用动态优先级。为了保证对需要时间更长进程的公平性,设计了新创建进程队列和享受服务进程队列
已经得到过CPU的进程均处于享受服务进程队列中,当新创建进程队列中某进程优先级等于享受服务进程队列中最后的进程时(或享受服务进程队列为空时),它就会转到享受服务进程队列中
新创建进程队列中进程的优先级以 P = a × t P=a\times t P=a×t的速度增长,其中 t t t为该进程在此队列中存在的时间;享受服务进程队列中进程的优先级以 P = b × t P=b\times t P=b×t的速度增长, t t t同样为该进程在此队列中存在的时间,需要满足 a > b > 0 a\gt b\gt0 a>b>0
最短作业/进程优先SJF/SPN
就是选择预计执行时间很短的作业/进程优先投入执行。这样的方法可以让吞吐量较高,但可能使得需要时间长的作业/进程永远得不到执行的机会
最短剩余时间优先SRT
和上面的SJF/SPN有些相似,都是优先选择预计运行时间最短的进程。不同之处在于:SJF/SPN算法中,选择好预计执行时间最短的作业/进程后,会一直将其运行到结束;但是在SRT中,当有新的进程就绪,且新进程的服务时间小于当前进程的剩余时间,会转到新的进程执行。
最高响应比优先HRN
结合了FCFS和SJF两种方法,在HRN中,每个进程会有一个响应比R,每次选择响应比最高的作业/进程投入执行,响应比是动态的
R = W + T T = 1 + W T R=\frac{W+T}{T}=1+\frac{W}{T} R=TW+T=1+TW
其中 T T T为预计需要的执行时间, W W W为已经等待的时间
不同调度算法的对比
下面的表中,w表示进程/作业已经等待的时间,s表示进程/作业的预计执行时间,e表示进程/作业已经运行了的时间
实时系统中的调度
-
根据处理外部事件的时限要求,实时系统要处理的外部事件分为
-
硬实时任务:要求系统必须完全满足任务的时限要求
-
软实时任务:允许系统对任务的时限有一定的延迟
-
-
外部任务还可以分为
-
周期性任务:要求在T个周期内完成或开始进行处理
-
非周期性任务:存在一个完成或开始处理的时限
-
-
实时操作系统的特点
-
有限等待时间:这是实时系统的决定性特性,实时系统中要求所有进程必须在有限时间内开始
-
有限响应时间:从系统响应外部事件开始,必须在有限时间内处理完毕
-
用户控制:用户可控制进程的优先级、选择调度算法,影响进程执行的先后顺序
-
可靠性高:要求有很高的可靠性,避免控制错误
-
系统出错处理能力强:对不同错误能做出相应的处理,而不是直接退出
-
-
实时系统中的调度算法可以分为4类
-
静态表格驱动类
对可能的调度条件和参数进行静态分析,将分析结果作为实际调度结果。这种方法多用于调度处理周期性任务
-
静态优先级驱动抢先式调度算法类
同样进行静态分析,但是将分析结果用来指定任务的优先级
-
动态计划调度算法类
在调度任务执行前排出调度计划,若调度结果能满足要求的处理时限,则按该计划进行;否则修改调度计划
-
尽力而为调度算法类
不进行可能性分析,只对到达的事件及相关任务指定相应优先级,不一定满足用户要求的处理时限
-
时限调度算法
这是一种静态的、抢占式的调度算法,可以使用处理开始时限或处理结束时限作为标准。时限调度算法既可用于周期性调度,也可用于非周期性调度。其基本思想为:按用户指定的时限要求设置优先级,优先级高的(即时限要求最近的任务优先)占有处理机
-
任务就绪时间或事件到达时间:即进程进入就绪态,准备好被调度的时间
-
开始时限:必须开始对任务进行处理的时间
-
完成时限:任务必须完成的时间
-
处理时间:处理相关任务需要占用处理机的时间
-
资源需求:除了处理机之外,需要的其他软硬件资源
-
优先级:可以分析计算得到,也可用户自行指定
频率单调调度算法
多用于多周期性实时处理,也就是调度多个周期长度不同的任务,基本思想为:频率越低(即周期越长)的任务优先级越低
对于 n ( n ≥ 1 ) n(n\ge 1) n(n≥1)个周期不同的任务来说,设各任务的周期为 T i T_i Ti、执行时间为 C i C_i Ci,要使用此算法,需要满足
C 1 T 1 + C 2 T 2 + ⋯ C n T n ≤ n ( 2 1 n − 1 ) \frac{C_1}{T_1}+\frac{C_2}{T_2}+\cdots\frac{C_n}{T_n}\le n(2^{\frac{1}{n}}-1) T1C1+T2C2+⋯TnCn≤n(2n1−1)
右侧的
n
(
2
1
n
−
1
)
n(2^{\frac{1}{n}}-1)
n(2n1−1)称为可调度上限
可用户自行指定
频率单调调度算法
多用于多周期性实时处理,也就是调度多个周期长度不同的任务,基本思想为:频率越低(即周期越长)的任务优先级越低
对于 n ( n ≥ 1 ) n(n\ge 1) n(n≥1)个周期不同的任务来说,设各任务的周期为 T i T_i Ti、执行时间为 C i C_i Ci,要使用此算法,需要满足
C 1 T 1 + C 2 T 2 + ⋯ C n T n ≤ n ( 2 1 n − 1 ) \frac{C_1}{T_1}+\frac{C_2}{T_2}+\cdots\frac{C_n}{T_n}\le n(2^{\frac{1}{n}}-1) T1C1+T2C2+⋯TnCn≤n(2n1−1)
右侧的 n ( 2 1 n − 1 ) n(2^{\frac{1}{n}}-1) n(2n1−1)称为可调度上限