Linux 进程调度(三)之进程的优先级

news2024/11/15 15:46:11

目录

  • 一、概述
  • 二、进程的优先级
    • 1、基础概念
    • 2、优先级的意义
    • 3、查看优先级
    • 4、PRI 和 NI
    • 5、修改优先级
    • 6、控制进程的优先级的系统调用
    • 7、调整优先级的限制


一、概述

在 Linux 中,每个进程都有一个优先级。优先级决定了进程在系统资源分配中的先后顺序。Linux 中的进程优先级范围从 -20 到 +19,其中 -20 为最高优先级,+19 为最低优先级。

二、进程的优先级

1、基础概念

Linux 中的进程优先级分为静态优先级和动态优先级。

  • 静态优先级:静态优先级是在创建进程时分配的,通常由管理员或程序员指定。静态优先级决定了进程的基本优先级,可以通过 nice 命令来设置,范围为 -20 到 +19。较低的数值表示较高的优先级。例如,如果给一个进程设置了较低的优先级值如 -10,那么这个进程将具有较高的优先级。
  • 动态优先级:动态优先级是根据进程的行为和运行情况自动调整的。在 Linux 中,使用调度算法来动态调整进程的优先级。当一个进程使用 CPU 时间较长时,系统会降低它的优先级,让其他进程有更多的执行时间。而当一个进程处于等待 IO 等待状态时,系统会提高它的优先级,以便快速完成 IO 操作。

2、优先级的意义

因为 CPU 的空间归根结底还是寄存器, 而寄存器很小, 就注定了 CPU 的资源是有限的。 而进程的个数是多个的, 这就势必会导致进程之间的竞争关系。

操作系统为了保证进程之间的良性竞争, 他就会确认进程之间的优先级。如果我们的进程长时间得不到 CPU 资源, 该进程的代码长时间得不到推进, 就会出现饥饿问题。

进程的优先级本质上是 PCB(task_struct)内部属性中的一种属性,决定了进程获取某种资源的先后顺序。进程的 task_struct 在运行队列中排队,本质上就是确定获取 CPU 资源的先后顺序。

Linux 进程的优先级也是用来确定在多个进程同时运行时,哪个进程会获得更多的 CPU 时间片。

在 CPU 正常运行中,OS 给每一个CPU都维护一个运行队列,OS 把进程以”先进先出"的方式把进程的 PCB 放到运行队列中排队,等待 CPU 按照"时间片"的调度算法去调度进程(切换进程,来回剥离和恢复)。

不同的进程对 OS 本质上都是访问 OS 中的资源的访问。本质就是通过 OS 来实现对硬件资源的共享。但是硬件资源只有一套,进程有很多套,进程的共享不在同一时间上,所以造成了优先级。总之,进程所访问的 OS 的资源是有限的,OS 中进程大部分情况是大多数,所以需要优先级。

3、查看优先级

在 Linux 系统中:

  • ps -l 命令用于查看当前终端进程的信息
  • ps -al 命令用于查看全部的进程信息

下面是几个重要字段的意义:

  • UID : 代表执行者的身份
  • PID : 代表这个进程的代号
  • PPID :代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号
  • PRI :代表这个进程可被执行的优先级,其值越小越早被执行
  • NI :代表这个进程的 nice 值

4、PRI 和 NI

PRI 标识进程的优先级(Priority),NI 表示进程的 Nice 值。这两个值越小,表示要求获得的 CPU 时间越多。

对于优先级为数字的进程来说,PRINI 的值总是对应的,PRI 的取值范围为 0-39,而 NI 的取值范围为 -20 - 19,PRI 的值总是等于 20 + NI。这样,当 Nice 值为负值的时候,那么该程序将会优先级值将变小,即其优先级会变高,则其越快被执行。所以,调整进程优先级,在Linux下,就是调整进程 Nice 值,而不是调整 PRI 的值。

