案例一
有5个批处理的作业(A、B、C、D和E)几乎同时到达一个计算中心,估计的运行时间分别为2、4、6、8、10分钟,它们的优先数分别为1、2、3、4、5(1为最低优先级)。对下面的每种调度算法,分别计算作业的平均周转时间。
(1)最高优先级优先
(2)时间片轮转(时间片为2分钟)
(3)FCFS(作业到达顺序为C,D,B,E,A)
(4)短作业优先
最高优先级
时间片轮转(有待于进一步推演-考虑优先级)
FCFS
SJF
解答
案例二
作业调度
-
先来先服务调度算法
-
短作业优先调度算法
1. 非抢占式 2. 抢占式
-
高响应比优先调度算法
用一道题目来引出这个知识点
基础概念
-
周转时间 : 从作业被提交给系统开始到作业完成为止这段时间间隔叫做作业的周转时间 。包括 作业在外存后备队列上等待调度的时间
、进程在就绪队列上等待进程调度的时间、进程在CPU上执行的时间、进程等待I/O操作完成的时间等四个部分 -
如果说设第 i 个系统的周转时间为 T i ,那么平均周转时间 T的表达式为:
-
设系统为第 i个作业提供服务的时间为 T is ,那么平均带权周转时间为:
先来先服务调度算法
先来先服务 ( f i r s t − c o m e , f i r s t − s e r v e d ) ,简写为 F C F S 调度算法
按照到达时间按照顺序排列,先到的先服务
该进程一直运行到完成或发生某事件而阻塞后才放弃处理机
FCFS算法比较有利于长作业(进程),而不利于短作业(进程)
短作业优先调度算法
- 短作业优先 (short job first),简写为 S J F
- 短作业的短指的是执行时间的短,也就是表格里面的服务时间,从任务到达时间开始,先到达的要遵循FCFS。如果有多个任务都已经到达,SJF算法要求服务时间短的先执行
非抢占式
最开始先到的先得到服务,结束之后,看已经到达的进程谁的服务时间最短,就让谁先得到服务
简单说一下, A完成的时候, B已经到达,这个时候显然需要 B开始,由于不是非抢占式,每个进程如果开始就必须持续做直到做完,所以 B结束的时候也就是第 9 个时间点,这时, CDE都已经到达,那么应该开始谁的服务呢?因为 E的服务时间最短,所以应该让 E继续,剩下同理
抢占式
在 SJF调度算法中,进程抢占的条件是如果当前到达的进程 p 1
所需要的服务时间小于正在进行的进程 p 2 ,那么 p 1 抢占 p 2,p 2 保留需要服务的剩余时间,进入等待
表格解释: A 结束之后, B要开始,执行到第四个时间点的时候, C到达,那么 B 这个时候已经执行了1个时间,还剩下5个服务时间, C需要4个服务时间,所以 C 抢占 B, C 结束以后, E开始执行,结束以后,发现 B和 D需要服务时间一样,那么应该让先到的进程 B继续执行,最后进行 E的执行
高响应比优先调度算法
- 高响应比优先调度算法 (Highest Response Ratio Next),简写为 HRRN
- 在前面的 FCFS调度算法中,仅仅考虑的是作业的等待时间,没有考虑作业的运行时间;而在
SJF调度算法中,考虑的是作业的运行时间,没有考虑作业的等待时间,这种单一考虑问题的方式需要改变
- 可以发现此算法好的地方在于随着等待时间的增加,作业优先级也在增加,所以可以使得等待时间很长的作业能有机会执行
- 注意一点,此算法并非抢占,只要不是抢占调度,就必须一个一个的来,这个执行完毕才能执行下一个
高响应比优先调度算法案例
请给出下表作业利用HRRN进行调度的调度顺序(以十进制进行计算)计算各作业的周转时间,给出计算分析过程
分析过程:
(1)8.0作业1到,作业1运行,10.0完成
(2)10.0时作业2、作业3均到达,计算响应比分别为:
R2 = 1+(10.0 - 9.0)/ 1.2 = 1.83
R3 = 1+(10.0 - 9.5)/ 0.5 = 2
R2<R3,作业3先运行,10.5作业3运行完毕。
(3)10.5作业4到达,重新计算作业2和作业4的响应比
R2 = 1+(10.5 - 9.0)/ 1.2 = 2.25
R4 = 1+(10.5 - 10.2)/ 0.3 = 2
R2>R4,作业2先运行,11.7作业2运行完毕。
(4)作业4是最后一个要运行的作业,调度作业4执行完毕。
注:响应比 = 1 + 等待时间 / 处理运行时间
一项作业的完成时间=上一项作业的完成时间+这项作业的执行时间
一项作业的周转时间=这项作业的完成时间–这项作业的到达时间
一项作业的带权周转时间=这项作业的周转时间/这项作业的执行时间
进程状态图转化问题
(1)引起变迁0、变迁1、变迁2、变迁3、变迁4、变迁5的典型事件分别有哪些?
(2)下述三种状态变迁能否发生?为什么?
1)变迁2→(引起)变迁1
2)变迁3→(引起)变迁2
3)变迁4→(引起)变迁1
问题解决:
(1)变迁0:进程创建,典型事件:用户登录、作业调度、提供服务、应用请求。
变迁1:就绪T运行,典型事件:CPU空闲,就绪态进程被调度程序选中。
变迁2:运行T就绪,典型事件:正在运行的进程用完了本次分配给它的时间片、在采用抢占式调度方式的系统中,正运行进程的处理机被优先级更高的就绪进程所抢占。
变迁3:运行T阻塞,运行态进程因某种条件未满足而放弃对CPU的占用,典型事件:请求IO、申请资源失败、新数据尚未到达、等待新任务的到达。
变迁4:阻塞T就绪,阻塞态进程所等待的事件发生了,典型事件: I/O 操作完成、等待的资源得到、新数据到达、新任务的到达。
变迁5:进程撤销,典型事件:进程任务完成、发生异常事件导致进程结束、外界干预。
(2)对于下述状态变迁:
2->1:可以。运行进程用完了本次分配给它的时间片,让出CPU发生变迁2,引起进程调度,从就绪队列中选出一个进程投入运行发生变迁1。
3->2:不可以。任何时候-一个进程只能处于-一种状态,它既然由运行态变为阻塞态发生变迁3,就不能再变为就绪态发生变迁
4->1:可以。某阻塞态进程等待的事件出现了发生变迁4,而且此时就绪队列为空,该进程进入就绪队列后马上又被调度运行发生变迁2,或在采用抢先式调度方式的系统中,某一阻塞态进程等待的事件出现了发生变迁4,而其优先级又高于正运行进程,立即弓|起进程调度抢占处理机发生变迁1。
时间片轮转调度算法专题
- 按照各进程到达就绪队列的顺序,轮流让各个进程执行一个时间片,若进程未在一个时间片内执行完,则会剥夺处理机,将进程重新放到就绪队列队尾重新排队。
案例 :
各进程到达就绪队列的时间、需要运行时间如下表,使用时间片轮转调度算法,分析时间片大小是2时的进程运行情况。 - 抢占式算法
- 不会导致饥饿
0时刻(P1运行):只有P1到达就绪对列,让P1运行一个时间片2.。
2时刻(P2运行):P2到达就绪对列,P1被剥夺CPU,放到队尾,P2运行。
4时刻(P1运行):P3到达,先插到就绪队列队尾,紧接着,P2也插到队尾。
5时刻(P1运行):P4到达,插到就绪队尾。
6时刻(P3运行):P1时间片用完,重新回到就绪队尾。
7时刻(P2运行):P3主动放弃CPU。
9时刻(P4运行):P2时间片用完,并刚好运行完。
11时刻(P1运行):P4时间片用完,回到就绪队尾。
12时刻(P4运行):P1运行完,主动放弃CPU,就绪队列只剩P4。
优先级调度算法专题
- 每个 作业/进程 有各自的优先级,调度时选择优先级最高的 作业/进程。
- 抢占式、非抢占式都有。
- 若源源不断的高优先级到来,会导致饥饿
- 案例
各进程到达就绪队列的时间、需要运行时间、进程优先级如下表。使用非抢占式的优先级调度算法,分析进程运行情况。
非抢占式
0时刻(P1运行):只有P1到达。
7时刻(P3运行):P1运行完主动放弃处理机,其余进程都已到达,P3优先级最高。
8时刻(P2运行):P3完成,P2、P4优先级相同,由于P2先到达,P2优先。
12时刻(P4):P2完成,只剩P4。
16时刻:所有进程结束。
抢占式
0时刻(P1运行):P1到达。
2时刻(P2运行):P2到达,优先级更高。
4时刻(P3运行):P3到达,优先级更高。
5时刻(P2运行):P3完成,主动释放,P4到达,由于P2更先进入就绪队列,P2上。
7时刻(P4运行):只剩P1、P4,P4优先级高。
11时刻(P1运行):P4完成,P1上。
注意:优先级未必只有一个,可以按照不同优先级来组织队列,高优先级在队头。
如何合理设置各进程优先级:
系统进程优先级高于用户进程
前台进程优先级高于后台进程
操作系统更偏好I/O型进程
多级反馈队列调度算法专题
- 设置多级就绪队列,各级队列优先级从高到低,时间片从小到大。
- 新进程到达时先进入第1级队列,按FCFS原则排队等待被分配时间片,若用完时间片进程未结束,则进程进入下一级队列队尾。如果此时已经是在最下级队列,则重新放回该队列队尾。
- 只有第K级队列为空时,才会为k+1级队头的进程分配时间片。
- 对于同一个队列中的各个进程,按照时间片轮转法调度。比如Q1队列的时间片为N,那么Q1中的作业在经历了时间片为N的时间后,若还没有完成,则进入Q2队列等待,若Q2的时间片用完后作业还不能完成,一直进入下一级队列,直至完成。
- 抢占式
- 目前操作系统调度算法中被公认的一种较好的调度算法 。既能使高优先级的作业得到响应又能使短作业(进程)迅速完成
- 会导致饥饿
- 案例
各进程到达就绪队列的时间、需要的运行时间如下表,使用多级反馈队列调度算法,分析各进程运行的过程。
P1先到达,到第1级队列,使用1个时间片,然后进入下一个队列队尾。
P2到达,先到第1级队列,使用1个时间片,进入到下一队列队尾。
P1,在第2级队列,使用2个时间片,然后进入下一个队列队尾。
P2,在第2级队列,使用1个时间片后,P3到达第1级队列,P2被抢占,P2重新回到第2级队列队尾。
P3,在第1级队列,使用1个时间片,结束。
P2,在第2级队列,使用2个时间片,结束。
P1,在第3级队列,使用4个时间片,然后重新回到第3级队列队尾,重新调度。