文章目录

  • 前言
  • 先来先服务调度算法(FCFS)
  • 短作业/短进程优先算法(SJF/SPF)
  • 时间片轮转调度算法(RR)
  • 高响应比优先调度算法(HRRF)
  • 优先级调度算法(PSA)
    • 静态优先级
    • 动态优先级
  • 多级反馈队列调度算法(MLFQ)
  • 总结

前言

在操作系统中,进程或作业调度的实质是进行资源分配,而这主要涉及CPU的分配与调度。CPU的调度算法就是根据该系统的资源分配策略设计出来的一个资源分配算法,常用的调度算法有:先来先服务调度算法、短作业/短进程优先算法、时间片轮转调度算法、高响应比优先调度算法、优先级调度算法和多级反馈队列调度算法等6种,接下来围绕着这6种算法进行讲解。

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

先来先服务调度算法(first come first service)算法是一种最简单的调度算法,可以用于高级调度(作业调度)也可以用于低级调度(进程调度)。FCFS算法按照作业进入后备作业队列的先后顺序选择作业进入内存,为该作业分配所需要的资源。在低级调度中,同样会选择先进入就绪队列的进程/线程,然后将CPU分配给它并使其运行。
该算法是一种非抢占式调度算法,当某一个线程/进程占用了CPU后就一直运行,直到该进程/线程运行结束后放弃了CPU,或者运行过程中发送进程阻塞而放弃CPU。
优点:

  • 根据进程请求访问磁盘的先后次序进行调度,使得调度算法公平简单。
  • 并且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。

缺点:

  • 未对寻道进行优化,平均寻道距离较大,致使平均寻道时间可能较长。仅适用于请求磁盘I/O的进程数目较少的场合。
  • 有可能磁头长期在一个磁道附近进行访问,这会产生磁臂粘着现象。

该算法现在已经很少作为主要的调度算法单独使用,尤其在分时操作系统和实时操作系统中,通常是与其他调度算法结合使用。

短作业/短进程优先算法(SJF/SPF)

短作业优先算法(short job first)每次从后备队列中选择估计运行时间最短的作业进入内存,并创建相应的进程。SJF应用于低级调度时被称为短进程优先调度算法(short process first)。
SJF/SPF调度算法是一种非抢占式调度算法,某一个作业一旦获得了CPU,就一直运行到该进程完成或者因发生阻塞而放弃CPU,所以该算法不适合分时系统或者实时操作系统。
优点:

  • 减短平均周转时间和平均带权周转时间。
  • 有效降低作业/进程的平均等待时间。

缺点:

  • 不公平,没有考虑到长作业或运行时间长的进程。
  • 会产生饥饿现象。

时间片轮转调度算法(RR)

时间片轮转调度算法(Round Robin)主要用于低级调度。采用该算法的系统中,进程/线程就绪队列总是按进程/线程到达系统时间的先后次序进行排队,然后再按照先来先服务原则,选择第一个到达的进程/线程并将CPU分配给它执行。当时间到后,就会剥夺该进程/线程的CPU使用权,并将该进程/线程加入就绪队列末尾,然后调用下一个进程进行运行。在进程/线程执行的过程中,如果因为发生某一个事件导致该进程/线程发生阻塞,那么就会将该进程/线程挂起,将它加入到阻塞队列,只有等到它除了CPU之外的所有资源满足时,才会将该进程/线程加入就绪队列。最后再从就绪队列取出第一个进程/线程然后分配CPU资源。
时间片轮转调度算法是一个基于时钟的抢占式调度算法。在使用该算法的系统中,系统周期性地产生时钟中断。当时钟中断发生时,运行进程/线程使用的CPU被剥夺,并且重新回到就绪队列的队尾。
优点:

  • 兼顾长短作业。

缺点:

  • 平均等待时间长,上下文切换较费时。

高响应比优先调度算法(HRRF)