Nice 在英文中是“和善“的意思,这里进程的 Nice 值,也表示进程的和善程度,Nice 值越高就越和善,越和善的进程,越不会与别的进程争抢 CPU 资源。在内核的实现中,Nice 值是内核考虑调度哪个普通进程的一个权重因素。Nice 值越高的进程,被分配到的总运行时间片就会越短;相反,Nice 值越低,就表示该进程希望能得到更多的 CPU 资源。

注意,进程的 Nice 值不是进程的优先级,它们不是一个概念,但是进程 Nice 值会影响到进程的优先级变化。

5、修改优先级

先写一个 C 程序:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
 
int main()
{
	while(1)
	{
		printf("this is a process, pid=%d\n", getpid());
		sleep(1);
	}
	return 0;
}

在这里插入图片描述

在这里插入图片描述

接下来在终端输入 top 命令,进入任务管理界面:

接下去按下 R/r 之后,就会跳出来下面这句话,这里的 renice 指的就是要重新修改进程,此时 shell 正在等待我们输入进程的 PID 值,那我们就可以输入上方的 4600:

在这里插入图片描述

然后,我们看到 shell 又在等待我们输入需要更改的 Nice 值:

在这里插入图片描述

比如输入 11,再用 ps 查看:

在这里插入图片描述

也就是说,Linux 系统支持用户调整优先级,但并不是让用户直接修改 PRI 值,而是修改 Nice 值。而 Nice 值 不是 优先级,而是优先级的修正数据。

所以真正的优先级应该是:PRI = PRI(old) + nice(old 指旧的优先级)

6、控制进程的优先级的系统调用

Linux 提供的修改和查看进程优先级的系统调用分别为:

int setpriority(int which, id_t who, int prio);
int getpriorit(int which, id_t who);

其中,whichwho 参数联合指定要操作的进程或进程组,setpriority() 中的参数 priogetpriority() 的返回值都是操作目标的 Nice 值。

因为 Nice 值可以是负数,所以,使用 getpriority() 系统调用之前需要先把 errno 显式设置为 0,如果返回值为负数,再联合 errno 区分是遇到错误,还是目标的 Nice 值本身就是负值。

7、调整优先级的限制

系统对进程的优先级调整,会施加一定的限制条件,防止被进程滥用。在 2.6.12 版本之后的 Linux 中,特权进程能够自由地修改任意进程的优先级,而非特权进程只能修改自身,或者同一个有效用户启动的其他进程,并且修改的幅度会受到系统限制的制约。

ulimit 命令的 -e 选项可以查看当前允许的调整范围,它的值表示优先级提高的上限若限制值为 LIMIT_N,则表示 Nice 值降低(优先级提高)时,能减少到的最小值为 20-LIMIT_N

默认的限制值是 0,也就是说不允许非特权进程提高进程的优先级,而只能降低。当这个值大于 20(默认优先级)时,表示非特权进程能够把自身或相同有效用户的进程的 Nice 值调整为负值。

利用优先级调整的功能,开发者就可以根据不同服务的功能特性,合理分配它们的运行优先级。例如,在服务器开发中,经常会有一种内部审计的进程或线程,负责在后台执行一些数据完整性的检查,并在发现错误时报告一些错误信息,提醒开发或运营人员的注意。这种服务的运行不应该抢占对外提供服务的进程的运行资源。这时,就可以把它的运行优先级降到最低,比如,把 Nice 值设置为 19。

在上面 top 命令的输出中,也可以找到一个 Nice 值为 -20 的进程 kworker,这是 Linux 的内核工作队列的工作线程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2034048.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

gin框架中的中断请求c.Abort()方法的作用和使用细节说明

Abort()方法的作用 在gin框架中&#xff0c;如果我们希望中断后续的挂起的请求处理链&#xff08;HandlersChain&#xff09;的请求&#xff0c; 可以使用gin.Context中的这个Abort()方法。请注意&#xff0c;这不会停止当前处理程序。假设您有一个授权中间件&#xff0c;用于…

