操作系统调度算法

2023-11-07

  在操作系统中存在多种调度算法,其中有的调度算法适用于作业调度,有的调度算法适用于进程调度,有的调度算法两者都适用。下面介绍几种常用的调度算法。

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

  FCFS调度算法是一种最简单的调度算法,该调度算法既可以用于作业调度也可以用于进程调度。在作业调度中,算法每次从后备作业队列中选择最先进入该队列的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。
  在进程调度中,FCFS调度算法每次从就绪队列中选择最先进入该队列的进程,将处理机分配给它,使之投入运行,直到完成或因某种原因而阻塞时才释放处理机。
  下面通过一个实例来说明FCFS调度算法的性能。假设系统中有4个作业,它们的提交时间分别是8、8.4、8.8、9,运行时间依次是2、1、0.5、0.2,系统釆用FCFS调度算法,这组作业的平均等待时间、平均周转时间和平均带权周转时间见表2-3。

表2-3 FCFS调度算法的性能
作业号 提交时间 运行时间 开始时间 等待时间 完成时间 周转时间 带权周转时间
1 8 2 8 0 10 2 1
2 8.4 1 10 1.6 11 2.6 2.6
3 8.8 0.5 11 2.2 11.5 2.7 5.4
4 9 0.2 11.5 2.5 11.7 2.7 13.5

    平均等待时间 t = (0+1.6+2.2+2.5)/4=1.575
    平均周转时间 T = (2+2.6+2.7+2.7)/4=2.5
    平均带权周转时间 W = (1+2.6+5.牡13.5)/4=5.625
  FCFS调度算法属于不可剥夺算法。从表面上看,它对所有作业都是公平的,但若一个长作业先到达系统,就会使后面许多短作业等待很长时间,因此它不能作为 分时系统和实时系统的主要调度策略。但它常被结合在其他调度策略中使用。例如,在使用优先级作为调度策略的系统中,往往对多个具有相同优先级的进程按 FCFS原则处理。
  FCFS调度算法的特点是算法简单,但效率低;对长作业比较有利,但对短作业不利(相对SJF和高响应比);有利于CPU繁忙型作业,而不利于I/O繁忙型作业。

短作业优先(SJF)调度算法

  短作业(进程)优先调度算法是指对短作业(进程)优先调度的算法。短作业优先(SJF)调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业, 将它们调入内存运行。而短进程优先(SPF)调度算法,则是从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给它,使之立即执行,直到完成或发生某事件而阻塞时,才释放处理机。
  例如,考虑表2-3中给出的一组作业,若系统釆用短作业优先调度算法,其平均等待时间、平均周转时间和平均带权周转时间见表2-4。

表2-4 SJF调度算法的性能
作业号 提交时间 运行时间 开始时间 等待时间 完成时间 周转时间 带权周转时间
1 8 2 8 0 10 2 1
2 8,4 1 10.7 2.3 11.7 3.3 3.3
3 8.8 0.5 10.2 1.4 10.7 1.9 3.8
4 9 0.2 10 1 10.2 1.2 6

    平均等待时间 t = (0+2.3+1.4+1)/4=1.175
    平均周转时间 T = (2+3.3+1.9+1.2)/4=2.1
    平均带权周转时间 W = (1+3.3+3.8+6)/4=3.525
  SJF调度算法也存在不容忽视的缺点:

  • 该算法对长作业不利,SJF调度算法中长作业的周转时间会增加。更严重的是,如果有一长作业进入系统的后备队列,由于调度程序总是优先调度那些 (即使是后进来的)短作业,将导致长作业长期不被调度(“饥饿”现象,注意区分“死锁”。后者是系统环形等待,前者是调度策略问题)。
  • 该算法完全未考虑作业的紧迫程度,因而不能保证紧迫性作业会被及时处理。
  • 由于作业的长短只是根据用户所提供的估计执行时间而定的,而用户又可能会有意或无意地缩短其作业的估计运行时间,致使该算法不一定能真正做到短作业优先调度。

  注意,SJF调度算法的平均等待时间、平均周转时间最少。

