• 进程调度算法-时间片轮转、最高优先级和多级反馈队列调度算法



    前言

    从上一篇文章中已经介绍了几种常见的单核CPU进程调度算法,本篇文章顺着上一篇文章的节奏,继续讲解几种剩余常见的进程调度算法,例如时间片轮转、最高优先级和多级反馈队列调度算法,供大家参考学习。


    一、时间片轮转

    时间片轮转调度算法:每个进程被分配⼀个时间段,称为时间片,即允许该进程在该时间段中运行。

    1. 如果当前运行进程的时间片用完了,立即让出CPU给其他进程,如果该进程未执行完就放到就绪队列的队尾,重新等待时间片。
    2. 如果该进程在时间片结束前阻塞或结束,则CPU立即进行切换
      在这里插入图片描述
      怎么设置时间片的长短?
      时间片太短会导致频繁的进程上下文切换,增大进程的开销。若时间片选择太长,时间片轮转调度算法将退化为先来先服务的进程调度算法。⼀般来说,时间片设为 20ms~50ms 通常是⼀个比较合理的折中值。

    二、最高优先级

    时间片轮转调度算法对待所有进程都很公平,这时,最高优先级调度算法有不同的意见,它希望调度是有优先级的,即希望调度程序能从就绪队列中选择最高优先级的进程进行运行。

    怎么给定优先级?有两种方式,一种是静态,一种是动态
    1.静态优先级:创建进程的时候就给定优先级,整个运行的过程中优先级不变。
    2.动态优先级:随时间的推移增加等待进程的优先级。

    怎么对待高优先级?也有两种方式,一种是非抢占式,一种是抢占式。
    1.非抢占式:当就绪队列中出现高优先级的进程,先运行完当前进程,在执行高优先级的进程。
    2.抢占式:如果就绪队列中出现优先级高的进程,把当前正在运行的进程挂起,调度优先级高的运行。


    三、多级反馈队列

    多级反馈队列调度算法是目前公认的较好的一种进程调度算法,它能较好的满足各类进程的需要,是时间片轮转和最高优先级的综合发展。

    我们先来分析一下多级和反馈这两个词的含义:
    多级:多个队列,每个队列优先级从高到低,优先级高的时间片短。
    反馈:表示如果有新的进程加入优先级高的队列时,立刻停止当前正在运行的进程,转而去运行优先级高的队列。
    在这里插入图片描述
    多级反馈队列调度算法的执行流程如下:
    1.设置多个就绪队列,为每个队列赋予不同的优先级和时间片,第一个队列的优先级最高但时间片最少。
    2.新创建的进程放在第一队列的末尾,按先来先服务调度。
    3.轮到其执行时,如果它能在该时间片完成就撤离系统,否则就放到下一级的队尾中去。
    4.只有当高优先级队列中的进程全部执行完后才能运行下一级中的进程。如果进程运⾏时,有新进程进⼊较高优先级的队列,则停止当前运行的进程并将其移入到原队列末尾,接着让较高优先级的进程运行(抢占式);

    特点:对于短作业,可以在第一队列直接运行完,对于长作业,如果运行不完可以移到下一级队列中,而且下一级队列的时间片更长,所以该调度算法兼顾了长短作业,UNIX操作系统采取的便是这种调度算法。


    总结

    本篇文章讲解了时间片轮转、最高优先级和多级反馈队列调度算法,多级反馈队列调度算法是公认比较好的调度算法,它是对时间片轮转和最高优先级综合发展,可以兼顾长短作业。


  • 相关阅读:
    java宏替换
    【BOOST C++ 8 内部进程】(1)流和文件
    Vue入门
    javaweb JAVA JSP玩具销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)儿童玩具在线销售
    Go基础——数组、切片、集合
    【未解决】MyBatis-Plus切换数据源有时未生效
    开发工具——gcc/g++
    常用CMD命令
    C++内存分类
    jenkins编译使用nohup部署进程到后台失败,解决方法
  • 原文地址:https://blog.csdn.net/qq_52173163/article/details/126250604