2.10、时间片轮转、优先级调度算法、多级反馈队列调度算法

news2024/9/22 13:29:15

image-20230129183902251

Tips:各种调度算法的学习思路

  1. 算法思想

  2. 算法规则

  3. 这种调度算法是用于作业调度还是进程调度?

  4. 抢占式? 非抢占式?

  5. 优点和缺点

  6. 是否会导致 饥饿 \color{red}饥饿 饥饿

    某 进程/作业 长期得不到服务


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

image-20230129190722131


1.1、例子

常用于分时操作系统,更注重 “响应时间”,因而此处不计算周转时间

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

image-20230129184754195

image-20230129185103652

image-20230129185248581

image-20230129185315688


时间片为 5 的情况

image-20230129185611326


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

image-20230129185644418


1.2、时间片太大/小的影响

如果时间片太大,使得每个进程都可以在一个时间片内就完成,

  • 则时间片轮转调度算法退化先来先服务调度算法,

    并且 会增大进程响应时间 \color{red}会增大进程响应时间 会增大进程响应时间

    比如:系统中有 10 个进程在并发执行,如果时间片为 1 秒,则一个进程被响应可能需要等 9 秒…

    • 也就是说,如果用户在自己进程的时间片外通过键盘发出调试命令,

      可能需要等待 9 秒才能被系统响应

    • 其实就是时间片太长了,导致后面的进程等待时间也会太长

  • 因此时间片不能太大

另一方面,进程调度、切换是有时间代价的(保存、恢复运行环境),

  • 因此如果时间片太小,会导致进程切换过于频繁(不断地频繁切换用户态与内核态),系统会花大量的时间来处理进程切换,

    从而导致实际用于进程执行的时间比例减少。

  • 可见时间片也不能太小

一般来说,设计时间片时要让切换进程的开销占比不超过 1 % 1\% 1%

2、优先级调度算法

image-20230129194948005


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

2.1、非抢占式的

image-20230129191523357

.2.2、抢占式的

image-20230129193143525

2.3、静态/动态优先级

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

  • 另外,也可以把优先级高的进程排在更靠近队头的位置

根据优先级是否可以动态改变,可将优先级分为静态优先级动态优先级两种。

静态优先级 \color{red}静态优先级 静态优先级

  • 创建进程时确定,之后一直不变。

动态优先级 \color{red}动态优先级 动态优先级

  • 创建进程时有一个初始值,之后会根据情况动态地调整优先级。

如何合理地设置各类进程地优先级?

通常:

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

注:与 I/O 型进程相对的是计算型进程(或称 CPU 繁忙型进程)

I/O 设备和 CPU 可以并行工作。如果优先让 I/O 繁忙型进程优先运行的话,

  • 则越有可能让 I/O 设备尽早地投入工作,则资源利用率、系统吞吐量都会得到提升
  • I/O 花费的时间一般比较长,尽早处理完 I/O

若采用 CPU 繁忙型进程的话,

  • CPU 优先于 I/O,则 CPU 运行完之后,此时后备队列中没有队列了,需要等待 I/O 设备输入

如果采用的是动态优先级,什么时候应该调整?

可以从追求公平、提升资源利用率等角度考虑

  • 如果某进程在就绪队列中等待了很长时间,则可以适当提升其优先级

  • 如果某进程占用处理机运行了很长时间,则可适当降低其优先级

  • 如果发现一个进程频繁地进行 I/O 操作,则可适当提升其优先级

HRRN 高响应比优先调度算法,可以认为是动态地优先级调度算法

3、多级反馈队列调度算法

FCFS 算法的优点是公平

SJF 算法的优点是能尽快处理完短作业,平均等待/周转时间等参数很优秀

时间片轮转调度算法可以让各个进程得到及时的响应

优先级调度算法可以灵活地调整各种进程被服务的机会

能否对其他算法做个折中权衡? 得到一个综合表现优秀平衡的算法呢?

  • 多级反馈队列调度算法

image-20230129204837476

由于进程源源不断地到来会使得高优先级的队列始终非空,而低优先级的队列需要等待高优先级的队列为空时才能使用,导致低优先级队列中的进程饥饿


