【操作系统】进程管理——调度算法(个人笔记)

学习日期:2024.7.4

内容摘要:各种调度算法的思想、规则、优缺点介绍


为什么要有调度算法?

调度算法就好比一群人在银行办理业务,准备办理业务的人就是进程/作业,银行窗口的工作人员就是CPU,进程往往是比CPU数目多的。调度算法就是决定,哪些人可以先被服务,哪些人要排队等待。

适用于批处理系统的调度算法

先来先服务(FCFS)

先来先服务算法(FCFS,First Come First Serve),最简单的做法就是先来后到,先到银行的人先办业务。但是,有可能先到的“人”是来办理贷款的,谈了好几个小时都没谈完,后面一群人都只需要几分钟就能办完业务,但是都得被迫堵在后面排队,显然很不方便。

算法思想:主要按“公平”的角度考虑。(类似生活中排队办业务)

算法规则:按照作业/进程到达的先后顺序服务。

是否抢占:非抢占式算法。

优点:公平、算法实现很简单

缺点:排在长作业后面的短作业需要等待很长时间,带权周转时间很大,对短作业来说用户体验很差。即FCFS算法对长作业有利,对短作业不利。

是否会导致饥饿:不会,只要进程一直等待一定能得到服务。(饥饿:进程一直得不到服务)

短作业优先(SJF)

短作业优先算法(SJF,Shortest Job First),工作人员先服务任务简单,耗时少的客户,快速搞定,不让他们一直等。但是,如果源源不断的一直有任务简单耗时少的客户,想办大业务的客户等到银行下班也不能办理业务。

SPF就是Shortest Process First,短进程优先算法,除调度对象外没有区别。

