【Linux】进程优先级与进程切换

🔥个人主页🔥:孤寂大仙V
🌈收录专栏🌈:Linux
🌹往期回顾🌹:【Linux】进程状态
🔖流水不争,争的是滔滔不


  • 一、进程优先级是什么
  • 二、查看系统进程
  • 三、竞争、独立、并行、并发
  • 四、进程切换
    • Linux真实调度算法
      • queue
      • bitmap
      • 过期队列
      • active指针和expired指针

一、进程优先级是什么

进程优先级是操作系统用来确定进程获取 CPU 资源顺序的属性。它体现进程在资源分配中的重要性,优先级高的进程更易先获得 CPU 处理时间。
优先级分为静态和动态两种。静态优先级在进程创建时确定,基本不变,如系统进程的优先级通常较高。动态优先级在进程运行中可根据进程行为和系统状态改变,像长时间占用 CPU 的进程优先级可能会被降低,等待后重新就绪的进程优先级可能会提高。它有助于合理分配资源、优化系统性能。

简而言之是进程得到CPU资源的先后顺序。
进程优先级的值越低优先级越高,反之优先级优先级越低。

二、查看系统进程

ps-l //输入此指令查看进程 

在这里插入图片描述
对图中的值进程解释:

UID:代表执行者的身份。系统想知道访问文件的是拥有者或所属组或者other就需要通过UID来获取,在Linux系统中,访问任何资源,都是进程访问,进程就代表了用户。
PID和PPID:是进程代号和父进程代号,前面文章聊过。
PRI:是进程的优先级,默认值是80。
NI:是进程优先级的修正数据,Nice值

PRI and NI
PRI也还是比较好理解的,即进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,此
值越小进程的优先级别越高。
nice值表示进程可被执行的优先级的修正数值。
进程的真实优先级 =PRI+NI。


调整进程的优先级,在Linux下就是调整进程的nice值。
nice其取值范围是-20至19,⼀共40个级别。所以Linux进程的优先级范围是60到99。

renice -n nice值 -p pid //通过这一指令修改nice值

当我们nice值是-100,按照进程的真实优先级 =PRI+NI应该是-20啊,但是如图优先级为60。所以Linux的优先级是有范围的,最低的60。
在这里插入图片描述
当我们的nice值为100,优先级为99。Linux的优先级最高是99。
在这里插入图片描述
优先级设立不合理,会导致优先级最低的进程,长时间得不到CPU资源进而导致,进程饥饿。

三、竞争、独立、并行、并发

  1. 竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级。
  2. 独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰。
  3. 并行: 多个进程在多个CPU下分别,同时进行运行,这称之为并行。
  4. 并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发。

四、进程切换

死循环进程,不会一直占有CPU。
寄存器是CPU内部的临时空间。寄存器!=寄存器里面的数据。寄存器就是一块空间,和往寄存器里面写的数据不要混淆。

在这里插入图片描述

PU 上下文切换,其实际含义为任务切换,或者说是 CPU 寄存器切换。当多任务内核决定运行另外的任务时,它会保存正在运行任务的当前状态,即 CPU 寄存器中的全部内容。这些内容被保存在任务自身的堆栈中,入栈工作完成后,便将下一个将要运行的任务的当前状况从该任务的栈中重新装入 CPU 寄存器,然后开始下一个任务的运行 ,这一过程即为 context switch。

进程切换最核心的,就是保存和恢复当前进程的硬件上下文的数据,即CPU寄存器里面的内容


Linux真实调度算法

一个CPU一个运行队列
下图为进程队列的数据结构
在这里插入图片描述

queue

时间片还没有结束的所有进程都按照优先级放在该队列

queue中存放task_struct*,优先级分为实时优先级和分时优先级。queue[140]: ⼀个元素就是⼀个进程队列,相同优先级的进程按照FIFO规则进行排队调度,所以,数组下标就是优先级!

普通优先级:100〜139 所以这里就和我们上面讲的PRI和nice值就对上了
实时优先级:0〜99 我们这里不关心

实时优先级:通常采用抢占式调度策略,高优先级的实时任务可以抢占低优先级任务的 CPU 资源,确保关键的实时任务能够及时获得执行机会。如在实时操作系统中,对于硬实时任务,必须在规定的时间内完成操作,一旦高优先级的实时任务就绪,就会立即抢占正在运行的低优先级任务的 CPU。
分时优先级:一般采用时间片轮转调度算法,系统将时间划分为固定大小的时间片,每个任务轮流在各自的时间片内执行,任务不会被其他任务抢占,直到其时间片用完。如在常见的分时操作系统中,多个用户进程或任务按照时间片轮流使用CPU 资源,每个任务都能在一定时间内得到执行机会。

