图解Linux进程优先级

目录

1.什么是进程优先级?

2.进程优先级原理

3.查看进程优先级

4.修改进程优先级

4.1 setpriority函数原型

4.2 getpriority函数原型

4.3 sched_setscheduler函数原型

4.4 sched_getscheduler函数原型

4.5 sched_setparam函数原型

4.6 sched_getparam函数原型


1.什么是进程优先级?

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

Linux进程的优先级分为实时优先级和普通优先级。

实时优先级用于实时应用程序,如硬实时任务和实时控制系统,而普通优先级用于非实时应用程序。

2.进程优先级原理

图片

  • 实时进程:动态优先级为0-99的进程,采用实时调度算法调度。

  • 普通进程:动态优先级为100-139的进程,采用完全公平调度算法调度。

  • nice值:是用于调整普通进程优先级的参数。范围:-20-19。

2.1 task_struct优先级

task_struct {

......

int             prio; 

int             static_prio;

int             normal_prio;

unsigned int            rt_priority; 

};

  • prio(动态优先级)

动态优先级,有效优先级,调度器最终使用的优先级数值,范围0-139,值越小,优先级越高。

  • static_prio(静态优先级)

静态优先级,采用SCHED_NORMAL和SCHED_BATCH调度策略的进程(即普通进程)用于计算动态优先级的,范围100-139。

prio = static_prio = nice + DEFAULT_PRIO = nice + 120。

  • normal_prio(归一化优先级)

用于计算prio的中间变量,不需要太关心。

  • rt_priority(实时优先级)

实时优先级,采用SCHED_FIFO和SCHED_RR调度策略进程(即实时进程)用于计算动态优先级,范围0-99。

prio = MAX_RT_PRIO - 1 - rt_prio = 100 - 1 - rt_priority;

实时优先级数值越大,得到的动态优先级数值越小,优先级越高。

图片

3.查看进程优先级

3.1 执行ps -elf 命令查看进程优先级

PRI:进程优先级,数值越小,优先级越高。(并非动态优先级)

NI:nice值。

图片

3.2cat /proc/PID/sched查看进程调度信息

policy:调度策略

prio:动态优先级

图片

4.修改进程优先级

4.1 setpriority函数原型

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

功能:setpriority函数用于设置进程nice值。

参数:

which:指定要修改nice值的对象,可以是以下值之一:

  • PRIO_PROCESS:用于修改指定进程的优先级。

  • PRIO_PGRP:用于修改指定进程组的优先级。

  • PRIO_USER:用于修改指定用户的所有进程的优先级。

who:指定被修改优先级的对象的标识符。

  • 如果which为PRIO_PROCESS,则who为目标进程的进程ID(PID)。

  • 如果which为PRIO_PGRP,则who为目标进程组的进程组ID(PGID)。

  • 如果which为PRIO_USER,则who为目标用户的用户ID(UID)。

prio:新的nice值,范围通常为-20到19之间。

返回值:

成功:返回0。

失败:返回-1,并设置errno。

4.2 getpriority函数原型

int getpriority(int which, id_t who);

功能:getpriority函数用于获取进程nice值。

参数:

which:指定要获取nice值的对象,可以是以下值之一:

  • PRIO_PROCESS:用于修改指定进程的优先级。

  • PRIO_PGRP:用于修改指定进程组的优先级。

  • PRIO_USER:用于修改指定用户的所有进程的优先级。

who:指定获取nice值的对象的标识符。

  • 如果which为PRIO_PROCESS,则who为目标进程的进程ID(PID)。

  • 如果which为PRIO_PGRP,则who为目标进程组的进程组ID(PGID)。

  • 如果which为PRIO_USER,则who为目标用户的用户ID(UID)。

返回值:

成功:返回nice值。

失败:返回-1,并设置errno。

4.3 sched_setscheduler函数原型

int sched_setscheduler(pid_t pid, int policy, const struct sched_param *param);

功能:sched_setscheduler函数是Linux系统中用于设置进程调度策略和优先级的系统调用。

参数:

pid:进程ID,0表示当前进程。

policy:表示要设置的调度策略,常用的调度策略有以下几种选项:

  • SCHED_OTHER:普通进程调度策略。

  • SCHED_FIFO:先进先出调度策略。

  • SCHED_RR:轮转调度策略。

