当前位置: 首页 > article >正文

【Linux】进程周边之优先级、调度与切换

目录

一、优先级

1.为什么要有进程优先级?

2.什么是进程优先级?

3.优先级的初始设定

3.1 PRI 和 NI

3.2如何修改优先级?(sudo/root)

3.2.1 概念:

3.2.2 如何查看进程的优先级?

3.3.3 或者查看某个特定进程的优先级?

3.3.4使用top指令修改NI

3.3.5 使用renice指令修改NI

3.3为什么优先级不能随意修改?

3.4进程相关的一些概念


 

一、优先级

1.为什么要有进程优先级?

资源过少!

当计算机中的某种资源数量,与即将使用该资源的进程数量相比,比较少。

不能立刻满足进程的需求。

因此,进程需要进行排队,等待这种资源。

使用优先级,确定进程被执行的先后顺序。

2.什么是进程优先级?

  • cpu资源分配的先后顺序,就是指进程的优先权(priority)。
  • 优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用,可以改善系统性能。
  • 还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能。

3.优先级的初始设定

3.1 PRI 和 NI

在Linux中,优先级就是一个int类型的变量。

  • PRI : 代表这个进程可被执行的优先级, 其值越小越早被执行
  • NI :代表这个进程的nice值, 我们通常通过修改nice值来修改PR

在进程控制块PCB中,对于进程优先级、以及相关变量NI 是这样定义的。


在Linux中,默认的优先级是80。

Linux优先级是可以被修改的,Linux的优先级的范围[60,99],总共40个优先级。

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


3.2如何修改优先级?(sudo/root)

3.2.1 概念:

 PRI(新) = PRI(old)+ NI
 

对以上公式做出解释:

🔥PRI(old) = 80

🔥Linux系统允许用户调整优先级,但是不能直接让你修改pri,而是修改 NI 值 

        NI 不是优先级,而是进程优先级的修正数据!

  • PRI取值范围[60,99]
  • nice值取值范围[-20,19]


3.2.2 如何查看进程的优先级?
ps -al

3.3.3 或者查看某个特定进程的优先级?
ps -al | head -1 && ps -al | grep 特定进程的pid/进程名


3.3.4使用top指令修改NI

  1. 输入top启动任务管理器
  2. 输入r(renice)来修改NI的值
  3. 再输入目标进程的pid来定位
  4. 输入想要修改的NI值(注意不是输入PRI值)

top修改进程优先级

3.3.5 使用renice指令修改NI
renice NI的值 对应进程的pid


 辨析:权限vs优先级

权限:能不能

优先级:可以执行,但是被执行的时间早晚。


3.3为什么优先级不能随意修改?

 为什么修改优先级,只能在规定的【60,99】这个区间,反而不能无下限无上限的修改?

这是因为,操作系统在调度进程时,需要较均衡的让每一个进程都要得到调度。
如果用户无下限的修改优先级,始终会有优先级高的进程不断产生,
而那些,优先级较低的进程,长时间得不到CPU的资源。

这就是是进程饥饿问题的产生。

3.4进程相关的一些概念

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

并行与并发在之后的文章中还会提到!大家要对这两个概念有了解。


💗感谢阅读!💗


http://www.kler.cn/a/325917.html

相关文章:

  • 【分割评价指标-nnUNet V2训练】- AutoDL
  • 基于多模板配准的心腔分割算法
  • 深度解读混合专家模型(MoE):算法、演变与原理
  • Uni-APP+Vue3+鸿蒙 开发菜鸟流程
  • 【Git】Git Clone 指定自定义文件夹名称:详尽指南
  • 帧中继原理与配置
  • 9.29总结
  • linux 命令行删除 整个单词
  • 【QT Quick】基础语法:导入外部QML文件
  • Linux之Docker虚拟化部署
  • STM32移植RT-Thread实现DAC功能
  • Go版数据结构 -【4.1 二叉树】
  • 1688商品API接口:电商数据自动化的新引擎
  • JVM 几种经典的垃圾收集器
  • 解决跨域问题的方法
  • Linux 网络配置 (深入理解)
  • 初识C语言(四)
  • Llama 3.2——同时具备文本和图像处理功能的开源模型
  • 助力降本增效,ByteHouse打造新一代云原生数据仓库
  • 物联网(一)——CMC特刊推荐
  • 使用电子模拟器 Wokwi 运行 ESP32 示例(Arduino IDE、VSCode、ESP32C3)
  • 微信小程序如何使用自定义的字体
  • 产品管理- 互联网产品(5):运营知识与技能
  • OceanBase技术解析: 执行器中的自适应技术
  • 地图资源下载工具(geodatatool)下载 亚洲 8 米 DEM数据
  • IM开发首选:WebSocket实现分频道广播的设计思路和实现难点分析