Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Linux】探索进程优先级的奥秘,解锁进程的调度与切换

【Linux】探索进程优先级的奥秘,解锁进程的调度与切换

作者头像
用户11316056
发布于 2024-10-16 01:32:17
发布于 2024-10-16 01:32:17
1340
举报

1.进程优先级:

1.2.是什么?

cpu资源分配的先后顺序,就是指进程的优先权(priority)。

1.3.为什么存在进程优先级的概念呢?

根本原因就是资源过少。

Linux环境下,默认优先级是80,并且Linux的优先级是可以被修改的,Linux优先级的范围:【60,99】,长度为40.

Linux优先级的本质就是数字,数字越小,优先级越高!

Linux系统允许用户调整优先级,但是不能直接让你修改pri,而是修改nice值(不是优先级,而是进程优先级的修正数据)

pri = pri(old) + nice

1.4.Linux为什么调整优先级是要受限制的?

如果不加限制,将自己进程的优先级调整的非常高,别人的优先级调整的非常低,优先级较高的进程,优先得到资源,后续还有源源不断的进程产生,常规进程很难享受到CPU资源!进程饥饿的问题

1.5.PRI vs NICE

需要强调一点的是,进程的nice值不是进程的优先级,他们不是一个概念,但是进程nice值会影响到进程的优先级变化。可以理解nice值是进程优先级的修正数据

调整进程优先级,在Linux下,就是调整进程nice值 nice其取值范围是-20至19,一共40个级别。

用top命令更改已存在进程的nice: top 进入top后按“r”–>输入进程PID–>输入nice值

2.Linux的调度与切换

2.1.概念准备:

1、进程在运行的时候,放在CPU上,必须要把这个进程代码跑完,才行吗?不对!现代操作系统,都是基于时间片进行轮转执行的(时间片:给每一个进程规定的运行的最大时间)

2、

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

2.2.那我们到底怎样完成进程的调度和切换呢?

当一个进程的时间片到期后,如何将这个进程保存方便下次再调用这个进程呢?

CPU内部里面会有很多寄存器

进程在运行的过程中,要产生大量的临时数据,放在CPU的寄存器中!CPU内部的所有的临时数据,我们叫做进程的硬件上下文。硬件上下文,得以让我们的进程进行保存。

所以当进程在二次被调度的时候,进程被放在CPU上运行,将曾经保存的硬件上下文进行恢复。

上下文并不是寄存器,而是寄存器的内容是上下文,寄存器只有一套!

2.3.区分:寄存器VS寄存器的内容

CPU的寄存器只有一套。寄存器内部保存的数据,可以有多套

所以寄存器 != 寄存器的内容

虽然寄存器数据放在了一个共享的CPU设备里面,但是所有的数据,其实都是被进程私有的!

小总结:所有的保存都是为了最终的恢复,所有的恢复,都是为了继续上次的运行位置继续进行


2.4Linux实现进程调度的算法,需要考虑优先级,考虑进程饥饿问题,考虑效率问题。

  • 解决优先级问题:

普通优先级:100~139(我们都是普通的优先级,想想nice值的取值范围,可与之对应!) 实时优先级:0~99(不关心)

时间片还没有结束的所有进程都按照优先级放在该队列 nr_active: 总共有多少个运行状态的进程 queue[140]: 一个元素就是一个进程队列,相同优先级的进程按照FIFO规则进行排队调度,所以,数组下标就是优先级。

从0下表开始遍历queue[140] 找到第一个非空队列,该队列必定为优先级最高的队列 拿到选中队列的第一个进程,开始运行,调度完成!优先级问题解决!

  • 解决进程饥饿问题:

我们采用引入活动队列和过期队列来解决。

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

我们先将活动队列中的进程都运行完毕,注意活动队列上的进程都是运行完毕就会少一个,不会增加,而过期队列里面的进程只会越来越多。这个时候我们需要将活动队列的内容与过期队列的内容进行交换即可。那如何交换呢?