高响应比优先调度算法(highest response ratio first)实际上是一种基于动态优先数的非抢占式调度算法,可以应用于作业调度,也可以应用于进程/线程调度。按照高响应比优先调度算法,每一个作业或者进程/线程都拥有一个动态优先数。该优先数不仅是作业或进程/线程运行时间的函数,也是其等待时间的函数。高响应比优先调度算法中的优先数通常称为响应比Rp,定义为:

高响应比优先调度算法在每次调度作业/进程运行时,都要计算后备作业队列中每个作业的响应比,或者计算进程就绪队列的每一个进程的响应比,然后选择最高响应比的作业/进程投入运行。当然,初始时短作业/短进程的响应比一定比长作业/长进程的响应比高,但随着等待时间的增加,长作业/长进程的响应比会随之提高,只要等待一定时间,就会投入运行。
优点:

  • 既照顾了短作业/短进程,也照顾了长作业/长进程。

缺点:

  • 需要估计每个作业/进程的运行时间。
  • 每次调度都要耗费不少CPU的时间。

优先级调度算法(PSA)

优先级调度算法即可用于高级调度也可以用于低级调度,还可以用于实时系统。每次从后备队列中选择优先级最高的作业/进程进行实行。如果有多个优先级最高的作业/进程,则可以结合先来先服务或短作业/短进程优先调度算法。优先级调度算法分静态优先级和动态优先级。该算法又分为抢占式优先级调度非抢占式优先级调度

静态优先级

作业/进程进入系统或创建时被赋予一个优先级,该优先级一点确定在其生命周期内不会再改变。优先级主要由进程类型、资源需求、时间需求和用户需求决定。
优点:

  • 比较简单,开销小。

缺点:

  • 不够公平也不太灵活,有可能出现优先级低的作业/进程长时间得不到调度的情况。

动态优先级

作业/进程进入系统或创建时被赋予一个优先级,但随着时间的推进,不同调度对象的优先级不断地进行动态调整,避免资源浪费。优先级会随着等待时间地变长而提高,随着使用CPU的时间变长而降低。
优点:

  • 公平性好,灵活,资源利用率高。

多级反馈队列调度算法(MLFQ)

多级反馈队列调度算法为就绪状态的进程设置多个队列。第一级队列优先级最高但时间片最少,以下各级队列的优先级逐次降低但时间片逐次增加,通常向下一级增加一倍。各级队列按先来先服务原则排序。
调度方法:

  • 设置多个进程就绪队列,每一个进程就绪队列对应一个优先级,且按队列逐级降低。每一个队列执行的时间片长度也不同,原则是优先级越低时间片越长。
  • 新进程进入内存后,先放入进程就绪队列的队尾。运行按时间片轮转法调度,若按照队列设置的时间片未能运行完,则放到下一个进程就绪队列的末尾,以此类推,直到完成。
  • 仅当前面较高优先级的队列均为空时,才能调度后面较低优先级队列中进程运行。如果进程运行中有新进程进入更高优先级的队列,则新进程将抢占CPU,原进程回到原队列的末尾。

优点:

  • 短进程能得到优先处理。
  • 系统开销不大。
  • 适用于同时支持分时、实时和批处理的通用操作系统。

缺点:

  • 由于高优先级队列一直不为空,则优先级低队列的进程长时间得不到运行,会产生饥饿现象。

总结

参考:
[1] 操作系统原理 胡元义、黑新宏 主编 中国工信出版集团。

