操作系统笔记--CPU调度

news2024/11/25 22:46:10

1--基本概念

CPU调度:

        从进程的就绪队列中挑选一个进程/线程作为CPU将要运行的下一个进程/线程;

        在下图中,进程产生状态转换时(运行→结束、运行→等待,等等)都会发生相应的CPU调度;

内核运行调度程序进行CPU调度的条件:(满足其一即可)

        ① 一个进程从运行状态切换到等待状态;

        ② 一个进程被终止了;

调度程序分为抢占式和非抢占式调度,同时抢占式和非抢占式可以发生在用户态和内核态:

        ① 非抢占式调度:

                        调度程序必须等待当前事件结束(当前进程结束后才能执行其它进程);

        ② 抢占式调度(切换当前进程,抢占CPU执行另一个进程)情形:

                        调度程序在中断被响应后就执行;

                        当前进程从运行态切换至就绪态,或者一个进程从等待态切换至就绪态;

                        当前运行的进程可以被换出;

2--调度原则

CPU调度需要考虑多方面的因素,包括:

        ① CPU使用率:CPU处于忙碌状态所占时间的百分比;

        ② 吞吐量:单位时间内完成的进程数量;

        ③ 周转时间:一个进程从初始化到结束,包括所有等待时间的总和;

        ④ 等待时间:进程在就绪队列中的总时间;

        ⑤ 响应时间:一个请求被提交到产生第一次响应所花费的总时间;

CPU调度需要遵循以下原则:

        ① 高带宽(吞吐量表示操作系统的计算带宽)、低延迟(响应时间表示操作系统的计算延迟);

        ② 减少响应时间;

        ③ 减少平均响应时间的波动;

        ④ 增加吞吐量:减少系统开销、实现CPU、I/O等系统资源的高效利用;

        ⑤ 减少每个进程的等待时间;

        ⑥ 确保公平性:尽量保证每个进程占用CPU的运行时间和在就绪队列的等待时间相同;

3--调度算法

FCFS算法:

        FCFS 表示先来先服务算法(First Come, First Service),通过一个队列来管理进程,按进队顺序执行相应的进程;

        FCFS 算法规定,如果当前执行的线程阻塞,则 CPU 的使用权移交给下一个进程;

FCFS算法缺点:

        由于进程入队的顺序不确定,进程的平均等待时间波动较大;

        FCFS 算法可能会导致花费时间少的任务排在花费时间长的任务之后,导致等待时间变长;

短进程优先算法:

        SPN(Shortest process next)、SJF(Shortest job first)、SRT(Shortest remaining time)等均为短进程优先算法,其首先对进程进行排序,按照预测的运行时间进行排序和入队,短进程将优先执行;

        短进程优先算法具有最优的平均等待时间,但其可能会导致长时间进程无法执行,破坏公平性原则;因为当不断有短进程出现时,短进程会优先排在长进程前,导致长进程长时间不能由 CPU 执行;

        短进程优先可以分为抢占式和非抢占式,抢占式的算法会在每一个 CPU 时间片后进行判断,当前进程的剩余执行时间与新进程执行时间的长短,如果新进程的执行时间更短,可能会抢占 CPU 执行新的进程;

最高响应比算法:

        HRRN(Highest Response Ratio Nest)算法(不能抢占)会计算每个进程的响应比,选择响应比最高的进程优先执行;

        响应比 R = (w + s) / s; w表示进程的等待时间,s表示进程的服务(运行)时间; 

4--实时调度

实时调度系统可以分为强实时调度系统和弱实时调度系统;

        强实时调度系统:要求在保证的时间内完成重要的任务,必须完成;

        弱实时调度系统:要求重要的进程其优先级更高,需要尽量完成,非必须;

强实时和弱实时调度系统相应地引出硬时限和弱时限(deadline):

        硬时限:当错过最后期限时会导致灾难性的严重后果,必须验证在最坏情况下也能满足期限;

        软时限:理想情况下,期限应该被最大满足,可以相应地降低要求;

实时调度算法:

        ​​​​​​​RM速率单调调度:最佳的静态优先调度,通过周期安排调度,周期越短优先级越高,执行周期最短的进程;

        EDF最早期限调度:最佳的动态优先调度,deadline期限越早优先级越高,执行deadline最早的进程;​​​​​​​

