进程调度篇

在操作系统的广阔领域中,进程调度是其中一个至关重要的环节。它如同操作系统的“交通警察”,负责在多个等待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.mfbz.cn/a/793559.html

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

相关文章

HTAP 数据库在国有大行反洗钱场景的应用

导读 在金融领域,随着数字化服务的深入和监管要求的提高,反洗钱工作变得尤为关键。洗钱活动不仅威胁金融安全,也对社会秩序构成挑战。本文深入探讨了国产 HTAP 分布式数据库 TiDB 在某国有大行反洗钱系统中的应用实践。 依托 TiDB 构建的新…

c++初阶知识——类和对象(1)

目录 1.类和对象 1.1 类的定义 1.2 访问限定符 1.3 类域 2.实例化 2.1 实例化概念 2.2 对象大小 内存对齐规则 3.this指针 1.类和对象 1.1 类的定义 (1)class为定义类的关键字,Stack为类的名字,{}中为类的主体&#xf…

python怎么调用cmd命令

关于python调用cmd命令: 1、python的OS模块 OS模块调用CMD命令有两种方式:os.popen()、os.system()都是用当前进程来调用。 OS.system是无法获取返回值的。当运行结束后接着往下面执行程序。用法如:OS.system("ipconfig"). OS.…

前台线程和后台线程(了解篇)

在多线程编程中,理解线程的不同类型对于编写高效、稳定的程序至关重要。特别地,前台线程(Foreground Threads)与后台线程(Background Threads)在行为上有着根本的区别,这些区别直接影响到程序的…

【Linux 线程】线程的基本概念、LWP的理解

文章目录 一、ps -L 指令🍎二、线程控制 一、ps -L 指令🍎 🐧 使用 ps -L 命令查看轻量级进程信息;🐧 pthread_self() 用于获取用户态线程的 tid,而并非轻量级进程ID;🐧 getpid() 用…

(CVPR-2024)SwiftBrush:具有变分分数蒸馏的单步文本到图像扩散模型

SwiftBrush:具有变分分数蒸馏的单步文本到图像扩散模型 Paper Title:SwiftBrush: One-Step Text-to-Image Diffusion Model with Variational Score Distillation Paper 是 VinAI Research 发表在 CVPR 24 的工作 Paper地址 Code:地址 Abstract 尽管文本…

前端工程化(01):10款自动化构建工具初识。

前端工程化自动化构建工具是用于简化前端开发流程、提高开发效率和优化项目质量的工具。市面上的工具多种多样,贝格前端工场先介绍一下什么是前端工程化,为什么要前端工程化,以及常用工具,后面会对各种工具逐一介绍。 一、什么是…

【数据结构】一文了解七大排序算法

文章目录 前言一.直接插入排序插入排序思想插入排序代码实现插入排序总结 二.希尔排序希尔排序思想希尔排序代码实现希尔排序总结 三.选择排序选择排序思想选择排序代码实现选择排序总结 四.堆排序堆排序思想堆排序代码实现堆排序总结 五、冒泡排序冒泡排序思想冒泡排序代码实现…

深化信创存储 ,XEDP 与 飞腾腾云 S5000C 完成兼容性认证

近日,XSKY星辰天合的统一数据平台 XEDP 与飞腾信息技术有限公司的高性能服务器 CPU 飞腾腾云 S5000C 完成兼容性互认证。 经过严格的测试与评估,双方产品在技术上兼容良好,运行稳定且性能优异,融合双方优势构筑的软件定义存储系统…

SpringBoot实战:轻松实现接口数据脱敏

一、接口数据脱敏概述 1.1 接口数据脱敏的定义 接口数据脱敏是Web应用程序中一种保护敏感信息不被泄露的关键措施。在API接口向客户端返回数据时,系统会对包含敏感信息(如个人身份信息、财务数据等)的字段进行特殊处理。这种处理通过应用特…

