操作系统入门 -- CPU调度算法

操作系统入门 – CPU调度算法

在了解完进程和线程的概念后,我们就需要了解当一个进程就绪后系统会进行怎样的资源分配并运行进程,因此我们就需要了解CPU的调度算法


1.CPU调度

1.1概念

CPU调度即按照某种算法将CPU资源分配给某个就绪的进程。

1.2调度层次

  • 高级调度(作业调度)
    • 内存空间有限,可能无法将用户提交的全部作业放入内存,只能挑选一个或几个放入。
    • 建立PCB,获得竞争权利。
    • 每个作业只调入一次,调出一次。
    • 作业调入时创建PCB,调出时释放PCB。
  • 中级调度(内存调度)
    • 为提高系统运行效率,将暂时不能执行的进程调出内存在外存中等待。
    • 进程被调入外存后会进入挂起状态。
    • 将数据段调入外存,而PCB则常驻内存。
    • 一个进程可能会被多次调入调出。
  • 低级调度(进程调度)
    • 宏观层面上实现并发。
    • 从就绪队列中选择一个进程并分配CPU资源。
    • 调度频率很高。
层次任务调度发生频率进程及状态变化
高级调度调度处于后备队列中的作业,创建进程外存->内存最低无->创建态->就绪态
中级调度调度处于挂起队列中的进程外存->内存中等就绪挂起->就绪/阻塞挂起->阻塞
低级调度调度处于就绪队列中的进程内存->CPU最频繁就绪态->运行态

1.3 七种状态模型

七种状态模型就是上一篇文章所说的创建、就绪、执行、阻塞、终止以及就绪挂起和阻塞挂起七种状态。本节将会对就绪挂起状态和阻塞挂起状态进行重点介绍。

  • 就绪挂起与就绪、阻塞挂起与阻塞,之间的状态可以相互转换。
  • 当等待事件出现时“阻塞挂起”可以变为“就绪挂起”。
  • PCB创建完成,无内存时,可以将进程调入外存成为“就绪挂起”。
  • 当进程没有分配CPU资源时可以直接调入外存,此时由“运行”变为“就绪挂起”。


    提示:判断进程是否被挂起可以查看进程是否被调入外存中。

2.进程调度的时机与方式

2.1 调度与切换

进程调度简单来说可以视为对某一个进程的选择,但其中包括了进程的选择和切换两个步骤,在切换过程中,需要对当前执行的进程进行上下文保存,并恢复下一个即将执行进程的数据并执行。

2.2调度的时机

2.2.1 主动放弃CPU

当任务执行完成、运行时发生异常以及进程主动进入阻塞状态时会主动放弃CPU。

2.2.2 被动放弃CPU

分给进程的时间片用完 或有更紧急的事情需要处理(I/O中断)、以及有其他更高优先级的进程进入就绪队列时,当前执行的进程会被动放弃CPU。


3.CPU调度算法

接下来讲解常见的几个CPU调度算法

3.1 先来先服务(FCFS)

该算法为非抢占式调度,选择就绪队列中等待时间最长的进程。进程按照进入就绪队列的先后顺序依次执行。

  • 评价:系统开销小、对长进程有优势;更利于多CPU处理的进程

  • 例子:在下图中可以看出,5个进程按时间先后依次进入就绪队列,因此系统按照进程的到达时间依次执行。

alt text

3.2 短作业优先(SJF)

短作业优先即选择下一个期望最短处理时间的进程运行。

3.2.1 抢占式SJF

