常见的调度算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常见的调度算法相关的知识,希望对你有一定的参考价值。

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

     1.它可以用于作业调度,也可以用于进程调度。

     2.它是优先考虑在作在系统中等待时间最长的作业或者进程。

     3.不考虑该作业或进程执行时间的长短。

    原理:每次从进程就绪队列中选择一个等待时间最长(最先进来)的进程,为其分配处理机,使其运行,一直运行完成或者发生阻塞,进程调度程序才将处理机分配给其他进程。

    说明:FCFS算法在单处理机上已经很少作为主调度算法,但经常把它与其他调度算法相结合使用,形成一种更为有效的算法。列如,可以在系统中按优先级设置多个队列,每一个优先级一个队列,其中每个优先级的调度都用FCFS算法。这样就比较高效。

2.最短优先调度算法

    1.它可以用于作业调度,也可以用于进程调度。

    2.它是优先考虑在系统中最短的作业或进程。

    3.作业或进程的长短是用时间来衡量的。

    原理:它是从外存作业或进程后备中选择若干个估计运行时间最短的作业或进程,将他们调入内存运行。

    缺点:1.必须知道作业的运行时间。

              2.对长作业不利,长作业的周转时间明显增长。

              3.完全没有考虑作业的紧迫程度。

3.轮转(RR)调度算法

     1.用于分时系统。

     2.让就绪队列上的每个程序仅运行一个时间片。

     3.假如就绪队列上有n个进程,每个进程大约可以获得1/n的处理机时间。

     原理:系统根据FCFS策略,将所有进程排成一个队列,设置一个时间间隔(如30ms)即产生一次中断,激活进程中的进程调度程序,完成一次调度,将CPU分配给队首进程,令其执行。当该进程的时间片耗尽或运行完成是时,系统在分配给新的队首(或新到达的紧迫程序),可保证就绪队列中的所有进程在一个确定的时间段内,能够获得一次CPU执行。

     进程切换时机:1.若一个时间片尚未运行完,正在运行的程序已经完成,就立即激活调度程序,将它从队列中删除,在调度队列中队首的进程运行,并启动一个新的时间片。

                            2.在一个时间片段用完,计时器中断处理程序被激活。如果进程尚未运行完,调度程序将把它送往就绪队列的末尾。

       特别说明:时间片的大小对系统的性能有很大的影响。时间片过短,对短作业有利,因为它能在该时间片内完成。但对于长作业,会频繁的执行进程调用和进程上下文切换,增加了系统开销。时间片过长的话,为使每个进程能在一个时间片内完成,它会退化为FCFS算法,无法满足短作业和交互式用户的需求。

4.优先级调度算法

  它分为非抢占式优先级调度算法和抢占式优先级调度算法。

 (1)非抢占式优先级调度算法

        原理:一旦把处理机分配给就绪队列中最高的优先级进程后,该进程边一直执行下去直至完成,或者该进程发生某事件而放弃处理机,系统才能将处理机分配给另一个优先级最高的进程。

 (2)抢占式优先级调度算法

        原理:把处理机分配给最高优先级进程,使其执行,但在执行期间,出现一个优先级更高的的进程,调度进程就将处理机分配给新到的优先级更高的进程。

     优先级调度算法的关键在于:如何确定进程的优先级,以及确定是使用静态优先级还是使用动态优先级。

     静态优先级是在进程创建时确定的,在进程的运行期间保持不变。

     动态优先级是指在进程创建之初,先赋予其一个优先级,然后其值随进程的推进或等待时间的增加而改变。

5.多级反馈队列调度算法

   目前公认的一种较好的进程调度算法。

   (1)设置多个就绪队列。在系统中设置多个就绪队列,并为每个队列赋予不同的优先级。

   (2)每个队列都采用FCFS算法。当新的进程进入内存后,首先将它放入第一个对列的末尾,按FCFS算法原则等待调度。

   (3)按对列优先级调度。


以上是关于常见的调度算法的主要内容,如果未能解决你的问题,请参考以下文章

操作系统常见的调度算法

常见的几种页面调度算法

操作系统中常见的调度算法

Linux 常见的进程调度算法

Linux 常见的进程调度算法

常见调度算法总结(对比分析表)