我们注意到有两个指针分别指向了活动队列和过期队列

active指针永远指向活动队列 expired指针永远指向过期队列 可是活动队列上的进程会越来越少,过期队列上的进程会越来越多,因为进程时间片到期时一直都存在的。 没关系,在合适的时候,只要能够交换active指针和expired指针的内容,就相当于有具有了一批新的活动进程!注意交换的时候只是交换指针的内容。

  • 解决效率的问题:

遍历queue[140]时间复杂度是常数!但还是太低效了!

于是乎我们采用位图的方法解决:

bitmap[5]:一共140个优先级,一共140个进程队列,为了提高查找非空队列的效率,就可以用5*32个比特位表示队列是否为空,我们每次可以先遍历一个整形,如果这个整数是0,那么就直接可以跳过,到下一个整形,知道发现不等于0,再遍历内部。

bitmap让对数组的遍历转化为对比特位的遍历,效率就会高很多。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Linux】详谈进程优先级&&进程调度与切换
进程要访问某种资源,进程通过一定的方式排队,确认享受资源的优先顺序。计算机中资源过少,所以进程访问某种资源时需要排队。
用户10923276
2024/03/28
7050
【Linux】详谈进程优先级&&进程调度与切换
【Linux】进程优先级与进程切换理解
本篇文章我们在了解了进程概念和状态等基础知识之上,继续学习进程的优先级,以及进程切换相关知识。
ephemerals__
2025/05/04
1270
【Linux】进程优先级与进程切换理解
【Linux系统编程】—— 深入理解Linux进程优先级与调度机制
在Linux系统中,进程优先级(Priority)决定了进程被执行的顺序。优先级高的进程会优先获取CPU资源,执行的优先权也较高。优先级值越低,进程的优先级越高,这意味着该进程更有可能被CPU优先执行。合理配置进程的优先级,对于提升系统的整体性能尤其重要。
用户11286421
2025/01/20
5800
【Linux系统编程】—— 深入理解Linux进程优先级与调度机制
【Linux篇】你敢信?你的代码运行速度竟由这个‘隐形裁判’决定——进程优先级全解码
进程优先级是操作系统调度算法中的一个重要概念,它决定了系统中多个进程执行的顺序。每个进程在操作系统中都有一个优先级,优先级越高的进程越容易获得 CPU 时间片,从而先于优先级较低的进程执行。通常,进程优先级的设定和调度策略是动态的,会根据系统负载、进程的紧急程度、等待时间等因素进行调整。
熬夜学编程的小王
2025/03/31
1100
【Linux篇】你敢信?你的代码运行速度竟由这个‘隐形裁判’决定——进程优先级全解码
Linux下进程的调度与切换
  在Linux操作系统中,进程的调度与切换是操作系统核心功能之一,它直接影响着系统的性能和响应速度。那么话不多说,开启我们今天的话题!
用户11029129
2024/06/04
2530
Linux下进程的调度与切换
【Linux】关于进程的理解、状态、优先级和进程切换
进程如何在CPU上运行的:CPU在内核上维护了一个运行队列,进行进程的管理。让进程入队列,本质就是将该进程的task_struct 结构体对象放入运行队列之中。
平凡的人1
2022/11/18
2.8K0
【Linux】关于进程的理解、状态、优先级和进程切换
【Linux操作系统】进程优先级和进程切换
由于大部分电脑都是单核CPU,所以属于并发机制,并发采用的是进程切换/时间片轮转的方式.
MicroFrank
2023/01/16
1.7K0
【Linux】进程优先级
  进程优先级是操作系统中的一个重要概念,它直接影响着进程的调度顺序和执行权。了解进程优先级对于理解和优化系统的性能至关重要。那么话不多说,开启我们今天的话题!
