Skip to content
Go back

13-常见调度算法

Published:  at  04:12 PM

常见调度算法

FCFS-先来先服务 (First Come First Server)

算法思想

主要从“公平”角度考虑,类似我们生活中的排队购物现象,先到先服务

算法规则

按照作业/进程到达的先后顺序进行服务

用于作业/进程调度

是否可抢占?

非抢占式算法

示例

先来先服务例题

优缺点

综上即FCFS算法对长作业有利,对短作业不利(例如上面例题种P3作业的带权周转时间达到了很大的8)

是否会导致饥饿

饥饿指某进/作业长时间得不到服务

FCFS算法不会导致饥饿,只要各个任务依序排队,总会轮到响应作业

SJF-短作业优先 (Shortest Job First)

算法思想

追求最少的平均等待时间,最少的平均周转时间,最少的平均带权周转时间

算法规则

最短的作业/进程有限得到服务(这里的最短指的是要求服务时间最短)

用于作业/进程调度

即可用于作业调度,也可用于进程调度,用于进程调度事被称为“短进程优先算法(SPF,Shortest Process First)”

是否可抢占

SJF和SPF是非抢占式算法,但是也存在抢占式的版本:最短剩余时间优先算法(SRTN,Shortest Remaining Time Next)

示例

非抢占式版本

抢占式版本

优缺点

是否会导致饥饿

会,如果不断有短作业到来,可能使已到达的长作业长时间得不到服务,产生饥饿现象

注意

HRRN-高响应比优先 (Hignest Response Ration Next)

算法思想

要综合考虑作业/进程的等待时间和要求服务时间

算法规则

在每次调度时先计算各个作业/进程的响应比,选择响应比最高的作业/进程为其服务

响应比=等待时间+要求服务时间要求服务时间响应比=\frac{等待时间+要求服务时间}{要求服务时间}

用于作业/进程调度

即可用于作业调度,也可用于进程调度

是否可抢占

非抢占式算法,只有当前运行的作业主动放弃处理机时,才会进行调度

示例

优缺点

是否会导致饥饿

不会

RR-时间片轮转 (Round-Robin)

算法思想

公平轮流为各个进程服务,让每个进程在一定时间间隔内都可以得到响应

算法思想

按照每个进程到达就绪队列的顺序,轮流让每个进程执行一个时间片(如100ms),若进程未在规定时间片内执行完则剥夺其处理机,重新将进程放入就绪队列的队尾重新排队

用于作业/进程调度

用于进程调度(作业只有在被放入内存建立进程后才可能涉及分配处理机时间片)

是否可抢占

若进程未在时间片内运行完,则会被强行剥夺处理及使用权,因此时间片轮转算法属于抢占式算法,由时钟装置发出时钟中断来通知CPU时间片已到

示例

时间片大小为2

时间片大小为5

优缺点:

是否会导致饥饿

不会

优先级调度算法

算法思想

随着计算机发展,特别是实时操作系统出现,越来越多的应用场景需要根据任务的紧急程度决定处理顺序

算法规则

调度时选择优先级最高的作业/进程

用于作业/进程调度

即可用于作业调度,也可用于进程调度,甚至可以用到I/O调度中

是否可抢占

抢占式,非抢占式都可以,区别在于非抢占式只能在进程主动放弃处理机资源时进行调度,抢占式则需要在就绪队列发生变化时进行检查,是否有优先级变化是否需要抢占

示例

非抢占式

抢占式

优缺点

是否会发生饥饿

补充

多级反馈队列调度算法

算法思想

对其他调度算法的折中权衡

算法规则

  1. 设置多级就绪队列,各级队列的优先级从高到低,时间片从小到大
  2. 新进程到达时优先进入第一级队列,按FCFS原则排队等待被分配时间片,若用完时间片进程还未结束,则进程进入下一级队列队尾,如果此时该进程已经处于最低级队列,则重新放回该队列队尾
  3. 只有第k级队列为空时,第k+1级队列的首个进程才会被分配时间片(优先级高的永远抢占运行)

用于作业/进程调度

用于进程调度

是否可抢占

多级反馈队列调度算法是抢占式算法,在k级队列的进程运行过程中,若更高级的队列(1~k-1)中进入新进程,则由于新进程优先级更高,抢占处理机,原k级进程被放回k级队列队尾

示例

首先P1在0时刻到达,进入最高级队列(1级队列),此时没有进程运行,P1占用CPU运行

一级队列时间片大小只有1,在1时刻,P1在运行完一个时间片后,就需要中断运行进入2级就绪队列等待,此时P2进程恰好进入1级队列,由于优先级更高,所以P2进程占用CPU运行一个时间片,运行结束后同样进入2级就绪队列等待 在2时刻,此时没有更高级进程进入,所以位于2级队列队首的P1进程继续执行,2级队列拥有两个时间片,P1在4时刻中断运行,由于还没有运行结束,所以继续降级进入3级队列等待,4时刻没有新进程到来,所以P2继续占用CPU运行 在5时刻,P2只运行了一个时间片,但由于此时有新进程P3进入,P3处于更高优先级,所以P3抢占CPU运行,P2只能重新回到2级队列队尾等待 在6时刻,P3进程运行结束,离开队列,此时P2处于更高优先级,所以继续占用CPU运行两个时间片

在8时刻,P2运行结束,离开队列,此时P1才能继续占用CPU运行4个时间片,4个时间片后P1仍未运行技术,此时由于P1位于最底层队列,所以P1只能重新回到3级队列队尾进行等待,直到占用CPU运行结束

综上所述,进程的运行情况为:P1(1)->P2(1)->P1(2)->P2(1)->p3(1)->P2(2)->p1(4)->p1(1)

优缺点

是否会导致饥饿

是,若不断有新进程到来,则老进程由于进入低优先级队列无法得到执行,进入饥饿状态


Suggest Changes

Previous Post
14-进程同步与进程互斥
Next Post
12-调度算法的评价指标