操作系统——调度算法

调度算法

调度的基本知识

周转时间(turnaround time)=作业完成时间 - 作业提交时间

平均周转时间=(n个作业周转时间之和)/ n

等待时间(wait time):进程在等待CPU的时间(在就绪队列中的时间)

响应时间(respond time):用户提交请求到系统首次产生响应的时间(等待时间+运行时间)

带权周转时间:周转时间 / 服务时间

平均带权周转时间:带权周转时间的平均值

服务时间:作业的运行时间

响应比=(等待时间+运行时间)/运行时间

剥夺式(抢占式)&非剥夺式(非抢占式)

剥夺式(抢占式)优先级调度算法。当一个进程正在处理机上运行时,若有某个更为重要或紧迫的进程进入就绪队列,则立即暂停正在运行的进程,将处理机分配给更重要或紧迫的进程。

非剥夺式(非抢占式)优先级调度算法。当一个进程正在处理上运行时,即使有某个更为重要或紧迫的进程进入就绪队列,仍然让正在进行的进程继续运行,直到由于其自身原因而主动让出处理机(任务完成或等待事件),才把处理机分配给更为重要或紧迫的进程。

进程process(线程thread)调度的时机

*运行的进程(线程)运行完毕

*运行的进程(线程)所需资源未准备好

*运行的进程(线程)的时间片用完

*运行的进程(线程)自我阻塞

*运行的进程(线程)出现错误

总结:

算法

模式

优点

缺点

考虑点

导致饥饿

FCFS

非抢占式

公平;实现简单

对短作业不利

等待时间

有利于CPU繁忙,不有利于I/O繁忙

不会

SJF

非抢占式

(同时到达)最短的平均最短时间、平均周转时间

对长作业不利

运行时间

SRTF

抢占式

(real)最短的平均最短时间、平均周转时间

对长作业不利

运行时间

HRRF

非抢占式

既考虑短作业,又考虑先后次序

要进行响应比计算,增加开支

等待时间、运行时间

不会

RR

抢占式

公平、响应快、适用于分时操作系统

高频率切换增加开销;不考虑优先级

不会

PSA

抢占式、非抢占式

考虑紧急程度、重要程度

导致饥饿

MLFQ

抢占式

折中权衡

可能导致饥饿

一.  先来先服务调度算法(FCFS)

First-Come-First-Served

算法思想:主要从“公平”的角度考虑,先到先服务

算法规则:先进入系统的作业/进程优先被挑选。是否可抢占:非抢占式

优点:公平、算法实现简单。

缺点:对长作业有利,对短作业不利。对CPU频繁有利、对I/O频繁不利。排在长作业(进程)后面的短作业需要等待很长时间,带权周转时间很大,对短作业不好。

是否导致饥饿:不会

二.最短作业优先调度算法(SJF)

