进程调度篇

在操作系统的广阔领域中,进程调度是其中一个至关重要的环节。它如同操作系统的“交通警察”,负责在多个等待CPU执行的进程间进行高效、公平的分配。本文将带您了解进程调度的基本概念、重要性、常用算法……

1. 进程调度的基本概念

1.1 进程调度的定义

进程调度,顾名思义,是操作系统负责分配CPU时间给各个进程的过程。由于CPU是计算机中最宝贵的资源之一,因此如何公平且高效地分配CPU时间,是进程调度需要解决的核心问题。

1.2 进程调度的重要性

进程调度对于操作系统的性能和用户体验有着至关重要的影响。一个高效的进程调度算法能够显著提高CPU的利用率,降低系统的响应时间,从而提高整个系统的性能和用户满意度。

2.进程调度常用的算法

1. 先来先服务(FCFS, First-Come, First-Served)
原理:按照进程进入就绪队列的先后顺序进行调度
优点:算法简单,易于实现。
缺点:可能导致长进程长时间占用CPU,而短进程等待时间过长,产生“饥饿”现象。
2. 短作业优先(SJF, Shortest Job First)
原理:优先调度执行时间最短的进程
优点:平均等待时间和平均周转时间较短。
缺点:需要预知进程的执行时间,这在实际应用中很难做到;可能导致长进程长时间得不到执行,产生“饥饿”现象(非抢占式SJF)。
3. 优先级调度
原理:根据进程的优先级进行调度,优先级高的进程先执行。
优点:可以灵活地调整进程的优先级,以适应不同的系统需求。
缺点:如果源源不断地产生高优先级的进程,那么低优先级的进程可能会长时间得不到执行,产生“饥饿”现象。
4. 轮转调度(RR, Round-Robin)
原理:将CPU时间分成若干时间片,每个进程轮流执行一个时间片。
优点:公平性好,每个进程都能得到执行;响应时间短,系统吞吐量大。
缺点:时间片的选取至关重要,如果时间片过长,退化为FCFS;如果时间片过短,会导致大量的上下文切换,降低系统效率。
5. 多级反馈队列调度
原理:将就绪队列分成多个优先级不同的队列,每个队列采用不同的调度算法。
优点:结合了SJF、轮转调度和优先级调度的优点,能够较好地适应各种类型的进程。
缺点:算法相对复杂,实现起来较为困难。

注意!!!

1. 上文提及的FCFS是First-Come, First-Served的缩写。

2. 解释一下为什么时间片过长会退化为FCFS,在轮转法这种进程调度算法中,如果设定的时间片过长,以至于大部分进程在一个时间片内便可以执行完成,那么RR算法就会失去其轮流执行多个进程的特性,而趋向于FCFS(先来先服务)算法。相信听到这儿大家也不难看出,当某个进程通过FCFS这个算法一旦开始执行后,它就会一直占用CPU直到执行完成或被阻塞,其他进程只能等待。

 提到进程调度算法,不得不提及进程的状态、优先级、上下文、记账信息等。接下来小编将一一为大家讲解这些特性,并举简单的栗子方便大家理解(浅黄色为解释,后面为栗子),最后呢会阐述他们与进程调度算法之间的联系。

3. 进程的状态

3.1 新建状态(New)

进程刚刚被创建,但尚未被初始化。这就像是一个新生婴儿刚刚出生,还没有开始他的成长之旅。

3.2 就绪状态(Ready)

进程已准备好执行,但由于其他进程正在占用CPU,因此它处于等待CPU分配的状态。这就像是一群学生在等待老师点名回答问题,他们都已经准备好了答案,但只能等待轮到自己。

3.3 执行状态(Running)

进程正在CPU上执行其指令。这是进程生命周期中最关键的状态,也是进程调度算法直接作用的对象。

3.4 阻塞状态(Blocked/Waiting)

进程因等待某个事件(如I/O操作完成、信号量等)而无法继续执行。这就像是一个学生在等待实验器材准备好才能进行实验,他必须暂停当前的学习任务,直到器材到位。

3.5 终止状态(Terminated)

进程已完成执行,但尚未被操作系统完全回收资源。这就像是一个学生完成了所有的学习任务,准备离开教室,但他的课桌和椅子还需要老师来整理。

4. 进程的上下文

