1.概念
1.1基本概念
cpu资源分配的先后顺序,就是指进程的优先权(priority)。
优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用,可以改善系统性能。
还可以把进程运行到指定的cpu上,这样一来,把不重要的进程安排到某个cpu,可以大大改善系统整体性能。
linux中优先级数字越小,优先级越高。
1.2优先级vs权限
简单的说优先级和权限的区别:
- 优先级:已经能了,获取资源的顺序。(排队号)
- 权限:能不能获取资源。(准考证)
对比维度 | 优先级(priority) | 权限(permission) |
---|---|---|
定义 | 进程获取 cpu 资源的优先顺序,决定调度优先级 | 规定用户 / 用户组对文件 / 目录的访问、修改、执行权限 |
作用对象 | 仅针对运行中的进程(process) | 仅针对文件和目录(file/directory) |
核心目标 | 优化 cpu 资源分配,提升系统响应速度和运行效率 | 保护资源安全,防止未授权访问或操作 |
数值 / 标识范围 | - 静态优先级:nice值(-20~19,值越小优先级越高) - 动态优先级:内核根据进程状态动态调整 | - 权限标识:r(读)、w(写)、x(执行) - 适用用户:u(所有者)、g(所属组)、o(其他用户) |
常用操作命令 | - nice:启动进程时设置优先级(如nice -n 5 ./app) - renice:调整已有进程优先级(如renice -10 1234) - chrt:设置实时进程优先级 | - chmod:修改权限(如chmod 755 file) - chown:修改所有者(如chown user:group file) - chgrp:修改所属组(如chgrp group file) |
示例场景 | - 后台备份进程设为低优先级(避免影响前台操作) - 实时监控进程设为高优先级(确保及时响应) | - 系统配置文件仅root可写(rw-r--r--) - 脚本文件添加执行权限(chmod +x script.sh) |
与用户身份的关系 | 普通用户只能降低自身进程优先级(或提升至有限范围),root可任意调整 | 权限与用户身份强关联(所有者权限 > 组权限 > 其他用户权限),root拥有权限豁免权 |
1.3为什么要有优先级?
进程访问的资源(尤其是 cpu)始终是有限的,而系统中同时运行的进程往往数量较多,不可避免会出现资源竞争。
操作系统的调度机制虽以 “分时” 为基础,追求基本公平,但若无优先级区分,可能导致关键进程(如实时响应、系统核心任务)被非关键进程挤占资源,出现响应卡顿或延迟 ;同时,若完全 “平均分配” 资源,还可能引发 “饥饿问题”—— 某些进程因长期得不到足够调度而陷入停滞。
2.查看系统进程
2.1pri和ri
- 老规矩:先写个简单的进程代码:
#include <stdio.h> #include <sys/types.h> #include <unistd.h> int main() { printf("i am a process! pid=%d\n",getpid()); return 0; }
ps -al
pri | 代表这个进程可被执行的优先级,其值越小越早被执行 |
ni | 进程优先级的修正数据,nice 值,nice其取值范围是-20至19,一共40个级别。 新的优先级 = 优先级(默认80) + nice, 这样,当nice值为负值的时候,那么该程序将会优先级值将变小,即其优先级会变高,则其越快被 执行,所以调整进程优先级,在linux下,就是调整进程nice值。 |
2.2pri vs ni
需要强调一点的是,进程的nice值不是进程的优先级,他们不是一个概念,但是进程nice值会影响到进程的优先级变化。
可以理解nice值是进程优先级的修正修正数据
3.修改进程优先级的命令
3.1用top命令更改已存在进程的nice
- 输入top
- 进入top后按“r”–>输入进程pid–>输入nice值
pri 为99=进程默认值80 +nice值19 ,之前介绍 nice其取值范围是-20至19,即使我们输入了100,nice值还是19,是为了防止调度出现问题,把优先级控制在可控范围内。
- 再次修改nice值会失败,进程优先级不能经常修改
- 可以使用root修改
- 我们
结果变成了70,说明进程优先级是= 进程默认值+nice值 。
3.2nice 命令
nice 命令用于在启动进程时设置其优先级。其原理是通过指定nice值(也叫ni值)来调整进程的基本优先级(pri) ,新的优先级计算公式为:新的优先级 = 基本优先级 + nice 值。
nice值的范围是 - 20 到 19,数值越小,进程的优先级越高,也就意味着该进程在争夺 cpu 资源时更具优势,能获得更多的 cpu 时间片。但普通用户只能设置 nice 值为 0 到 19,只有 root 用户可以设置为 - 20 到 19 的任意值。
- 语法格式:
nice [ -n <nice值> ] <命令> [<命令参数>]
- 示例:
sudo nice -n -10 ./myprocess
3.3renice 命令
renice命令用于修改已经在运行中的进程的优先级。在系统运行过程中,你可能发现某个进程占用资源过多影响了其他关键进程,或者某个后台进程优先级太低执行过慢,这时就可以使用 renice 来动态调整其优先级。
- 语法格式:
renice [ -n <nice值> ] <进程pid> # 对指定用户启动的所有进程调整优先级 renice [ -n <nice值> ] -u <用户名>
- 示例:
renice 10 2873999
4.其他概念
术语 | 含义说明 |
---|---|
竞争性 | 系统进程数目众多,而 cpu 资源有限(甚至仅有 1 个),因此进程之间存在资源竞争。为实现高效任务处理和合理资源竞争,引入了优先级机制。 |
独立性 | 多进程运行时需独享各类资源,进程间运行过程互不干扰。 |
并行 | 多个进程在多个 cpu 上分别同时运行,称为并行。 |
并发 | 多个进程在单个 cpu 上通过进程切换的方式,在一段时间内使多个进程均得以推进,称为并发。 |
5.总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论