【操作系统】常用的调度算法相关推荐

  1. 操作系统常用词典(二)

    操作系统常用词典(二) USB(Universal Serial Bus):是连接计算机系统与外部设备的一种串口总线标准,也是一种输入输出接口的技术规范,被广泛地应用于个人电脑和移动设备等信息通讯产品 ...

  2. 操作系统常用词典(三)

    操作系统常用词典(三) 电阻式触摸屏(Resistive touchscreens):电阻式触摸屏基于施加到屏幕上的压力来工作.电阻屏由许多层组成.当按下屏幕时,外部的后面板将被推到下一层,下一层会感 ...

  3. 操作系统常用词典(一)

    操作系统常用词典(一) 操作系统(Operating System,OS):是管理计算机硬件与软件资源的系统软件,同时也是计算机系统的内核与基石.操作系统需要处理管理与配置内存.决定系统资源供需的优先 ...

  4. 查看 linux 网络状态命令,Linux操作系统常用的网络状态查询命令

    <Linux操作系统常用的网络状态查询命令>要点: 本文介绍了Linux操作系统常用的网络状态查询命令,希望对您有用.如果有疑问,可以联系我们. 对于做系统运维的工程师来说,经常会在客户那 ...

  5. 【操作系统之进程调度算法习题】

    操作系统之进程调度算法习题 1.第一题 解答: 2. 第二题 解答: 3. 第三题 解答: 1.第一题 在一个具有三道作业的批处理系统中,作业调度采用先来先服务(FCFS) 调度算法,进程调度采用 短 ...

  6. 操作系统 --多级反馈队列调度算法

    操作系统 --多级反馈队列调度算法 转载地址:https://blog.csdn.net/qq_29342297/article/details/83538828 多级反馈队列算法:不需要事先知道各种 ...

  7. 操作系统常用调度算法

    一.常见的批处理作业调度算法 1.先来先服务调度算法(FCFS):就是按照各个作业进入系统的自然次序来调度作业.这种调度算法的优点是实现简单,公平.其缺点是没有考虑到系统中各种资源的综合使用情况,往往 ...

  8. 常用的调度算法(包含实例)|操作系统

    目录 1.先来先服务调度算法(FCFS) 2.优先级调度算法 3.最短作业优先调度算法(SJF) 4.最高响应比优先调度算法(HRRN) 5.轮转调度算法(RR) 6.多级反馈轮转调度算法 7.实时系 ...

  9. Linux 操作系统常用以下哪种编译器,Linux 操作系统期末复习资料(Alpha版)

    Linux 操作系统期末复习资料 >>问答题 1.请列举至少4个你知道的Linux发行版? 答:RedLinux.红旗Linux.Debain.SuSE Linux等. 2.Linux支持 ...

最新文章

  1. java.util.concurrent.locks.Condition 源码
  2. 1.5 Hello, world! 解剖 -JSF实战 -hxzon -jsf学习笔记
  3. Oracle Code登录北京 代码盛宴邀你high起来|免费报名
  4. Mysql-my-innodb-heavy-4G.cnf配置文件注解
  5. 训练日志 2019.7.25
  6. ES6知识点汇总(全)
  7. sklearn分类任务代码整理
  8. mysql 5.7 enum_MYSQL中 ENUM 类型的详细解释
  9. apache http server 停止工作_Springboot以Tomcat为容器实现http重定向到https的两种方式
  10. Java怎么实现大的map_关于Java中的ConcurrentHashMap的实现原理有大神可以详细介绍下吗?...
  11. Updater Application Block for .net 2.0 发布了
  12. Grunt构建工具能做哪些事?
  13. 初中科技节计算机,初中科技节活动方案.doc
  14. 【CF1354C1C2】Polygon Embedding(求解包含正多边形的最小正方形)
  15. 有限公司章程(范本)
  16. 《浮图秀》如何优雅查看B站视频封面大图?
  17. renren-generator:java: 找不到符号,类 Longblob
  18. 什么是Nginx?有什么用?
  19. java获取u盘_读取U盘信息
  20. 【An electroencephalographic signature predicts antidepressant response in major depression-笔记】

热门文章

  1. NX/UG二次开发—CAM—获取程式的刀具、加工坐标系、加工方法
  2. java去除中英文括号及里面数据
  3. 华为鸿蒙手机在欧洲发售,为拯救欧洲市场,华为下一代旗舰P40箭在弦上,中国鸿蒙呼之欲出...
  4. 最新,2023年ABC中国大学排名发布
  5. ET框架 如何使用它开发游戏
  6. OpenCV学习20-直方图反向投影
  7. 我的第一个Java项目——客户管理
  8. c语言2级考试知识点ppt,计算机一级考试历年常见考点总结:PPT演示文稿
  9. 单目标定:OpenCV4实现单目标定及矫正
  10. 帮我写一个discuz幻灯片切换的效果代码,完整版的