操作系统进程调度算法分类-计算机与系统(一)


进程调度算法:根据系统的资源分配策略所规定的资源分配算法。硬件与软件有很多相通的数据处理方式,如何在空间和时间做取舍是共同的话题,总结学习操作系统中几种进程调度算法,抛砖引玉,期待能从中发散思维,收获满满。

进程调度采用什么办法是与系统的设计目标相一致的,在批处理系统中,系统的设计目标是增加系统吞吐量和提高系统资源的利用率,而分时系统保证分时用户能容忍的响应时间。

1.1 先来先去服务算法(FCFS)

该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。和硬件的FIFO一个道理,不多余赘述。

1.2 短作业(进程)优先调度算法

短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。而短进程优先(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。

1.3 优先权调度算法

照顾紧迫型作业,使之在进入系统后便获得优先处理,引入了最高优先权优先(FPF)调度算法。此算法常被用于批处理系统中,作为作业调度算法,也作为多种操作系统中的进程调度算法,还可用于实时系统中。当把该算法用于作业调度时,系统将从后备队列中选择若干个优先权最高的作业装入内存。当用于进程调度时,该算法是把处理机分配给就绪队列中优先权最高的进程,这时,又可进一步把该算法分成如下两种。

1.3.1 非剥夺式优先权算法

系统把处理机分配给就绪队列中优先权最高的进程后,该进程便一直执行下去,直至完成;或因发生某事件使该进程放弃处理机时,系统方可再将处理机重新分配给另一优先权最高的进程。这种调度算法主要用于批处理系统中;也可用于某些对实时性要求不严的实时系统中。

1.3.2 剥夺式优先权调度算法

在这种方式下,系统同样是把处理机分配给优先权最高的进程,使之执行。但在其执行期间,只要又出现了另一个其优先权更高的进程,进程调度程序就立即停止当前进程(原优先权最高的进程)的执行,重新将处理机分配给新到的优先权最高的进程。

FIFO和SJF都是非剥夺式的调度算法,而最短完成时间优先算法(STCF)是剥夺式的调度算法。时间间隔是系统设计过程中进程之间的相互调度,时间周期是一开始单个进程所定义。

上面几种方法性能非最优,但在设计复杂度上较低。

1.4 高响应比优先调度算法

wKioL1dWglWCMjz3AAAkh_DtQUc206.png

为每个作业引入动态优先权,并使作业的优先级随着等待时间的增加而以速率a 提高,则长作业在等待一定的时间后,必然有机会分配到处理机。该优先权的变化规律可描述为上图。

  1. 如果作业的等待时间相同,则要求服务的时间愈短,其优先权愈高,因而该算法有利于短作业。
  2. 当要求服务的时间相同时,作业的优先权决定于其等待时间,等待时间愈长,其优先权愈高,因而它实现的是先来先服务。
  3. 对于长作业,作业的优先级可以随等待时间的增加而提高,当其等待时间足够长时,其优先级便可升到很高,从而也可获得处理机。简言之,该算法既照顾了短作业,又考虑了作业到达的先后次序,不会使长作业长期得不到服务。因此,该算法实现了一种较好的折衷。当然在利用该算法时,每要进行调度之前,都须先做响应比的计算,这会增加系统开销

1.5 Round-Robin调度算法

响应时间还能更优化,只需在最短完成时间有限的调度算法上添加一个功能:指定每个进程最多只运行一段固定的时间,调度时轮询每一个进程。也就是轮询(Round-Robin,RR)调度算法。硬件上更好实现的是间隔固定的时间周期,但硬件的“进程”无法很好划分。时间片越短,RR在响应时间上表现越好,但是时间片太短也是有问题的,因为上下文切换频繁意味着它的代价越高。时间片也不能太长,时间片越长,RR在响应时间上表现越差,交互性越差。所以需要权衡时间片的长短在允许的条件下让时间片足够长。

1.6 多级反馈队列调度算法

如果未指明进程的时间周期,此种方法较为适用。优化未知问题的场景有时候非常关键,例如CPU的分支预测、缓存算法以及进程调度等等。解决这类问题的思路就是观察历史,从历史数据中推测未来。既然是预测,自然会有预测失败的时候,而预测失败的代价可能会比正常情况下更大,所以需要不断优化预测问题的方式,并提供预测失败时的挽救手段,尽量减小代价。

(1) 应设置多个就绪队列,并为各个队列赋予不同的优先级。第一个队列的优先级最高,第二个队列次之,其余各队列的优先权逐个降低。该算法赋予各个队列中进程执行时间片的大小也各不相同,在优先权愈高的队列中,为每个进程所规定的执行时间片就愈小。例如,第二个队列的时间片要比第一个队列的时间片长一倍,……,第i+1个队列的时间片要比第i个队列的时间片长一倍。

(2) 当一个新进程进入内存后,首先将它放入第一队列的末尾,按FCFS原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入第二队列的末尾,再同样地按FCFS原则等待调度执行;如果它在第二队列中运行一个时间片后仍未完成,再依次将它放入第三队列,……,如此下去,当一个长作业(进程)从第一队列依次降到第n队列后,在第n 队列便采取按时间片轮转的方式运行。

(3) 仅当第一队列空闲时,调度程序才调度第二队列中的进程运行;仅当第1~(i-1)队列均空时,才会调度第i队列中的进程运行。如果处理机正在第i队列中为某进程服务时,又有新进程进入优先权较高的队列(第1~(i-1)中的任何一个队列),则此时新进程将抢占正在运行进程的处理机,即由调度程序把正在运行的进程放回到第i队列的末尾,把处理机分配给新到的高优先权进程。

  • 如果优先级A大于B,则调度A

  • 如果优先级A等于B,则RR调度A和B

  • 进程刚启动时,放入最高优先级队列

  • 进程耗尽时间片后,降低该进程的优先级(移入下一级队列)

  • 如果在时间片内进行IO而主动放弃CPU,则保持其优先级不变

    总结汇总如摘抄图下👇👇👇👇

    img

    FCFS:先来先服务算法 SPN/SRT:短作业优先算法 HRRN:高响应比优先算法 RR:时间片轮转算法

    Priority:优先级调度算法 MFQ:多级反馈队列算法

概念补充

CPU繁忙:是指的这项作业的CPU计算部分的时间需要占用大量的时间,很少请求I/O。对应于I/O繁忙,作业很是频繁的请求I/O,真正用于计算的时间却不多,因此可以认为CPU繁忙的作业更接近于长作业的工作方式,因为它长时间占用了CPU,I/O繁忙更接近于短作业的工作方式。

剥夺方式: 当一个进程正在处理器上执行时,系统可以根据规定的原则剥夺分配给它的处理器,而把处理器分配给其他进程使用。有两种常见的剥夺原则:高优先级剥夺原则时间片剥夺原则,前者高优先级进程或线程可以剥夺低优先级进程或线程运行,后者当运行进程时间用完后被剥夺处理器。非剥夺方式: 一旦某个进程或线程开始执行后便不再出让处理器,除非该进程或线程运行结束或发生了某个事件不能继续执行。

响应时间:进程未运行到下次被选中运行的时间间隔。例如进程刚被创建到第一次调度到它的时间间隔,再例如从该进程切换走后到下次调度到该进程的时间间隔。响应时间体现了交互性,响应时间越短,交互性越好。例如从键盘敲下一个字符,如果需要等待几秒钟才出现到屏幕,这个交互性是非常差的。周转时间:进程从启动开始到执行完成所花费的时间。周转时间体现的性能,周转时间越短,说明进程从开始到完成等待的时间越短。

参考文档

【1】操作系统修炼秘籍(26):进程调度算法图解说明 -->推荐

【2】常见的几种操作系统进程调度算法

【3】五种进程调度算法的总结;

【4】挑战408——操作系统(8)——典型的调度算法

【5】操作系统调度算法简介

【6】列出目前 OS 涉及到的几种进程调度算法,并简述对他们的理解

【7】操作系统中常用的进程调度算法

©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页