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

进程优先级

基本概念 

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

优先级是先后问题,权限是是否能得到的问题。

进程的优先级是task_struct内的属性,是一个整型变量,值越低,表明优先级越高,反之则越低。

我们在这为下一篇进程的切换和调度铺垫一下,我们当代Linux或者大部分我们所用的操作系统,这些操作系统都叫做基于时间片的分时操作系统。我们先抛出来时间片的概念,在我们当代计算机里面,我们的每一个进程都分有时间片:

  • 定义:时间片是操作系统分配给每个进程的一段CPU使用时间。当一个进程的CPU时间用完时,它会被挂起,操作系统会将CPU分配给另一个进程。

  • 目的:确保所有进程都能公平地获得CPU时间,避免某个进程长时间占用CPU,导致其他进程无法执行。

考虑公平性,优先级未来可能变换,但是变化幅度太大。

在基于时间片的分时操作系统中,优先级的变化是动态的,但变化幅度需要谨慎控制以确保系统的稳定性和公平性。如果优先级变化过大,可能会导致优先级低的进程长时间得不到CPU资源的分配,进而导致进程饥饿。因此,系统设计时需要平衡优先级的变化幅度,以避免对系统性能产生负面影响。动态优先级调度算法通过动态调整进程的优先级,能够更灵活地满足不同进程的需求,提高系统整体性能和任务处理效率。同时,调度器的决策过程往往基于当前所有进程的优先级来进行,选择优先级最高的进程分配CPU时间。当多个进程优先级相同时,则可以采用其他调度策略,如时间片轮转或随机选择。动态优先权调度算法的效率在很大程度上取决于其数学模型,模型需要平衡系统资源的利用和进程的响应时间。 

查看系统进程

在linux或者unix系统中,⽤:

ps -al | head -1 && ps -al | grep mycmd | grep -v grep
//-a:显示全部
//-l:查看优先级

该命令则会类似输出以下⼏个内容:

我们很容易注意到其中的⼏个重要信息,有下:

UID(User ID)

  • 定义:代表执行进程的用户身份。

  • 作用:用于区分不同用户启动的进程,是进程安全和权限控制的基础。

  • 示例:在Linux里面,识别用户不是通过用户名,而是通过UID,如果UID为1000,通常表示该进程是由用户ID为1000的用户启动的。

可以使用:

ls -ln

显示用户ID:

 比如说我们的文件在创建的时候就写入了文件创建者的ID(UID),然后我们进程在进行启动的时候,进程自己也会将自己的UID保存起来,表明这个进程是谁启动的。

所以:系统怎么知道我访问文件的时候,是拥有者,所属组,还是other?

对于权限,在我们访问文件的时候,我们有时候是拥有者,有时候是所属组,有时候是other,我们是可以直接'' ll ''看见的,但是系统是只认数字的,而且当我们要touch,cat,vim等,访问某些文件的时候,本质就是进程在访问文件,我们说使用的指令访问就是进程在访问文件,那我们的文件又是怎么知道访问他的进程是拥有者/所属组/other呢?因为这个进程在启动时会把自己的UID(谁启动的他,假设是我),这个文件如果是之前我创建的,这个文件会记录下来是我创建的他,那么,我们一个进程,将来的时候拿着他的UID和文件所对应的UID作对比,相等的话是拥有者,不相等查下一个,相等的话就是所属组,再不行等的话就是other。

也就是说,Linux系统中,访问任何资源,都是进程访问,进程就代表用户

PRI(Priority)

  • 定义:代表进程可被执行的优先级。(默认是80)

  • 作用:决定进程被CPU调度执行的顺序,PRI值越小,优先级越高,越先被执行。

  • 示例:PRI为10的进程比PRI为20的进程有更高的优先级。

NI(Nice)

  • 定义:代表进程的nice值,是进程优先级的修正数值。

  • 作用:通过调整nice值,可以影响进程的PRI值,从而影响进程的执行优先级。nice值越低(越负),优先级越高。

  • 示例:如果一个进程的nice值为-5,那么它的PRI值会相应降低,从而提高其优先级。

我们为什么还要有一个NI来进行对优先级的间接调整,这是我们进程的调度算法才会说到,我们先直接输出结论: 

