进程NI、PRI属性的联系
- 共同影响进程调度:NI和PRI都是Linux进程调度机制中的重要参数,它们共同决定了进程在CPU资源竞争中的优先级。NI值通过影响PRI值来间接影响进程的调度顺序。
- NI值可调整以改变PRI值:用户可以通过调整进程的NI值来间接改变其PRI值。具体来说,NI值是一个修正值,系统会根据NI值来调整进程的PRI值。通常,NI值越小(更负),PRI值也会相应减小,意味着进程的优先级提高;反之,NI值越大(更正),PRI值也会相应增大,意味着进程的优先级降低。
- 共同反映进程优先级:虽然NI和PRI是两个不同的属性,但它们都反映了进程的优先级。NI值是用户可修改的优先级修正值,而PRI值是系统根据NI值和其他因素计算得出的实际优先级值。
进程NI、PRI属性的区别
1)定义不同:
- NI(Nice值):是用户空间对进程优先级的一个表示,它是一个可以修改的修正值,用于调整进程的优先级。NI值的范围是-20(最高优先级)到19(最低优先级)。
- PRI(Priority,优先级):是系统内部用于调度进程的实际优先级值。PRI值是根据NI值和其他因素(如进程类型、系统负载等)计算得出的,用户无法直接修改PRI值。
2)修改权限不同:
- NI值:用户(包括普通用户和超级用户)可以通过nice命令或renice命令来设置或修改进程的NI值。但需要注意的是,普通用户只能将NI值设置为0到19之间的值,而超级用户(root用户)可以将NI值设置为-20到19之间的任何值。
- PRI值:用户无法直接修改PRI值,它是系统根据NI值和其他因素自动计算得出的。
3)作用方式不同:
- NI值:作为用户可修改的优先级修正值,NI值直接反映了用户对进程优先级的期望。通过调整NI值,用户可以间接地影响进程的调度顺序。
- PRI值:作为系统内部用于调度的实际优先级值,PRI值综合了NI值、进程类型、系统负载等多种因素,是系统调度进程时的重要依据。PRI值越小,表示进程的优先级越高,越有可能被CPU优先执行。
nice命令
nice 命令在 Linux 系统中用于调整进程的优先级。在 Unix 和类 Unix 系统中,包括 Linux,每个进程都有一个与之关联的优先级,这个优先级决定了进程获得 CPU 资源的顺序。
默认情况下,每个进程都以所谓的“nice 值”0 开始,这个值是可以调整的,范围从 -20(优先级最高)到 19(优先级最低)。
nice 命令的基本语法包括一个可选的 -n 参数,后跟 nice 值和要运行的命令。如果不使用 -n 参数,则默认将 nice 值设置为 10(即降低进程的优先级)。
语法:nice [-n] [nice值] command
renice命令
renice 命令在 Linux 系统中用于改变正在运行的进程的优先级(nice 值)。
基本语法和参数
renice [nice值] -p PID...
renice [nice值] -g PGRP...
renice [nice值] -u USER...
- nice值:指定新的 nice 值。
- -p:后面跟一个或多个进程 ID(PID),用于指定要修改 nice 值的进程。
- -g:后面跟一个或多个进程组 ID(PGRP),用于指定要修改 nice 值的进程组中的所有进程。
- -u:后面跟用户名,用于指定要修改 nice 值的该用户启动的所有进程。
注意事项:
1)默认情况下,普通用户只能将进程的 nice 值设置为大于 0 的值,以降低其优先级。只有 root 用户才能设置负的 nice 值来提高进程的优先级。
2)只有超级用户(root)或具有相应权限的用户才能降低进程的 nice 值(即增加其优先级)。尝试增加(即降低优先级)任何进程的 nice 值时,普通用户通常不会遇到权限问题。
3)nice 值是相对于进程的默认优先级(nice 值 0)的增量。因此,设置 nice 值为 5 意味着进程的优先级比默认优先级低 5 个单位,而设置 nice 值为 -5 则意味着进程的优先级比默认优先级高 5 个单位(但这需要 root 权限)。
4)进程的最终优先级还受到其他因素的影响,如进程的实时优先级(如果设置了的话)和系统的调度策略。然而,在大多数情况下,nice 值是调整进程优先级的主要手段。
答疑
问:linux 进程的NI/PRI决定的优先级越高,相对于低优先级的进程获取的系统资源越多,怎末理解?
首先,这里所说的“系统资源”主要是指CPU时间片。在Linux系统中,CPU时间被划分成若干个时间片(timeslice),每个进程在获得CPU时都会分配到一个时间片。当进程的时间片用完时,它会被放回就绪队列中等待下一次调度。
在Linux中,时间片的大小是由内核调度器决定的,并且对于大多数系统来说,这个时间片是固定的,对所有进程都是相同的。这意味着,无论进程的优先级如何,它们每次被调度时获得的时间片长度通常是相同的。
其次,进程的优先级(PRI值)主要影响的是进程被调度执行的频率,优先级高的进程会更频繁地被调度到CPU上执行,这样,在单位时间内优先级高的进程会获取更多的时间片,获取更多的资源去执行。
此外,还需要注意的是,Linux系统的调度算法是复杂的,它不仅仅基于进程的优先级进行调度。系统还会考虑其他因素,如进程的等待时间、CPU使用率、系统负载等,以综合决定进程的调度顺序。