操作系统自学(八)三大调度算法

在这里插入图片描述

先来先服务算法(FCFS)

从公平角度考虑(类似于我们平时在餐厅吃饭排队)

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

用于作业调度时:考虑的是哪个作业先到达后备队列
用于进程调度时:考虑哪个进程先到达就绪队列

非抢占式算法

从另一个角度来看 先来先服务算法就是按照到达的先后顺序调度
等待越久 越优先获得服务
在这里插入图片描述
上边我给出一个例子 我们可以看到总共有四个进程
分别是p1,p2,p3,p4 然后表中给出了到达的时间和运行的时间

在这里插入图片描述
前面几篇博客陆陆续续的介绍了等待时间、平均等待时间、周转时间、平均周转时间、带权周转时间、平均带权周转时间
下面我们顺便复习 顺便让我们更好理解这个算法

先来先服务算法
周转时间 = 完成时间 - 到达时间
p1=7-0=7
p2=11-2=9
p3=12-4=8
p4=16-5=11

带权周转时间 =周转时间 / 运行时间
p1=7/7=1
p2=9/4=2.25
p3=8/1=8
p4=11/4=2.75

等待时间 = 周转时间 - 运行时间
p1=7-7=0
p2=9-4=5
p3=8-1=7
p4=11-4=7

平均周转时间=(7+9+8+11)/4=8.75
平均带权周转时间=(1+2.25+8+2.75)/4=3.5
平均等待时间=(0+5+7+7)/4=4.75

先来先服务算法优缺点
优点:公平 算法实现简单
缺点:排在长作业(进程)后面的短作业需要等待特别长的时间,带权周转时间很大,对于短作业来说很不友好
FCFS算法对于长作业有利,对于短作业不利

举个有味道的例子
假如某一天我们去旅游,突然想上厕所,但是旅游景点只有这一个厕所,但是这天又是周末,游客特别多,导致厕所爆满
然后假设我们平时上厕所的时间是5分钟 但是这是讲究先来后到的 我们只能等前面人上完厕所 轮到我们,我们才能去
但是很不巧的是 前面是一个便秘的大爷 大爷需要用半个小时 所以我们就需要等半个小时 这对于我们是体验感极差的
可能我们经历这次从“厕所风波”只有这辈子不会再去这个景点了

先来先服务不会导致饥饿(某进程/作业长期得不到服务)

短作业优先算法(SJF)

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

最短的进程/作业优先获得服务(服务时间最短)
即可用于作业调度,也可用于进程调度,用于进程调度被称为短作业优先

SJF和SPF 都是非抢占式算法,但是也有抢占式的版本(最短剩余时间优先算法SRTN)

在这里插入图片描述
还是刚刚的那个表格 我们使用短作业优先的算法计算一下各个参数

运行顺序:P1-P3-P2-P4
在这里插入图片描述
周转时间 = 完成时间 - 到达时间:p1=7-0=7 p3=8-4=4 p2=12-2=10 p4=16-5=11
带权周转时间 = 周转时间/运行时间:p1=7/7=1 p2=10/4=2.5 p3=4/1=4 p4=11/4=2.75
等待时间=周转时间-运行时间 p1=7-7=0 p2=10-4=6 p3=4-1=3 p4=11-4=7

平均周转时间(7+4+10+11)/4=8
平均带权周转时间(1+4+2.75+2.5/4=2.56
平均等待时间(0+3+6+7)=4

相比于先来先服务算法来说最短作业优先的平均等待时间等参数都要更低

抢占式短作业优先算法(最短剩余时间优先算法)

每当有进程假如就绪队列改变时就需要调度,如果新进程的进程剩余时间小于正在运行的进程剩余时间的时候
新进程就要抢占处理机,当前运行进程重新回到就绪队列,当一个进程完成也需要调度

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
周转时间=完成时间 - 到达时间 p1=16-0=16 p2=7-2=5 p3=5-4=1 p4=11-5=6
带权周转时间=周转时间/运行时间 p1=16/7=2.28 p2=5/4=1.25 p3=1/1=1 p4=6/4=1.5
等待时间=周转时间-运行时间 p1=16-7=9 p2=5-4=1 p3=1-1=0 p4=6-4=2

平均周转时间=(16+5+1+6/4=7
平均带权周转时间=(2.28+1.25+1.5+1)/4=1.50
平均等待时间(9+1+0+2/4=3

对于非抢占式算法 显然抢占式算法的这几个指标更低

如果题中没有特别说明 就默认是非抢占式最短优先算法

优缺点:
优点最短的平均等待时间,平均周转时间
缺点不公平 对于短作业有利,对长作业不利,可能产生饥饿现象
作业/进程是由用户提供的,不一定真实,不一定做到真正的短作业优先

可能会导致饥饿
如果有源源不断的短作业/进程到来,可能会使长作业/长进程长时间得不到服务
产生饥饿现象 如果一直得不到服务 可能会“饿死”

举个例子
设想一下 如果奶茶店的营销模式变成最短作业优先
那么如果要买一个制作时间很长的饮品,那么你就等着吧 可能你渴死 也轮不到你(顾客足够多的情况下)

高响应比优先算法(HRRN)

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

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

即可用于作业调度也可用于进程调度
非抢占式的算法,只有当前运行的作业/进程主动放弃处理机的时候,才需要被调度,才需要计算响应比

在这里插入图片描述
在这里插入图片描述
响应比=(等待时间+要求服务时间)/ 要求服务时间
在7时刻 响应比p2=(5+4)/4=2.25 p3=(3+1)/1=4 p4=(2+4)/4=1.5
看到p3的响应比最高 所以P3先执行
8时刻 p2=(6+4)/4=2.5 p4=(3+4/)4=1.75
所以先执行P2
就绪队列中只剩下了p4

优缺点
综合考虑了等待时间和运行时间
等待时间相同时,要求服务时间短的优先(SJF优点
服务时间相同时,要求等待时间越长的优先(FCFS的优点
对于长作业来说 随着等待时间越久 响应比越大 避免了长作业饥饿的问题

调侃一下 为了让大家更好了解高响应比优先算法 我把他成为 长作业愤怒值算法(你品细细的品)

这篇博客介绍了好多好多东西,可能内容有点多,希望对大家有所帮助

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值