param:是一个指向sched_param结构的指针,用于指定优先级参数。

struct sched_param {

               ...

               int sched_priority; 

               ...

 };

返回值:

成功:返回0。

失败:返回-1,并设置errno。

sched_setscheduler使用注意事项:

图片

调度策略在内核中的定义:

图片

4.4 sched_getscheduler函数原型

int sched_getscheduler(pid_t pid);

功能:sched_getscheduler函数是Linux系统中的一个于获取指定进程的调度策略。

参数:

pid:进程id,0表示当前进程。

返回值:

成功:返回调度策略:

  • SCHED_OTHER

  • SCHED_FIFO

  • SCHED_RR

  • SCHED_BATCH

  • SCHED_IDLE

失败:返回-1,并设置errno。

4.5 sched_setparam函数原型

int sched_setparam(pid_t pid, const struct sched_param *param);

功能:sched_setparam用于设置进程实时优先级,该函数不能设置调度策略。

参数:

pid:进程id,0表示当前进程。

param:参数sched_setscheduler函数。

返回值:

成功:返回0。

失败:返回-1,并设置errno。

4.6 sched_getparam函数原型

int sched_getparam(pid_t pid, struct sched_param *param);

功能:sched_getparam用于获取指定进程的实时优先级。

参数:

pid:进程id,0表示当前进程。

param:参数sched_setscheduler函数。

返回值:

成功:返回0。

失败:返回-1,并设置errno。

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

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

相关文章

Unity Perception合成数据生成、标注与ML模型训练

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D场景编辑器 任何训练过机器学习模型的人都会告诉你,模型是从数据得到的,一般来说,更多的数据和标签会带来更好的性能。 …

限制LitstBox控件显示指定行数的最新数据(3/3)

实例需求:由于数据行数累加增加,控件加载的数据越来越多,每次用户都需要使用右侧滚动条拖动才能查看最新数据。 因此希望ListBox只加载最后10行数据(不含标题行),这样用户可以非常方便地选择数据&#xff…

JMeter组件

1.JMeter常用组件 必须组件:测试计划,线程组(包含多个线程),取样器 测试计划,JMeter默认创建且仅有一个 线程组: 添加步骤: 选择TestPlan并点击鼠标右键添加 分类以及使用&…

Spring Data Redis + RabbitMQ - 基于 string 实现缓存、计数功能(同步数据)

目录 一、Spring Data Redis 1.1、缓存功能 1.1.1、分析 1.1.2、案例实现 1.1.3、效果演示 1.2、计数功能(Redis RabbitMQ) 1.2.1、分析 1.2.2、案例实现 一、Spring Data Redis 1.1、缓存功能 1.1.1、分析 使用 redis 作为缓存, M…

curl(四)证书相关

一 证书相关 ① -k 1、客户端忽略服务端证书校验 -k | --insecure --> 单向[1]、这个选项显式地允许curl 执行不安全 的SSL连接和传输[2]、所有SSL连接都试图通过使用默认安装的CA证书捆绑包来确保安全[3]、这使得所有被认为是不安全的连接失败,除非使用-k --> 自签…

一座 “数智桥梁”,华为助力“天堑变通途”

《水调歌头游泳》中的一句话,“一桥飞架南北,天堑变通途”,广为人们所熟知,其中展现出的,是中国人对美好出行的无限向往。 天堑变通途从来不易。 中国是当今世界上交通运输最繁忙、最快捷的国家之一,交通行…

2023-在mac下安装Homebrew的国内镜像

mac安装Homebrew的国内镜像 尝试使用其他下载源:GitHub 可能会受到访问限制,尝试使用其他镜像或下载源。您可以使用清华大学、中科大或阿里云的 Homebrew 镜像,以提高下载速度和可靠性。例如,可以使用阿里云的镜像来安装 Homebre…

任务1 部署ChatGLM3-6B大模型并进行对话测试

部署ChatGLM3-6B大模型并进行对话测试 0 介绍:1 趋动云项目创建与环境配置1.1 创建项目:1.2 配置环境1.2.1 进入终端1.2.2 设置镜像源1.2.3 克隆项目,并安装依赖 2 修改代码,改路径以及启动代码3 运行代码3.1 运行gradio界面:3.2 …