进程主动离开CPU时调度运行时间最短的进程。即当新的进程执行所需时间小于当前进程执行所需的时间时,CPU就会执行那个后到的但执行时间更短的进程。

  • 缺点:需要知道或估计进程会执行多长时间;可能史长进程产生饥饿;因为没有剥夺,所以不适合在实时系统中实现。
  • 例子:P1先进入就绪队列,因而先执行P1。在P1执行过程中P2到达了,由于P2执行时间比P1长,因此P1并不会离开CPU而是继续执行。当P1运行结束后,就绪队列中只剩下P2,因此开始执行P2。在P2执行过程中P3到达,且P3预估执行时间比P2短,因此P2离开CPU,开始执行P3。此时P2剩余执行时间为5。到6时刻,P4进入就绪队列,P3运行时间还剩2,但P4执行时间大于P3,因此继续执行P3。8时刻P3运行结束,此时P5到达,在任务列中剩余P2、P4、P5,执行所需时间分别为5、5、2,因此先执行P5。当P5执行结束后按照先来先到的原则执行剩下的进程,也就是先执行P2,最后执行P4.

alt text

3.2.2 非抢占式SJF

非抢占式SJF即当运行进程主动放弃CPU控制权时的进程调度。

  • 例子:0时刻P1到达,开始执行P1。当P1执行到2时刻时P2到达,此时依然执行P1。3时刻P1执行完毕,开始执行P2。从P2开始执行到结束的时间为12,此时P3、P4、P5陆续到达,但都处于等待执行状态。直到12时刻P2执行结束后,由于P5执行时间最短,因此先执行P5,随后按照进程执行长度依次执行P3和P4。

alt text

3.3优先级调度算法

每个进程有一个优先级,优先级由优先数来表示。优先级不同时调度优先权最高的进程,优先级相同时按照FCFS顺序调度。

3.3.1非抢占式

注:数字越小,优先级越高

  • 例子:0时刻P1到达开始运行,2时刻P2到达,优先级比P1低,继续运行P1。P1运行结束后开始运行P2。由于P2运行时间较长,P3、P4、P5相继到达。此时P2未结束,但P5的优先级为当前所有进程最高,因此在P2运行完成后先运行P5,最后按优先级依次运行P3和P4。

alt text

3.3.2抢占式

新进程到达就绪队列是,若优先级比当前执行的进程高,则优先运行新进程。

3.4时间片轮转算法(RR)

时间片轮转算法会为每个执行的进程分配固定的执行时间,当时间一到则当前执行的进程将会转入就绪队列中,与此同时按照FCFS算法从就绪队列中取出新的进程执行。该调度算法也是目前主流操作系统使用的进程调度算法。

  • 例子:假设系统的时间片为4,P1先到达,先执行P1。在执行过程中P2到达,由于P1执行时长为3,未使用完时间片,因此P1顺利完成并开始执行P2。在第二个时间片中,P3和P4先后到达。由于P2执行时间为6,大于时间片,因此在第7时刻时P2中断并进入就绪队列(此时P2未顺利完成),系统开始执行P3。在P3运行过程中P5到达。到11时刻时P3顺利完成,开始运行P4。由于P4运行时长超过时间片长度,因此在15时刻时P4中断。此时就绪队列中进程顺序为P2、P5、P4,三个进程执行时间小于时间片,按FCFS执行。

alt text

3.4多级队列调度

将就绪队列分为多个队列,每个队列都有不同优先级。当进程进入系统后根据具体情况如内存大小、优先级等分批进入不同队列中。队列之间使用优先级调度,同一队列使用自己的调度算法。

  • 例子:前台交互优先级比后台批处理高,因此前台使用RR,后台使用FCFS。高优先级进程未运行完,低优先级进程无法运行,在低优先级进程运行时若高优先级进程到达,则可以抢占CPU。

alt text

4.总结

以下是各个算法的比较

调度算法占用CPU方式吞吐量响应时间开销对进程影响饥饿问题
FCFS非抢占不强调可能很慢,尤其进程执行时间差别很大时最小短进程不利;I/O进程不利
RR抢占(时间片用完)时间片很小时吞吐量很低为短进程提供很好响应时间最小公平对待
SJF非抢占为短进程提供很好响应时间可能较大对长进程不利可能
SRTN抢占(到达时)提供很好响应时间可能较大对长进程不利可能
HRRN非抢占提供很好响应时间可能较大很好的平衡
FeedBack抢占(时间片用完)不强调不强调可能较大对I/O进程有利可能

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

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