上下文(Context)是指进程在执行过程中所需的环境信息,包括CPU寄存器的内容、程序计数器、堆栈内容等。当进程被调度执行时,其上下文被加载到CPU中;当进程被切换出去时,其上下文被保存起来,以便将来再次执行时恢复。这就像是你现在正在下象棋,突然被妈妈叫去买酱油,那么现在需要保留棋局,并且记住下一步棋是谁去下,以便买完酱油回来继续下象棋。

5.进程的优先级

优先级是进程调度中的一个重要概念,用于决定进程被调度的顺序。优先级高的进程在调度时具有更高的优先级,更容易获得CPU资源。优先级的设置可以是静态的(在进程创建时确定),也可以是动态的(根据进程的执行情况和系统负载动态调整)。这就像是你现在手上有梨和苹果,但是我喜欢吃苹果,所以说在选择吃谁的时候我会先选择吃苹果,对应于进程,优先级高的先被执行。

6.进程的记账信息

记账信息(Accounting Information)是指操作系统用于跟踪进程执行情况的统计数据,如CPU使用时间、I/O操作次数、内存使用量、响应时间、周转时间等。这些信息对于系统性能监控、资源分配优化和进程调度决策都具有重要意义

8.关联关系

进程调度算法与进程状态:进程调度算法决定了进程从一种状态转换到另一种状态的时机和方式。例如,在时间片轮转调度算法中,进程在运行态和就绪态之间周期性切换;在优先级调度算法中,高优先级的进程更容易从就绪态转换到运行态。
进程调度算法与上下文:上下文保存和恢复是进程切换的关键步骤,而进程切换是进程调度算法实现的基础。在进程调度过程中,需要保存当前进程的上下文并加载新进程的上下文。
进程调度算法与优先级:优先级是许多进程调度算法(如优先级调度、最短剩余时间优先等)的核心概念。通过调整进程的优先级,可以影响进程被调度的顺序和频率。
进程调度算法与记账信息:记账信息为进程调度算法提供了重要的决策依据。通过分析记账信息,操作系统可以了解进程的执行情况和系统负载情况,从而做出更合理的调度决策。

以上就是今天小编给大家带来的全部内容啦,希望对大家有所帮助~~

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

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

相关文章

【FreeRTOS】freeRTOS的Tmr Svc任务优先级配置

1、Tmr Svc是个FreeRTOS的软件定时器任务,他可以收集各任务的状态 2、他的优先级可以通过宏 configTIMER_TASK_PRIORITY 来配置,默认是2 3、修改为31后,程序总是启动不了, 4、后面才发现原来FreeRTOS的默认最大优先级号配置的是…

鸿蒙Navigation的页面跳转官方代码