5--优先级反转

优先级反转:

        高优先级任务被低优先级任务阻塞,高优先级任务不能得到调度,中等优先级任务抢占CPU资源的异常现象;

具体实例如下:

        有三个线程即Thread A (高优先级)、Thread B(中优先级)、Thread C(低优先级),线程A的执行需要获取线程C的资源,此时线程A会因为线程C而阻塞,指导资源得到满足;这时为了满足线程A的继续执行,线程C会执行并返回相应的资源;然而在线程C执行时,由于线程B的优先级高于线程C,所以线程B会抢占CPU,导致线程C无法顺利执行;当线程C无法执行时,线程A也无法顺利执行,尽管线程A的优先级最高;

解决优先级反转的两个方法:

        优先级继承:让低优先级线程继承高优先级线程的优先级,即升级低优先级线程的优先级;在上面的例子中,可以将线程C的优先级临时升级为线程A的优先级;

        优先级天花板:是当线程申请某共享资源时,把该线程的优先级提升为可访问这个资源的所有线程中的最高优先级,这个优先级称为该资源的优先级天花板;

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

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

相关文章

2023/5/7周报

目录 摘要 论文阅读 1、标题和现存问题 2、循环神经网络和传统 LSTM 3、堆叠 LSTM和论文模型结构 4、实验准备 5、结果分析 深度学习 1、TGCN 2、公式 3、伪代码 总结 摘要 本周在论文阅读上,阅读了一篇基于注意力机制的堆叠LSTM心电预测算法的论文。模…

1 Python数据分析概况

1 Python数据分析概况 1.1 认识数据分析1.2 熟悉Python数据分析的工具Python数据分析常用类库 1.3 Jupyter Notebook 快捷键 1.1 认识数据分析 数据分析是指用适当的分析方法对收集来的大量数据进行分析,提取有用信息和形成结论,对数据加以详细研究和概…

C语言刷题(1)----指针数组

下面指针选题来源于教材、牛客网。 1.键盘输入一个字符串&#xff0c;编写代码获取字符串的长度并输出&#xff0c;要求使用字符指针实现。 示例&#xff1a; 输入&#xff1a; helloworld 返回值&#xff1a; 10 代码实现 #include<stdio.h> int main (void) {char st…

117-Linux_数据库_事务

事务 一.什么是事务?二.事务的四大特性1.原子性(atomicity)2.一致性(consistency)3.隔离性(isolation)4.持久性(durability) 三.隔离级别1.READ UNCOMMITTED 未提交读2.READ COMMITTED 提交读3.REPEATABLE READ 可重复读4.SERIALIZABLE 可串行化5.查看隔离级别(1)查看当前会话…

HTML5 FormData 方法介绍

XMLHttpRequest 是一个浏览器接口&#xff0c;通过它&#xff0c;我们可以使得 Javascript 进行 HTTP (S) 通信。XMLHttpRequest 在现在浏览器中是一种常用的前后台交互数据的方式。2008年 2 月&#xff0c;XMLHttpRequest Level 2 草案提出来了&#xff0c;相对于上一代&#…

MySQL之约束讲解

1. 主键约束 主键约束要求列的数据唯一&#xff0c;并且不能为空。 主键能够唯一地标识表中的一条记录。 主键和记录之间的关系如同身份证和人之间的关系&#xff0c;它们之间是一一对应的。 1.1 单字段主键 直接在定义列的时候指定主键即可。 create table temp1( num int …

高通 Android 13 兼容extfat模式

Android本身不支持extfat格式 需要通过nofuse 打kernel补丁方式去实现 1、kernel/msm-4.19/arch/arm64/configs/vendor/device-perf_defconfig 增加 diff --git a/kernel/msm-4.19/arch/arm64/configs/vendor/device-perf_defconfig b/kernel/msm-4.19/arch/arm64/configs/ve…

导航栏模糊背景 out 了? 来看看这种模糊是否合你胃口? 并且学习 backdrop-filter

