操作系统:进程调度算法(FCFS、SJF、HRRN、RR、HPF、MFQ)

进程调度算法也称 CPU 调度算法,毕竟进程是由 CPU 调度的。 

  • 非抢占式调度:当进程正在运行时,它就会一直运行,直到该进程完成或发生某个事件而被阻塞时,才会把 CPU 让给其他进程。
  • 抢占式调度:进程正在运行的时,可以被打断,使其把 CPU 让给其他进程。

1、先来先服务调度算法(FCFS)

这个算法顾名思义,先来先运行,每次都从就绪队列中选取最先到的进程任务让CPU处理,直至这个进程完成或者被阻塞,才会继续从就绪队列中选取第一个进入的进程继续执行。

这个算法对于长作业有利,但对于短作业不利,假如有个长作业排在第一个,则后面的进程要等待很久。它也比较适合CPU繁忙作业的系统,因为这个的话它就不需要频繁的放弃CPU重新排队,能提高CPU的吞吐量。

如果一个进程是I/O繁忙型的,那么它会经常地放弃CPU,进入阻塞状态,等待I/O完成后再进入就绪队列的队尾,这样就会导致它的等待时间和周转时间很长,它会降低I/O的利用率和效率。

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

前面那个算法对长作业有利,那么这个算法就是对短作业有利。它每次从就绪队列中会选择运行时间最短的进程来运行,这个可以提高CPU的吞吐量(一定时间内完成任务的数量)。

这个算法可以看出它对于长作业是很不利的,可能会导致一些长作业根本不会被选中或者要等待很长时间才能被选中。导致长作业的运转周期变长。

3、高响应比优先调度算法(HRRN

上面两个算法都是比较绝对的执行顺序,对于短作业和长作业并没有平衡它两之间的关系,而这个高响应比调度算法是就解决了这弊端,它是通过计算动态得出此次要从就绪队列中选择哪个进程。

当两个进程的等待时间相同时,需要服务时间短的进程它的优先级高,则此时短作业容易被选中。

当两个进程需要的运行时间相同时,等待时间越长则优先级越高,则会选择等待时间长的进程。

从这样的模式可以兼顾长作业,当等待时间增加时,优先级也会增加,到一定程度其优先级也会很高了,就会获得运行时间,这样的模式有个缺点就是需要进行计算,有点耗费资源。

4、时间片轮转调度算法(RR)

        这的基本思想是将CPU的时间分割成若干个小的时间段,称为时间片,将这个时间片分给每一个进程,在这段时间内这个进程会在CPU中执行。

在这个算法 中有两种情况程序会让出CPU:

  • 当时间片用完了之后这个进程的程序还没有执行完毕,则会让出CPU重新进入就绪队列等待被选中,CPU会继续从就绪队列中选择下一个进程执行。
  •  当时间片还没用完,程序发生阻塞或者执行完毕,也会立即让出CPU。

在这个算法中时间片的大小很重要,要是太小则会导致CPU上下文切换频繁,浪费资源。太长则则对短作业不利,使其等待时间过长,CPU吞吐量下降。

5、最高优先级调度算法(HPF)

这个算法就是给每个进程都设定一个优先级,让优先级高的进程先运行。这个算法可以用在多用户计算机系统,例如有一个用户的是VIP用户,其他是普通用户,那么就是这个VIP用户的优先级要高,它的进程要优先被执行。这个就是最高优先级调度算法。这而这个优先级的设计方式有各种各样。

  • 静态优先级:再创建进程时就已经设定好了进程的优先级,再运行过程中并不会再改变。
  • 动态优先级:再运行的过程中动态的调整进程的优先级,例如程序运行时间增加,则降低其优先级,用户级别降低,降低优先级等等。

这个算法不光有优先级的分别,还有抢占式和非抢占式的区别。

  • 抢占式:一旦就绪队列中有优先级高的进程,则CPU会立即当前正在运行的程序挂起,转而去运行优先级高的那个。
  • 非抢占式:即使就绪队列中有优先级更高的进程,CPU也是将此时这个程序运行完成后再去运行那个优先级高的进程

6、多级反馈队列调度算法(MFQ)

        这个多级反馈队列调度算法是时间片轮转最高优先级两个算法的结合体。

从图中我们可以看到有多个队列,并赋予每个队列不同的优先级,每个队列的优先级从高到低,同时优先级越高的队列时间片分配的越短。 

我们来看看它的工作流程:

  • 新的进程会被放入到第一级队列的末尾,按先来先服务的原则排队等待被调度,如果在第一级队列规定的时间片没运行完成,则将其转入到第二级队列的末尾,以此类推,直至完成;
  • 当较高优先级的队列为空,才调度较低优先级的队列中的进程运行。如果进程运行时,有新进程进入较高优先级的队列,则停止当前运行的进程并将其移入到原队列末尾,接着让较高优先级的进程运行;

可以发现,对于短作业可能可以在第一级队列很快被处理完。对于长作业,如果在第一级队列处理不完,可以移入下次队列等待被执行,虽然等待的时间变长了,但是运行时间也会更长了,所以该算法很好的兼顾了长短作业,同时有较好的响应时间。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

日上三杆快起床

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

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

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

打赏作者

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

抵扣说明:

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

余额充值