Go-知识测试-模糊测试

Go-知识测试-模糊测试 1. 定义2. 例子3. 数据结构4. tesing.F.Add5. 模糊测试的执行6. testing.InternalFuzzTarget7. testing.runFuzzing8. testing.fRunner9. FuzzXyz10. RunFuzzWorker11. CoordinateFuzzing12. 总结 建议先看:https://blog.csdn.net/a1879272183…

智能家居开发新进展:乐鑫 ESP-ZeroCode 与亚马逊 ACK for Matter 实现集成

日前,乐鑫 ESP-ZeroCode 与亚马逊 Alexa Connect Kit (ACK) for Matter 实现了集成。这对智能家居设备制造商来说是一项重大进展。开发人员无需编写固件或开发移动应用程序,即可轻松设计符合 Matter 标准的产品。不仅如此,开发者还可以在短短…

Python(四)---序列

文章目录 前言1.列表1.1.列表简介1.2.列表的创建1.2.1.基本方式[]1.2.2.list()方法1.2.3.range()创建整数列表1.2.4.推导式生成列表 1.3. 列表各种函数的使用1.3.1.增加元素1.3.2.删除元素1.3.3.元素的访问和计数1.3.4.切片1.3.5.列表的排序 1.4.二维列表 2.元组2.1.元组的简介…

内网安全:域内信息探测

1.域内基本信息收集 2.NET命令详解 3.内网主要使用的域收集方法 4.查找域控制器的方法 5.查询域内用户的基本信息 6.定位域管 7.powershell命令和定位敏感信息 1.域内基本信息收集: 四种情况: 1.本地用户:user 2.本地管理员用户&#x…

短链接day4

短链接管理 创建短链接数据库表 URI、URL和URN区别 : URI 指的是一个资源 ;URL 用地址定位一个资源; URN 用名称定位一个资源。 举个例子: 去寻找一个具体的人(URI);如果用地址:XX省XX市XX区…

使用 Google 的 Generative AI 服务时,请求没有包含足够的认证范围(scopes)

题意: Google generativeai 403 Request had insufficient authentication scopes. [reason: "ACCESS_TOKEN_SCOPE_INSUFFICIENT" 问题背景: I have tried the simple POC for generativeai on its own to do generate_content and it works…

【初阶数据结构】2.顺序表

文章目录 1.线性表2.顺序表2.1 概念与结构2.2 分类2.2.1 静态顺序表2.2.2 动态顺序表 2.3 动态顺序表的实现2.4 顺序表算法题2.4.1 移除元素2.4.2 删除有序数组中的重复项2.4.3 合并两个有序数组 2.5 顺序表问题与思考 1.线性表 线性表(linear list)是n…

JavaFx+MySql学生管理系统

前言: 上个月学习了javafx和mysql数据库,于是写了一个学生管理系统,因为上个月在复习并且有一些事情,比较忙,所以没有更新博客了,这个项目页面虽然看着有点简陋了,但是大致内容还是比较简单的,于是现在跟大家分享一下我的学生管理系统,希望对这方面有兴趣的同学提供一些帮助 &a…

19185 01背包问题

解决这个问题的关键是使用动态规划的方法。我们可以创建一个二维数组dp[i][j],其中i表示考虑前i件物品,j表示背包的容量。dp[i][j]的值表示在考虑前i件物品,且背包容量为j时能获得的最大价值。 ### 算法步骤 1. 初始化一个二维数组dp&#x…

Qt常用基础控件总结—容器部件(QGroupBox类)

五、容器部件 按钮框控件QDialogButtonBox 类(很少用) 按钮组控件QButtonGroup 类(很少用) 组框控件QGroupBox 类 QGroupBox 类介绍 QGroupBox(组框),直接继承自 QWidget 类,因此使用该类创建的对象,可作为窗口使用,组框在外观上是可见的。 QGroupBox 类(组框),…