优先级调度算法

  优先级调度算法又称优先权调度算法。在作业调度中,优先级调度算法每次从后备作业队列中选择优先级最髙的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。在进程调度中,优先级调度算法每次从就绪队列中选择优先级最高的进程,将处理机分配给它,使之投入运行。
  根据新的更高优先级进程能否抢占正在执行的进程,可将该调度算法分为:

  • 非剥夺式优先级调度算法。当某一个进程正在处理机上运行时,即使有某个更为重要或紧迫的进程进入就绪队列,仍然让正在运行的进程继续运行,直到由于其自身的原因而主动让出处理机时(任务完成或等待事件),才把处理机分配给更为重要或紧迫的进程。
  • 剥夺式优先级调度算法。当一个进程正在处理机上运行时,若有某个更为重要或紧迫的进程进入就绪队列,则立即暂停正在运行的进程,将处理机分配给更重要或紧迫的进程。

而根据进程创建后其优先级是否可以改变,可以将进程优先级分为以下两种:

  • 静态优先级。优先级是在创建进程时确定的,且在进程的整个运行期间保持不变。确定静态优先级的主要依据有进程类型、进程对资源的要求、用户要求。
  • 动态优先级。在进程运行过程中,根据进程情况的变化动态调整优先级。动态调整优先级的主要依据为进程占有CPU时间的长短、就绪进程等待CPU时间的长短。

高响应比优先调度算法

  高响应比优先调度算法主要用于作业调度,该算法是对FCFS调度算法和SJF调度算法的一种综合平衡,同时考虑每个作业的等待时间和估计的运行时间。在每次进行作业调度时,先计算后备作业队列中每个作业的响应比,从中选出响应比最高的作业投入运行。响应比的变化规律可描述为:

根据公式可知:

  • 当作业的等待时间相同时,则要求服务时间越短,其响应比越高,有利于短作业。
  • 当要求服务时间相同时,作业的响应比由其等待时间决定,等待时间越长,其响应比越高,因而它实现的是先来先服务。
  • 对于长作业,作业的响应比可以随等待时间的增加而提高,当其等待时间足够长时,其响应比便可升到很高,从而也可获得处理机。克服了饥饿状态,兼顾了长作业。

时间片轮转调度算法

  时间片轮转调度算法主要适用于分时系统。在这种算法中,系统将所有就绪进程按到达时间的先后次序排成一个队列,进程调度程序总是选择就绪队列中第一个进程 执行,即先来先服务的原则,但仅能运行一个时间片,如100ms。在使用完一个时间片后,即使进程并未完成其运行,它也必须释放出(被剥夺)处理机给下一 个就绪的进程,而被剥夺的进程返回到就绪队列的末尾重新排队,等候再次运行。
  在时间片轮转调度算法中,时间片的大小对系统性能的影响很大。如果时间片足够大,以至于所有进程都能在一个时间片内执行完毕,则时间片轮转调度算法就退化 为先来先服务调度算法。如果时间片很小,那么处理机将在进程间过于频繁切换,使处理机的开销增大,而真正用于运行用户进程的时间将减少。因此时间片的大小应选择适当。
  时间片的长短通常由以下因素确定:系统的响应时间、就绪队列中的进程数目和系统的处理能力。

多级反馈队列调度算法(集合了前几种算法的优点)

  多级反馈队列调度算法是时间片轮转调度算法和优先级调度算法的综合和发展。通过动态调整进程优先级和时间片大小,多级反馈队列调度算法可以兼顾多方面的系统目标。例如,为提高系统吞吐量和缩短平均周转时间而照顾短进程;为获得较好的I/O设备利用率和缩短响应时间而照顾I/O型进程;同时,也不必事先估计进程的执行时间。


图2-5  多级反馈队列调度算法

多级反馈队列调度算法的实现思想如下:

  1. 应设置多个就绪队列,并为各个队列赋予不同的优先级,第1级队列的优先级最高,第2级队列次之,其余队列的优先级逐次降低。
  2. 赋予各个队列中进程执行时间片的大小也各不相同,在优先级越高的队列中,每个进程的运行时间片就越小。例如,第2级队列的时间片要比第1级队列的时间片长一倍, ……第i+1级队列的时间片要比第i级队列的时间片长一倍。
  3. 当一个新进程进入内存后,首先将它放入第1级队列的末尾,按FCFS原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统; 如果它在一个时间片结束时尚未完成,调度程序便将该进程转入第2级队列的末尾,再同样地按FCFS 原则等待调度执行;如果它在第2级队列中运行一个时间片后仍未完成,再以同样的方法放入第3级队列……如此下去,当一个长进程从第1级队列依次降到第 n 级队列后,在第 n 级队列中便釆用时间片轮转的方式运行。
  4. 仅当第1级队列为空时,调度程序才调度第2级队列中的进程运行;仅当第1 ~ (i-1)级队列均为空时,才会调度第i级队列中的进程运行。如果处理机正在执行第i级队列中的某进程时,又有新进程进入优先级较高的队列(第 1 ~ (i-1)中的任何一个队列),则此时新进程将抢占正在运行进程的处理机,即由调度程序把正在运行的进程放回到第i级队列的末尾,把处理机分配给新到的更 高优先级的进程。