相关文章

大模型应用开发技术:Multi-Agent框架流程、源码及案例实战(二)

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (一) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (二) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (三) 基于 LlaMA…

Matlab r2023a v23.2.0 解锁版安装步骤 (工程计算商业数学软件)

前言 Matlab(矩阵实验室)是全球领先的数学计算软件开发商美国 MathWorks 公司研发的一款面向科学与工程计算的高级语言的商业数学软件,集算法开发、数据分析、可视化和数值计算于一体的编程环境,其核心是仿真交互式矩阵计算&…

买超声波清洗机什么牌子好?四大优越上品超声波清洗机总汇

随着生活品质提高,洗眼镜的方式是越来越多样化了!传统的清洗眼镜方式非常容易导致眼镜损坏,从而缩短了眼镜原本的使用寿命!因此超声波清洗机的出现就方便了大家,在清洗眼镜时,可以用超声波清洗机数分钟就搞…

PHP在同一域名下两个不同的项目使用session做独立登录机制的方法介绍

PHP如何在同一域名下的两个不同项目中实现独立登录机制。 项目1&#xff08;Project1&#xff09;的代码示例 <?php // 设置项目1的会话名称 session_name(project1_session);// 启动会话 session_start();// 检查用户是否已登录 if (!isset($_SESSION[user_id])) {// 用…

Python 实现简单的超图 Hypergraph

我是“导航” 1 超图2 代码3 说明4 参考 1 超图 在数学中&#xff0c;超图&#xff08;Hypergraph&#xff09;是一种广义上的图&#xff0c;是有限集合中最一般的离散结构&#xff0c;在信息科学、生命科学等领域有着广泛的应用。&#xff08;如果有疑问&#xff0c;可以参看…

基于WPF技术的换热站智能监控系统15--实时读取PLC数据

1、创建PLC实时数据 1、添加数据块 2、创建6个变量 用来表示水泵1和水泵2的参数&#xff0c;可以根据现场实际情况添加更多的变量参数 3、设置块属性并编译 4、下载该程序到PLC中 5、添加监控表 2、读取设备数据 S7协议下的tcp直接通讯&#xff0c;配置简单&#xff0c;一般P…

【Python】从0开始的Django基础

Django框架基础 unit01一、Django基础1.1 什么是Django?1.2 安装与卸载1.2.1 Python与Django的版本1.2.2 安装1.2.3 查看Django版本1.2.4 卸载 二、Django项目2.1 概述2.2 创建项目2.3 启动项目2.4 项目的目录结构2.5 配置 三、URL 调度器3.2 定义URL路由3.2 定义首页的路由3.…

JMU 数科 数据库与数据仓库期末总结(3)简答题

什么是存储过程及其优缺点 存储过程是由过程化SQL语句书写的过程&#xff0c;这个过程经过编译和优化后存储在数据库服务器中&#xff0c;使用时调用即可。优点&#xff1a;运行效率高&#xff1b;降低了客户与服务器之间的通信量。 缺点&#xff1a;开发和调试较复杂 什么叫…

10KM无人机高清图传通信模组,低延迟、抗干扰,飞睿智能无线MESH组网模块

随着科技的飞速发展&#xff0c;无人机技术在各个领域的应用越来越广泛。尤其在海上监测、搜索救援、货物运输等场景中&#xff0c;无人机的应用显得尤为重要。然而&#xff0c;要实现无人机在复杂海域环境中的高效通信&#xff0c;高清图传通信模组的作用不可忽视。本文将深入…

【笔记】复制Edge的网址粘贴后自动变成中文标题超链接

问题 1、从edge复制的网址粘贴直接显示网页内容名称而不是网址url。 2、复制任何网址粘贴到CSDN里面粘贴时直接转换成标题超链接&#xff08;很讨厌的功能习惯&#xff09;。 而如上两种问题不是互相影响的&#xff0c;就算设置了Edge的粘贴方式&#xff0c;复制到CSDN的文章…

