【操作系统】——调度算法

news2024/12/23 15:06:40

🌹😊🌹博客主页:【Hello_shuoCSDN博客】

✨操作系统详见  【操作系统专项】

✨C语言知识详见:【C语言专项】

目录

先来先服务(FCFS, First Come First Serve)

短作业优先(SJF, Shortest Job First )

高响应比优先(HRRN,Highest Response Ratio Next)

时间片轮转(RR, Round-Robin)

优先级调度算法

多级反馈队列调度算法


先来先服务(FCFS, First Come First Serve)

算法思想——主要从“公平”的角度考虑(类似于我们生活中排队买东西的例子)
算法规则——按照作业/进程到达的先后顺序进行服务
用于作业/进程调度——用于作业调度时,考虑的是哪个作业先到达后备队列;用于进程调度时,考虑的是哪个进程先到达就绪队列
是否可抢占?——非抢占式的算法
优缺点——优点:公平、算法实现简单
                  缺点:排在长作业(进程)后面的短作业需要等待很长时间,带权周转时间很大,对短作业来说用户体验不好。即FCFS算法对长作业有利,对短作业不利(Eg:排队买奶茶..)
是否会导致饥饿(某进程/作业长期得不到服务)——不会

例题:各进程到达就绪队列的时间、需要的运行时间如下表所示。使用先来先服务调度算法,计算各进程的等待时间、平均等待时间、周转时间、平均周转时间、带权周转时间、平均带权周转时间。

先来先服务调度算法:按照到达的先后顺序调度,事实上就是等待时间越久的越优先得到服务。
因此,调度顺序为:P1-> P2-> P3-> P4

周转时间=完成时间-到达时间      P1=7-0=7; P2=11-2=9; P3=12-4=8; P4=16-5=11
带权周转时间=周转时间/运行时间   P1=7/7=1; P2=9/4=2.25; P3=8/1=8; P4=11/4=2.75
等待时间=周转时间-运行时间   P1=7-7=0;P2=9-4=5;P3=8-1=7;P4=11-4=7
平均周转时间  = (7+9+8+11)/4=8.75
平均带权周转时间  = (1+2.25+8+2.75)/4=3.5
平均等待时间  = (0+5+7+7)/4=4.75
注意:本例中的进程都是纯计算型的进程,一个进程到达后要么在等待,要么在运行。如果是又有计算、又有1/O操作的进程,其等待时间就是周转时间-运行时间-1/O操作的时间.

短作业优先(SJF, Shortest Job First )

算法思想——追求最少的平均等待时间,最少的平均周转时间、最少的平均平均带权周转时间。
算法规则——最短的作业/进程优先得到服务(所谓“最短”,是指要求服务时间最短)。
用于作业/进程调度——即可用于作业调度,也可用于进程调度。用于进程调度时称力“短进程优先(SPF, Shortest Process First)算法”。
是否可抢占?——SJF和SPF是非抢占式的算法。但是也有抢占式的版本一一最短剩余时间优先算法(SRTN, Shortest Remaining Time Next)
优缺点——优点:“最短的”平均等待时间、平均周转时间。

                  缺点:不公平。对短作业有利,对长作业不利。可能产生饥饿现象。另外,作业/进程的运行时间是由用户提供的,并不一定真实,不一定能做到真正的短作业优先。
是否会导致饥饿——会。如果源源不断地有短作业/进程到来,可能使长作业/进程长时间得不到服务,产生“饥饿”现象。如果一直得不到服务,则称为“饿死”。

例题:各进程到达就绪队列的时间、需要的运行时间如下表所示。使用抢占式短作业优先调度算法,计算各进程的等待时间、平均等待时间、周转时间、平均周转时间、带权周转时间、平均带权周转时间。

抢占式 : 抢占式的短作业优先算法又称“最短剩余时间优先算法(SRTN)”。

