操作系统——进程调度

进程调度

进程调度是,当操作系统有多个进程需要执行时,操作系统来决定资源分配和进程执行顺序的一个机制。

常见的进程调度算法有:

  • 先来先服务算法(FCFS):按照进程提交的顺序进行服务
  • 短作业优先算法(SJF):优先处理预计运行时间短的进程。
  • 优先级调度算法:根据进程的优先级来分配资源,优先级高的进程优先获得资源(执行)。
  • 时间片轮转算法:将CPU时间分割成一系列的时间片,每个进程被分配一个时间片,在该时间片中,进程可以执行其代码。

先来先服务算法

先来先服务(Fist-Come,Fist-Served,FCFS)算法。

是一种非抢占式的进程调度算法,根据进程到达时间的先后顺序进行调度(执行)。即先来先执行。

流程:当有新进程到达时,会将新进程放入队列的末端,等到队列前面的进程,系统每次选择队列中的首个进程进行执行。

特点

  • 非抢占式:一旦进程或作业开始执行,就不会因为其他进程或作业的到来而中断。
  • 按到达时间先后顺序:先到达的进程或作业将被优先执行。
  • 公平性:每个进程或作业都有机会按顺序执行,不会有的进程或作业永远得不到执行。
  • 简单性:算法的实现较为简单,易于理解和实施。

应用场景:

  • 批处理系统
  • 交互式系统
  • 实时系统

通常与其他调度算法相结合更符合实际情况。

短作业优先算法

短作业优先(Shorted Job First,SJF)算法。

也是一种非抢占式的进程调度算法那。

核心思想是优先调度执行时间最短的作业(进程),
以减少作业的平均等待时间来提高系统的吞吐量和响应速度。

流程:当一个新作业到达系统时,系统会将其与当前在执行的作业进程比较(剩余执行时间),若新作业的执行时间更短,则系统会暂停当前作业,转而执行新作业。

实现方法

在系统开始工作时,需要维护一个就绪队列,该队列包含所有 已到达且尚未

被调度 的作业。从队列中选择执行时间最短的作业进行调度。

倘若有新作业到来,进行比较,若正在执行的作业被暂停,则将其移到阻塞队列中等待唤醒。(一个新的队列,优先级高于就绪队列)

当新作业执行完后,检查阻塞队列中是否有未完成的作业,若有则执行,否则从就绪队列中选择执行时间最短的作业进行调度。

优缺点

  • 减少平均等待的时间:由于短作业会被优先执行,因此可以显著减少作业的等待时间

  • 提高系统吞吐量:短作业的快速执行有助于释放CPU资源,使得系统能够在短时间内完成更多作业,从而提高吞吐量。

  • 对长作业不利:长作业可能需要等待较长时间才能得到执行,这可能导致长作业饥饿。
  • 预测执行时间:在实际应用中,作业的实际执行时间可能与估计的时间不符,这会影响调度性能。

应用场景

适用于对响应时间和效率有较高要求的系统。

可用于批处理系统、交互式系统以及实时系统。

通常与其他调度算法相结合更符合实际情况。

优先级调度算法

思想:

在优先级调度算法中,系统会为每个进程设置一个优先级,进程的优先级决定了其被调度的顺序。优先级高的先被调度。

可以有效地减少长作业的等待时间,提高系统的吞吐量和反应速度。

优先级调度算法可以分为非抢占式和抢占式

  • 非抢占式优先级调度算法中,一旦进程开始执行,就不会因为其他进程的到来而中断。
  • 而抢占式优先级调度算法中,当有优先级更高的进程到来时,正在执行的进程会被中断,优先执行高优先级的进程。

优先级可以分静态与动态。

  • 静态优先级在创建进程时就要确定,并在进程的整个运行期间保持不变。
  • 动态优先级则可以根据进程的行为(如等待时间的长短)而发生动态变化,以达到更好的调度效果。

算法实现:

  1. 收集进程信息:进程的达到时间、执行时间、优先级等信息;

  2. 就绪队列:将所有已到达且尚未被调度的进程加入到一个就绪队列中。每次调度时,都选择优先级更高的进程进行执行。

  3. 阻塞队列:跟短作业优先一样。如果进程在运行过程中发生阻塞,则将其移到阻塞队列中等待唤醒。

  4. 进程完成后的处理:当一个进程完成执行后,检查就绪队列中是否还有未完成的进程,如果有,则继续执行下一个优先级最高的进程。

  5. 性能评估:在调度过程中,需要计算作业的周转时间和带权周转时间,以此来评估调度算法的性能。