image-20230129204010547

4、总结

算法可抢占?优点缺点会导致饥饿?补充
时间片轮转抢占式公平;适用于分时系统频繁切换有开销;不区分优先级不会时间片太大或太小导致的影响
优先级调度有的抢占式的,有的非抢占式的区分优先级;适用于实时系统可能导致饥饿动态/静态优先级。各类型型进程如何设置优先级?如何调整优先级
多级反馈队列抢占式平衡优秀;6(9 翻了)一般不说它优缺点;不过可能导致饥饿

:比起早期的批处理操作系统来说,由于计算机造价大幅降低,因此之后出现的交互式操作系统(包括分时操作系统、实时操作系统等)更注重系统的响应时间、公平性、平衡性等指标。

  • 而这几种算法恰好也能较好地满足交互式系统的需求。

因此这三种算法适合用于 交互式系统 \color{red}交互式系统 交互式系统

  • 比如 UNIX 使用的就是多级反馈队列调度算法

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

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

相关文章

别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(2)

别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(2) 目录 ​​​​​​​款式二:心形实时显示认识多长时间桃花飞舞(爱心)款 1、拷贝完整源代码 2、拷贝完整js代码 3、…

漏洞修复 Zookeeper、MySQL、Elasticsearch

漏洞修复 一、HTTP漏洞修复 1.1 漏洞说明 1.2 漏洞修复 1.2.1 升级HTTPD到最新版本(2.4.53) 1.2.1.1 服务器有网的情况下执行以下操作: 安装CodeIT库 cd /etc/yum.repos.d wget https://repo.codeit.guru/codeit.el7.repo 更新httpd y…

解决需求变更难题的8大方案

需求变更8大原因为什么会出现需求变更,这是由于需求约束、规则有了新的变化、由于政策发生变化,客户、沟通方式、流程化、标准化的问题等导致。这里在在过去的项目经验中,提出了常见的8大需求变更的原因。政策发生变化:指由于国家…

牛客网Python篇数据分析习题(三)

1.现有一个Nowcoder.csv文件,它记录了牛客网的部分用户数据,包含如下字段(字段与字段之间以逗号间隔): Nowcoder_ID:用户ID Level:等级 Achievement_value:成就值 Num_of_exercise&a…

华为OD机试 - 去除多余空格(Python)| 真题+思路+代码

去除多余空格 题目 去除文本多余空格,但不去除配对单引号之间的多余空格。给出关键词的起始和结束下标,去除多余空格后刷新关键词的起始和结束下标。 条件约束: 不考虑关键词起始和结束位置为空格的场景;单词的的开始和结束下标保证涵盖一个完整的单词,即一个坐标对开…

flurry+atos crash代码定位

