【操作系统】常用的调度算法

article/2025/9/16 1:30:53

文章目录

  • 前言
  • 先来先服务调度算法(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] 操作系统原理 胡元义、黑新宏 主编 中国工信出版集团。


http://chatgpt.dhexx.cn/article/03uXNSwi.shtml

相关文章

【操作系统】几种常用调度算法

文章目录 一、先来先服务调度算法(FCFS)二、短作业优先调度算法(SJF)最短作业优先调度算法(SJF)最短剩余时间优先调度算法(SRTF) 三、响应比最高者优先调度算法(HRRF&…

【操作系统】_7种进程调度算法

书中一共描述了七种进程调度算法,为了学到这几种调度算法,后边做了几道练习题。 1. 先来先服务(FCFS)调度算法 先来先服务调度算法是最简单的调度方法。其基本原则是,按照进程进入就绪队列的先后次序进行选择。对于进…

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

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

几种常见的调度算法

文章目录 1.先来先服务算法(FCFS,First Come First Service)2.短作业优先算法(SJF,Short Job First)3.高响应比优先算法4.时间片轮转算法5.优先级调度算法6.多级反馈队列算法 1.先来先服务算法(FCFS,First Come First …

videojs播放m3u8格式视频

videojs 是不支持m3u8格式,需要配合videojs-contrib-hls插件 npm install --save video.js npm install --save videojs-contrib-hls 不加muted 刷新时不会自动播放,但是加上就会没有声音了,因为业务不需要声音所以没有影响

一个可以在线播放解析m3u8,mp4的网站 m3u8player.lantianye3.top

自己写的一个可以在线播放m3u8的网页,在这里分享一下。借助m3u8 player网页播放器,只需将您的M3U8文件地址或者mp4链接复制粘贴到播放器地址栏中然后点击播放即可。 网站 http://m3u8player.lantianye3.top/ 如有不足,多多指教。 首页截图&am…

视频工具下载(m3u8、MP4)

下载视频m3u8工具 FFmpeg 转 ts 格式 笔记有点乱 都是一笔带过(有链接),可以参考别人教程 1、下载m3u8工具(支持win和liunx) 下载链接 20201019 (都是2020年的,还是可以用) 使用…

前端如何播放m3u8格式的视频

m3u8格式的视频是将文件分成一小段一小段的ts文件,播放完一个在播放下一个,由于每次请求的ts文件都很小,所以基本可以做到无延时播放。目前WEB上主流的直播方案主要是HLS和RTMP,移动端主要是HLS,PC端主要是RTMP。 HLS…

如何下载m3u8格式视频

小编记得以前手机流量少的时候,电脑上下课程或电影再存到手机上看还是很容易的 现在虽然这种需求比较少,但还是有一些视频想下载下来,不过却发现下不了了因为很多的视频都不提供下载地址或下载的是加密的视频格式 即使我们能通过工具采集到…

Android m3u8网络视频播放

最近在做 m3u8网络视频播放,踩了不少坑,也试了不少的 框架,特别记录一下其中用的比较多的三种 第一种:media:ijkplayer media:ijkplayer 是由 bilbil 提供的开源的视频 框架,但是由过之后感觉不太好用: …

网页在线视频下载教程(m3u8格式介绍及下载教程)

简介: m3u8文件是苹果公司使用的HTTP Live Streaming(HLS)协议格式的基础。HLS是新一代流媒体传输协议,其基本实现原理为将一个大的媒体文件进行分片,将该分片文件资源路径记录与m3u8文件(即playlist&…

什么是m3u8?

什么是m3u8? ​  m3u8是苹果公司推出的视频播放标准,是m3u8的一种,只是编码格式采用的是UTF-8。 m3u8准确来说是一种索引文件,使用m3u8文件实际上是通过它来解析对应的放在服务器上的视频网络地址,从而实现在线播放。使用m3u8…

M3U8是什么

m3u8是苹果公司推出的视频播放标准,是m3u8的一种,只是编码格式采用的是UTF-8。   m3u8准确来说是一种索引文件,使用m3u8文件实际上是通过它来解析对应的放在服务器上的视频网络地址,从而实现在线播放。使用m3u8格式文件主要因为…

video.js播放m3u8视频

m3u8 是一种基于HTTP Live Streaming(HLS)文件视频格式,它主要是存放整个视频的基本信息和分片(Segment)组成。目前 由 Apple.inc 率先提出的 HLS 协议在 Mac 的 Safari 上原生支持。 video.js是H5视频播放器,支持播放m3u8视频。这…

下载 .m3u8视频文件

简介 M3U8 是 Unicode 版本的 M3U,用 UTF-8 编码。"M3U" 和 "M3U8" 文件都是苹果公司使用的 HTTP Live Streaming(HLS) 协议格式的基础,这种协议格式可以在 iPhone 和 Macbook 等设备播放。 上述文字定义来自…

前端播放m3u8格式视频

m3u8是苹果公司推出的视频播放标准,是m3u的一种,只是编码格式采用的是UTF-8。m3u8准确来说是一种索引文件,使用m3u8文件实际上是通过它来解析对应的放在服务器上的视频网络地址,从而实现在线播放。 m3u8格式的视频是将文件分成一小…

使用videojs播放m3u8视频

vue3使用videojs 播放m3u8格式视频 videojs是一个播放视频的js库,可以通过videojs结合videojs-contrib-hls实播放m3u8格式视频。流媒体传输协议(hls)定义了用来控制播放的m3u8文件 m3u8是一个文本文件(播放列表文件),里面的内容就是被播放的音视频文件路…

网页播放 .m3u8 视频文件

1,使用 dplayer,官网上有例子 <link href"https://cdn.bootcss.com/dplayer/1.25.0/DPlayer.min.css" rel"stylesheet"> <script src"https://cdn.jsdelivr.net/npm/hls.jslatest"></script> <script src"https://cd…

m3u8

1.什么是m3u8&#xff1f; 要想知道什么是m3u8最直接最粗暴的方式是找几个m3u8文件拔出来看看就知道。(话说是驴子是马出来溜溜就知道…) 下面我给出了2个m3u8连接&#xff1a; 1.http://cache.utovr.com/201508270528174780.m3u8 2.http://devimages.apple.com/iphone/sam…

M3U8在线MP4格式

MP4 格式是目前来说较为通用的格式一般的播放器都支持播放&#xff0c;兼容性十分友好。 不过可能会在网站在线播放的时候接触到 m3u8 文件&#xff0c;这种文件格式无法直接下载播放&#xff0c;如果想要在电脑上播放这种视频&#xff0c;则需要把 m3u8 文件转换成mp4格式。 介…