时间片轮转算法

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

一种简单的进程调度算法,主要用于分时系统。

将CPU时间分割成一系列的时间片,每个进程被分配一个时间片的执行时间,若进程在一个时间片没有执行完毕,那么它将会被暂停,等待下一个CPU周期的分配到时间片时再次继续执行。

时间片轮转算法保证了每个进程在一定时间内均能被获得CPU执行时间,从而实现了进程间的公平竞争。

实现原理:

先将所有就绪的进程按先来先服务的原则,加入一个执行队列。每次调度选择队首进程来执行,执行时间为一个时间片,该时间片执行完后,判断进程是否结束,结束则退出,否则加入到就绪队列的尾部,等待下一次执行

优点

  • 简单且公平,每个进程都有平等的执行机会。

  • 易于实现,适合于单处理器环境。

  • 可以有效地控制CPU使用率,提高系统响应速度。

缺点

  • 在高并发情况下,进程切换的开销可能导致效率下降。

  • 对实时性支持较差,不适合对实时性要求高的系统。

  • 在多核CPU环境下,无法充分利用处理器的并行能力

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

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

相关文章

Ansible安装基本原理及操作(初识)

作者主页:点击! Ansible专栏:点击! 创作时间:2024年4月23日15点18分 Ansible 是一款功能强大且易于使用的IT自动化工具,可用于配置管理、应用程序部署和云端管理。它使用无代理模式(agentles…

学习笔记:Vue2高级篇

Vue2 学习笔记:Vue2基础篇_ljtxy.love的博客-CSDN博客学习笔记:Vue2中级篇_ljtxy.love的博客-CSDN博客学习笔记:Vue2高级篇_ljtxy.love的博客-CSDN博客 Vue3 学习笔记:Vue3_ljtxy.love的博客)-CSDN博客 文章目录 7.…

STM32 HAL库F103系列之DAC实验(一)

DAC输出实验 原理图 DAC数据格式 DAC输出电压 DORX - 数据输出寄存器 Vref 3.3V 实验简要 1,功能描述 通过DAC1通道1(PA4)输出预设电压, 然后由ADC1通道1 (PA1) 采集,最后显示ADC转换的数字量及换算后的电压值 2,关闭通道1…

【已解决】三菱PLC与电脑通信步骤

