>>分享数据结构和算法相关的知识和技术 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 19591 个阅读者 刷新本主题
 * 贴子主题:  常见的调度算法 回复文章 点赞(0)  收藏  
作者:sunshine    发表时间:2020-03-15 14:49:49     消息  查看  搜索  好友  邮件  复制  引用

  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)按对列优先级调度。

            

----------------------------
原文链接:https://blog.51cto.com/mnt3918290/1789918

程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-03-19 11:30:46 重新编辑]
  Java面向对象编程-->内部类
  JavaWeb开发-->JSP中使用JavaBean(Ⅰ)
  JSP与Hibernate开发-->第一个helloapp应用
  Java网络编程-->通过JDBC API访问数据库
  精通Spring-->CSS过渡和动画
  Vue3开发-->Vue Router路由管理器
  整理得吐血了,二叉树、红黑树、B、B+树超齐全,快速搞定数据...
  有关图片的LZW算法的原理
  图像基本处理算法的简单实现
  对simhash算法的一些思考
  算法的概念、特征和基本类型简介
  分布式一致Hash算法-存储之道
  如何面对“算法”的困惑?
  PageRank算法
  用Java写算法:快速排序
  令牌桶算法
  全排列的六种算法
  面试官问我:什么是消息队列?什么场景需要他?用了会出现什...
  微软面试题:买卖股票的最佳时机
  小米面试算法题:搜索旋转排序数组
  分析递归和迭代的区别、优缺点及实例对比
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。