bitmap

bitmap[5]:⼀共140个优先级,⼀共140个进程队列,为了提高查找非空队列的效率,就可以用5*32个比特位表示队列是否为空,这样,便可以大大提高查找效率!
在这里插入图片描述

过期队列

过期队列和活动队列结构⼀模⼀样
过期队列上放置的进程,都是时间片耗尽的进程
当活动队列上的进程都被处理完毕之后,对过期队列的进程进行时间片重新计算

active指针和expired指针

在进程调度管理机制中,存在两个关键指针:active指针与expired指针。active指针始终指向活动队列,而expired指针则一直指向过期队列。
随着进程的运行,会出现这样一种情况:活动队列上的进程数量逐渐减少,而过期队列上的进程数量却不断增多。这是因为进程的时间片到期后,这些进程会持续被转移到过期队列中。不过,这种情况并不会影响系统的正常调度。在恰当的时机,通过交换active指针和expired指针所指向的内容,就如同产生了一批新的活动进程。如此一来,系统便能够继续高效地进行进程调度,确保各个进程都能得到合理的执行机会。

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

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

相关文章

windows 极速安装 Linux (Ubuntu)-- 无需虚拟机

1. 安装 WSL 和 Ubuntu 打开命令行,执行 WSL --install -d ubuntu若报错,则先执行 WSL --update2. 重启电脑 因安装了子系统,需重启电脑才生效 3. 配置 Ubuntu 的账号密码 打开 Ubuntu 的命令行 按提示,输入账号,密…

二层交换机之作用、故障(Function and Malfunction of Layer 2 Switch)

二层交换机之作用、区别 1️⃣二层交换机 又叫数据链路层交换机 还被称为接入层交换机 又或者以太网二层交换机 用一句话描述其核心功能 就是基于MAC地址进行帧的转发和过滤 与传统的集线器不同 二层交换机能智能学习每个端口连接设备的MAC地址 并更新MAC地址表&#…

cursor重构谷粒商城02——30分钟构建图书管理系统【cursor使用教程番外篇】

前言:这个系列将使用最前沿的cursor作为辅助编程工具,来快速开发一些基础的编程项目。目的是为了在真实项目中,帮助初级程序员快速进阶,以最快的速度,效率,快速进阶到中高阶程序员。 本项目将基于谷粒商城…

Python自动化:基于faker批量生成模拟数据(以电商行业销售数据为例)

引言:个人认为,“造数据”是一个数据分析师的一项基本技能,当然啦,“造数据”不是说胡编乱造,而是根据自己的需求去构造一些模拟数据集,用于测试等用途,而且使用虚拟数据不用担心数据隐私和安全…

【全栈开发】----Mysql基本配置与使用

本篇是在已下载Mysql的情况下进行的,若还未下载或未创建Mysql服务,请转到这篇: 2024 年 MySQL 8.0.40 安装配置、Workbench汉化教程最简易(保姆级)_mysql8.0.40下载安装教程-CSDN博客 本文对于mysql的操作均使用控制台sql原生代码…

微软宣布Win11 24H2进入新阶段!设备将自动下载更新

快科技1月19日消息,微软于1月16日更新了支持文档,宣布Windows 11 24H2进入新阶段。 24H2更新于2024年10月1日发布,此前为可选升级,如今微软开始在兼容的Windows 11设备上自动下载并安装24H2版本。 微软表示:“运行Wi…

15. helm包管理器

helm包管理器 一、helm包管理器介绍、安装1、helm包管理器2、核心概念2.1 chart2.2 repository2.3 release 3、helm安装3.1 安装helm3.2 添加helm国内仓库 二、使用helm安装MySQL 8.01、搜索mysql8.0 chart包2、下载mysql8.0 chart包3、按需定制values.yaml3.1 values.yaml文件…

庄小焱——2024年博文总结与展望

摘要 大家好,我是庄小焱。岁末回首,2024 年是我在个人成长、博客创作以及生活平衡方面收获颇丰的一年。这一年的经历如同璀璨星辰,照亮了我前行的道路,也为未来的发展奠定了坚实基础。 1. 个人成长与突破 在 2024 年&#xff0c…