进程的真实优先级PRI=80(默认PRI)+NI;(一定要注意,第一次NI先改为10,PRI为90,我们第二次将NI改为-10,结果并不是80,是70)(以80为改变点)(这里是一个坑)

因为我们如果每一次都基于上次的优先级进行调整,那么我们就还需要改之前查一下当前的PRI是多少,是比较麻烦的。 

我们并不是很喜欢一直手动变化进程优先级,他是动态变化的,改得太多可能会影响进程间的调度平衡。

我们可以手动改变进程优先级:

⽤top命令更改已存在进程的nice:

  • top
  • 进⼊top后按“r”‒>输⼊进程PID‒>输⼊nice值

注意:

  • 其他调整优先级的命令:nice,renice
  • 系统函数:

优先级极值问题

在 Linux 系统中,进程的优先级(Priority)默认值为 80,而 nice 值的范围是 [-20, 19]。因此,通过调整 nice 值,进程的优先级范围可以计算如下:

  • 最小优先级:当 nice 值为 -20 时,优先级为 80 + (-20) = 60

  • 最大优先级:当 nice 值为 19 时,优先级为 80 + 19 = 99

因此,Linux 系统中进程优先级的极值范围是 [60, 99]

优先级极值的调度影响:

  • 优先级过低(接近99):优先级过低的进程可能会长时间得不到 CPU 资源的分配,导致进程饥饿。为了避免这种情况,操作系统通常会采用老化(Aging)机制,即随着时间的推移逐渐提高进程的优先级。

  • 优先级过高(接近60):优先级过高的进程可能会过度占用 CPU 资源,影响系统的公平性和其他进程的响应时间。

优先级调整的限制:

为了避免优先级变化过大导致系统调度的不公平性或饥饿问题,操作系统通常会限制优先级的调整幅度。例如:

  • nice 值的范围:nice 值的范围被严格限制在 [-20, 19],以确保优先级的变化不会过于剧烈。

  • 动态调整机制:操作系统会根据进程的行为(如 CPU 使用时间、等待时间等)动态调整优先级,但调整幅度会受到限制。

在基于时间片的分时操作系统中,优先级极值的合理设置和调整对于系统的公平性和性能至关重要。通过限制 nice 值的范围和引入动态调整机制,操作系统可以有效避免优先级过高或过低带来的问题,同时确保所有进程都能获得合理的 CPU 时间。

补充概念:竞争、独立、并行、并发

竞争性(Concurrency)
  • 定义:在多任务操作系统中,多个进程可能需要访问同一资源(如CPU、内存、文件等)。由于资源有限,进程之间会相互竞争这些资源。

  • 目的:通过优先级机制,可以更合理地分配资源,确保重要任务优先执行,从而提高系统的整体效率和响应速度。

  • 例子:在只有一个打印机的办公室中,多个用户需要打印文件,打印机资源就是竞争对象。

独立性(Independence)
  • 定义:每个进程都是一个独立的执行单元,它们在运行时互不干扰,每个进程有自己的地址空间和资源。

  • 目的:独立性确保了进程的安全性和稳定性,即使一个进程出现问题,也不会影响到其他进程的运行。

  • 例子:多个用户在电脑上运行不同的应用程序,每个应用程序都是一个独立的进程,它们之间互不干扰。

并行(Parallelism)
  • 定义:多个进程在同一时间内在不同的CPU上同时执行。

  • 目的:通过并行处理,可以显著提高计算效率和处理速度,特别是在多核CPU的系统中。

  • 例子:在多核处理器的电脑上,多个计算密集型任务(如视频编码、科学计算等)可以同时在不同的CPU核心上运行,从而加快处理速度。

并发(Concurrency)
  • 定义:多个进程在同一时间内在同一个CPU上通过时间片轮转的方式交替执行。

  • 目的:通过并发执行,可以在单个CPU上实现多个任务的推进,提高CPU的利用率和系统的响应速度。

  • 例子:在单核处理器的电脑上,操作系统通过时间片轮转的方式,让多个应用程序交替执行,从而给用户一种多任务同时运行的感觉。

并行(Parallel)与并发(Concurrency)的区别

