Linux学习之路 -- PCB介绍 -- 进程优先级

1、什么是优先级?

进程需要某一种资源,而系统要通过特定的方式来决定谁先获得这些资源,而系统的做法就是给不同的进程安排不同的优先级。让优先级高的进程先享有一些资源。

2、为什么要有优先级

因为资源的缺乏,所以系统的才会设置优先级来安排哪一个进程先享有某些资源。在我们的电脑上可能只有一块cpu。但是,我们可能有上百个进程需要运行,这时候cpu资源就变得很紧缺了,所以我们就需要用优先来确定哪些进程可以先享有这些资源。

3、在Linux中的优先级

这里我们可以用一段简单的代码看看liunx系统中的优先级。

运行这段代码,并用ps -al 命令查看进程状态(这里ps -al 命令其实就是显示该用户运行的进程的情况)

这里右侧就是ps命令的执行结果,其中,我们可以看到一列PRI,这个就一般就可以看作linux系统下的优先级,而在我们的进程的task_struct里面,PRI其实就是一个整数。而这个整数默认一般都是80。(在其他操作系统中,默认值可能略有不同)。

在linux系统中,这个优先级是可以被修改,而linux的优先级的范围区间是[ 60 , 99 ],这里面有40个优先级,而这个表示优先级的数字越小,优先级越高。而在linux默认的优先级值是80(这里的PRI是内核调度器根据nice值来计算的,nice值的取值范围是[-20,19],这个nice是优先级的修正值。但是需要注意的,系统的PRI不一定是80,不同系统的PRI可能不同,这个值的计算也受多种因素的影响,主要分为这几个:

  1. nice值:这是用户可以通过nice命令设置的一个值,用于调整进程的优先级。nice值的范围是从-20到19,其中-20表示最高优先级(对于普通用户),19表示最低优先级。nice值越高,进程的优先级越低。

  2. 进程的调度类:Linux支持实时(RT)和标准(SCHED_OTHER)两种调度类。实时进程通常具有较高的优先级,可以抢占标准进程的CPU时间。

  3. 进程的状态:如等待(sleeping)、运行(running)、阻塞(blocked)等。不同的状态可能会影响进程的调度优先级。

  4. 进程的调度策略:Linux有多种调度策略,如CFS(Completely Fair Scheduler)、RR(Round Robin)等。不同的策略会对进程的优先级有不同的处理方式。(CFS其实算一个进程调度器,其调度策略是公平的,每个进程都可以得到公平的CPU时间)

  5. CPU亲和性:进程可以绑定到特定的CPU核心上,这可能会影响其优先级。绑定到高优先级核心的进程可能会获得更多的CPU时间。

  6. 进程的优先级队列:在某些调度策略中,如CFS,进程会被分配到一个优先级队列中。队列的优先级会影响进程的调度顺序。

  7. 进程的调度权重:在某些调度策略中,如CFS,每个进程都有一个调度权重,这会影响进程的调度优先级。

  8. CPU负载:如果系统处于高负载状态,调度器可能会调整进程的优先级以保证系统的稳定性和响应性。

  9. 系统配置:系统管理员可以通过修改系统配置文件(如/etc/sysctl.conf)来全局性地调整进程的优先级。

)

如果我们需要修改修改优先级,我们就可以根据上面的影响因素来对优先级进行调整(这里一般不建议随意调整),这里只介绍通过nice值调整优先级,其他方法可自行查阅(通过将进程调整为实时调度策略,cpu亲和性,修改系统文件改变进程调度权重等等)

这里我们可以先运行一个程序

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<stdlib.h>int main()
{while(1){printf("I am a process, pid:%d\n,",getpid());sleep(1);}return 0; 
}

然后打开top监视窗口,按R键,此时光标闪动的地方就是需要输入我们想要修改的进程的PID.

然后修改我们的nice值,输入10(意思就是让这个进程的优先级增加10)

此时我们就会发现,修改完后的PRI变成了90,NI(nice值)变成了10。这里的PRI = PRI(old) + nice ,需要注意的是,这里的nice值是覆盖式写入,意思就是第二次假如我输入的是-10,那这里的NI,就会变成-10,而不是0。同时,这里old也一直是80,所以第二次修正nice值后,PRI是变成了70,而不是由第一次的90变为80。

测试优先级的极值:我们可以测试一下当前进程的最大和最小优先级,这里我们直接把nice值输入成100,然后观察结果