雷池WAF社区版的使用教程

最近听说了一款免费又好用的WAF软件,雷池社区版,体验了一下虽然还有很多改进的空间 但是总体来说很适合小站长使用,和学习使用 也建议所有想学防火墙和红队(攻击队)练习使用,听说给官网提交绕过还有额外的…

ZKP Introduction of Nova (Yu Guo) 手写笔记

ZKP学习笔记 郭宇老师Nova课程手写笔记

你知道Python、Pycharm、Anaconda 三者之间的关系吗?

哈喽~大家好呀 Python作为深度学习和人工智能学习的热门语言,你知道Python、Pycharm、Anaconda 三者之间的关系吗?学习一门语言,除了学会其简单的语法之外还需要对其进行运行和实现,才能实现和发挥其功能和作用。下面来介绍运行P…

机器学习(深度学习)轴承故障诊断分类(提供故障数据和python代码实现)

机器学习(深度学习)故障诊断分类(提供故障数据和python代码实现) 轴承故障数据集和python代码自取:https://mbd.pub/o/bread/ZZWTm5hw 摘要:机器学习广泛的应用于机械故障诊断和故障分类问题,本…

时间复杂度的计算技巧-算法模型中的时间复杂度如何计算,有哪些技巧呢

大家好,我是微学AI,今天给大家介绍一下时间复杂度的计算技巧-算法模型中的时间复杂度如何计算,有哪些技巧呢,算法的时间复杂度是评估算法性能和效率的一种方式,它表示算法需要执行多少次基本操作才能完成其任务&#x…

Linux文本编辑器vim使用和配置详解

vim介绍 ​ vim是Linux的一款文本编辑器,可以用来编辑代码,而且支持语法高亮,还可以进行一系列配置使vim更多样化。也可以运行于windows,mac os上。 ​ vim有多种模式,但目前我们只介绍绝大多数场景用的到的模式&…

树结构及其算法-二叉树节点的插入

目录 树结构及其算法-二叉树节点的插入 C代码 树结构及其算法-二叉树节点的插入 二叉树节点插入的情况和查找相似,重点是插入后仍要保持二叉查找树的特性。如果插入的节点已经在二叉树中,就没有插入的必要了,如果插入的值不在二叉树中&…

集线器、交换机、网桥、路由器、网关

目录 集线器(HUB)交换机(SWITCH)网桥(BRIDGE)路由器(ROUTER)网关(GATEWAY)交换机和路由器的区别参考 集线器(HUB) 功能 集线器对数据的传输起到同步、放大和整形的作用 属于物理层设备 工作机制 使用集线器互连而成的以太网被称为共享式以太网。当某个主机要给另一个主机发送单…

轻量封装WebGPU渲染系统示例<13>- 屏幕空间后处理效果(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/main/src/voxgpu/sample/ScreenPostEffect.ts 此示例渲染系统实现的特性: 1. 用户态与系统态隔离。 细节请见:引擎系统设计思路 - 用户态与系统态隔离-CSDN博客 2. 高频调用与低频调用隔离。…

【Unity实战】最全面的库存系统(五)

文章目录 先来看看最终效果前言配置商店系统数据创建另一个NPC绘制商店UI控制商店开关列出商品添加和删除物品功能添加商品到购物车购买商品购物车删除物品商店预览效果购买和出售切换出售功能保存商店数据快捷栏物品切换和使用完结 先来看看最终效果 前言 本期也是最好一期&a…

数字孪生技术与VR:创造数字未来

在当今数字化浪潮中,数字孪生和虚拟现实(VR)技术是两大亮点,它们以独特的方式相互结合,为各个领域带来了创新和无限可能。本篇文章将探讨数字孪生与VR之间的关系,以及它们如何共同开辟未来的新前景。 数字…

FreeRTOS_事件标志组

目录 1. 事件标志组简介 2. 创建事件标志组 2.1 函数 xEventGroupCreate() 2.2 函数 xEventGroupCreateStatic() 3. 设置事件位 3.1 函数 xEventGroupClearBits() 3.2 函数 xEventGroupClearBitsFromISR() 3.3 函数 xEventGroupSetBits() 3.4 函数 xEventGroupSetB…