星河版本 文章部分代码来源于官方 文章部分代码来源于官方只是自己改了容易理解 与API4不同的Navigation 新版本使用的思路是 1、创建页面栈 pageInfos: NavPathStack new NavPathStack();2、resources/base/profile创建 router_map.json 文件 {"routerMap":…

数电设计提问求帮助,出租车计费器。

🏆本文收录于《CSDN问答解惑-》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&…

Autosar诊断实战系列28-2E写DID Pending期间偶发回NRC0x13问题排查

本文框架 前言1.问题描述2.问题复现3.问题分析问题1:为何在2E Pending期间会发送功能寻址的10 01回NRC13?问题2:在ECU Pending期间收到功能寻址10 01,MCU需要如何处理?问题3:DcmDslConnection是如何定义的?问题4:功能寻址于物理寻址是否对应不同的DcmDslConnection?问…

Point Cloud Library (PCL) for Python - pclpy 安装指南 (2)

Point Cloud Library (PCL) for Python - pclpy 安装指南 (1) 导入库 from pclpy import pcl import numpy as np导入pclpy库中的pcl模块,用于处理点云数据。numpy库用于处理数值数据。 读取点云 cloud pcl.PointCloud.PointXYZRGB() pcl.io.loadPCDFile(F:\\bunn…

2024年西安铁一中集训DAY1---- 杂题选讲

文章目录 牛客练习赛125 E 联谊活动(枚举,分讨)牛客练习赛125 F 玻璃弹珠(类莫队,离线询问,数据结构)2024ccpc长春邀请赛 D Parallel Lines(随机化)2024ccpc长春邀请赛 E…

STM32智能健康监测系统教程

目录 引言环境准备智能健康监测系统基础代码实现:实现智能健康监测系统 4.1 数据采集模块 4.2 数据处理与分析模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:健康监测与优化问题解决方案与优化收尾与总结 1. 引言 智能健康监测系统通…

Android Studio 的Gradle下载慢,Gradle切换下载源

看图 下面的文字地址因为转义符号的问题,https后面少了一个斜杠看图片进行补充,直接复制不知道能不能用 distributionUrlhttps://mirrors.cloud.tencent.com/gradle/gradle-8.7-bin.zip

浪潮服务器内存物理插槽位置

浪潮服务器内存物理插槽位置 如下图所示

Doze和AppStandby白名单配置方法和说明

机制 配置路径 配置案例 说明 影响机制 调试命令 Doze /platform/frameworks/base /data/etc/platform.xml allow-in-power-save 【系统应用Doze白名单配置】 Doze\Job\AppStandby\Alarm\WakeLock\Sync 查看Doze白名单:adb shell dumpsys deviceidle 添加Doze白名单…

前端进阶全栈计划:Java基础语法

前言 本教程旨在帮助初学者系统地掌握Java的基础知识。我们将从Java的基本语法开始,逐步深入到面向对象编程、异常处理、多线程编程等核心概念。无论你是编程新手,还是希望夯实基础的开发者,这份指南都将带你走进Java的世界,打下坚…

昇思MindSpore学习笔记6-06计算机视觉--Vision Transormer图像分类

摘要: 记录MindSpore AI框架使用ViT模型在ImageNet图像数据分类上进行训练、验证、推理的过程和方法。包括环境准备、下载数据集、数据集加载、模型解析与构建、模型训练与推理等。 一、概念 1. ViT模型 Vision Transformer 自注意结构模型 Self-Attention Tran…

9 个让 Python 性能更高的小技巧,你掌握了吗?

我们经常听到 “Python 太慢了”,“Python 性能不行”这样的观点。但是,只要掌握一些编程技巧,就能大幅提升 Python 的运行速度。 今天就让我们一起来看下让 Python 性能更高的 9 个小技巧 python学习资料分享(无偿)…

数据(图像)增广

一、数据增强 1、增加一个已有数据集,使得有更多的多样性,比如加入不同的背景噪音、改变图片的颜色和形状。 2、增强数据是在线生成的 3、增强类型: (1)翻转 (2)切割 (3&#xf…

金龙鱼:只是躺枪?

中储粮罐车运输油罐混用事件持续发酵,食用油板块集体躺枪。 消费者愤怒的火,怕是会让食用油企们一点就着。 今天,我们聊聊“油”茅——金龙鱼。 一边是业内人士指出,油罐混用的现象普遍存在,另一边是金龙鱼回应称&am…

2972.力扣每日一题7/11 Java(击败100%)

博客主页:音符犹如代码系列专栏:算法练习关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 目录 解题思路 解题方法 时间复杂度 空间复杂度 Code 解题思路 该问…

Python学习笔记35:进阶篇(二十四)pygame的使用之音频文件播放

前言 基础模块的知识通过这么长时间的学习已经有所了解,更加深入的话需要通过完成各种项目,在这个过程中逐渐学习,成长。 我们的下一步目标是完成python crash course中的外星人入侵项目,这是一个2D游戏项目。在这之前&#xff…

元组列表之案例

1.列表推导式 基本语法: [表达式 for语句1 if 语句1 for语句2 if语句2 ........ ] 1.零到九的平方列表 a [i*i for i in range(10)] print(a) 2.for 循环前面加if else #如果是偶数乘以2,如果是奇数直接输出 a [i*2 if i%2 0 else i for i in ran…

rabbitmq集群创建admin用户之后,提示can access virtual hosts是No access状态

问题描述: 因业务需要使用的rabbitmq是3.7.8版本的,rabbitmq在3.3.0之后就允许使用guest账号的权限了,所以需要创建一个administrator标签的用户。 如下操作创建的用户: 创建完成之后就提示如下的报错: 注&#xff1a…

Python 给存入 Redis 的键值对设置过期时间

Redis 是一种内存中的数据存储系统,与许多传统数据库相比,它具有一些优势,其中之一就是可以设置数据的过期时间。通过 Redis 的过期时间设置,可以为存储在 Redis 中的数据设置一个特定的生存时间。一旦数据到达过期时间&#xff0…