最短作业优先调度算法(SJF

Shortest-Job-First

算法思想:追求最少的平均等待时间、最少的平均周转时间、最少的平均带权周转时间

算法规则:每次调度时选择当前已到达且运行时间最短的作业/进程。

是否可抢占:非抢占式

优点:对比FCFS,最短作业优先算法的平均等待时间、平均周转时间、平均带权周转时间都更低。

缺点:不公平。对短作业有利,对长作业不利。

是否导致饥饿:会

最短剩余时间优先调度算法(SRTF

Shortest-Remaining-Time-First

算法规则:每当有进程加入就绪队列改变时就需要调度,如果新到达的进程剩余时间比当前运行的进程剩余时间更短,则由新进程抢占处理机,当前运行进程重新回到就绪队列。另外,当一个进程完成时也需要调度。

是否可抢占:抢占式

优点:对比非抢占式的短作业优先算法,抢占式的短作业优先算法的平均等待时间、平均周转时间、平均带权周转时间都更低。(因为是抢占式的,比起SJF,平均周转时间、平均等待时间更短)

注意

1.如果题目中未特别说明,所提到的“短作业/进程优先算法”默认是非抢占式的

2.很多书上都会说“SJF调度算法的平均等待时间、平均周转时间最少”

严格来说,这个表述是错误的,不严谨的。之前的例子表明,最短剩余时间优先算法得到的平均等待时间、平均周转时间还要更少

应该加上一个条件“在所有进程同时可运行时,采用SJF调度算法的平均等待时间、平均周转时间最少”;

或者说“在所有进程都几乎同时到达时,采用SJF调度算法的平均等待时间、平均周转时间最少”;如果不加上述前提条件,则应该说“抢占式的短作业进程优先调度算法最短剩余时间优先, SRTF算法)的平均等待时间、平均周转时间最少”

三.响应比最高者优先调度算法(HRRF)

Highest Response Ratio First

算法思想:选择等待时间和要求服务时间都较短的作业/进程优先调度。

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

响应比=(等待时间+运行时间)/运行时间

是否可抢占:非抢占式

优点:上述两种算法的权衡折中。既照顾了短作业,又考虑了作业到达的先后次序,又不会使长作业长期得不到服务。

等待时间相同时,要求服务时间短的优先(SJF的优先,对短作业有利)要求服务时间相同时,等待时间长的优先(FCFS的优点)

随着等待时间越来越长,其响应比也会越来越大,从而避免了长作业饥饿的问题(长作业有利

缺点:要进行响应比计算,增加了系统开销。

是否导致饥饿:不会

四.   时间片轮转调度算法(RR)

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

调度程序每次把CPU分配给就绪队列首进程/线程使用一个时间间隔(称为时间片),就绪队列中的每个进程/线程轮流运行一个时间片

算法规则:按照各进程到达就绪队列的顺序,轮流让各个进程执行一个时间片(每次选择的都是排在就绪队列队头的进程)。若进程未在一个时间片内执行完,则剥夺处理机,将进程重新放到就绪队列队尾重新排队。

时间片的选取:时间片大小的确定要从进程个数、切换开销、系统效率和响应时间等方面考虑。时间片的大小很影响操作系统的效率

是否可抢占:抢占式。若进程未能在时间片内运行完,将被强行剥夺处理机使用权。

优点:公平,响应快,适用于分时操作系统。

缺点:由于高频率的进程切换,因此有一定开销;不区分任务的紧急性。

是否导致饥饿:不会

五.优先级调度算法(PSA)

算法思想:根据任务的紧急程度来决定处理顺序。

算法规则:根据确定的优先级选取进程/线程,每次总是选择就绪队列中优先级最高者运行。

用户进程/线程优先级的规定者有两种:

① 用户:用户自己提出优先级,称为外部指定法。优先级越高,费用越高。

② 系统:由系统综合考虑有关因素来确定用户进程/线程的优先级,称为内部指定法。

进程/线程优先级的确定方式:

根据优先级是否随时间而变,进程/线程优先级的确定有静态和动态两种方式:

① 静态优先级:在进程/线程创建时确定,此后不再改变。优先级主要由进程类型、资源需求、时间需求和用户需求决定。

优点:比较简单,开销小。

缺点:不够公平不太灵活,可能出现优先级低的作业/进程长时间得不到调度的情况。

② 动态优先级:随时间而变,基本原则是:

a. 正在运行的进程/线程随着占有CPU时间的增加优先级逐渐降低;

b. 就绪队列中等待CPU的进程/线程随着等待时间增加优先级逐渐提高。

优点公平性好,灵活,资源利用率高。用优先级区分紧急程度、重要程度,适用于实时操作系统。可灵活地调整对各种作业/进程的偏好程度。

缺点:需要花费比较多的执行程序时间,因而花费的系统开销比较大。

是否可抢占:抢占式,非抢占式都有。若源源不断地有高优先级进程到来,则可能导致饥饿。

是否导致饥饿:会

六.多级反馈队列雕塑算法(MLFQ)

算法思想:综合其他算法,结合优点,减少缺点。

算法规则

1、建立多级就绪进程队列,各级队列优先级从高到低,时间片从小到大。每个队列赋予不同优先级,较高优先级队列一般分配给较短的时间片。

2、新进程到达时先进入第1级队列,按先来先服务原则排队等待被分配时间片,若用完时间片进程还未结束,则进程进入下一级队列队尾;若此时已经在最下级的队列,则重新放回该队列队尾。

3、处理器调度每次先从高优先级就绪队列中选取可占有处理器的进程,只有在选不到时,才从较低优先级就绪队列中选取进程。即只有第k级队列为空时,才会为k+1级队头的进程分配时间片。

是否可抢占:抢占式

在k级队列的进程运行过程中,若更上级的队列(1~k-1级)中进入了一个新进程,则由于新进程处于优先级更高的队列中,因此新进程会抢占处理机,原来运行的进程放回k级队列队尾。

优点:对其他调度算法的折中权衡。对各类进程相对公平(FCFS的优点);短进程只用较少的世界就可完成(SPF的优点);每个新到达的进程都可以很快得到响应(RR的优点);不必估计进程的运行时。可灵活地调整对各类进程的偏好程度,比如:CPU密集型进程、I/O密集型进程(拓展:可以将因I/O而阻塞的进程重新放回原队列,这样I/O型进程就可以保持较高优先级)。

缺点:可能会导致饥饿

是否导致饥饿:

这个博客如果对你有帮助,给博主一个免费的点赞就是最大的帮助❤
欢迎各位点赞,收藏和关注哦❤
如果有疑问或有不同见解,欢迎在评论区留言❤
后续会继续更新大连理工大学相关课程和有关操作系统的内容
点赞加关注,学习不迷路,好,本次的学习就到这里啦!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

头发尚存的猿小二

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值