进程(线程)调度及调度的九种算法。

2.1. 进程调度

进积(线程)调度即处理机调度。一般在大型批 处理系统中配有作业调度,而其他系统中,通常无须配置作业调度;而在采用虚拟存储管理的操作系统中,中级调度被页面调入策略、页面置换策略和页面清除策略所取代,因此,计算机系统然中使用最频繁、算法最复杂的是进程(线程)调度。进程(线程)调度的任务是控制、协调进程(线程)对CPU的竞争,按照一定的调度算法,使某一就绪进程获得CPU的控制权,转换成运行状态。

2.1.1 概述

1.进程(线程)调度的主要功能

        记录系统中所有进程(线程)的执行状况;根据一定的调度算法,从就绪队列中选出一个进程来,准备把CPU分配给他;把CPU分配给进程(线程),即把选中的进程的进程控制块内有关的现场信息,如程序状态字、通用寄存器等内容送入处理器相应的寄存器中,从而让它占用CPU运行。

2. 进程(线程)调度的时机

执行进程调度一般是在下述情况下发生的:

  • 正在执行的进程(线程)运行完毕。
  • 正在执行的进程(线程)调用阻塞原语将自己阻塞起来进人等待状态。        
  • 正在执行的进程(线程)调用了阻塞原语操作,并且因为资源不足而被阻塞,或调用了唤醒原语操作激活了等待资源的进程(线程)。
  • 时间片用完。
    以上都是在CPU为不可抢占方式下的引起进程调度的原因。在CPU方式是可抢占方式时,还有下面的原因:
  • 就绪队列中的某个进程(线程)的优先级高于当前运行进程(线程)的优先级时,引发进程(线程)调度。所谓可占方式,即就绪队列中一有且有优先级高于 当前运行进程(线程)优先级的进程(线程)存在时,便文期进行调度,转让CPU。而不可抢占方式,即一但把CPU分配给一个进程(线程),它就一直占用CPU,直到该进程(线程)自己因调用原语操作或等待I/O而进入阻塞状态,或时间片用完时才让出CPU,重新执行进程(线程)调度。

2.1.2 进程(线程)调度算法

       进程(线程)调度算法解决以何种次序对各就绪进程(《线程)进行处理机的分配以及按何种时间比例让进程(线程)占用处理机。

1. 先来先服务

        在所有调度算法中,最简单的是非抢占式的先先来先服务(Firis-Come Fist-Severed,FCFS)算法。使用该算法,进程按照它们请求CPU的顺序使用CPU。基本上,有一个就绪进程的单一队列。早上,当第一个作业从外部进人系统,就立即开始并允许运行它所期望的时间。不会中断该作业,因为它需要很长的时间运行。当其他作业进人时,它们就被安排到队列的尾部。当正在运行的进程被阻塞时,队列中的第一个进 程就接着运行。当被阻塞的进程变为就绪时,就像一个新来到的作业样,排到队列的末尾。

      这个算法的主要优点是易于理解并且便于在程序中运用。在这个算法中,一个单链表记录了所有就绪进程。要选取一个进程运行,只要从该队列的头部移走一个进程即可;要添加一个新的作业或阻塞一个进程,只要把该作业或进程附加在相应队列的末尾即可。  

2. 最短作业优先

         现在来看一种适用于运行时可以预知的另一个非抢占式的批处理调度算法。当输人队列中有若干个同等重要的作业被启动时,调度程序应使用最短作业优先(Shortest Job First,SJF)算法。

3. 最短剩余时间优先

           最短作业优先的抢占式版本是最短剩余时间优先( Shortest Remaining Time Next,SRTN)算法。使用这个算法,调度程序总是选择其剩余运行时间最短的那个进程运行。有关的运行时间必须提前掌握。当一个新的作业到达时,其整个时间同当前进程的剩余时间做比较。如果新的进程比当前运行进程需要更少的时间,当前进程就被挂起,而运行新的进程。这种方式可以使新的短作业获得良好的服务。

4. 最高响应比优先算法

        在批处理系统中,最高响应比优先算法(Highest Response Rate First,HRRF)的性能是介于先来先服务和最短作业优先算法之间的折中算法。先来先服务算法在调度中最为公平,但是一且出现计算密集型的长作业则会对其他进程造成较长时间的等待;最短作业优先算法又偏好短作业,当短作业源源不断进人后备池时,长作业将会长时间滞留在后备池中,其运行将得不到保证,出现这种现象我们称为长作业处于“饥饿( starvation)”状态。

        如果能为每个作业引人响应比,情况就会有所改善。响应比的计算式为:

        响应比 Rp= (等待时间+预计运行时间)/预计运行时间=周转时间/预计运行时间

        每个作业随着在后备池等待时间的增长其响应比也不断增长,而且,预计运行时间越短的作业响应比增长越快。最高响应比优先算法在每次调度时选择响应比最高的作业投人运行,这种算法较好地适应了长短作业混合的系统,使得调度的性能指标趋于合理。

        最高响应比优先算法在一定程度上改善了调度的公平性和调度的效率,响应比在每次调度前进行计算,作业运行期间不计算。计算需要消耗系统的资源,存在一定的系统开销。  

5. 轮转法  

        轮转(Round-Robin,RR)算法最早来自分时系统。轮转法的基本思想是,将CPU的处理时间划分成一个个时间片,就绪队列中的诸进程轮流运行一个时间片。当时间片结束时,就强迫运行进程让出CPU,该进程进人就绪队列,等待下一-次调度。同时,进程调度又去选择就绪队列中的一个进程,分配给它一一个时间片,以投人运行。如此轮流调度,使得就绪队列中的所有进程在一个有限的时间T内都可以依次轮流获得一个时间片的处理机时间,从而满足了系统对用户分时响应的要求。

6. 最高优先级算法

        最高优先级(Highest Priority First,HPF)进程(线程)调度每次将处理机分配给具有最高优先级的就绪进程(线程)。进程(线程)的优先级由进程(线程)优先数决定。

7. 多级反馈队列算法

        
在实际的计算机系统中,进程(线程)的调度模式往往是几种调度算法的结合。例如,可以以最高优先级算法作为主要的调度模式,但对于具有相同优先数的进程((线程)则按先进先出算法法处理。又如,可以将时间片轮转算法和最高优先级算法结合,对于具有相同优先数的进程(线程)按时间片轮转调度算法处理。多级队列反馈法就是综合了先进先出调度算法、时间片轮转算法和可抢占式最高优先级算法的一种进程(线程 )调度算法。

8. 最短进程优先

        对于批处理系统而言,由于最短作业优先常常伴随着最短响应时间,所以如果能够把它用于交互进程,那将是非常好的。交互进程通常遵循下列模式:等待命令,执行命令,等待命令,执行命令,如此反复。如果将每一条命令的执行看作一个独立的“作业”,则可以通过首先运行最短的作业来使用响应时间最短。这里唯一的问题是如何从当前可运行进程中找出最短的那一个进程。

9. 实时系统中的调度算法

        实时系统是一种时间起着主导作用的系统,即系统的正确性不仅取决于计算的逻辑结果,   而且还依赖于产生结果的时间。典型的,外部物理设备给计算机发送了一个信号,则计算机必须在一个确定的时间范围内恰当地做出反应。

猜你喜欢

转载自blog.csdn.net/m0_58353740/article/details/124048687