用户11029129
2024/06/04
3520
【Linux】进程优先级
【Linux】进程优先级&&进程切换
进程优先级是操作系统中用于决定进程调度顺序的重要属性。它表示一个进程在系统资源分配和 CPU 调度中的相对重要性。优先级越高的进程通常会获得更多的 CPU 时间和资源,从而更快地完成其任务。
用户11305458
2024/10/24
3310
【Linux】进程优先级&&进程切换
深度理解linux系统—— 进程切换和调度
所以,对于一个死循环的进程执行的时候,我们是可以进行其他操作的,它并没有一直占有CPU。
星辰与你
2025/05/03
1950
深度理解linux系统—— 进程切换和调度
Linux系统 —— 进程系列 - 进程优先级与进程切换
接前文: Linux系统 —— 进程系列 - 进程状态 :僵尸与孤儿-CSDN博客
迷迭所归处
2024/12/24
2250
Linux系统 —— 进程系列 - 进程优先级与进程切换
Linux-进程优先级
大多数人的电脑都是一个CPU,一次只能处理一个进程任务,但是进程又有很多个。这也就导致的CPU的资源不足,为了更合理的利用CPU资源,就存在进程优先级来确定进程获取CPU资源的顺序。 就要生活中的排队,进程在CPU中也是需要排队的,除了遵循先来后到的排队原理,还存在优先级更高的进程是可以进行插队的,这也可以理解,在医院排队时,如果碰到急诊病人是可以优先挂号的。 提问:有没有可能因为大量的优先级更高的进程插队导致低优先级的进程迟迟得不到执行。 回答:这就涉及到了进程饥饿的问题了,在Linux下是有相关解决方法的,Linux会维护两个队列,一个为活跃队列,另一个为过期队列,这里就不细讲了。
Yui_
2024/10/16
2650
Linux-进程优先级
【Linux】进程概念
我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系
用户11290673
2025/05/11
1060
【Linux】进程概念
【Linux】进程状态和优先级
操作系统的进程属性状态一共有三种模型,分别是三态、五态、七态模型,我们下图给出的是五态模型,七态模型多出的两态就是两种类型的挂起态,所以我们可以说操作系统进程一共有六种状态
s-little-monster
2025/02/04
2720
【Linux】进程状态和优先级
优先级与环境变量的艺术:驾驭 Linux 系统的核心
在 Linux 系统中,进程和环境变量是操作系统的核心组成部分。进程优先级决定了资源分配的先后顺序,直接影响系统性能;而环境变量则提供了一种灵活的方式,用于传递系统配置信息以及控制程序的运行环境。本篇文章将深入探讨进程优先级的概念、调节方法及其原理,以及环境变量的定义、特性和实际应用,帮助读者更好地理解 Linux 系统的核心机制,从而在实际工作中更高效地调试和优化系统。
suye
2025/03/23
1890
优先级与环境变量的艺术:驾驭 Linux 系统的核心
[操作系统] 进程的调度
在分时操作系统中有时间片的概念,每一个进程会占据CPU资源固定时间,如果在固定时间结束后进程尚未完成,则重新进入队列等待被调度。
DevKevin
2025/01/21
2090
[操作系统] 进程的调度
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
https://blog.csdn.net/2301_80220607/category_12805278.html?spm=1001.2014.3001.5482
GG Bond1
2024/11/21
2880
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
【在Linux世界中追寻伟大的One Piece】Linux进程概念
我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。
枫叶丹
2024/08/06
1440
【在Linux世界中追寻伟大的One Piece】Linux进程概念
Linux进程——Linux进程与进程优先级
前言:在上一篇了解完一部分常见的进程状态后,我们先来把剩下的进程状态了解一下,再来进入进程优先级的学习!
Eternity._
2024/06/14
1.6K0
Linux进程——Linux进程与进程优先级
进程的调度和切换
绝活蛋炒饭
2024/12/16
2050
进程的调度和切换
推荐阅读
相关推荐
【Linux】详谈进程优先级&&进程调度与切换
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档