最短剩余时间优先算法:每当有进程加入就绪队列改变时就需要调度,如果新到达的进程剩余时间比当前运行的进程剩余时间更短,则由新进程抢占处理机,当前运行进程重新回到就绪队列。另外,当一个进程完成时也需要调度

周转时间=完成时间-到达时间   P1=16-0=16: P2=7-2=5: P3=5-4=1;P4=11-5=6
带权周转时间=周转时间/运行时间   P1=16/7=2.28; P2=5/4=1.25; P3=1/1=1; P4=6/4=1.5
等待时间=周转时间-运行时间  P1=16-7=9; P2=5-4=1; P3=1-1=0; P4=6-4=2

平均周转时间=(16+5+1+6)/4=7
平均带权周转时间 =(2.28+1.25+1+1.5)/4=1.50
平均等待时间=(9+1+0+2)/4=3

对比非抢占式的短作业优先算法,显然抢占式的这几个指标又要更低!

思考:(对FCFS和SJF两种算法的思考
FCFS 算法是在每次调度的时候选择一个等待时间最长的作业(进程)为其服务。但是没有考虑到作业的运行时间,因此导致了对短作业不友好的问题。
SJF 算法是选择一个执行时间最短的作业为其服务。但是又完全不考虑各个作业的等待时间,因此导致了对长作业不友好的问题,甚至还会造成饥饿问题。
能不能设计一个算法,即考虑到各个作业的等待时间,也能兼顾运行时间呢?

于是就提出了高响应比优先算法

高响应比优先(HRRN,Highest Response Ratio Next)

算法思想——要综合考虑作业/进程的等待时间和要求服务的时间
算法规则——在每次调度时先计算各个作业/进程的响应比,选择响应比最高的作业/进程为其服务
用于作业/进程调度——即可用于作业调度,也可用于进程调度

是否可抢占?——非抢占式的算法。因此只有当前运行的作业/进程主动放弃处理机时,才需要调度,才需要计算响应比。

优缺点——综合考虑了等待时间和运行时间(要求服务时间)
等待时间相同时,要求服务时间短的优先(SJF的优点)
要求服务时间相同时,等待时间长的优先(FCFS 的优点)
对于长作业来说,随着等待时间越来越久,其响应比也会越来越大,从而避免了长作业饥饿的问题
响应比=(等待时间+要求服务时间)/ 要求服务时间
(响应比≥1)

例题:各进程到达就绪队列的时间、需要的运行时间如下表所示。使用高响应比优先调度算法,计算各进程的等待时间、平均等待时间、周转时间、平均周转时间、带权周转时间、平均带权周转时间。

高响应比优先算法:非抢占式的调度算法,只有当前运行的进程主动放弃CPU时(正常/异常完成,或主动阻塞),才需要进行调度,调度时计算所有就绪进程的响应比,选响应比最高的进程上处理机。

对比:

注:这几种算法主要关心对用户的公平性、平均周转时间、平均等待时间等评价系统整体性能的指标,但是不关心“响应时间”,也并不区分任务的紧急程度,因此对于用户来说,交互性很糟糕。因此这三种算法一般适合用于早期的批处理系统,当然,FCFS算法也常结合其他的算法使用,在现在也扮演着很重要的角色。

时间片轮转(RR, Round-Robin)

算法思想——公平地、轮流地为各个进程服务,让每个进程在一定时间间隔内都可以得到响应
算法规则——按照各进程到达就绪队列的顺序,轮流让各个进程执行一个时间片(如100ms)。若进程未在一个时间片内执行完,则剥夺处理机,将进程重新放到就绪队列队尾重新排队。
用于作业/进程调度——用于进程调度(只有作业放入内存建立了相应的进程后,才能被分配处理机时间片)
是否可抢占?——若进程未能在时间片内运行完,将被强行剥夺处理机使用权,因此时间片轮转调度算法属于抢占式的算法。由时钟装置发出时钟中断来通知CPU时间片已到。

优缺点——优点:公平;响应快,适用于分时操作系统;
                  缺点:由于高频率的进程切换,因此有一定开销;不区分任务的紧急程度。
是否会导致饥饿——不会

例题:各进程到达就绪队列的时间、需要的运行时间如下表所示。使用时间片轮转 (常用于分时操作系统,更注重“响应时间”,因而此处不计算周转时)调度算法,分析时间片大小分别是2、5时的进程运行情况。

时间片轮转调度算法:轮流让就绪队列中的进程依次执行一个时间片(每次选择的都是排在就绪队列队头的进程)

时间片大小为2(注:以下括号内表示当前时刻就绪队列中的进程、进程的剩余运行时间)
0时刻(P1(5)):0时刻只有P1到达就绪队列,让P1上处理机运行一个时间片
2时刻(P2(4)-> P1(3)):2时刻P2到达就绪队列,P1运行完一个时间片,被剥夺处理机,重新放到队尾。
此时P2排在队头,因此让P2上处理机。(注意:2时刻,P1下处理机,同一时刻新进程P2到达.
4时刻(P1(3)→P3(1)→ P2(2)):4时刻,P3到达,先插到就绪队尾,紧接着,P2下处理机也插到队尾。
5时刻(P3(1) P2(2) P4(6)):5时刻,P4到达插到就绪队尾(注意:由于P1的时间片还没用完,因此暂时不调度。另外,此时P1处于运行态,并不在就绪队列中)

6时刻 (P3(1)-> P2(2)-> P4(6)-> P1(1)):6时刻,P1时间片用完,下处理机,重新放回就绪队尾,发生调度
7时刻(P2(2)-> P4(6)-> P1(1)):虽然P3的时间片没用完,但是由于P3只需运行1个单位的时间,运行完了会主动放弃处理机,因此也会发生调度。队头进程P2上处理机。
9时刻(P4(6)-> P1(1)):进程P2时间片用完,并刚好运行完,发生调度,P4上处理机
11时刻(P1(1)-> P4(4)):P4时间片用完,重新回到就绪队列。P1上处理机

12时刻(P4(4)):P1运行完,主动放弃处理机,此时就绪队列中只剩P4,P4上处理机
14时刻():就绪队列为空,因此让P4接着运行一个时间片。
16时刻:所有进程运行结束

时间片大小5
0时刻 (P1(5)):只有P1到达,P1上处理机。
2时刻(P2(4)):P2到达,但P1时间片尚未结束,因此暂不调度。
4时刻(P2(4)-> P3(1)):P3到达,但P1时间片尚未结束,因此暂不调度
5时刻(P2(4)→P3(1)→P4(6)):P4到达,同时P1运行结束。发生调度,P2上处理机。
9时刻(P3(1)-> P4(6)):P2运行结束,虽然时间片没用完,但是会主动放弃处理机。发生调度。
10时刻(P4(6)):P3运行结束,虽然时间片没用完,但是会主动放弃处理机。发生调度。
15时刻():P4时间片用完,但就绪队列为空,因此会让P4继续执行一个时间片。
16时刻():P4运行完,主动放弃处理机。所有进程运行完

若按照先来先服务调度算法...

如果时间片太大,使得每个进程都可以在一个时间片内就完成,则时间片轮转调度算法退化为先来先服务调度算法,并且会增大进程响应时间。因此时间片不能太大
另一方面,进程调度、切换是有时间代价的(保存、恢复运行环境),因此如果时间片太小,会导致进程切换过于频繁,系统会花大量的时间来处理进程切换,从而导致实际用于进程执行的时间比例减少。可见时间片也不能太小

优先级调度算法

算法思想——随着计算机的发展,特别是实时操作系统的出现,越来越多的应用场景需要根据任务的紧急程度来决定处理顺序

算法规则——调度时选择优先级最高的作业/进程
用于作业/进程调度——既可用于作业调度,也可用于进程调度。甚至,还会用于在之后会学习的 I/O 调度中
是否可抢占?——抢占式、非抢占式都有。做题时的区别在于:非抢占式只需在进程主动放弃处理机时进行调度即可,而抢占式还需在就绪队列变化时,检查是否会发生抢占。

优缺点——优点:用优先级区分紧急程度、重要程度,适用于实时操作系统。可灵活地调整对各种作业/进程的偏好程度。
缺点:若源源不断地有高优先级进程到来,则可能导致饥饿

是否会导致饥饿——

例题:各进程到达就绪队列的时间、需要的运行时间、进程优先数如下表所示。使用非抢占式优先级调度算法,分析进程运行情况。(注:优先数越大,优先级越高

非抢占式的优先级调度算法:每次调度时选择当前已到达优先级最高的进程。当前进程主动放弃处理机时发生调度

注:以下括号内表示当前处于就绪队列的进程
0时刻(P1):只有P1到达,P1上处理机。
7时刻(P2、P3、P4):P1运行完成主动放弃处理机,其余进程都已到达,P3优先级最高,P3上处理机。
8时刻(P2、P4):P3完成,P2、P4优先级相同,由于P2先到达,因此P2优先上处理机
12时刻(P4):P2完成,就绪队列只剩P4,P4上处理机。
16时刻():P4完成,所有进程都结束

例题:各进程到达就绪队列的时间、需要的运行时间、进程优先数如下表所示。使用抢占式的优先级调度算法,分析进程运行情况。(注:优先数越大,优先级越高

抢占式的优先级调度算法:每次调度时选择当前己到达且优先级最高的进程。当前进程主动放弃处理机时发生调度。
另外,当就绪队列发生改变时也需要检查是会发生抢占

注:以下括号内表示当前处于就绪队列的进程
0时刻(P1):只有P1到达,P1上处理机。
2时刻(P2):P2到达就绪队列,优先级比P1更高,发生抢占。P1回到就绪队列,P2上处理机。
4时刻(P1、P3):P3到达,优先级比P2更高,P2回到就绪队列,P3抢占处理机。
5时刻(P1、P2、P4):P3完成,主动释放处理机,同时,P4也到达,由于P2比P4更先进入就绪队列,因此选择P2上处理机
7时刻(P1、P4):P2完成,就绪队列只剩P1、P4,P4上处理机。
11时刻(P1):P4完成,P1上处理机

补充:
就绪队列未必只有一个,可以按照不同优先级来组织。另外,也可以把优先级高的进程排在更靠近队头的位置
根据优先级是否可以动态改变,可将优先级分为静态优先级动态优先级两种。
静态优先级:创建进程时确定,之后一直不变。
动态优先级:创建进程时有一个初始值,之后会根据情况动态地调整优先级。

通常:
系统进程优先级 高于 用户进程
前台进程优先级 高于 后台进程
操作系统更偏好 I/O 型进程(或称I/O 繁忙型进程)

(I/O 繁忙型进程)——I/O设备和CPU可以并行工作。如果优先让I/O繁忙型进程优先运行的话,则越有可能让I/O设备尽早地投入工作,则资源利用率、系统吞吐量都会得到提升。
注:与I/O 型进程相对的是计算型进程(或称 CPU繁忙型进程)


思考…如果采用的是动态优先级,什么时候应该调整?
可以从追求公平、提升资源利用率等角度考虑,如果某进程在就绪队列中等待了很长时间,则可以适当提升其优先级如果某进程占用处理机运行了很长时间,则可适当降低其优先级.

多级反馈队列调度算法

算法思想——对其他调度算法的折中权衡

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

                      2.新进程到达时先进入第1级队列,按FCFS原则排队等待被分配时间片,若用完时间片进程还未结束,则进程进入下一级队列队尾。如果此时己经是在最下级的队列,则重新放回该队列队尾
                     3. 只有第k级队列为空时,才会为k+1级队头的进程分配时间片用于进程调度
用于作业/进程调度——抢占式的算法。在k级队列的进程运行过程中,若更上级的队列(1~K-1级)中进入了一个新进程,则由于新进程处于优先级更高的队列中,因此新进程会抢占处理机,原来运行的进程放回k级队列队尾。
优缺点——对各类型进程相对公平 (FCFS的优点);每个新到达的进程都可以很快就得到响应(RR的优点);短进程只用较少的时间就可完成(SPF的优点);不必实现估计进程的运行时间(避免用户作假);可灵活地调整对各类进程的偏好程度,比如CPU密集型进程、1/0密集型进程(拓展:可以将因1/0而阻塞的进程重新放回原队列,这样1/O型进程就可以保持较高优先级)
是否会导致饥饿——

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

系统中按进程类型设置多个队列,进程创建成功后插入某个队列。

队列之间可采取固定优先级,或时间片划分固定优先级:高优先级空时低优先级进程才能被调度时间片划分:如三个队列分配时间50%、40%、10%.

各队列可采用不同的调度策略,如:系统进程队列采用优先级调度交互式队列采用RR,批处理队列采用FCFS。

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

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

相关文章

C++入门基础知识147—【关于C++ 一元运算符重载】

成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于C 一元运算符重载的相关内容&#xff0…

【测试框架篇】单元测试框架pytest(1):环境安装和配置

一、pytest简介 Pytest是Python的一种单元测试框架,与Python自带的unittest测试框架类似,但是比 unittest框架使用起来更简洁,效率更高。 二、pytest特点 Pytest是一个非常成熟的Python测试框架,主要特点有以下几点: 非常容易…

【CANOE】【学习】【DecodeString】字节转为中文字符输出

系列文章目录 文章目录 系列文章目录前言一、DecodeString 转为中文字节输出二、代码举例1.代码Demo2.DecodeString 函数说明函数语法:参数说明:返回值:使用示例:示例代码: 说明: 前言 有时候使用的时候&a…

边缘计算在智能交通系统中的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 边缘计算在智能交通系统中的应用 边缘计算在智能交通系统中的应用 边缘计算在智能交通系统中的应用 引言 边缘计算概述 定义与原…

CC1链学习记录

🌸 前言 上篇文章学习记录了URLDNS链,接下来学习一下Common-Colections利用链。 🌸 相关介绍 Common-Colections是Apache软件基金会的项目,对Java标准的Collections API提供了很好的补充,在其基础上对常用的数据结构…

边缘计算在智能物流中的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 边缘计算在智能物流中的应用 边缘计算在智能物流中的应用 边缘计算在智能物流中的应用 引言 边缘计算概述 定义与原理 发展历程 …

《多模稳控应急通讯设备技术规范》出炉,应急通讯有章可循!

近日,由深圳市遨游通讯设备有限公司参与的《多模稳控应急通讯设备技术规范》在经历多项严格的审核程序后,由中国中小商会企业协会正式发布实施。该标准详细规定了多模稳控应急通讯设备的术语和定义、产品型号、技术要求、试验方法、检验规则、标志、包装…

生成任意3D和4D场景!GenXD:通用3D-4D联合生成框架 | 新加坡国立微软

文章链接: https://arxiv.org/pdf/2411.02319 项目链接:https://gen-x-d.github.io/ 有视频 亮点直击 设计了一个数据整理流程,从视频中获取包含可移动物体的高质量4D数据,并为30,000个视频标注了相机姿态。这个大规模数据集称为CamVid-30K&…

全面解读:低代码开发平台的必备要素——系统策划篇

在传统开发过程中,系统策划起着举足轻重的作用,它宛如一位幕后的总指挥,把控着整个软件开发项目的走向。而随着技术的不断进步,低代码开发平台逐渐崭露头角,它以快速开发、降低技术门槛等优势吸引了众多企业和开发者的…

如何通过工单池与抢单机制提升企业服务效率与客户满意度?

在许多企业的售后服务或维修管理中,工单管理常常是一个瓶颈。工单处理不及时、任务分配不合理,或者客户的需求没有被准确跟踪,都可能影响到服务质量,进而影响客户满意度。随着企业规模扩大,如何高效管理工单池、合理调…

智慧电厂新纪元:基于亿信ABI的电厂环保指挥管控平台实践

​在当今全球能源转型与环境保护的双重驱动下,电力行业正加速向智能化、绿色化迈进。本案例聚焦于某电厂的智能化转型实践,通过引入先进的烟气达标监测技术与碳资产管理平台,不仅实现了对电厂排放的精准控制,还极大提升了碳数据的…

【C++练习】计算并输出1到10的所有整数的阶乘之和

题目: 计算并输出1到10的所有整数的阶乘之和 描述 编写一个C程序,定义一个函数来计算给定整数n的阶乘,然后在main函数中利用该函数计算从1到10(包括1和10)所有整数的阶乘,并将这些阶乘值累加起来&#x…

51c嵌入式~单片机合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/12362395 一、不同的电平信号的MCU怎么通信? 下面这个“电平转换”电路,理解后令人心情愉快。电路设计其实也可以很有趣。 先说一说这个电路的用途:当两个MCU在不同的工作电压下工作&…

ROM修改进阶教程------安卓14 安卓15去除app签名验证的几种操作步骤 详细图文解析

在安卓14 安卓15的固件中。如果修改了系统级别的app。那么就会触发安卓14 15的应用签名验证。要么会导致修改的固件会进不去系统,或者进入系统有bug。博文将从几方面来解析去除安卓14 15应用签名验证的几种方法。 💝💝💝通过博文了解: 1💝💝💝-----安卓14去除…

抓包工具WireShark使用记录

目录 网卡选择: 抓包流程: 捕获过滤器 常用捕获过滤器: 抓包数据的显示 显示过滤器: 常用的显示过滤器: 实际工作中,在平台对接,设备对接等常常需要调试接口,PostMan虽然可以进…

工单管理系统哪个好用?2000字详细整理

工单管理系统已经成为提高客户服务效率和质量的重要工具。随着市场上可供选择的工单管理系统越来越多,企业在选择合适的系统时常常感到困惑。本文将详细介绍几款主流的工单管理系统,以帮助企业做出明智的选择。 一、工单管理系统的重要性 工单管理系统…

Vim9 语法高亮syntax 在指定的缓冲区和窗口执行命令

背景:从开发,创建makefile、编译、单元测试、到生产部署都只有俺一个人,所以所有的工作都要自己完成,因此有了想法做一个插件,按需实现:构建Makefile,编译、打包、压缩、上传服务器、解压、安装…

群控系统服务端开发模式-应用开发-前端个人资料开发

一、总结 其实程序开发到现在,简单的后端框架就只剩下获取登录账号信息及获取登录账号菜单这两个功能咯。详细见下图: 1、未登录时总业务流程图 2、登录后总业务流程图 二、获取登录账号信息对接 在根目录下src文件夹下store文件夹下modules文件夹下的us…

Harmony- List组件最后一个item显示不全

在使用List组件显示数据的时候会出现最后一个item显示不全的问题,如下 出现在高度问题上,如果List组件上下没有其他占位组件就是正常显示的 解决方案: 1.给List组件加上layoutWeight(1),使它填满父控件剩余空间; 2.还有一种情况…

Go语言实现用户登录Web应用

文章目录 1. Go语言Web框架1.1 框架比较1.2 安装Gin框架 2. 实现用户登录功能2.1 创建项目目录2.2 打开项目目录2.3 创建登录Go程序2.4 创建模板页面2.4.1 登录页面2.4.2 登录成功页面2.4.3 登录失败页面 3. 测试用户登录项目3.1 运行登录主程序3.2 访问登录页面3.3 演示登录成…