多级反馈队列的优势有:

    • 终端型作业用户:短作业优先。
    • 短批处理作业用户:周转时间较短。
    • 长批处理作业用户:经过前面几个队列得到部分执行,不会长期得不到处理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

操作系统调度算法 的相关文章

  • Win11微软账号登录不上?Win11登录Microsoft账户出错的解决方法

    Win11微软账号登录不上 近期有部分Win11用户反映在登录微软账号会出现一直转圈 无法登录的情况 这样导致部分功能都不能正常使用了 为此十分令人头疼 那么对于这一情况 有没有什么方法可以有效的解决呢 下面小编教给大家操作方法 大家可以去
  • CentOS 7 关闭网络限制

    1 安装CentOS 7 3操作系统mini版本即可 2 设置关闭Selinux 编辑 etc selinux config vi etc selinux config SELINUX disabled 重启机器 查看selinux状态 s
  • RTX线程通信之——线程标志

    文章目录 Thread Flags 概念 RTX线程标志API 案例 LED灯同步闪亮 小结 参考资料 Thread Flags In a real application we need to be able to communicate
  • Client-Server问题

    1 实验内容与要求 需要创建客户Client和服务器Server两个进程 它们通过管道进行通信 Client进程派生3个生产者线程 一个管道线程 共享一个20个slots的缓冲区 每个生产者线程随机产生一个数据 打印出来自己的id 进程 线
  • Ubuntu 10.10下安装TFTP的步骤 tftp-hpa版本

    背景 由于想要在tq2440板子上用tftp下载kernel 所以要在自己的PC机的Ubuntu 10 10上安装tftp服务 所以就去网上找了些教程 但是很悲剧 按照那些教程去操作 结果还都是无法正常运行tftp服务 最后还是从一个外国人
  • ps aux 和ps -aux和 ps -ef的选择

    Linux中的ps命令是Process Status的缩写 ps命令用来列出系统中当前运行的那些进程 ps命令列出的是当前那些进程的快照 就是执行ps命令的那个时刻的那些进程 如果想要动态的显示进程信息 就可以使用top命令 要对进程进行监
  • nslookup命令详解

    nslookup命令用于查询DNS的记录 查看域名解析是否正常 在网络故障的时候用来诊断网络问题 nslookup的用法相对来说还是蛮简单的 主要是下面的几个用法 1 直接查询 这个可能大家用到最多 查询一个域名的A记录 nslookup
  • 《一个操作系统的实现》读书笔记-- 第一章--最小的“操作系统”

    一 最简单的 操作系统 最最简单的 操作系统 就是一个最最简单的引导扇区 Boot Sector 虽然它不具有任何功能 但是它却能够直接在裸机上运行 不依赖其他软件 一个引导扇区是512个字节 并且以0xAA55为结束标识的扇区 下面就是那
  • 程序员的自我修养——链接、装载与库

    1 温故而知新 操作系统概念 北桥 连接高速芯片 系统调用接口 以软件中断的方式提供 如Linux使用0x80号中断作为系统调用接口 多任务系统 进程隔离 设备驱动 直接使用物理内存的弊端 地址空间不隔离 内存使用效率低 程序运行的地址不确
  • 深入ftrace kprobe原理解析

    Linux krpobe调试技术是内核开发者专门为了编译跟踪内核函数执行状态所涉及的一种轻量级内核调试技术 利用kprobe技术 内核开发人员可以在内核的绝大多数指定函数中动态插入探测点来收集所需的调试状态信息而基本不影响内核原有的执行流程
  • Linux学习--CentOS7.5

    CentOS7命令大全 Linux系统简介 Unix Linux发展史 Linux目录结构 树形结构 查看 切换以及创建目录 文本内容操作 grep工具 关机和重启 Linux命令 基本用法 ls list 使用通配符 mkdir 别名 g
  • 通过源码包*.src.rpm定制开发rpm

    为什么80 的码农都做不了架构师 gt gt gt 1 基本流程 1 下载 安装相应的src rpm包 wget xxx src rpm rpm ivh xxx src rpm 这里的 安装 是指把xxx src rpm中的tar gz p
  • Linux常用命令记录

    文章目录 1 软件安装 安装软件 来自源服务器 安装 deb软件 来自本地 deb文件 修复依赖关系 卸载软件 2 文件 文件夹操作 删除文件夹 移动文件 文件重命名 3 程序查看 处理 进程查看 查看端口占用情况 强制终止程序 4 解压文
  • 图解五种磁盘调度算法, FCFS, SSTF, SCAN, C-SCAN, LOOK

    一 FCFS 调度 先来先服务 磁盘调度的最简单形式当然是先来先服务 FCFS 算法 虽然这种算法比较公平 但是它通常并不提供最快的服务 例如 考虑一个磁盘队列 其 I O 请求块的柱面的顺序如下 98 183 37 122 14 124
  • 操作系统常见面试题

    1 什么是进程 Process 和线程 Thread 有何区别 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动 进程是系统进行资源分配和调度的一个独立单位 线程是进程的一个实体 是CPU调度和分派的基本单位 它是比进程更小的能
  • 【操作系统】王道考研 p42 段页式管理方式

    段页式管理方式 知识总览 分段 分页管理方式中最大的优缺点 关于段式管理会产生外部碎片 ps 分段管理中产生的外部碎片也可以用 紧凑 来解决 只是需要付出较大的时间代价 分段 分页 段页式管理 示意图 先分段 后分页 段页式管理的逻辑地址结
  • MacOS中清除原有ssh公钥方法

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 用ssh的跳转登录服务器后 ssh会把你每个你访问过计算机的公钥 public key 都记录在 ssh known hosts 当下次访问相同计算机时 SSH会核对公钥
  • gdb attach 进程调试

    gdb调试正在运行的进程 GDB可以对正在执行的程序进行调度 它允许开发人员中断程序 并查看其状态 之后还能让这个程序正常地继续执行 gdb attach xxxxx xxxxx为利用ps命令获得的子进程process
  • 地址映射与共享

    跟踪地址映射过程 1 通过命令 dbg asm启动调试器 在linux 0 11运行test c文件 使其进入死循环 我们的任务就是找到i的地址并将其修改为0使test c程序退出循环 2 在命令行输入crit c使Boch暂停 一般会显示
  • 《OSPF和IS-IS详解》一1.7 独立且平等

    本节书摘来自异步社区 OSPF和IS IS详解 一书中的第1章 第1 7节 作者 美 Jeff Doyle 更多章节内容可以访问云栖社区 异步社区 公众号查看 1 7 独立且平等 OSPF和IS IS详解与TCP IP相比 OSI协议对各国

