处理器调度及其相关算法

    一、基本概念

              处理器调度按层次可分为三级:高级调度、中级调度和低级调度。用户作业从进入系统成为后备作业开始,直到运行结束退出系统为止,均经历不同级别的调度。

    1、高级调度

          高级调度又称为作业调度或宏观调度。其主要功能是根据一定的算法,从输入的一批任务(作业)中选出若干个作业(从磁盘的作业后备队列中选择作业调入内存),分配必要的资源并建立与作业相对应的进程,如内存、外设等,为它建立相应的用户作业进程和为其服务的系统进程(如输入/输出进程),最后把它们的程序和数据调入内存,等待进程调度程序对其执行调度,并在作业完成后作善后处理工作。

     2、中级调度

           中级调度又称为中程调度,引入中级调度的主要目的是为了提高内存的利用率和系统的吞吐量。内存中不能有太多的进程,把进程从内存移到外存,当内存有足够空间时,再将合适的进程换入内存,等待进程调度。中级调度实际上就是存储器管理中的对调功能。

      3、低级调度

            低级调度又称为进程调度、短程调度,它决定就绪队列中的哪个进程将获得处理机,然后由分派程序执行把处理机分配给该进程的操作。在批处理,分时,实时三类系统中,进程调度必须被配置,因而是一种最基本的调度。与中级调度——交换,高级调度——作业调度相对应。
  低级调度的功能:

                                    1、保存处理机的现场信息

                                    2、按某种算法选取进程

                                    3、把处理器分配给进程

      在上述三个调度中,低级调度是各类操作系统必备的功能,在纯粹的分时操作系统或实时操作系统中,通常不需要高级调度;一般的操作系统都具有高级调度和低级调度;而功能完善的操作系统,为了提高系统主存的利用率和作业吞吐量,引进中级调度。


      二、处理器调度模型

        1、三级调度模型

                                              

        由于引进中级调度,相应的为进程增加“挂起”状态。

       2、二级调度模型


       3、一级调度模型

           纯粹的分时操作系统可以仅采用低级调度。

       

    三、选择调度算法的原则

          原则就是如何提高计算机的性能:

          1、面向系统的性能:

               (1)资源利用率:让cpu和系统资源尽可能的并行工作,使资源利用率尽可能高:

                  cpu利用率:cpu有效工作时间/cpu总的运行时间

                  cpu总的运行时间:cpu有效工作时间+cpu空闲等待时间

               (2)吞吐率:单位时间cpu处理作业的个数

               (3)公平性:确保每一个进程都能合理的获得cpu份额和其他资源份额,不会出现饥饿现象。

           2、面向用户性能:

              (1)响应时间:从提交一个请求到得到响应之间的时间间隔。

              (2)周转时间:批处理用户从向系统提交作业开始,到作业完成为止的时间间隔。

               如果作业i提交给系统的时刻是a,完成时刻是b,那么作业i的周转时间为:t=a-b。

               平均作业周转时间 :T=(∑Ti)/n

                 平均带权作业周转时间:W=W=[∑(Ti/Tir)]/n


        四、处理器调度算法

         在此只讲述低级调度的算法,低级调度有两类基本的调度方式:
              1、剥夺式: 剥夺式(preemptive)调度,又称抢先式调度。当进程/线程正在处理器上运行时,系统可根据所规定的原则剥夺分配给此进程/线程的处理器,并将其移入就绪列队,选择其他进程/线程运行。有两种常用的处理器剥夺原则,一是高优先级进程/线程可剥夺低进程/线程;二是当运行进程/线程的时间片用完后背剥夺,在动态改变进程/线程优先级的系统中,经常会出现这样的情况
              2、非剥夺式:分派程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生 进程调度某事件而阻塞时,才把处理机分配给另一个进程。

              剥夺式的开销比非剥夺式的开销通常要大,很多操作系统适用两种策略结合使用的方式,内核关键程序是非剥夺式的,用户级别是剥夺式的。

              3、算法

              1.先来先服务算法(FCFS) 
                (1)策略:按照作业进入系统的先后次序来挑选作业,先进入系统的作业优先被挑选。 这是一种非剥夺式算法。 
                (2)效果:算法容易实现,效率不高,只顾及作业等候时间,没考虑作业要求服务时间的长短,不利于短作业而优待了长作业。有利于CPU繁忙型作业而不利于I/O繁忙型作业。 例如,三个作业同时到达系统并立即进入调度:            

                                            

                 

           算法容易实现。但效率不高,只顾及作业等候时间,没考虑作业要求服务时间的长短。因此优待了长作业而不利于短作业。

           采用FCFS算法,三个作业的周转时间分别为:28、37和40,因此,平均作业周转时间T = (28+37+40)/3 = 35

          若三个作业提交顺序改为作业2、1、3,平均作业周转时间约为29。((9+37+40)/3 29) 
          若三个作业提交顺序改为作业3、2、1,平均作业周转时间约为18。((3+12+40)/3 18)          

         下面这个链接是FCFS实现的物理示例:http://syzx.hieu.edu.cn/content/LWR/DEVICE/LLY/FCFSsf.HTM

           (2).最短作业优先算法SJF(Shortest Job First) 
               1、策略:最短作业优先算法以进入系统的作业所要求的CPU时间为标准,总选取估计计算时间最短的作业投入运行。这是一种非剥夺式调度算法。 
               2、性能:算法易于实现,效率不高(相对于剥夺式算法),弱点是需要预先知道作业所需的CPU时间,而这个时间只能靠估计,估计值很难精确,若估计过低,系统可能提前终止该作业;忽视了作业等待时间,会出现饥饿现象;由于缺少剥夺机制,对分时、实时处理很不理想。最短作业优先算法SJF算法的调度时间:每一个作业完成时。

                例如,四个作业同时到达系统并立即进入调度: 

                                        

               

                 假设系统中没有其他作业,现实施SJF调度算法,
                     •SJF的作业调度顺序为作业2、4、1、3,
                          平均作业周转时间  T = (4+12+21+31)/4  = 17
                          平均带权作业周转时间W=(4/4+12/8+21/9+31/10)/4 = 1.98
                     •如果对它们施行FCFS调度算法,
                          平均作业周转时间  T = (9+13+23+31)/4 = 19
                          平均带权作业周转时间  W = (9/9+13/4+23/10+31/8)/4 = 2.51 

               SJF的平均作业周转时间比FCFS要小,故它的调度性能比FCFS好。

•缺陷:实现SJF调度算法需要知道作业所需运行时间,否则调度就没有依据,要精确知道一个作业的运行时间是办不到的。

                 (3)最短剩余时间优先SRTF算法

                    把SJF算法改为抢占式的调度算法:当一个作业正在执行时,一个新作业进入就绪状态,如果新作业需要的CPU时间比当前正在执行的作业剩余下来还需的CPU时间短,SRTF强行赶走当前正在执行作业,

                   •此算法不但适用于作业调度,同样也适用于进程调度。
                   •最短剩余时间优先SRTF算法的调度时间:每一个新作业到来时
                  一个例子,假如四个就绪作业到达系统和所需CPU时间如下: 
                             
                  
                      

                 Job1从0开始执行,就绪队列仅一个作业。Job2在时间1到达,Job1剩余时间(7毫秒)大于JOB2所需时间(4毫秒),Job1被剥夺,Job2被调度执行。平均等待时间是((10-1)+(1-1)+(17-2)+(5-3))/4=26/4=6.5毫秒。采用非抢占式SJF调度,那么,平均等待时间是7.75毫秒。
  

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值