导航栏模糊背景 out 了? 来看看这种模糊是否合你胃口? 并且学习 backdrop-filter 传统情况模糊导航栏效果 &#x1f19a; 一种比较新的模糊导航栏效果(比如 Element-Plus 官网的导航栏效果, 有些类似密集点阵式) 导航栏要实现这个效果必须设置背景为有透明的颜色并且通过 ba…

Docker安装常用软件-Apollo

零&#xff1a;apollo概念介绍 官网网站&#xff1a;GitHub - apolloconfig/apollo: Apollo is a reliable configuration management system suitable for microservice configuration management scenarios. gitee网址&#xff1a;mirrors / ctripcorp / apollo GitCode …

家用电器-电磁炉加热原理及实现

目录 一、历史 二、基本原理 三、电路组成 3.1 控制电路 3.2 电源电路 3.3 电磁线圈及驱动电路 3.4 传感器电路 3.5 散热-风扇 四、电磁炉的核心部件 五、电磁炉特点 5.1 加热速度快 5.2 热效率高 5.3 加热的均匀性 六、国内电磁炉市场 参考资料 一、历史 电磁炉…

【Python入门】Python的判断语句(if else 语句)

前言 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐的一位博主。 &#x1f4d7;本文收录于Python零基础入门系列&#xff0c;本专栏主要内容为Python基础语法、判断、循环语句、函…

idea调优|maven调优

一、idea调优 1、idea启动优化 首先打开idea->Help->Edit Custom VM Options 按如下配置调整既有参数&#xff0c;参数数值不固定&#xff0c;需根据开发环境配置适当调整。针对如下配置#号后面的为注释&#xff0c;配置时需删除 # 启动堆大小 -Xms2048m # 最大运行堆…

SpringCloud-OpenFeign案例实战

关于Spring Cloud Open Feign的介绍可以参考这两篇博客 OpenFeign服务接口调用 使用Feign作为服务消费者 本博客参考gitee开源项目代码&#xff0c;结合自己的理解&#xff0c;记录下微服务场景下的使用。Talk is cheap. Show me the code&#xff01; 一、项目结构 这里使用…

FJUT第17届校赛题解

致歉 由于出题人经验不足&#xff0c;给大家带来不好的体验&#xff0c;实在抱歉。在赛中忘记开答疑&#xff0c;发不了公告&#xff0c;发现的问题已经在尽量修补。出现的问题如下&#xff08;均修复&#xff09;&#xff1a; 1.薛薛的简单数学题&#xff0c;没写spj&#xf…

【Python从入门到进阶】18、文件内容序列化和反序列化操作

接上篇《17、文件的读写操作》 上一篇我们学习了Python文件对象包含哪些方法&#xff0c;并学习了文件如何进行读、写、定位和删除。本篇我们来学习文件读取及写入数据序列化和反序列化的操作。 一、什么是序列化和反序列化 通过文件操作&#xff0c;我们可以将字符串写入到一…

【Linux】 OpenSSH_7.4p1 升级到 OpenSSH_8.7p1(亲测无问题,建议收藏)

&#x1f341;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; 文章目录 文章声明前述安装一些必要的命令&…

MySQL数据库学习(进阶篇)

1.存储引擎 1.1 MySQL体系结构 连接层 最上层是一些客户端和链接服务&#xff0c;主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限。 服务层 第二层家口主要完成大多数的核心服务功能&#xff0c;如SQL接口…

二挡起步——pythonweb开发Django框架,前端原生+Django后端框架+python网络抓包(代替数据库数据)(附带小案例)

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…

Java8新特性—Stream API

前言 Java 8引入了Stream API&#xff0c;这是一种新的API&#xff0c;可让开发人员更轻松地处理集合数据。 Stream API提供了丰富的操作&#xff0c;如过滤、映射、排序和规约。下面将对Stream API的基本语法、使用场景和示例进行介绍。 基本语法 Stream API是Java 8中处理…

玄子Share- Maven 3 安装配置教程(含安装包)

玄子Share- Maven 3 安装配置教程&#xff08;含安装包&#xff09; 下载 下载链接 官网 https://maven.apache.org/index.html 下载教程 进入 Maven 官网&#xff0c;点击左侧导航栏&#xff0c;Download下载。 下方选择安装类型&#xff0c;选择.zip后缀文件&#xff0c…