前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >[操作系统] 进程的优先级

[操作系统] 进程的优先级

作者头像
DevKevin
发布2025-01-22 09:42:24
发布2025-01-22 09:42:24
12900
代码可运行
举报
文章被收录于专栏:Base_CDNKevin
运行总次数:0
代码可运行
在 Linux 或 Unix 系统中,进程优先级是非常重要的概念。它直接影响到 CPU 资源的分配和进程的执行顺序。本文将详细讲解什么是进程优先级,以及如何在 Linux 系统中查看和调整进程的优先级。

进程优先级是什么?

在操作系统中,进程优先级(Priority,简称 PRI)是用于决定进程执行顺序的关键参数。系统将根据进程的优先级来安排 CPU 资源的分配。优先级高的进程将会获得更多的执行时间,优先级低的进程则会等待更长的时间才能获得 CPU 执行。

为什么需要进程优先级?

目标资源紧缺,CPU资源需要分配,通过优先级可以确定谁先谁后的问题。

进程优先级需要怎么实现?

优先级的大小

通常来说,优先级数值越小,进程的优先级越高,也就是越早被 CPU 执行。反之,优先级数值越大,进程的优先级越低,执行的机会也相对较少。作为int,被存放在task_struct中。

进程的优先级和 Nice 值

进程真正的优先级 = PRI(默认)+ Ni

除了进程的基本优先级,Linux 系统还引入了一个叫做 nice 值 的概念,它是用来调整进程优先级的修正值。

  • PRI(Priority):表示进程的优先级,数值越小,优先级越高,意味着进程会更早被执行。
  • NI(Nice):表示进程的 nice 值,它用来修正进程的优先级。nice 值的范围是从 -20 到 19,表示进程的优先级可以根据该值进行调整。

PRI(新)= PRI(旧)+ Nice

  • 当 nice 值为负值时,进程的优先级会提升(PRI 值变小),意味着该进程会优先获得 CPU 执行。
  • 当 nice 值为正值时,进程的优先级会下降(PRI 值变大),使得该进程会被延迟执行。

如何查看进程的优先级?

在 Linux 系统中,我们可以使用 ps 命令来查看进程的优先级。以下是常见的查看进程优先级的命令和输出:

代码语言:javascript
代码运行次数:0
复制
ps -l

该命令会显示一个类似以下的输出,其中包括:

  • UID:执行该进程的用户 ID。
  • PID:进程的进程号。
  • PPID:父进程 ID。
  • PRI:进程的优先级(Priority)。
  • NI:进程的 nice 值。

例如,输出如下所示:

代码语言:javascript
代码运行次数:0
复制
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),这些信息有助于我们了解进程的执行顺序。

如何调整进程的优先级?

调整进程的优先级主要通过 nicerenice 命令实现:

  • nice:用来启动一个新的进程并设置其 nice 值。
  • renice:用来调整已存在进程的 nice 值。

例如,使用 nice 启动一个新的进程并设置优先级:

代码语言:javascript
代码运行次数:0
复制
nice -n -10 command

这会启动一个进程,并将其 nice 值设置为 -10,从而提高其优先级。

而使用 renice 调整一个正在运行的进程的 nice 值:

代码语言:javascript
代码运行次数:0
复制
renice -n 10 -p 2510

这会将进程号为 2510 的进程的 nice 值调整为 10,从而降低其优先级。

使用 top 命令调整进程的优先级

除了 nicerenice 命令外,您还可以使用 top 命令实时查看进程并调整其优先级:

  1. 进入 top 命令界面。
  2. r 键选择要调整的进程。
  3. 输入进程的 PID 和新的 nice 值。

通过这种方式,您可以在 top 界面中动态调整进程的优先级。

优先级极值问题

范围:

通过指令查询可知,进程默认的优先级为80,通过调整NI尝试确定优先级的范围可发现,NI最小可以设置为-20,最大可以设置为19,也就是**nice:[-20, 19]**

极值:

由于进程优先级默认是80,且**nice:[-20, 19]**,所以进程优先级的极值就是60和99.

Linux优先级范围:[60, 99]。

基于时间片的分时操作系统,考虑公平性,优先级可能变化,但是变化程度不能太大。如果优先级设置不合理,会导致优先级低的进长时间得不到CPU资源的分配,进而导致进程饥饿。

补充概念

  1. 当用户访问文件的时候系统要如何分辨进入的是拥有者、所属组还是other?

使用以下指令即可查看文件相关信息:

代码语言:javascript
代码运行次数:0
复制
ls -la

图中所示的1002就是UID,每个用户都有对应的UID

Linux访问任何资源都是通过进程访问,即使是对文件进行操作也是通过Bash然后使用指令创建Bash的子进程来完成操作,所以当对当前文件进行操作的时候会通过确认进程的UID来辨认是拥有者、所属组还是other。

  1. 进程之间的关系和调度逻辑

在多进程操作系统中,进程之间通常是有竞争关系的,因为 CPU 资源有限,多个进程可能需要共享这些资源。进程的优先级设置就是为了合理分配这些资源,从而提高系统的整体性能。

  • 竞争性:多个进程之间争夺 CPU 资源。
  • 独立性:每个进程有自己的资源,不会干扰其他进程。
  • 并行:多个进程在多个 CPU 上并行执行。
  • 并发:多个进程在一个 CPU 上切换执行,使得它们看似同时运行。通过时间片来进行分配执行,后文会详细讲解分时操作系统的调度。

总结

Linux 中的进程优先级和 nice 值是系统调度和资源管理的核心组成部分。通过合理设置进程的优先级和 nice 值,可以有效提高系统性能,确保重要任务优先执行,而不重要的任务则被适当延迟。

希望通过本文的介绍,您对 Linux 中进程优先级的概念和操作有了更深入的了解。如果有任何问题或建议,欢迎在评论区留言讨论!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 进程优先级是什么?
  • 为什么需要进程优先级?
  • 进程优先级需要怎么实现?
    • 优先级的大小
    • 进程的优先级和 Nice 值
    • 如何查看进程的优先级?
    • 如何调整进程的优先级?
    • 使用 top 命令调整进程的优先级
    • 优先级极值问题
      • 范围:
      • 极值:
  • 补充概念
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档