进程的优先级

简介: 进程的优先级

Linux 系统中,进程得以执行,必须获得 CPU 的控制权,即进程必须得到 CPU 的处理。然而一个进程往往并不能一直获得 CPU 的“青睐”。如果一个进程一直响应任务不退出,并一直占有 CPU 的控制权,这将是一件很“可怕”的事情。因此, Linux 系统通常采用一些调度策略来实现 CPU 控制权的合理分配。


Linux 和大多数其他 UNIX 实现一样,调度进程使用 CPU 的默认模型是循环时间共享算法。在这种模型下,每个进程轮流使用 CPU 一段时间,这段时间被称为时间片。循环时间共享算法满足了交互式多任务系统两个重要需求。


  1. 公平性:每个进程都有机会用到CPU
  2. 响应性:一个进程在使用CPU之前无需等待太长时间。


在循环时间共享算法中,进程无法直接控制何时使用 CPU 以及使用 CPU 的时间。在默认情况下,每个进程轮流使用 CPU 知道时间片被用光或自己主动放弃 CPU (如进程睡眠)。如果所有进程都试图尽可能多地使用 CPU ,那么它们使用 CPU 的时间差不多是相等的。


进程的特性 nice 值允许进程间接地影响内核的调度算法。每个进程都有一个 nice 值,其取值范围为 -20 (高优先级)到 19低优先级),默认值为 0 。在传统的 UNIX 实现中,只有特权进程才能够赋给自己(或其他进程)一个)优先级。非特权进程只能降低自己的优先级,即赋一个大于默认值 0nice 值。这样做之后它们就对其他进程“友好nice )”了,这个特性的名字也由此而来。


nice 值是一个权重因素,它导致内核调度器倾向于调度拥有更高优先级的进程。给一个进程赋一个低优先级(高 nice 值),并不会导致它完全无法用到 CPU ,但会导致它使用 CPU 的时间变少。 nice 值对进程调度的影响程度则依据 Linux 内核版本的不同而不同。


getpriority() 函数和 setpriority() 函数允许一个进程获取和修改自身或其他进程的 nice 值。

#include <sys/time.h>
#include <sys/resource.h>
int getpriority(int which, int who);
int setpriority(int which, int who, int prio);点击复制复制失败已复制


参数 whichwho ,用于标识需要被读取或修改优先级的进程。 which 参数需要结合 who 参数来确定需要被读取或修改 nice 值的进程。具体参数如下所示:

which参数 who参数 操作的进程对象
PRIO_PROCESS who(非0) 进程号为who的进程
0 调用进程
PRIO_PGRP who(非0) 进程组ID为who的进程组中的所有进程
0 调用进程所属进程组中的所有进程
PRIO_USER who(非0) 所有用户ID为who的进程
0 与调用进程相同用户ID的所有进程


getpriority() 函数返回由 whichwho 指定的进程的 nice 值。如果有多个进程符合指定的标准(当 whichPRIO_PGRPPRIO_USER 时会出现这种情况),那么将返回优先级最高的进程 nice 值。


setpriority() 函数会将有 whichwho 指定的进程 nice 值设置为参数指定的值 prio 。如果将 nice 值设置为一个超出允许范围的值时会直接将 nice 值设置为边界值,即 -2019

目录
相关文章
|
23天前
|
Shell Linux 调度
【Shell 命令集合 系统管理 】Linux 调整进程优先级 renice命令 使用指南
【Shell 命令集合 系统管理 】Linux 调整进程优先级 renice命令 使用指南
58 0
|
23天前
|
资源调度 算法 Linux
Linux进程/线程的调度机制介绍:详细解析Linux系统中进程/线程的调度优先级规则
Linux进程/线程的调度机制介绍:详细解析Linux系统中进程/线程的调度优先级规则
334 0
|
17天前
|
Linux 调度
【进程概念】进程的优先级PRI和NI
【进程概念】进程的优先级PRI和NI
|
23天前
|
API 开发工具 Windows
LabVIEW中编程更改进程的优先级
LabVIEW中编程更改进程的优先级
26 0
|
23天前
|
Unix Linux
【Linux】一文了解【进程优先级相关知识点】&【PRI / NI值】背后的修正原理(13)
【Linux】一文了解【进程优先级相关知识点】&【PRI / NI值】背后的修正原理(13)
|
23天前
|
Linux
|
23天前
|
Linux Shell 调度
【linux进程(四)】僵尸进程和孤儿进程概念&进程优先级讲解
【linux进程(四)】僵尸进程和孤儿进程概念&进程优先级讲解
|
23天前
|
Linux 调度
【Linux】进程优先级
【Linux】进程优先级
|
23天前
|
算法 Linux 调度
【Linux】详谈进程优先级&&进程调度与切换
【Linux】详谈进程优先级&&进程调度与切换
|
23天前
|
Shell Linux 调度
【Shell 命令集合 系统管理 】⭐Linux 调整进程优先级 nice命令 使用指南
【Shell 命令集合 系统管理 】⭐Linux 调整进程优先级 nice命令 使用指南
50 0