来自红队大佬的经验之谈---命令执行过滤绕过-Windows篇

感谢来自老流氓大佬的投稿&#xff0c;本次文章介绍的是在windows环境下&#xff0c;过滤的“点”和“空格”等符号&#xff0c;导致在写入webshell时会受限。以下是针对该目标的绕过记录。 首先是命令执行和过滤验证&#xff0c;如下&#xff1a;​ 执行dir命令&#xff0c;…

基于JSP的二手车交易网站

开头语&#xff1a; 你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果你对二手车交易网站感兴趣或有相关开发需求&#xff0c;欢迎随时联系我。我的联系方式可以在文末找到。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSPJava 工具&#…

微服务开发与实战Day10 - Redis面试篇

一、Redis主从集群 1. 搭建主从集群 1.1 主从集群结构 单节点Redis的并发能力是有限的&#xff0c;要进一步提高Redis的并发能力&#xff0c;就需要搭建主从集群&#xff0c;实现读写分离。 如图所示&#xff0c;集群中有一个master节点、两个slave节点&#xff08;现在叫re…

机械师电脑文件丢失怎么办?6个恢复方法,希望能帮到您

机械师电脑作为高性能的计算机品牌&#xff0c;受到众多用户的青睐。然而&#xff0c;即便是品质卓越的电脑&#xff0c;也难免会遇到文件丢失的困扰。无论是由于误操作、系统故障还是硬盘损坏&#xff0c;文件丢失都可能给用户带来不小的麻烦。当您发现机械师电脑上的文件突然…

海洋经济捧出一个IPO,宁波海上鲜数字化赋能背后的喜与忧

近日&#xff0c;宁波海上鲜信息技术股份有限公司&#xff08;下称“海上鲜”&#xff09;向港交所递交上市申请&#xff0c;国泰君安国际、东兴证券&#xff08;香港&#xff09;为其联席保荐人。贝多财经获悉&#xff0c;该公司自2022年5月起便开始筹备赴港上市&#xff0c;但…

new和malloc区别:

1、malloc和free是C/C语言的标准库函数&#xff0c;new和delete是C中的运算符。都可以用于申请动态内存和释放内存。 2、对于非内部数据类型的对象而言&#xff0c;光使用malloc函数和free函数是无法满足动态对象的要求。对象在创建的同时要自动执行构造函数&#xff0c;对象在…

怎么把两个音频合成一个?将两个音频合成一个的四种方法

怎么把两个音频合成一个&#xff1f;在当今数字化的时代&#xff0c;音频处理已经成为我们生活中不可或缺的一部分。有时候&#xff0c;我们会希望将两段音频合成为一个&#xff0c;无论是为了制作音乐混音、创作声音效果&#xff0c;还是为了编辑播客节目或视频配音。合成音频…

Java18新特性(极简)

一、引言 自1995年Java语言首次亮相以来&#xff0c;它已经成为企业级应用、移动应用和游戏开发等领域不可或缺的一部分。随着技术的不断进步&#xff0c;Java也在持续演化&#xff0c;每个新版本都带来了诸多新特性和性能优化&#xff0c;旨在提升开发者的编程效率和应用程序的…

Mac环境如何使用Flutter Version Manager (fvm)

Mac环境如何使用Flutter Version Manager (fvm) Flutter Version Manager (fvm) 是一个 Flutter 版本管理工具&#xff0c;它允许开发者在本地安装并管理多个 Flutter 版本。使用 fvm&#xff0c;您可以轻松切换不同版本的 Flutter SDK&#xff0c;进行多项目开发而无需重复安…

怎么把网页上的接口信息导入postman

第一步 打开f12&#xff0c;右键选中需要的接口。选择copy-copy as cURL 第二步 打开postman&#xff0c;选择"Raw Text"&#xff0c; 把刚才复制的curl粘贴到空白位置&#xff0c;点击Continue - 最后的效果。导入的接口自带cookie&#xff0c;不用再输入cookie&a…