Linux(五):进程优先级
摘要:什么是进程优先级, Linux中如何修改进程优先级(nice值)
目录
- 一、什么是进程优先级 · what
- 二、为什么需要进程优先级 · Why
- 三、进程优先级如何实现 · How
- 四、Linux中的进程优先级
- 1. 优先级数值:PRI
- 2. 查看进程优先级:`ps -la`
- 3. ✍修改进程优先级:通过`nice`值调整
- (1)`nice`值的特性
- (2)修改优先级的步骤(以`top`命令为例)
- (3)注意事项
- 4. 为什么要限定优先级范围?
- 5. 进程优先级相关命令
- 五、与进程优先级相关的概念
- 1. 竞争关系与独立性
- 2. 并行与并发
一、什么是进程优先级 · what
进程优先级(Priority):多个进程申请资源的请求已通过权限校验后,决定它们获取资源先后顺序的指标。
概念区分:权限与优先级。
- 权限(Permission):决定“能不能获得某种资源”。例如,普通用户进程无权访问内核态内存,这是权限层面的限制,与优先级无关。
- 优先级(Priority):决定“能获得资源的情况下,何时获得”。当多个进程都有权限使用CPU时,优先级高的进程会先被调度。
权限是“资格”问题,优先级是“顺序”问题。
二、为什么需要进程优先级 · Why
优先级存在根本原因:系统资源是有限的。
无论是CPU、内存、I/O设备等,都无法同时满足所有进程的需求。例如,单核CPU同一时间只能运行一个进程,当有多个进程处于就绪状态时,必须通过某种规则决定哪个进程先运行——优先级就是最常用的规则。
没有优先级机制,系统可能陷入“无序调度”:关键进程(如系统服务)可能被非关键进程(如后台下载)阻塞,导致系统响应变慢甚至崩溃。
三、进程优先级如何实现 · How
进程控制块(PCB)中包含了描述进程状态的所有信息,其中有专门用于表示优先级的整数字段。
通常,这个字段的数值越小,优先级越高。例如,优先级为10的进程会比优先级为20的进程更早获得CPU资源。
不同操作系统对优先级的实现细节不同。
四、Linux中的进程优先级
1. 优先级数值:PRI
PRI
是进程实际的优先级数值,直接决定了调度顺序:
- 范围:60~90,共40个等级(数值越小,优先级越高)。
- 默认值:新进程创建时,默认
PRI
为80。
例如,PRI=60
的进程优先于PRI=70
、PRI=80
的进程获得CPU。
2. 查看进程优先级:ps -la
要查看系统中进程的PRI
,可以使用ps -la
命令。该命令的输出中,PRI
列即为进程的优先级数值。
示例输出(截取部分):
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 0 123 101 0 80 0 - 1234 wait pts/0 00:00:00 bash
0 R 0 456 123 2 75 -5 - 5678 - pts/0 00:00:01 top
PRI
列的80
、75
即为对应进程的优先级数值。NI
列为nice
值。
3. ✍修改进程优先级:通过nice
值调整
Linux中,进程的实际PRI
并非固定不变,而是通过nice
值 (优先级修正值) 动态调整,公式为: PRI = PRI(默认值) + nice
默认PRI
为80,即为:PRI = 80 + nice
。
(1)nice
值的特性
- 范围:-20~19(整数)。
若输入超出范围的值,系统会自动截断(如输入20会被当作19,输入-21会被当作-20)。 - 作用:
nice
值越小(越负),PRI
越小,进程优先级越高;反之,nice
值越大,PRI
越大,优先级越低。
(2)修改优先级的步骤(以top
命令为例)
- 提升权限:修改优先级需要管理员权限,通过
su
切换到root用户,或用sudo top
启动top
工具。 - 启动进程管理器:输入
top
命令。 - 触发优先级修改:在
top
界面中输入r
(renice的缩写)。 - 输入进程PID:根据提示输入需要修改的进程的PID(PID,可从
top
或ps
命令中获取)。 - 输入
nice
值:提示“Renice PID xxxx to value”时,输入目标nice
值(如-5、10等)。 - 退出
top
:输入q
退出进程管理器。
(3)注意事项
- 权限限制:普通用户只能调低进程优先级(即增大
nice
值,如从0→5),不能调高(即减小nice
值,如从0→-5);只有管理员可以调高优先级。 - 范围限制:
nice
值强制限制在-20~19,避免优先级过高的进程长期占用资源。 - 谨慎操作:①随意修改系统关键进程(如
systemd
)的优先级可能导致系统不稳定,非必要情况不建议修改;② 过度调高某一进程的优先级可能导致其他进程饥饿,需谨慎使用。
4. 为什么要限定优先级范围?
Linux将PRI
限制在60 ~ 90(对应nice
值-20 ~ 19),核心目的是避免“进程饥饿”。
- 进程饥饿:指低优先级进程因长期被高优先级进程抢占资源,导致迟迟无法获得CPU调度的现象。
- 均衡调度:通过限定优先级范围,即使高优先级进程存在,低优先级进程也能在一定时间内获得调度机会(操作系统会通过时间片轮转等机制补充调节),保证系统整体的稳定性。
5. 进程优先级相关命令
除了top
,Linux还提供了多个直接操作优先级的命令:
nice
:启动进程时指定nice
值(设置初始优先级)。
示例:nice -n 5 ./myprogram
(以nice=5
启动程序,初始PRI=85
)。renice
:直接修改已有进程的nice
值(无需进入top
)。
示例:sudo renice -5 1234
(将PID=1234的进程nice
值改为-5,PRI=75
)。getpriority
:获取进程的优先级(编程接口,需在C语言中调用)。
–
五、与进程优先级相关的概念
1. 竞争关系与独立性
- 竞争关系:多个进程因争夺同一资源(如CPU、内存)而产生的相互影响,优先级是解决竞争的核心手段。
- 独立性:进程间拥有独立的地址空间和资源,优先级调度不会打破进程的独立性(即一个进程的崩溃不会直接影响其他进程)。
2. 并行与并发
- 并行(Parallelism):多个CPU核心同时运行多个进程(微观上真正“同时”),此时优先级决定每个核心上运行哪个进程。
- 并发(Concurrency):通过进程切换(上下文切换),让多个进程在同一CPU上交替运行(宏观上“同时”,微观上交替)。优先级决定了切换的顺序——高优先级进程会更频繁地获得CPU时间。
END