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

学习日期: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.mzph.cn/news/869813.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xcode配置swift使用自定义主题颜色或者使用RGB或者HEX颜色

要想在xcode中使用自定义颜色或者配置主题色,需要在Assets中配置,打开Assets文件,然后点击添加Color Set: 输入颜色的名称,然后选中这个颜色,会出现两个颜色: Any Appearance表示亮色模式下使用…

评估测试用例有效性 5个方面

评估测试用例的有效性是确保软件测试活动能够达到预期目标的关键步骤,有助于测试团队优化测试计划,提高测试效率,减少返工,节省成本。如果缺乏对测试用例的有效性评估,可能会导致测试用例无法覆盖关键功能点&#xff0…

SpringCloud代码实战

项目结构 实例实现功能:实现通过id查询用户的订单信息 OrderCommon:公共的一些模块类型,此处为一个user对象 Eureka-Service:配置Eureka的启动类,服务端 Order-Service:提供查询功能的服务端 Order-Client:查询的客户端 OrderCommon代码…

智汇园区:为园区企业注入前沿技术与人才活力

在日新月异的时代浪潮中,树莓集团深知人才是企业发展的核心驱动力,更是推动产业升级与创新的关键要素。因此,我们致力于构建全方位的人才引进与培养体系,为园区企业输送源源不断的前沿技术与人才支持。 【人才引进:汇聚…

私活必备框架!终于找到一个前后端都有的后台管理系统了~

大家好,我是「程序视点」爱分享的小二哥~ 今天介绍一个新的Vue后台管理框架,相比其他后台功能丰富管理系统,这个后台管理系统可以用干净简洁来形容——Nova-admin Nova-admin Nova-admin 是一个基于Vue3、Vite5等最新技术的后台管理平台。用…

Selenium 中的 JUnit 注解

JUnit 是一个基于 Java 的开源框架,可帮助测试人员执行单元测试。JUnit 主要用于测试应用程序的每个单元或组件,例如类和方法。它有助于编写和运行可重复的自动化测试,以确保项目代码按预期运行。还可以使用 JUnit 执行 Selenium 自动化测试用…

【ESP32】打造全网最强esp-idf基础教程——16.SmartConfig一键配网

SmartConfig一键配网 一、SmartConfig知识扫盲 在讲STA课程的时候,我们用的是代码里面固定的SSID和密码去连接热点,但实际应用中不可能这么弄,我们得有办法把家里的WiFi SSID和密码输入到设备里面去,对于带屏带输入设备还…

视频共享交换平台LntonCVS视频监控平台智慧加油站安全管理方案

加油站作为危化品行业的一部分,日常的加油和卸油作业安全至关重要。目前国内加油站的管理主要依赖于人为管控、监控摄像头和人工巡检,这些方法存在效率低下和反应滞后的问题。为了有效应对安全风险,急需引入人工智能、物联网和大数据技术&…

UE5 本地化多语言方案

导入插件: https://www.unrealengine.com/marketplace/zh-CN/product/07e1d9bd9ced444c9b2a7e232161f74d​www.unrealengine.com/marketplace/zh-CN/product/07e1d9bd9ced444c9b2a7e232161f74d 打开测试关卡 打开插件下图目录,csv文件可以添加多个&…

网络编程:各协议头(数据报格式)

一、mac头 二、ip头 protocol——tcp/udp (7)TTL——生存时间 三、tcp头 四、udp头

校园外卖系统带万字文档在线外卖管理系统java项目java课程设计java毕业设计

文章目录 校园外卖系统一、项目演示二、项目介绍三、万字项目文档四、部分功能截图五、部分代码展示六、底部获取项目源码带万字文档(9.9¥带走) 校园外卖系统 一、项目演示 校园外卖服务系统 二、项目介绍 语言:java 数据库&…

【fastadmin 开发实战】select 级联选择

先看实现的效果 1、表单页面实现级联选择 2、级联选项后台可以编辑添加 前端代码&#xff08;编辑窗口&#xff09;&#xff1a; <div class"form-group"><label class"control-label col-xs-12 col-sm-2">{:__(渠道归属)}:</label><…

力扣 双指针基础

class Solution {public void moveZeroes(int[] nums) {int l 0;//慢指针但先走for (int r 0; r < nums.length; r) {//快指针&#xff0c;遍历次数if (nums[r] 0) continue;//l比r先到&#xff0c;在此处定住l&#xff0c;r继续移动int t nums[l];nums[l] nums[r];num…

防火墙基础实验配置

一&#xff0c;实验拓扑 二&#xff0c;实验需求&#xff1a; 1.DMZ区内的服务器&#xff0c;办公区仅能在办公时间内&#xff08;9&#xff1a;00 - 18&#xff1a;00&#xff09;可以访问&#xff0c;生产区的设备全天可以访问 2.生产区不允许访问互联网&#xff0c;办公区…

外贸展示型网站设计

清洁能源风能设备wordpress外贸公司模板 风能设备wordpress外贸公司模板&#xff0c;做新能源网通设备的公司网站模板。 https://www.jianzhanpress.com/?p3606 钢材wordpress外贸公司模板 金属钢材wordpress外贸公司模板&#xff0c;做金属成品贸易公司的企业网站模板。 …

金九银十招聘季, 自动化测试面试题分享

马上进入金九银十&#xff0c;很多小伙伴有被动跳槽的打算&#xff0c;所以更新一些相关的自动化面试题&#xff0c;希望能帮到大家。 一 怎么设计接口测试用例&#xff1f; 通常&#xff0c;设计接口测试用例需要考虑以下几个方面&#xff1a; ① 是否满足前提条件 有些接…

从零开始搭建互联网医院系统:技术与案例解析

随着信息技术的飞速发展和人们对医疗服务需求的增加&#xff0c;互联网医院逐渐成为医疗服务的重要模式。本文将详细介绍从零开始搭建互联网医院系统的关键技术和具体案例&#xff0c;帮助读者理解如何构建一个高效、可靠的互联网医院系统。 一、互联网医院系统的核心技术 1…

60秒带你了解冒泡排序

排序似乎有很多种排序&#xff0c;选择、插入、快速、归并、基数排序等等&#xff0c;今天实现一种最简单的排序方式&#xff1a;冒泡排序&#xff08;Bubble Sort&#xff09;。 int[] arr {9,1,6,3,8,4}; ↓&#xff08;如何通过算法实现这个过程&#xff1f;&#xff09; …

NodeJS小饰品销售管理系统-计算机毕业设计源码21597

摘 要 在当今的数字化时代&#xff0c;电子商务已经成为了商业领域中不可或缺的一部分。随着消费者对于购物体验的要求越来越高&#xff0c;一个高效、便捷、用户友好的小饰品销售管理系统显得尤为重要。 本系统旨在利用 JavaScript 技术&#xff0c;设计并实现一个功能强大的小…

conda篇----在已有conda环境的基础上升级python包

conda篇----在已有conda环境的基础上升级python包 原先的python版本 第一步&#xff1a; conda update --all(py11) [xxxaivrs01 xxx]$ conda update --all Collecting package metadata (current_repodata.json): done Solving environment: done> WARNING: A newer vers…