进程优先级

进程优先级

获取某种资源的先后顺序,排队的本质就是确认优先级。

一、基本概念

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

二、为什么要有优先级?

1. 保障系统核心功能的稳定性

操作系统的核心进程(如内核进程、内存管理、硬件驱动) 是整个系统运行的基础,一旦它们被抢占资源或延迟执行,可能导致系统卡顿、崩溃甚至死机。

  • 例 1:Windows 的 “System” 进程(管理硬件交互)、Linux 的 “systemd” 进程(初始化系统),优先级远高于普通应用 —— 即使你同时开着游戏、视频,这些核心进程也能优先获得 CPU 时间,确保硬件正常响应。
  • 例 2:杀毒软件的 “实时防护进程”,需要优先监控文件操作(如防止病毒写入),若优先级过低,可能出现 “病毒已感染文件,防护进程才开始扫描” 的滞后问题,威胁系统安全。

简言之:优先级是 “保护系统底线” 的机制,确保关键进程不被 “非关键进程” 挤占资源。

2. 满足实时任务的响应需求

很多场景下,部分进程需要毫秒级甚至微秒级的响应(即 “实时性需求”),延迟会直接导致功能失效或损失。

  • 工业场景:工厂的 “设备控制进程”(如控制机械臂精准定位),若优先级低,机械臂可能延迟动作,导致产品报废或设备碰撞。
  • 消费场景:视频会议的 “音频编码进程”,需要优先处理麦克风输入 —— 若被后台下载进程抢占 CPU,会出现 “你说话 1 秒后,对方才听到” 的卡顿,影响沟通体验。

这类 “实时进程” 必须通过高优先级,确保调度器 “优先调用”,避免因资源等待产生延迟。

3. 优化用户交互体验

用户使用电脑时,当前正在操作的 “前台进程”(如正在编辑的 Word、正在玩的游戏) 是用户感知最直接的,若它们优先级低,会出现 “点击按钮没反应”“游戏掉帧” 等问题,严重影响体验。

  • 反例:若后台 “文件备份进程” 与前台 “游戏进程” 优先级相同,备份会占用大量 CPU 和磁盘 IO,导致游戏帧率从 60 帧骤降到 20 帧,用户无法正常游玩。
  • 正例:主流操作系统(Windows/macOS/Linux)都默认 “前台窗口进程优先级 + 1”—— 当你从浏览器切换到 Excel 时,Excel 的优先级会临时提升,确保你输入文字、点击按钮时 “即时响应”,而浏览器则降为后台优先级,仅维持基础刷新(如网页视频播放)。

优先级通过 “向用户当前关注的进程倾斜资源”,让系统行为更符合 “用户预期”,提升交互流畅度。

4. 提升资源分配效率

系统中存在大量 “低价值进程”(如后台下载、日志记录、自动同步),它们对 “实时性” 和 “交互性” 需求极低,即使延迟几分钟执行,也不会影响用户或系统。

  • 例:云盘的 “后台同步进程”(如同步本地照片到云端),可以在 CPU 空闲时(如你没操作电脑时)再执行 —— 若它优先级过高,会在你工作时占用带宽和 CPU,导致网页加载慢、文档保存卡。
  • 调度逻辑:操作系统的 “调度器” 会根据优先级分配 CPU 时间片(即 “CPU 给进程的执行时间”):高优先级进程获得更多、更长的时间片,低优先级进程则在 “高优先级进程空闲时” 再执行,避免资源被 “低价值任务” 浪费。

简言之:优先级是 “优化资源利用率” 的工具,让有限的 CPU / 内存,优先分配给 “价值更高” 的进程。

总结:进程优先级的本质

进程优先级的核心是 “按‘重要性’和‘需求’分配资源” —— 它不是 “歧视低优先级进程”,而是在 “资源有限” 的前提下,平衡三大目标:

  1. 保障系统核心稳定(关键进程不崩溃);
  2. 满足实时任务需求(紧急进程不延迟);
  3. 优化用户交互体验(前台进程不卡顿)。

没有优先级的调度,会变成 “所有进程平等竞争资源” 的 “无序状态”:系统可能因核心进程被挤占而崩溃,实时任务因延迟失效,用户操作因前台进程被抢占而卡顿 —— 这正是操作系统必须设计优先级的根本原因。

三、如何进优先级的设置

image-20241107113929844

运行编译运行代码:

#include <stdio.h>
#include <unistd.h>
int main
{
    while(1)
    {
        printf("我是一个进程,我的pid:%d,ppid:%d\n",getpid(),getppid());
        sleep(1);
	}
    return 0;
}