这里我们可以看见,PRI最多就增长到99就停止了,而NI也没有变成100,而是变成19。同理,我们可以测出PRI最小减少到60就停止了,NI最小也就是-20。那这里为什么我们要对这些进程的优先级做一个限制呢? 如果我们的优先级不被限制的话,有人为了让自己的优先级更高,会无限制地调低优先级。而优先级更高地进程是能更快地享受CPU资源的,如果把用户把个人的进程优先级设置太高,就会造成常规进程迟迟无法享有CPU进程,这也叫做进程饥饿状态。

希望文章内容能对你有些许帮助,文中如有不当之处,还望各位大佬指正,谢谢!!!

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

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

相关文章

C# 开源 工业相机库 调用海康相机 大恒相机

C# MG.CamCtrl 工业相机库 介绍一、使用案例二、使用介绍1、工厂模式创建实例2、枚举设备&#xff0c;初始化3、启动相机4、取图5、注销相机 三、接口1、相机操作2、启动方式3、取图4、设置/获取参数 介绍 c# 相机库&#xff0c;含海康、大恒品牌2D相机的常用功能。 底层采用回…

Django模型的字段选项

每一种字段类型都需要指定一些特定的参数。例如&#xff0c;CharField&#xff08;及其子类&#xff09;需要接收一个max_length参数&#xff0c;用以指定数据库存储VARCHAR数据时的字节数。 一些可选的参数是通用的&#xff0c;可以用于任何字段类型&#xff0c;下面具体介绍…

访问学者申请的成功经验

在申请成为访问学者时&#xff0c;经验是至关重要的。下面知识人网小编将介绍一些可以帮助您成功申请的经验和技巧。 首先&#xff0c;了解目标机构或大学的研究方向和需求是非常重要的。在申请之前&#xff0c;仔细研究该机构的学术项目、研究成果以及教授的专业领域&#xff…

C++笔试强训day2

目录 1.牛牛的快递 2. 最小花费爬楼梯 3.数组中两个字符串的最小距离 1.牛牛的快递 链接 单纯分类讨论&#xff0c;不加赘述。 详细代码&#xff1a; #include <iostream> using namespace std; #define ll long long int main() { float mg; char st; cin >>…

[C++][算法基础]最大公约数(欧几里得算法)

给定 n 对正整数 ,&#xff0c;请你求出每对数的最大公约数。 输入格式 第一行包含整数 n。 接下来 n 行&#xff0c;每行包含一个整数对 ,。 输出格式 输出共 n 行&#xff0c;每行输出一个整数对的最大公约数。 数据范围 1≤n≤, 1≤,≤2 输入样例&#xff1a; 2 3 …

C/C++基础----内存相关

malloc分配内存 用法 参数为要开辟内存的大小&#xff08;字节为单位&#xff09;返回值为void*,所以要强转一下语法&#xff1a;malloc()动态开辟20个字节的内存&#xff0c;代码&#xff1a;#include <iostream>using namespace std;int main() {int *a (int *) mal…

基于Hadoop的电商用户行为分析系统设计与实现的系统架构设计

采集层&#xff1a;利用Flume采集电商服务器端用户行为数据&#xff0c;把数据处理后发送至HDFS。 存储层&#xff1a;用户行为数据采集上传至HDFS存储&#xff0c; 导入到数据仓库Hive进行计算处理&#xff0c;分析结果保存至MySql数据库中。 计算层&#xff1a;根据分析需求建…

Vue2+ElementUI的el-table实现新增数据行与删除的功能

Vue2ElementUI的el-table实现新增数据行与删除的功能 文章目录 Vue2ElementUI的el-table实现新增数据行与删除的功能1. 代码2. 效果 1. 代码 TableIndex.vue如下 <template><div><div><el-button click"add" class"filter-item" pl…

通过ABAP程序自动创建信息对象-第二弹

前言 上一篇讲了通过ABAP程序去自动生成BW的ADSO模型&#xff0c;这一篇讲讲信息对象的自动生成&#xff0c; 一、实现效果 对于BW顾问来说&#xff0c;模型建完之后&#xff0c;就要开始选择用字段还是用信息对象进行建模&#xff0c;如果信息对象不存在呢&#xff0c;那么…

SpringBoot整合Activiti7——实战之放假流程(会签)