前言 现场弄了一下一台三菱FX5U的PLC结果试了半天都没有连接上,后来琢磨了一下终于算是连接上了。报错的截图如下图所示: 解决步骤 第一步:先将自己电脑的IP地址设置到与PLC的IP地址在同一个网段下(前三个是一样,最…

OpenWrt One/AP-24.XY 开源路由器发布,OpenWRT与Banana Pi社区合作

OpenWrt One/AP-24.XY 开源路由器 2024 年,OpenWrt 项目将迎来20 周年!OpenWrt 开源社区官方通过推出社区自己的第一个完全上游支持的硬件设计来庆祝这一周年纪念日。并与联发科,Banana Pi开源社区紧密合作,共同完成硬件的设计与…

C++友元类

友元类 友元类的使用 友元不仅仅适合于友元函数,还可以将类作为友元,在这种情况下,友元类的所有方法都可以访问原始类的私有方法和保护成员,什么时候去使用友元类呢? 两个类之间不存在包含和所属关系,但…

HTML中的文档声明

前言 什么是<!DOCTYPE>&#xff1f;是否需要在 HTML5 中使用&#xff1f;什么是严格模式与混杂模式&#xff1f; 文档声明概念 HTML 文档通常以文档声明开始&#xff0c;该声明的作用是帮助浏览器确定其尝试解析和显示的 HTML 文档类型。 <!DOCTYPE html>文档声…

科技渔业,智慧守护:4G+北斗太阳能定位终端准确定位,防拆卸报警,夯实渔业管理水平

如何高效地管理渔船&#xff0c;有效监控禁渔区域&#xff0c;4G北斗太阳能定位终端应运而生&#xff0c;成为渔业管理的重要应用工具。 我国作为全球渔业的重要国家&#xff0c;渔业一直是沿海地区传统的支柱产业&#xff0c;对经济的繁荣和民生的稳定起着至关重要的作用。因…

STC15L2K60S2-28I-LQFP44 单片机芯片 STC宏晶

STC15L2K60S2-28I-LQFP44 规格信息&#xff1a; 产品类型STC(宏晶) UART/USART2 额定特性- SPI1 USB Device0 USB Host/OTG0 PWM3 I2C&#xff08;SMBUS/PMBUS&#xff09;0 LCD0 工作电压2.4V ~ 3.6V EEPROM 尺度1KB Ethernet0 A/D8x10bit CAN0 D/A3x10bit CPU…

微服架构基础设施环境平台搭建 -(六)Kubesphere 部署Redis服务 设置访问Redis密码

微服架构基础设施环境平台搭建 -&#xff08;六&#xff09;Kubesphere 部署Redis服务 & 设置访问Redis密码 微服架构基础设施环境平台搭建 系列文章 微服架构基础设施环境平台搭建 -&#xff08;一&#xff09;基础环境准备 微服架构基础设施环境平台搭建 -&#xff08;二…

苍穹外卖学习笔记(4.套餐管理,店铺营业状态设置)

目录 一、Redis1、redis在java中的运用 二、店铺营业状态设置1、需求分析设计2、代码设计3、测试 三、套餐管理1、需求设计分析2、代码设计3、测试 一、Redis 具体的redis基本操作就不多再介绍&#xff0c;本节主要学习redis在java中的运用。 1、redis在java中的运用 具体…

Linux之安装Nginx

目录 传送门前言一、快速安装二、反向代理语法1、基本语法2、location语法1. 基本语法2. 匹配规则3. 修饰符4. 权重5. 嵌套location6. 其他指令7.案例 三、配置反向代理 传送门 SpringMVC的源码解析&#xff08;精品&#xff09; Spring6的源码解析&#xff08;精品&#xff0…

【数据结构】AVL树(万字超详细 附动图)

一、前言 二、AVL树的性质 三、AVL树节点的定义 四、AVL树的插入 五、AVL树的平衡调整 六、AVL树的验证 6.1 验证有序 6.2 验证平衡 七、AVL树的删除 八、AVL树的性能和代码 一、前言 还没有学习过二叉搜索树的同学可以移步 【数据结构】二叉搜索树-CSDN博客https:/…

《LINUX运维从入门到精通 》:运维入门者的自学用书

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 公众号&#xff1a;网络豆云计算学堂 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a; 网络豆的主页​​​​​ 写在前面 《Linux运维从入门到精通》从初学者角度…

免费GPU Google Colab保姆级使用攻略,实现数据集快速下载

Colab&#xff08;Colaboratory&#xff09;是一个基于云的交互式开发环境&#xff0c;专为数据科学、机器学习和人工智能任务设计。Colab 由 Google 提供&#xff0c;允许用户在浏览器中直接编写、运行、共享和协作处理 Python代码&#xff0c;特别是那些涉及大数据处理、计算…

CV每日论文--2024.4.22

1、BLINK: Multimodal Large Language Models Can See but Not Perceive 中文标题&#xff1a;BLINK&#xff1a;多模态大型语言模型可以看到但无法感知 简介&#xff1a;我们引入了Blink&#xff0c;这是一个全新的多模态语言模型&#xff08;LLMs&#xff09;基准&#xff0…

2024年城市规划与土木建筑国际学术会议(ICUPCA 2024)

2024年城市规划与土木建筑国际学术会议(ICUPCA 2024) 2024 International Conference on Urban Planning and Civil Architecture 一、【会议简介】 2024年城市规划与土木建筑国际学术会议&#xff0c;将汇集全球顶尖专家学者进行深入探讨。 这次会议的主题为“未来城市与土木…

上位机图像处理和嵌入式模块部署(树莓派4b开机启动脚本)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 编写好程序之后&#xff0c;一般要求程序开机启动后就可以运行。所以这个时候&#xff0c;我们一般就会把程序流程放在开发板的启动脚本当中。如果…

Web入门-Tomcat

黑马程序员JavaWeb开发教程 文章目录 一、简介1、Web服务器2、Tomcat 二、基本使用三、入门程序解析 一、简介 1、Web服务器 对HTTP协议操作进行封装&#xff0c;简化web程序开发部署Web项目&#xff0c;对外提供网上信息浏览服务 2、Tomcat 概念&#xff1a;Tomcat是Apach…

入门指南:从零开始学习ReactJS

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…
最新文章