OSCP - Proving Grounds - BullyBox

主要知识点 如果发现有域名,则可以加入/etc/hosts后重新执行nmap,nikto等扫描dirsearch的时候可以使用完整一些的字典文件,避免漏掉信息.git dump 具体步骤 执行nmap 扫描,发现 80和22端口开放,访问后发现被重定向到 bullybox.local Star…

Linux中的基本指令(一)

一、Linux中指令的存在意义 Linux中,通过输入指令来让操作系统执行,以此达到控制操作系统的目的,类似于Windows中的双击,右键新建文件,新建文件夹等 1.补:关于屏幕的几个操作指令 ①清屏指令 clear 回…

C/C++内存管理(超详解)

目录 1.C/C内存分布 2.C语言动态内存管理 2.1 malloc 2.2 free 2.3 calloc 2.4 realloc 3.C动态内存管理 3.1new/delete操作内置类型 3.2new/delete操作自定义类型 3.3operator new与operator delete函数 3.4定位new表达式(placement-new) 1.C/C内存分布 内存中是如…

【React】静态组件动态组件

目录 静态组件动态组件创建一个构造函数(类)使用 class 实现组件**使用 function 实现类组件** 静态组件 函数组件是静态组件: 组件第一次渲染完毕后,无法基于内部的某些操作让组件更新「无法实现自更新」;但是,如果调用它的父组…

前端【3】--CSS布局,CSS实现横向布局,盒子模型

盒子分类 1、块级盒子 2、内联级盒子 3、内联块级盒子 4、弹性盒子 5、盒子内部分区 方法一:使用 float 普通盒子实现横向布局 方法二:使用 display: inline-block 内联块级元素实现横向布局 方法三:使用弹性盒子 flexbox&#xff0…

Python实现过年烟花效果及打包成可执行文件

博客:Python实现过年烟花效果及打包成可执行文件 在这篇博客中,我们将详细讲解如何使用Python和Pygame库实现一个过年烟花效果的程序,并介绍如何将Python脚本打包成Windows上可以直接执行的exe文件。我们将从代码的各个模块入手,…

新星杯-ESP32智能硬件开发--ESP32的I/O组成-系统中断矩阵

本博文内容导读📕🎉🔥 ESP32开发板的中断矩阵、功能描述与实现、相关API和示例程序进行介绍 ESP32中断矩阵将任一外部中断源单独分配到每个CPU的任一外部中断上,提供了强大的灵活性,能适应不同的应用需求。 ESP32中断主…

SpringBoot2 + Flowable(UI)

文章目录 引言I 技术栈软件架构基于 Vue.js 和 Element UI 的后台管理系统工程结构II 依赖rest,logic,conf 的依赖工作流flowable jar包flowable-ui所需jar包III 配置jdbc 配置 nullCatalogMeansCurrent = true引言 I 技术栈 软件架构 前端基于vue 、element-ui框架分模块设…

.Net 6.0 .Net7.0 .Net8.0 .Net9.0 使用 Serilog 按日志等级写入日志及 appsetting.json 配置方式实现

前言 最近使用最新版的Serilog记录日志时,发现以前有些关于Serilog的Nuget弃用了,最关键的是有些配置写法也改变,于是就整理了一下最新版的Serilog配置方式(appsetting.json)的使用 说明:我是用的.Net6,最新长期支持…

sprnigboot集成Memcached

安装Memcached 下载地址 32位系统 1.2.5版本:http://static.jyshare.com/download/memcached-1.2.5-win32-bin.zip 32位系统 1.2.6版本:http://static.jyshare.com/download/memcached-1.2.6-win32-bin.zip 32位系统 1.4.4版本:http://stati…

【数据分析】02- A/B 测试:玩转假设检验、t 检验与卡方检验

一、背景:当“审判”成为科学 1.1 虚拟场景——法庭审判 想象这样一个场景:有一天,你在王国里担任“首席审判官”。你面前站着一位嫌疑人,有人指控他说“偷了国王珍贵的金冠”。但究竟是他干的,还是他是被冤枉的&…

3dmax LOGO的符号、意义和历史,渲染100邀请码1a12

Autodesk 3ds Max 是一款 3D 建模、动画和渲染软件,由 Autodesk, Inc. 于 1996 年开发,其功能是能够创建复杂的数字场景和视觉效果,被专业建筑师、设计师和视频游戏创作者广泛使用,提供了七种语言的 Windows 版本,没有…