flurry 崩溃日志代码定位 用symbolicatecrash工具分析iOS Crash文件通过atos符号化崩溃报告 1.写测试crash代码(方便检测最后crash是否定位正确 **MineViewController-xima方法-485行) 2.代码中flurry sdk打开crash追踪(默认为NO&#xff0…

Prometheus 告警规则

Prometheus 告警规则 Prometheus官方内置的第三方报警通知包括:邮件、 即时通讯软件(如Slack、Hipchat)、移动应用消息推送(如Pushover)和自动化运维工具(例如:Pagerduty、Opsgenie、Victorops) Promethe…

Allegro如何批量快速修改复用好的模块操作指导

Allegro如何批量快速修改复用好的模块操作指导 在做PCB设计的时候,相同模块可以用reuse复用的功能,可以大大提升效率,但是模块需要修改的时候,其它模块也要跟着修改,逐个再去复用一遍比较费时间,Allegro支持批量快速修改复用好的模块 前提是相同模块必须是相同的mdd文件…

Ray和极客们的创新之作,2月18日来发现

所在论坛:数据库技术创新&云原生论坛分享时段:2.18 10:30-11:00分享主题:云原生数据库PieCloudDB :Unbreakable安全特性剖析分享嘉宾:王淏舟,拓数派资深研发工程师 由中国开源软件推进联盟PostgreSQL分…

Ansible的部署和命令模块

Ansible的部署和命令模块目录一、ansible 的概述1.1ansible简介1.2官方网站1.3ansible 的特点1.4ansible的工作机制1.5ansible的组成模块二、ansible部署2.1环境准备2.2Asible的安装三、ansible 命令行模块3.1command 模块3.2shell 模块3.3cron 模块3.4user 模块3.5group 模块3…

【java】40 个 SpringBoot 常用注解(建议收藏)

本文目录一、Spring Web MVC 注解Spring Web MVC 注解RequestMappingRequestBodyGetMappingPostMappingPutMappingDeleteMappingPatchMappingControllerAdviceResponseBodyExceptionHandlerResponseStatusPathVariableRequestParamControllerRestControllerModelAttributeCross…

王道操作系统笔记(七)——— 内存管理的基本要求和连续分配管理方式

文章目录一、内存的概念和作用二、内存管理的概念三、进程运行的基本原理和要求3.1 程序执行过程3.2 逻辑地址和物理地址3.3 程序的链接3.4 程序的装入3.5 内存保护四、覆盖与交换4.1 覆盖技术4.2 交换技术五、连续分配管理方式5.1 单一连续分配5.2 固定分区分配5.3 动态分区分…

解决ArcSWAT 2012.10_8.25安装 Error 1001 无法获得SWAT_HRU.dll程序集中安装程序类型。->无法加载一个或多个请求熟悉

问题描述 Error1001.无法获得G:SWATArcSWATSWAT_HRUsdll 程序集中的安装程序类型。->无法加载一个或多个请求的类型。有关更多信息,请检索LoaderExceptions 属性。 这是由于找不到对应的dll文件。 参考ArcSWAT的帮助文档后,发现该版本 对应的ArcGI…

revit中如何创建有坡度的排水沟及基坑?

一、revit中如何创建有坡度的排水沟? 先分享一张有坡度排水沟的族的照片给大家加深一下印象,有了一个粗略的直观认识,小编就来说说做这个族的前期思路吧。 一、前期思路: 1、 用拼接的方式把这个族形状拼出来,先用放样&#xff0…

焕新启航,「龙蜥大讲堂」2023 年度招募来了!13 场技术分享先睹为快

龙蜥大讲堂是龙蜥推出的系列技术直播活动,邀请龙蜥社区的开发者们分享围绕龙蜥技术展开,包括但不限于内核、编译器、机密计算、容器、储存等相关技术领域。欢迎社区开发者们积极参与,共享技术盛宴。往期回顾龙蜥社区技术系列直播截至目前已举…

rust 程序设计语言入门(一)

本文是阅读《Rust程序设计语言》的学习记录,配合视频《Rust编程语言入门教程》食用更佳 环境搭建 windows下载rustup_init.exe,点击安装,默认选择msvc的toolchain,一路default即可 解决下载慢的问题,在powershell中修…

2.7、进程调度的时机、切换与过程、方式

1、进程调度的时机 进程调度\color{red}进程调度进程调度(低级调度),就是按照某种算法从就绪队列中选择一个进程为其分配处理机 进程在操作系统内核程序临界区\color{red}操作系统内核程序临界区操作系统内核程序临界区中不能\color{red}不能…

网络连通性测试(ping/tcp)

网络连通性首先要看ping是否能够通其次,测试TCP是否能通方式一、iperf3/iperf2可以测试tcp的连接一方作为server,一方作为client来连接,但是iperf3和iperf2不兼容server:iperf3/iperf2 -s 172.20.0.36client: iperf3/iperf2 -c 17…

亚马逊、沃尔玛卖家自养号退款经验和测评技术

今天给大家介绍下在做亚马逊、沃尔玛退款自养号中的经验,众所周知,自养号最重要的是养号的环境,包括系统的纯净度,下单的信用卡以及其他的一些细节。 环境系统市面上有很多,鱼龙混杂,比如什么lumi&#xf…

Java测试——junit的使用(2)

排序 我们同一个类下的多个用例的执行顺序是不确定的,如果需要指定固定的顺序,则需要在类上加这个注解 TestMethodOrder(MethodOrderer.OrderAnnotation.class)然后在想要第一个执行的用例上加上 Order(1)第二个执行的用例上注解: Order(…