在操作系统中,进程优先级(Priority,简称 PRI)是用于决定进程执行顺序的关键参数。系统将根据进程的优先级来安排 CPU 资源的分配。优先级高的进程将会获得更多的执行时间,优先级低的进程则会等待更长的时间才能获得 CPU 执行。
目标资源紧缺,CPU资源需要分配,通过优先级可以确定谁先谁后的问题。
通常来说,优先级数值越小,进程的优先级越高,也就是越早被 CPU 执行。反之,优先级数值越大,进程的优先级越低,执行的机会也相对较少。作为int
,被存放在task_struct
中。
进程真正的优先级 = PRI(默认)+ Ni
除了进程的基本优先级,Linux 系统还引入了一个叫做 nice 值 的概念,它是用来调整进程优先级的修正值。
PRI(新)= PRI(旧)+ Nice
在 Linux 系统中,我们可以使用 ps
命令来查看进程的优先级。以下是常见的查看进程优先级的命令和输出:
ps -l
该命令会显示一个类似以下的输出,其中包括:
例如,输出如下所示:
F S UID PID PPID PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 2510 21391 20 0 1054 hrtime pts /0 00:00:00 myprocess
通过 ps -l
命令,我们可以清晰地看到进程的优先级(PRI)和 nice 值(NI),这些信息有助于我们了解进程的执行顺序。
调整进程的优先级主要通过 nice
和 renice
命令实现:
例如,使用 nice
启动一个新的进程并设置优先级:
nice -n -10 command
这会启动一个进程,并将其 nice 值设置为 -10,从而提高其优先级。
而使用 renice
调整一个正在运行的进程的 nice 值:
renice -n 10 -p 2510
这会将进程号为 2510 的进程的 nice 值调整为 10,从而降低其优先级。
除了 nice
和 renice
命令外,您还可以使用 top
命令实时查看进程并调整其优先级:
top
命令界面。r
键选择要调整的进程。通过这种方式,您可以在 top
界面中动态调整进程的优先级。
通过指令查询可知,进程默认的优先级为80,通过调整NI
尝试确定优先级的范围可发现,NI
最小可以设置为-20
,最大可以设置为19
,也就是**nice:[-20, 19]**
。
由于进程优先级默认是80,且**nice:[-20, 19]**
,所以进程优先级的极值就是60和99.
Linux优先级范围:[60, 99]。
基于时间片的分时操作系统,考虑公平性,优先级可能变化,但是变化程度不能太大。如果优先级设置不合理,会导致优先级低的进长时间得不到CPU资源的分配,进而导致进程饥饿。
使用以下指令即可查看文件相关信息:
ls -la
图中所示的1002
就是UID
,每个用户都有对应的UID
。
Linux访问任何资源都是通过进程访问,即使是对文件进行操作也是通过Bash
然后使用指令创建Bash
的子进程来完成操作,所以当对当前文件进行操作的时候会通过确认进程的UID
来辨认是拥有者、所属组还是other。
在多进程操作系统中,进程之间通常是有竞争关系的,因为 CPU 资源有限,多个进程可能需要共享这些资源。进程的优先级设置就是为了合理分配这些资源,从而提高系统的整体性能。
Linux 中的进程优先级和 nice 值是系统调度和资源管理的核心组成部分。通过合理设置进程的优先级和 nice 值,可以有效提高系统性能,确保重要任务优先执行,而不重要的任务则被适当延迟。
希望通过本文的介绍,您对 Linux 中进程优先级的概念和操作有了更深入的了解。如果有任何问题或建议,欢迎在评论区留言讨论!