cpu队列长度太长解决方法_仁者见仁智者见智的CPU调度算法

上周介绍了一下操作系统是如何管理进程的,这周来介绍一下进程该怎样分配CPU的。

就像是在银行排队办业务一样,进程相当于去银行办业务的顾客,CPU就是窗口的工作人员,工作人员一次只能处理一个业务(除非是多核CPU处理内核级线程,这个我们下周再讲),这就需要一个合理的安排顺序了。

很容易想到,一个排队的方式,先来的人先办理业务,后面的人排队,这就是最简单的FCFS(先来先服务)的调度方式。可是这就带来一个问题,如果前面来的那哥们是来谈理财的,谈个三四个小时,这哥们是很高兴,后面的人不是得等到死?这就是FCFS的弊端了,他对于长作业来说是很好,但是不利于短作业。对于CPU繁忙型的比较占优势,而对于耗时的IO繁忙型作业不利。

那么就很容易想到一个方法,我让那些很快就能搞定的人先来办业务不就行了,这就是短作业优先(SJF)调度算法,听起来是不错,可是你又让那些长作业的人怎么办呢?有这么一种可能,一直来短作业的人,导致这个长作业的人一直没人来服务,也就是我们说的饥饿状态。这也明显不合理啊。

那么干脆简单粗暴,雨露均沾,平均分配,和你聊10分钟,和另一个顾客聊10分钟,也就是时间片轮转调度算法。绝对公平,可是问题又来了,切换是需要花费的,如果你的时间片很长,比如你设定每位顾客聊一个小时,可是大家基本都是还没一小时就结束,那这不就退化成FCFS算法了吗! 而时间片设短了,你又在频繁切换,徒耗资源,结果可能一件事都没干好。

那么既然公平做不到,我就抓大放小,会员,大顾客或者有急事的优先,这就是优先级调度算法。很明显的好处,设置优先级让优先度高的进程先执行,非常人性化,而且还可以动态的根据等待时间等来改变优先级,听起来很不错。可是同样的,和(SJF)调度算法一样,它也可能造成饥饿问题。

所以也没有什么算法可以兼顾到公平和效率呢?这就仁者见仁了。这里介绍一种算法,考虑的还算充分的(可以拿来面试的时候说...),多级反馈队列调度算法。

d3ffa1d6f76fcc9c1497f2f0233edccd.png

多级反馈队列调度算法的实现思想如下:

  1. 设置多个就绪(进程就绪,表示进程没有在跑IO,正在等着CPU)队列,并为各个队列赋予不同的优先级,第1级队列的优先级最高,第2级队列次之,其余队列的优先级逐次降低。
  2. 赋予各个队列中进程执行时间片的大小也各不相同,在优先级越高的队列中,每个进程的运行时间片就越小。例如,第2级队列的时间片要比第1级队列的时间片长一倍, ……第i+1级队列的时间片要比第i级队列的时间片长一倍。
  3. 当一个新进程进入内存后,首先将它放入第1级队列的末尾,按FCFS原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入第2级队列的末尾,再同样地按FCFS 原则等待调度执行;如果它在第2级队列中运行一个时间片后仍未完成,再以同样的方法放入第3级队列……如此下去,当一个长进程从第1级队列依次降到第 n 级队列后,在第 n 级队列中便釆用时间片轮转的方式运行。
  4. 仅当第1级队列为空时,调度程序才调度第2级队列中的进程运行;仅当第1 ~ (i-1)级队列均为空时,才会调度第i级队列中的进程运行。如果处理机正在执行第i级队列中的某进程时,又有新进程进入优先级较高的队列(第 1 ~ (i-1)中的任何一个队列),则此时新进程将抢占正在运行进程的处理机,即由调度程序把正在运行的进程放回到第i级队列的末尾,把处理机分配给新到的更高优先级的进程。

这么做的好处是明显的,对于短作业来说,可以很快的轮到并解决。对于长作业来说,一下子解决不了,可以放到下一条队列里,虽然等的时间久了,但是轮到自己的执行时间变长了,也可以接受,不容易产生饥饿现象。可以说是综合上面几种算法的优点。

这就是这周我们说的进程调度算法了,下周我们来讲讲线程的调度。欢迎大家直接楼下评论或是加wechat——请看第一篇五子棋的实现,有wechat号。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值