算法思想:追求最少的平均等待时间、平均(带权)周转时间(详见《调度算法的评价指标》

注意前提!当所有进程几乎同时到达时,采用SJF调度算法的平均等待时间和平均周转时间最少。 

算法规则最短的作业/进程优先得到服务(“最短”指的是要求服务时间最短

                  每次调度时,选择当前已经到达的作业中运行时间最短的作业。

是否抢占:非抢占式算法,但也有抢占式的版本SRTN(Shortest Remaining Time Next,最短剩余时间优先算法)

        SRTN在就绪队列改变时(有新进程加入,当前进程完成)就需要调度,如果新进程的剩余时间比当前正在运行的进程的剩余时间更短,则由新进程抢占处理机,当前运行的进程重新回到就绪队列

        SRTN调度算法的平均等待时间和平均周转时间最少

优点:平均等待时间和平均周转时间较小

缺点:不公平,对短作业有利,对长作业不利,且作业的运行时间是由用户提供的估计值,并不是精确值,不一定能做到真正的短作业优先。

是否会导致饥饿:会,如果源源不断的有短作业到来,长作业就会一直得不到服务。

思考:FCFS算法只考虑了进程的等待时间而不考虑运行时间,导致了对短作业不友好,而SJF算法又只考虑了运行时间不考虑等待时间,对长作业不友好,甚至会造成长作业饥饿,这两种算法都有点太极端了,那么能不能设计一个同时考虑到等待时间和运行时间的算法呢?于是,高响应比优先(HRRN)算法应运而生。

高响应比优先(HRRN)

高响应比优先算法(HRRN,Highest Response Ratio Next),引入了响应比这一概念来衡量作业的优先级,先为响应比高的作业提供服务。

响应比=(等待时间+要求服务时间)/要求服务时间,即1+(等待时间/要求服务时间)

当等待时间很长时,分子较大,响应比高。当要求服务时间较小时,分母较小,响应比高。这样,等待时间长的和任务简单耗时少的进程都会有较高的优先级,综合了以上两种方法的优点。

算法思想:综合考虑进程的等待时间和要求服务的时间

算法规则:在每次调度时先计算各个作业/进程的响应比,选择响应比最高的服务

是否抢占:非抢占式算法,当前运行的作业主动放弃处理机时,计算所有就绪队列的进程的响应比,选择响应比最高的进程上处理机。

优点:综合考虑了等待时间和运行时间,综合了SJF和FCFS的优点。

缺点:无明显缺点,但作业的运行时间在实际运行前是估计值,不是精确值,可能会有影响。

是否会导致饥饿:不会,对于长作业来说,随着等待时间越来越久,其响应比也会越来越大。

以上三种算法都同时适用于作业调度和进程调度,主要关心对用户的公平性,平均周转时间、平均等待时间等评价系统整体性能的指标,但是不关心“响应时间”,也不区分任务的紧急程度,对于用户来说交互性很差,因此以上三种算法一般适用于早期的批处理操作系统。因为此时计算机非常昂贵,个人计算机较少,通常使用公用计算机,人们更追求系统的整体性能,而不是很在乎个人的使用体验如何。


适用于交互式系统的调度算法

时间片轮转(RR)

时间片轮转调度算法(RR,Round-Robin),时间片:操作系统规定的一定量的时间。

如果时间片太大,每个进程都能在一个时间片内完成,则RR算法会退化为先来先服务算法,失去了RR算法的意义。

另一方面,进程的调度、切换是有时间代价的(保存和恢复运行环境),如果时间片太小,会导致进程切换过于频繁,系统会花大量时间来处理进程切换,从而导致实际用于进程执行的时间比例减少。

算法思想:公平、轮流地为各个进程服务,让每个进程在一定的时间间隔内都可以得到响应

算法规则:按照各个进程到达就绪队列的顺序,轮流人各个进程执行一个时间片(如100ms),若在时间片内进程没有执行完,则剥夺处理机,将进程放到就绪队列尾重新排队,进行调度;若执行完,则主动下处理机,进行调度。每次调度时,选择就绪队列头的进程执行一个时间片。

如果在某一时刻当前进程的时间片用完,且刚好有新进程到达,则默认新到达的进程先进入就绪队列,轮转下来的进程后进入。

是否抢占:是,若进程未在时间片内运行完,会被剥夺处理机。

适用场景:仅用于进程调度,只有作业放入了内存建立了相应的进程后,才能被分配处理机时间片

优点:公平,响应快,适用于分时操作系统。

缺点:高频率的进程切换会导致一定的时间开销,不区分任务的紧急程度,只按时间片轮转。

是否会导致饥饿:不会,随着时间片轮转一定能轮转到每个等待的进程。

优先级调度

优先级调度算法

算法思想:随着实时操作系统的出现,一些应用场景需要根据任务的紧急程度来决定处理顺序。

算法规则:每个进程/作业都有各自的优先级,调度时选择优先级最高的进程/作业,如果是考试做题,题目中会给出进程/作业对应的优先数,优先数越大越优先。当优先级相同时,选择更早进入就绪队列的进程。

补充:

①就绪队列未必只能有一个,可以按照不同优先级组织。

②根据优先级是否可以改变,可以分为静态优先级和动态优先级两种,静态优先级的优先数在创建进程时确定,之后不会改变,而动态优先级的进程在创建时有一个优先数的初始值,但之后会根据情况调整。

当使用动态优先级进程时,进程等待了很长时间,或频繁的进行I/O操作,就可以提升其优先级。当进程长时间占用处理机时,可以降低其优先级。

高响应比优先(HRRN)算法,在某种意义上来说,就是一种动态优先级调度算法。

③系统进程优先级高于用户进程,前台进程优先级高于后天进程,操作系统更偏好I/O繁忙型进程(与I/O繁忙型进程相对的是CPU繁忙型进程),因为I/O设备和CPU可以并行工作,如果优先让其运行,则越有可能让I/O设备尽早投入工作。

是否抢占:有抢占式和非抢占式两种版本,非抢占式只需要在进程主动放弃处理机时调度即可,而抢占式需要在每次就绪队列变化时检查是否会发生抢占。

适用场景:进程调度和作业调度,甚至包括I/O调度。

优点:可用优先级灵活区分紧急程度和重要程度,适用于实时操作系统,调度灵活。

缺点:可能会导致低优先级进程饥饿。

是否会导致饥饿:会,如果源源不断的有高优先级作业进入,会导致低优先级的进程饥饿。

思考:FCFS算法的优点是公平,SJF算法的优点是平均等待和周转时间小,RR算法能让各个进程得到及时的响应,优先级调度算法可以灵活的调度各种进程,那么能否对上面的算法做一个折中权衡,得到一个综合表现优秀的算法呢?

好消息:算法很优秀    坏消息:全缝了,超级缝合怪

多级反馈队列

多级反馈队列调度算法

算法思想:对其它调度算法的折中权衡

算法规则:1.设置多级就绪队列,各级队列优先级从高到低,时间片从小到大。(SJF

                  2.新进程到达时先进入第一级队列,按FCFS原则排队等待被分配时间片,若用完时间                        片以后进程还未结束,则进程进入下一级队列队尾,若已经在最下级队列,则放回队                       尾。(RR

                  3.只有k级队列为空时,才会为k+1级队头的进程分配时间片。(优先级

是否抢占:抢占式,在k级队列的进程运行过程中,若更上级的队列(1~k-1级)进入了新进程,由于新进程的优先级更高,会抢占处理机,原来运行的放回k级队列的队尾。

适用场景:仅用于进程调度

优点:相对公平(FCFS的优点);每个新到达的进程都可以很快得到响应(RR的优点);短进程只需要较少的时间就能完成(SJF的优点);不必估计进程的运行时间,可灵活调整对各类进程的偏好程度。(拓展:可以将因I/O而阻塞的进程放回原队列,而非降级队列,这样可以保证I/O进程的高优先级)

缺点:可能会导致低优先级的进程饥饿。

是否会导致饥饿:会,同SJF,如果源源不断的有短进程到达,高优先的前几级队列一直有进程,较低优先级的进程就会饥饿。

比起早期的批处理操作系统,由于计算机造价大幅降低,交互式操作系统(包括分时操作系统、实时操作系统等)更注重系统的响应时间、公平性、平衡性等指标,而这几种算法能较好的满足交互式系统的需求,比如UNIX使用的就是多级反馈队列调度算法。


 内容总结自王道计算机考研《操作系统》 和 人民邮电出版社《操作系统导论》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/783475.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

旅游计划定制小程序网页模板源码

手机在线旅游定制服务,定制旅游出行app小程序模板。包含:定制介绍、定制表单填写、我的订单等。 旅游计划定制小程序网页模板源码

力扣爆刷第161天之TOP100五连刷71-75(搜索二叉树、二维矩阵、路径总和)

力扣爆刷第161天之TOP100五连刷71-75(搜索二叉树、二维矩阵、路径总和) 文章目录 力扣爆刷第161天之TOP100五连刷71-75(搜索二叉树、二维矩阵、路径总和)一、98. 验证二叉搜索树二、394. 字符串解码三、34. 在排序数组中查找元素的…

idea Git操作

1、代码拉取(左上角) 或 2、代码push(左上角) 3、切换分支(右下角) 4、分支管理 5、当前分支和某一个分支对比差异 6、当前分支某一个提交需要恢复成提交前状态(revert) 7、其他分…

信息技术课上的纪律秘诀:营造有序学习环境

信息技术课是学生们探索数字世界的乐园,但同时也是课堂纪律管理的挑战场。电脑、网络、游戏等元素可能分散学生的注意力,影响学习效果。本文将分享一些有效的策略,帮助教师在信息技术课上维持课堂纪律,确保教学活动顺利进行。 制…

简过网:快来看看你的专业能考哪个类型的事业单位?

你的专业能考哪个类型的事业单位,你知道吗?想考事业单位的姐妹,一定要在备考之前,查清楚你的专业适不适合考事业单位、考哪类事业编以及能报考哪些岗位?这个才能上岸的几率更高一些! 事业单位有5类岗位&am…

安全防御(防火墙)

第二天: 1.恶意程序---一般会具有一下多个或则全部特点 1.非法性:你未经授权它自动运行或者自动下载的,这都属于非法的。那恶意程序一般它会具有这种特点, 2.隐蔽性:一般隐藏的会比较深,目的就是为了防止…

学生护眼台灯哪个牌子实用?值得入手的学生护眼台灯十大排名分析

在这个数码时代,人们对屏幕的依赖程度越来越高,尤其是孩子们。他们不仅在学校里需要长时间盯着教科书,还会在学习和娱乐中使用各种数码设备。然而,这也使得眼睛健康问题逐渐凸显,尤其是儿童近视的问题。为了保护视力&a…

重庆交通大学数学与统计学院携手泰迪智能科技共建的“智能工作室”

2024年7月4日,重庆交通大学数学与统计学院与广东泰迪智能科技股份有限公司携手共建的“智能工作室”授牌仪式在南岸校区阳光会议室举行。此举标志着数统学院与广东泰迪公司校企合作新篇章的开启,也预示着学院在智能科技教育领域的深入探索和实践。 广东…

利用Python进行数据分析PDF下载经典数据分享推荐

本书由Python pandas项目创始人Wes McKinney亲笔撰写,详细介绍利用Python进行操作、处理、清洗和规整数据等方面的具体细节和基本要点。第2版针对Python 3.6进行全面修订和更新,涵盖新版的pandas、NumPy、IPython和Jupyter,并增加大量实际案例…

SSM高校学生综合测评系统-计算机毕业设计源码16154

摘要 随着互联网时代的到来,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个BS 结构的高校学生综合测评系统,会使高校学生综合测评系统工作系统化、规范化,也会提高高校学生综合测评系统平台形象,提高管理效率。 本学生综合测评系统是针对目前高校学生…

C++第二弹 -- C++基础语法下(引用 内联函数 auto关键字 范围for 指针空值)

本篇大纲 前言一. 引用续讲1. 传值,传引用效率对比2. 类型转换和表达式传引用的注意事项3. 引用与指针 二. 内联函数1. 概念2. 特性3. 面试题 三. auto关键字(C11)1. 类型别名思考2. auto简介3. auto的使用细则4. auto不能推导的场景 四. 基于范围的for循环(C11)1. 范围for的语…

运维系列.Nginx:自定义错误页面

运维系列 Nginx:自定义错误页面 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/…

医院人员管理项目01_下午,css

文章目录 层叠样式表在html文件中引入css样式表:2种方法如何设置样式:3种css选择器继承权重 层叠样式表 引入html网页中的方式,共3种。 行内样式(内联样式):直接在html中设置 内部样式:css代…

latex改写字体和字号

文章目录 字体使用宏包设置命令声明命令 字号例子设置特定字号 设置行间距用\setlength{\baselineskip}{24pt}设置\renewcommand{\baselinestretch}{2} \selectfont中文行距({ctex}) 补充: 字体 使用宏包 \usepackage{ctex}设置命令 只对确…

【包邮送书】AIGC时代程序员的跃迁——编程高手的密码武器

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

20240708 Transformer

如何从浅入深理解transformer? - 知乎 1.出现了一些基于自监督的方法,这包括基于对比学习的方法如MoCo和SimCLR,和基于图像掩码的方法如MAE和BeiT 2、Transformer结构及其应用详解--GPT、BERT、MT-DNN、GPT-2 - 知乎 3. "Decoder-o…

掌握【Python异常处理】:打造健壮代码的现代编程指南

目录 ​编辑 1. 什么是异常? 知识点 示例 小李的理解 2. 常见的内置异常类型 知识点 示例 小李的理解 3. 异常机制的意义 知识点 示例 小李的理解 4. 如何处理异常 知识点 示例 小李的理解 5. 抛出异常 知识点 示例 小李的理解 6. Python内置…

从0到1搭建个性化推送引擎:百数教学带你掌握核心技术

百数低代码的推送提醒功能允许用户高度自定义提醒规则,支持多种提醒方式(如钉钉、企业微信、微信、短信、语音、邮件等),以满足不同场景下的需求。 通过预设字段和模板,用户可以快速编辑提醒内容,减少重复…

ubuntu24.04按关键字卸载不需要的apt包

使用的时候发现一个imagemagic无法正常读取文件,试图卸载 man apt经过尝试后,发现list的一个神奇关键字,用来显示已安装的软件包 sudo apt list --installed | grep image按image关键字过滤: 之后按软件名卸载即可 sudo apt pu…

【VUE基础】VUE3第一节—vite创建vue3工程

什么是VUE Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面&#xff0…