文章目录 代码实现部署流程启动流程填写放假通知任务投票审批xml文件 会签场景&#xff1a; 开始 - 填写放假通知单&#xff08;代理人&#xff09;- 投票审批&#xff08;指定多个参与人&#xff09;- 根据设置的完成条件后&#xff0c;全部参与人必须完成后&#xff0c;自动结…

小米su7全力提高产能,小米su7的这几个问题你都知道吗?车载随身wifi哪款最好用?公认最好的随身wifi格行随身wifi怎么样?

小米汽车官方近日回应网友关切&#xff0c;透露小米SU7非创始版交付进度。工厂正处于生产爬坡阶段&#xff0c;正全力提升产能和物料准备节奏&#xff0c;以加快交付效率。对于锁单后能否调整提车时间&#xff0c;小米汽车表示将与销售沟通协商。 当然关于网友们的问题也进行了…

条码的基础知识

条码的基础知识 条码&#xff1a;条码是由一组按一定编码规则排列的条、空符号组成&#xff0c;用以表示一定的字符、数字及符号组成的信息 一维码 Code 128 Code 128 是一种密度很高的字母数字代码系统&#xff0c;可对其进行双向扫描。此代码系统可编码整个 128 ASCII 字…

ERROR in [eslint] reorder to top import/first

情景再现&#xff1a;在react开发的时候&#xff0c;导入组件、函数时报错&#xff1a;Import in body of module; reorder to top import/first … 原因&#xff1a;在import语句前有变量声明 解决&#xff1a; 变量的声明&#xff0c;要放在import之后 // 错误示例 import {…

物联网网络传输,STM32和ESP32

2024.4.17 今天主要是记录一下我这个STM32F407和esp8266组成的互联网板子的一些例程运行心得&#xff0c; 下面这个例程是STM32发AT指令给esp8266&#xff0c;使得esp8266作为tcp client连接到我的手机热点&#xff0c;然后我用电脑连接wifi&#xff0c;打开tcp server&#x…

【CDN产品测评-笔记】探索云服务中的安全和性能增强功能

【CDN产品测评-笔记】探索云服务中的安全和性能增强功能 写在最前面1. DNS管理&#xff1a;核心的域名服务功能2. DDoS防护&#xff1a;构筑坚不可摧的防线3. Web防护&#xff1a;智能化的网络攻击防御4. BOT管理&#xff1a;精准识别与流量控制5. 加速服务&#xff1a;提升全球…

【动态规划 区间dp 位运算】3117. 划分数组得到最小的值之和

本文涉及知识点 动态规划 区间dp 位运算 LeetCode3117. 划分数组得到最小的值之和 给你两个数组 nums 和 andValues&#xff0c;长度分别为 n 和 m。 数组的 值 等于该数组的 最后一个 元素。 你需要将 nums 划分为 m 个 不相交的连续 子数组&#xff0c;对于第 ith 个子数组…

各RAID级别的特点以及对应的容量计算方式

RAID&#xff08;Redundant Array of Independent Disks&#xff09;是一种将多个独立的硬盘组合起来以提高数据存储性能、容量或冗余度的技术。在实际项目中&#xff0c;通常采购的磁盘阵列支持设置对应的RAID级别。本人也进行过实战&#xff0c;而现在为了应对软考来总结一下…

【攻防世界】lottery

弱比较代码审计 本题已提供源码&#xff0c;如果没提供&#xff0c;输入/robots.txt&#xff0c;发现/.git function buy($req){require_registered();require_min_money(2);$money $_SESSION[money];//接受用户原有money$numbers $req[numbers];//接受输入的数字$win_num…

C++类和对象第二弹(构造,析构和拷贝构造函数)

目录 前言 1. 类的6个默认成员函数 2. 构造函数 2.1 概念 2.2 特性 3. 析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 总结 前言 本文主要讲解类中构造函数、析构函数和拷贝构造函数。关于这三个类中默认成员函数的知识点很多&#xff0c;有许多…

视觉SLAM学习打卡【10】-后端·滑动窗口法位姿图

本节是对上一节BA的进一步简化&#xff0c;旨在提高优化实时性.难点在于位姿图部分的雅可比矩阵求解&#xff08;涉及李代数扰动模型求导&#xff09;&#xff0c;书中的相关推导存在跳步&#xff08;可能数学功底强的人认为过渡的理所当然&#xff09;&#xff0c;笔者参考了知…