Vue技术栈-Vue 3 项目组件入门:单文件组件 (SFC)

目录 前言 1.简介 2.安装 Vite 和 Vue 3 3.什么是.vue文件? vue 文件解析 4.什么是VUE的组件? 5.工程化vue项目如何组织这些组件? 6.Vue3关于样式( CSS )的导入方式 7.结语 前言 本篇是在上一篇Vue技术栈-Vite最新版创建一个Vue3项目的基础上的后续,先对Vite这一构…

加密狗创新解决方案助力工业自动化

面临的挑战 早在1991年&#xff0c;COPA-DATA就认识到需要一个既能提供长期保护又能灵活应对的解决方案&#xff0c;以防止软件盗版并确保客户在各种复杂的工业环境下能够顺利使用其产品。这一解决方案不仅要兼容Windows系统&#xff0c;还必须在网络连接受限的情况下&#xff…

Python绘图入门:使用 Matplotlib 绘制折线图

使用 Matplotlib 绘制折线图 数据可视化是数据分析的重要组成部分&#xff0c;通过图表&#xff0c;我们可以更直观地理解数据背后的趋势和模式。Matplotlib 是 Python 最基础也是最常用的绘图库之一&#xff0c;非常适合初学者。本文将带你从零开始&#xff0c;逐步创建和自定…

接口基础知识6:详解http request body(一篇讲完常见请求体)

课程大纲 一、定义 HTTP请求体&#xff08;HTTP Request body&#xff09;&#xff1a;HTTP请求消息的可选部分&#xff0c;仅在请求方法支持且需要发送数据时使用。 POST方法、PUT方法有请求体&#xff0c;GET和HEAD方法没有请求体。 请求头和请求体之间会有一个空行&#…

GA/T1400视图库平台Easy1400软件平台的功能介绍及其应用场景介绍

GA/T 1400标准是中国公安部制定的一系列技术规范&#xff0c;主要针对公安视频图像信息应用系统。这一标准分为多个部分&#xff0c;涵盖了通用技术要求、应用平台技术要求、数据库技术要求等。GA/T 1400视图库标准是为了统一和规范公安系统内视频监控资源的管理和应用&#xf…

Java元组Tuple的使用

WHY&#xff1f; 通常情况下&#xff0c;一个方法返回值是一个&#xff0c;类型固定&#xff08;当然你要封装成对象就另一说了&#xff09;。如果想要在一个方法中返回多个类型不同的值&#xff08;不要封装成对象&#xff09;&#xff1f;这个时候就可以使用元组。典型的需求…

初识IDEA

一、IDEA简介 IDEA 全称 IntelliJ IDEA&#xff0c;是 JAVA编程语言开发的集成环境。IntelliJ 在业界被公认为最好的 java开发⼯具 之⼀&#xff0c;尤其在智能代码助⼿、代码⾃动提示、重构、J2EE⽀持、Ant、JUnit、CVS整合、代码审 查⽅⾯。 JetBrains官⽹ : JetBrains: Esse…

计算机网络TCP/UDP知识点

这是一些在学习过程中关于计算机网络八股文的一些知识点记录&#xff1a; TCP/UDP TCP怎么保证可靠性 1.序列号&#xff0c;确认应答&#xff0c;超时重传 数据到达接收方&#xff0c;接收方需要发出一个确认应答&#xff0c;表示已经收到该数据段&#xff0c;并且确认序号…

有哪些核定生产能力的方法?详解标准工时的测定方法与核定方法!

在当今制造业的快速发展中&#xff0c;生产能力管理已成为企业核心竞争力的关键。它不仅关系到企业如何高效地满足市场需求&#xff0c;更直接影响到生产成本的控制和市场响应速度。准确核定生产能力&#xff0c;是实现生产计划与企业资源优化配置的桥梁。本文将深入探讨核定生…

KCP源码解析系列(一)KCP协议介绍

