• CPU调度算法


      1、先到先服务调度算法(FCFS)

      根据就绪队列的到达时间来服务,此时就绪队列是一个FIFO队列,先到先服务,后到的线程不能抢占前面正在服务的线程。这种算法的优点是实现简单,缺点也很明显,就是CPU进程区间变化很大时,平均等待时间会变化很大。

      2、最短作业优先调度(SJF)

      顾名思义,就是CPU进程区间最短的先执行,如果两个进程区间具有同样的长度,那么按照FCFS来调度。

      SJF可以是抢占的,也可以是不抢占的。它的平均等待时间优于FCFS。

      3、优先级调度

      其实上面的SJF算法就是一种特殊的优先级调度,只不过这里的优先级定义更加广泛一些,SJF算法的优先级是按照CPU进程区间长短来定义的,这里的优先级可以是其他的一些定义。

      优先级调度可以是抢占的,也可以是非抢占的。

      优先级调度的一个主要问题是无穷阻塞(也称为饥饿),如果一个线程的优先级很低,可能需要等待很长的时间才能到这个线程执行,甚至永远不执行,一种解决方法是老化(随着时间的增长,增加线程的优先级)

      4、轮转法调度(RR)

      轮转法调度专门是为分时系统设计的。它类似于FCFS,但是增加了抢占为了切换线程。定义一个较小的时间单元,称为时间片,通常为10-100ms。为了实现RR算法,将就绪队列保存为FIFO队列,新进程增加到就绪队列队尾,CPU调度程序从就绪队列选择第一个进程,设置定时器在一个时间片之后再中断,再分派这个进程。

      如果该进程的CPU区间小于时间片,进程本身就会释放CPU,调度程序继续处理下一个进程,如果当前进程的CPU区间比时间片长,定时器会产生CPU中断,实行上下文切换,然后将此进程放到就绪队列队尾,继续调度就绪队列第一个进程。

      5、多级队列调度:

      这里对进程进行分组,在组内使用FCFS和SJF算法,在组间实行优先级调度或者轮转法调度。但是不允许进程在组间切换。

      6、多级反馈队列调度

      允许进程在组间切换,主要思想是根据不同区间的特点区分进程,如果CPU进程占用过多CPU时间,那么它会被转移到更低优先级队列。这种形式老化阻止饥饿。

  • 相关阅读:
    redis>lua脚本
    redis百万级数据存取
    spring之自定义注解
    spring>aop
    git的回退和撤销操作
    vue2.0 v-tap简洁(漏)版 (只解决300ms问题)
    JSONP原理小记
    前端模块加载规范AMD与CMD小记
    html状态码
    使用vue-cli开发时跨域问题
  • 原文地址:https://www.cnblogs.com/PIRATE-JFZHOU/p/8094790.html
Copyright © 2020-2023  润新知