并行(Parallel)

  • 定义:并行是指多个进程在多个处理器(或核心)上同时执行。每个进程都有自己独立的执行路径,它们之间没有直接的交互,但可以同时进行。

  • 特点

    • 需要多个处理器或核心。

    • 进程之间没有直接的交互。

    • 可以显著提高处理速度和效率。

  • 例子:假设有两个厨师(进程)和两个烤箱(CPU核心)。两个厨师可以同时在两个烤箱中烤面包,这就是并行处理。

并发(Concurrency)

  • 定义:并发是指多个进程在单个处理器上通过时间片轮转的方式交替执行,使得多个进程看起来像是同时进行的。

  • 特点

    • 只需要一个处理器或核心。

    • 进程之间可能需要共享资源,因此需要同步机制。

    • 可以提高单个处理器的利用率,但处理速度受限于单个处理器的能力。

  • 例子:假设只有一个厨师(进程)和一个烤箱(CPU核心)。厨师需要烤两种面包,他可以先烤第一种面包5分钟,然后取出,再烤第二种面包5分钟,如此交替进行。虽然每次只有一个面包在烤,但通过交替执行,两种面包都可以烤好,这就是并发执行。

图示说明

为了更直观地理解并行和并发的区别,可以参考以下图示:

并行(Parallel)
进程1  进程2
  |       |
  |       |
  |       |
  |       |
  |       |
  |       |
  +-------+-------+
        时间

在并行处理中,进程1和进程2同时在不同的CPU上运行,它们在同一时间间隔内并行执行。

并发(Concurrency)
进程1  进程2
  |       |
  |   |   |
  |   |   |
  +---+---+
        时间

在并发执行中,进程1和进程2在同一个CPU上通过时间片轮转的方式交替执行,虽然它们看起来像是同时运行,但实际上是在不同时间片上交替执行的。

咖啡店比喻

为了更形象地解释并行和并发,我们可以用咖啡店的比喻:

  • 并行(Parallel):想象有两个咖啡师和两台咖啡机。两个顾客(进程)可以同时点咖啡,两个咖啡师分别在两台咖啡机上同时制作咖啡。这就是并行,每个顾客的咖啡可以同时开始制作。

  • 并发(Concurrency):现在只有一个咖啡师和一台咖啡机。两个顾客(进程)点咖啡,咖啡师需要先为一个顾客制作咖啡,完成后再为另一个顾客制作。虽然每次只有一个顾客的咖啡在制作,但通过交替为两个顾客服务,两个顾客的咖啡都可以完成。这就是并发。


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

相关文章:

  • 差分进化算法 (Differential Evolution) 算法详解及案例分析
  • linux+docker+nacos+mysql部署
  • 【橘子ES】Kibana的分析能力Analytics简易分析
  • 【面试总结】FFN(前馈神经网络)在Transformer模型中先升维再降维的原因
  • 【Unity】ScrollViewContent适配问题(Contentsizefilter不刷新、ContentSizeFilter失效问题)
  • 【算法】字符串之227.基本计算器 -- 双栈的变形
  • C语言-内存管理
  • 一个面向领域的直播平台开源!
  • Codeforces Round 1000 (Div. 2)(A-D)
  • 安宝特方案 | 智能培训:安宝特AR如何提升企业技能培训的效率与互动性
  • Zookeeper启动指定JDK版本
  • 【深度学习】神经网络实战分类与回归任务
  • WIN11 UEFI漏洞被发现, 可以绕过安全启动机制
  • 汇编实验·循环程序设计
  • 论文阅读 Multi-view Classification Using Hybrid Fusion and Mutual Distillation
  • Linux系统下速通stm32的clion开发环境配置
  • 数量4-经济、最值、周期
  • 安卓14自由窗口圆角处理之绘制圆角轮廓线
  • 天天AI-20250121:全面解读 AI 实践课程:动手学大模型(含PDF课件)
  • 【数据结构】顺序队列与链式队列
  • MySQL 主从复制(单组传统复制,GTID复制。双主复制)
  • qml ColorDialog详解
  • 【Unity】 HTFramework框架(五十九)快速开发编辑器工具(Assembly Viewer + ILSpy)
  • 没有屋檐的房子-023粪堆旁边的舞蹈
  • 国内股票年化收益回归分析(上)
  • 深度学习|表示学习|卷积神经网络|参数共享是什么?|07