一、什么是KCP TCP是为流量设计的&#xff08;每秒内可以传输多少KB的数据&#xff09;&#xff0c;讲究的是充分利用带宽。而 KCP是为流速设计的&#xff08;单个数据包从一端发送到一端需要多少时间&#xff09;&#xff0c;以10%-20%带宽浪费的代价换取了比 TCP快30%-40%的…

Linux环境安装Docker Engine并打包部署Java项目

文章目录 1、卸载老版本2、配置docker仓库3、安装最新版docker4、启动docker启动重启开机启动停止查看状态&#xff1a;已经启动查看状态&#xff1a;没有启动 5、查看版本6、运行hello world测试7、配置镜像8、使用docker安装一个应用9、其他命令查看运行的docker应用查看容器…

【网络ping】无法ping通电脑 服务器失败是什么原因

【网络ping】无法ping通电脑 服务器失败是什么原因 转载&#xff1a; https://www.lsjlt.com/ask/show/show.php?id80772631782 点击此处 查看博文《无法ping通的原因》 一、无法ping 通的原因 网络连接问题&#xff1a;首先需要检查网络连接是否正常。可以尝试通过ping其他…

全国首个数据要素人才标准,亿信华辰携76家单位共同起草

在数字化浪潮汹涌的今天&#xff0c;数据已跃升为社会经济发展的核心引擎。如何精准、高效地评估数据要素领域人才的专业能力&#xff0c;成为了亟待解决的关键议题。亿信华辰积极响应国家战略布局&#xff0c;依托自身在大数据管理与应用领域的深厚底蕴&#xff0c;携手业界76…

阿里推出视频 AI 生成式框架 Tora,通过轨迹生成视频

在科技高速发展的今天&#xff0c;AI 已经开始融入人们的生活&#xff0c;就在不久前阿里集团推出了一款可以生成视频的 AI 框架 Tora&#xff0c;这是一款可以面向轨迹的 DiT 框架&#xff0c;它可以结合文本、视觉以及轨迹生成视频。 Tora 之前有可以生成视频的模型也就是扩…

Docker数据管理和网络管理

文章目录 一、Docker数据管理Docker容器的分层哪些数据需要持久化容器数据持久保存方式数据卷&#xff08;data volume&#xff09;数据卷的使用场景数据卷的特点数据卷使用方法实际例子 二、网络管理Docker安装完成后默认的网络设置创建容器后的网络配置修改默认网络设置容器名…

vue3前端开发-小兔鲜-购物车的列表渲染和删除及统计计算

vue3前端开发-小兔鲜-购物车的列表渲染和删除及统计计算&#xff01;这一次&#xff0c;完成列表的渲染和统计计算的内容&#xff0c;比如&#xff0c;统计购物车内有多少货物的数量&#xff0c;及商品的总价格。 <script setup> import { useCartStore } from /stores/c…

RPA财务机器人是什么,RPA的具体应用场景有哪些?| 实在RPA研究

越来越多的人工智能及超自动化技术在企业财务工作中得以普及应用&#xff0c;以提升财务工作效率&#xff0c;促进财务部门实现全面数字化转型。 RPA财务机器人是什么&#xff1f; RPA&#xff0c;即机器人流程自动化&#xff08;Robotic Process Automation&#xff09;&#…

【方案合集】园区数据治理解决方案(PPT原件)

1、园区大数据治理综述 2、园区大数据治理总体架构 3、园区大数据治理演进路线 4、园区大数据治理建设实施 软件全套资料部分文档清单&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明书&#xff0c;需求调研计划…

大模型的当前和未来

自2022年年底ChatGPT打响大模型热潮第一枪&#xff0c;至今已有一年半多的时间&#xff0c;大模型持续受到业界高度关注。大模型当前发展情况如何&#xff0c;未来又将如何演进发展&#xff1f; 大模型入门 1.什么是大模型、超大模型和Foundation Model&#xff1f; 大模型**…