随机推荐

  • 编程每日一题_C程序设计_日K蜡烛图

    描述 来源 pintia 正确解法一 嵌套 if 条件判断 include
  • 华为OD机试 - 区间交集(Java)

    题目描述 给定一组闭区间 其中部分区间存在交集 任意两个给定区间的交集 称为公共区间 如 1 2 2 3 的公共区间为 2 2 3 5 3 6 的公共区间为 3 5 公共区间之间若存在交集 则需要合并 如 1 3 3 5 区间存在交集 3
  • 线性DP题目汇总(持续更新)

    一 前言 此篇章主要整理一些关于线性dp的题目 很多题目其实都可以被挂上线性dp的标志 比如最熟悉的最长上升子序列啊 最长公共子序列啊等等 并且线性dp在自己写力扣周赛的题目的时候 真的会时不时出几道 然后刚好利用这些题目加上dp分析的方法
  • uniapp中H5使用Vconsole调试

    下载与安装vconsole 1 1 选中你的项目 弄出终端 输入以下命令 npm install vconsole npm install vconsole 2 引用vconsole 找到main js文件中 加上以下代码 import V
  • PyPDF2 pdf 文件写入提示如下错误:PyPDF2.utils.PdfReadError: Illegal character in Name Object

    今天学习PyPDF2 pdf文件写入其他指定pdf 文件提示如下错误信息 Traceback most recent call last File D python35 Lib site packages PyPDF2 generic py
  • 强化学习基础

    强化学习 强化学习概念 强化学习 RL 就是智能体Agent与环境交互从而进行学习的一种机器学习方法 Agent执行一个动作后 会从环境中获得反馈 这个反馈就是环境对这个动作做出的评价 这个可以理解为当你拿100分时 你妈妈会给你一顿大餐的
  • 毕业设计 STM32单片机的GPS定位系统 - 物联网

    基于STM32单片机的定位系统 由 STM32F103C8T6单片机最小系统 GPS模块 ESP8266 系统内可以通过ESP8266无线传输模块将GPS传回来的数据在ONENET界面显示 ONENET界面可以显示行驶距离 速度 经纬度还可
  • 中望cad文字显示问号怎么办_CAD字体显示问号解决方法

    很多朋友查看CAD图纸的时候会出现很多问号 这到底是怎么回事呢 想要搞定也是很麻烦的 小编提供的这款CAD字体 问号修复工具采用lsp格式 加载后再命令行输入fs回车即可解决cad字体中出现问号的问题 遇到类似问题的朋友不妨下载试试 使用说
  • 算法导论学习--红黑树详解之删除(含完整红黑树代码)

    前面我们讨论了红黑树的插入的实现 基本思想是分类讨论 然后分情况讨论以后我们发现插入操作调整函数只需要处理三种情况 并不是太复杂 但是删除操作会更复杂一点 因为二叉搜索树的删除操作本身就分成了多种情况 这样在执行删除操作后要处理的情况会更多
  • tomcat 远程连接

    在catalina sh里面添加以下配置 JAVA OPTS server XX PermSize 1024m XX MaxPermSize 2048m Xms3072 Xmx5120m XX UseParallelGC XX Parall
  • 爆了!2023 年上半年全球程序员薪酬报告

    大家好 这里是 NewBeeNLP 近日 美国科技公司数据收集网站 Levels fyi 发布了 2023 年上半年全球程序员薪酬报告 并统计了各领域薪酬的增长比例 我们从上表可以看到各个领域当中 增强现实 虚拟现实 AR VR 总薪酬中位
  • PC汇编语言(NASM)

    http www drpaulcarter com pcasm 转载于 https www cnblogs com yuanping archive 2012 12 29 2838844 html
  • 归并排序,C++实现

    归并排序 采用分治法的一个典型应用 实现方法有两种 1 自上而下的递归 所有递归的方法都可以用迭代重写 2 自下而上的迭代 c 代码 递归版 include
  • QT串口收发

    QT串口收发 串口扫描 配置串口信息 设置串口名称 设置波特率 设置数据位 设置奇偶校验 设置停止位 设置流控制 设置读取数据的缓存大小 打开串口 串口打开并配置代码 串口接收数据 串口发送数据 串口关闭 offAndOn自定义函数 使co
  • react组件的生命周期以及基本语法

    组件化的发展历程 面向对象 封装 集成 多态 模块化 13 16年 解决了全局变量和变量勿滥 组件化 使编程更轻量化 创建组件 组件的使用 无需注册 跟html标签书写一致 首字母大写 必须有根标签 一个组件一个模块 组件生命周期钩子函数
  • mvc:default-servlet-handler和mvc:annotation-driven成对出现的原因

  • [人工智能-深度学习-62]:环境搭建 - 增加或更换硬盘,SSD/SATA/SAS哪个好?

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 人工智能 深度学习 62 环境搭建 增加或更换硬盘 SSD SATA SAS哪个好 文火冰糖 王文兵 的博客 CSDN博客 第1章 硬盘的分
  • Linux提权

    目录 编辑 一 信息收集 Linux脏牛内核漏洞 SUID 1 信息收集 2 SUID提权 案例 1 SUID提权配合脚本 2 本地配合内核漏洞 3 脏牛内核漏洞演示 linux exploit suggester 二 定时任务 环境变量
  • SQL注入原理-数值型注入

    小伙伴们大家好 本期为大家带来的是SQL注入原理 数值型注入的讲解 目录 SQL注入原理 数值型注入 编辑 1 测试是否存在注入点 2 判断字段个数 3 找出可以回显的字段 4 查询数据库的信息 1 查看当前的数据库 2 查看当前数据库的用
  • 操作系统调度算法

    在操作系统中存在多种调度算法 其中有的调度算法适用于作业调度 有的调度算法适用于进程调度 有的调度算法两者都适用 下面介绍几种常用的调度算法 先来先服务 FCFS 调度算法 FCFS调度算法是一种最简单的调度算法 该调度算法既可以用于作业调