2.2.5 调度算法(二)
在上一节中我们讲了三种调度算法,分别是先来先服务算法,短作业优先算法,高相应比优先算法,今天我们再来学习三种算法,分别是时间片轮转算法,优先级调度算法,多级反馈队列算法。
目录
2.2.5.1 时间片轮转算法(RR, Round-Robin)
2.2.5.1 时间片轮转算法(RR, Round-Robin)
时间片轮转算法:按照各进程到达就绪队列的顺序,轮流让各个进程执行一个时间片(如 100ms)。若进程未在一个时间片内执行完,则剥夺处理机,将进程重新放到就绪队列队尾重新排队。我们需要注意的是时间片轮转算法应用的对象是进程,因为只有进程才会被分配时间片而作业并不会。时间片轮转算法是一种抢占式的算法,由时钟装置发出中断信号来通知CPU时间已到。
有一组进程,如下图所示,请用时间片轮转算法给出进程的执行顺序,时间片分别设为2以及5 。
时间片为2时,进程到达情况如下:
0时刻:只有P1这一个进程所以P1上处理机运行。
2时刻:P2到达,被存放在就绪队列的队头,刚好P1时间片完于是P1插入到队尾,P2上处理机运行。
4时刻:P3到达,P2时间片用完被插入到P3之后,但此时队头中为P1,于是将P1上处理机运行。
5时刻:P4到达,但是此时P1时间片还没完于是将P4插入到队尾
6时刻:P1的时间片完,下处理机并插入到队尾,处于队头的P3进行调度。
7时刻:虽然P3的时间片还没完但P3已经结束了运行,所以队头的P2发生调度
2.2.5.2 优先级调度算法
优先级调度算法:每个作业/进程有各自的优先级,调度时选择优先级最高的作业/进程。优先级调度算法既有抢占式又有非抢占式,总之一切都是根据优先级高低来决定的。
在如图所示的进程中,我们规定优先数越大,优先级越高,分别用抢占式以及非抢占式给出调度顺序:
非抢占式:(括号中是处于就绪队列中的进程)
0时刻(P1):只有P1到达,P1上处理机。
调度结果如下图所示:
抢占式:
0时刻(P1):只有P1到达,P1上处理机。
2时刻(P2):P2到达就绪队列,优先级比P1更高,发生抢占。P1回到就绪队列,P2上处理机。
2.2.5.3 多级反馈调度算法
多级反馈调度算法实际上是对以上各种算法的折中考虑,算法规则如下:
- 设置多级就绪队列,各级队列优先级从高到低,时间片从小到大
- 新进程到达时先进入第1级队列,按FCFS原则排队等待被分配时间片,若用完时间片进程还未结束,则进程进入下一级队列队尾。如果此时已经是在最下级的队列,则重新放回该队列队尾
- 只有第 k 级队列为空时,才会为 k+1 级队头的进程分配时间片
多级反馈调度算法只适用于进程调度,且也有抢占式和非抢占式两种:抢占式的算法。在 k 级队列的进程运行过程中,若更上级的队列(1~k-1级)中进入了一个新进程,则由于新进程处于优先级更高的队列中,因此新进程会抢占处理机,原来运行的进程放回 k 级队列队尾。
对于以下进程,我们采用抢占式的多级反馈进程调度算法来进行进程调度:(这个过程实在是太难弄了.....我想弄成GIF但失败了)
调度的顺序为P1(1) —> P2(1) —> P1(2)—> P2(1)—> P3(1)—> P2(2)—> P1(4) —> P1(1)(括号中为运行的时间片长度)。
2.2.5.4 三种调度算法比较
| 算法 | 抢占? | 优点 | 缺点 | 饥饿? | 补充 |
|
时间片轮转
|
抢占 |
公平,适用于分时系统
|
频繁切换有开销,不区分优先级
|
不会 | 时间片大小设计的影响 |
|
优先级调度
|
非抢占与抢占均可 |
区分优先级,适用于实时系统
|
可能导致饥饿
|
会 | 动态优先级设置 |
|
多级反馈队列
|
抢占 | 都是优点 | 会 |