image-20241107114504521

ps ajx | head -1 && ps ajx | grep myprocess

image-20241107114534248

image-20241107114647624

-l在非root用户下不能查看到本用户的运行进程,使用-la即可

image-20241107114742490

图中的PRI表示优先级。NI表示优先级的nice数据。

最终优先级 = pri(默认) + nice值。

nice 属于优先级的修正数据。

图中的UID表示当前进程的用户ID。例如我们使用whoami可以查看当前用户.

使用ls -ln 可以把能显示为数字的显示数字:

image-20241107115842292

所以操作系统标识用户用的是UID,对比用户也用的是UID.

ps可以查看进程是哪个用户启动的。

image-20241107192122541

进程的优先级:竞争的是CPU的资源。

1、使用top修改优先级

image-20241107192732672

当进程运行起来,我们使用另一个终端进行修改,输入top再按R:

image-20241107192727316

image-20241107192830701

image-20241107193000506

使用ps -al查看:

image-20241107193023923

NI值变为19。

nice值的最高是19,PRI的数值变高了,说明它的优先级变低了。

再次修改发现不允许了。

image-20241107193327190

所以我们还要切换到超级用户下进行修改:
sudo top
image-20241107193445733

查看:

image-20241107193502820

nice最低值是-20

nice的取值范围[-20,19] --> 40种优先级

PRI是60,为什么不是99 - 40 == 79呢?

这说明最终的PRI === pri(default 80) + nice

每次修改重置了最终的PRI。

验证一下,我们修改nice为10:
image-20241107194116839

果然是90。

而进程的优先级范围是[60,99]。

2、通过nice/renicechrt命令设置

Linux 中进程优先级通过 “nice 值” 和 “实时优先级” 区分,操作主要依赖命令行(图形界面工具如htop也可辅助)。

  1. 普通优先级(非实时):用nicerenice
  • 核心概念:nice 值范围为 -20(最高)~ 19(最低),默认值为 0。值越小,优先级越高(与直观感受相反)。

    • 启动进程时设置优先级:用nice命令,格式:nice -n [nice值] 进程命令例:以较高优先级(nice 值 - 5)启动浏览器:

      nice -n -5 firefox  # 需root权限(因为nice值<0时需要管理员权限)
      
    • 调整已运行进程的优先级:用renice命令,格式:renice [新nice值] -p [进程ID]例:将进程 ID 为 1234 的程序优先级调低(nice 值 10):

      renice 10 -p 1234  # 普通用户只能调高自己进程的nice值(降低优先级),调低需root权限
      
  1. 实时优先级:用chrt命令

实时进程优先级高于所有普通进程,适合工业控制、音频处理等要求微秒级响应的场景,范围为 1~99(值越大优先级越高)。

  • 启动实时进程:格式:chrt -f [实时优先级] 进程命令-f表示 “FIFO 调度策略”,实时调度常用)例:以实时优先级 50 启动某控制程序:

    sudo chrt -f 50 ./control_program  # 必须root权限
    
  • 调整已运行进程为实时优先级:格式:chrt -f -p [实时优先级] [进程ID]例:将进程 ID 5678 的实时优先级设为 30:

    sudo chrt -f -p 30 5678
    
图形工具辅助(Linux):
  • 打开htop(需先安装:sudo apt install htop),找到进程后按r键,输入新的 nice 值即可调整。

四、为什么优先级在可控的范围内?

优先级的 “可控范围” 不是 “限制灵活性”,而是操作系统的 “自我保护和资源公平分配的底线”—— 它通过以下目标实现平衡:

  1. 保护系统稳定:不允许任何进程独占核心资源,确保内核和关键服务正常运行;
  2. 保障基本公平:避免低优先级进程彻底饥饿,让后台任务能正常完成;
  3. 防范权限滥用:通过权限绑定,阻止恶意程序或误操作破坏系统;
  4. 优化调度效率:简化调度逻辑,确保操作系统响应快速、运行高效。

没有可控范围的优先级,会让多进程环境陷入 “无序竞争”—— 要么系统崩溃,要么部分进程永远无法运行,这与操作系统 “高效、稳定、公平” 的核心目标完全相悖。

相关概念

  • (资源稀缺)竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级
  • 独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰
  • 并行: 多个进程在多个CPU下分别,同时进行运行,这称之为并行
  • 并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发
    部分进程永远无法运行,这与操作系统 “高效、稳定、公平” 的核心目标完全相悖。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值