当前位置: 首页 > news >正文

Linux系统之----进程优先级、调度与切换

在开启本篇文章的学习之前,我们先要熟悉如下两个事

1.概念

进程优先级指的是进程能得到某种资源的先后顺序,要理解好它与权限的关系,优先级是   能,拥有资源的先后顺序,权限是  能还是不能的问题

2.为什么要有优先级?

因为资源是有限的,本质就是资源少进程多!!!在竞争CPU资源!Linux的优先级在task_strect里面。

3.解剖优先级

我们随便撬开一个进程:

我们会发现有几个东西:UID、PRI和NI,那这两个都是什么呢?

答案是:
UID : 代表执行者的身份

PRI :代表这个进程可被执行的优先级,其值越小越早被执行

NI :代表这个进程的nice值
 

3.1 PRI(Priority)

定义:PRI代表进程的优先级,决定了操作系统调度进程的顺序。PRI值越小,进程的优先级越高。

特点:PRI是一个动态值,内核会根据进程的运行状态自动调整。

取值范围:Linux系统中,PRI的取值范围是0到139。其中,0到99是实时进程的优先级范围,100到139是普通进程的优先级范围。

PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice

实际上,我们上文看到的是PRI(new)值,在这里PRI(old)固定为80,我们是通过修改NI值来改变进程优先级的!!

3.2 NI(Nice值)

定义:NI是进程的静态优先级修正值,用于调整进程的优先级。通过修改nice值,可以间接改变进程的优先级。

特点:NI值是一个静态值,通常由用户手动设置,内核一般不会主动修改。

取值范围:NI值的取值范围是-20到19,一共40个级别。正值表示降低优先级,负值表示提高优先级。

3.3 总结

1)优先级范围

在Linux系统中,普通用户进程的优先级范围是60到99,一共40个级别。数值越小,表示进程的优先级越高。默认情况下,进程的优先级是80。

2)原因

这个范围限制是为了保持系统调度的公平性,防止用户随意将进程的优先级设置得过高或过低,从而避免进程饥饿问题。(这也是为什么NI值设置在【-20,19】之间的原因

3)作用

实时进程优先:在Linux中,实时进程的优先级高于普通用户进程,因为实时进程需要即时响应,不受其他普通进程的影响。实时进程的优先级范围通常是0到99。

防止饥饿:通过限制普通进程的优先级范围,确保系统中的每个进程都有机会获得CPU资源,避免某些进程因优先级过低而长时间无法执行。

3.4 查看与修改 

 查看:可以通过ps -l命令查看进程的PRI和NI值。

 修改:可以使用nice命令在启动进程时设置NI值,或者使用renice命令动态调整正在运行的进程                的NI值。或者top命令,进入后按r,输入PID值和要更改的NI值。

4.概念补充

竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。                 为了高效完成任务,更合理竞争相关资源,便具有了优先级

独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰(进程之间是相互隔离的)

并行:     多个进程在多个CPU下分别,同时进行运行,这称之为并行

并发:  多个进程在⼀个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称

           之为并发

5.进程切换

CPU上下文切换:其实际含义是任务切换, 或者CPU寄存器切换。当多任务内核决定运行另外的任务时, 它保存正在运行任务的当前状态, 也就是CPU寄存器中的全部内容。这些内容被保存在任务自己的堆栈中, 入栈工作完成后就把下⼀个将要运行的任务的当前状况从该任务的栈中重新装入CPU寄存器, 并开始下⼀个任务的运行, 这一过程就是context switch。

5.1 时间片

时间片:当代计算机都是分时操作系统,没有进程都有它合适的时间片(其实就是⼀个计数
器)。时间片到达,进程就被操作系统从CPU中剥离下来。换句话说,它指的是允许一个进程在CPU上连续运行的最长时间。在多任务操作系统中,时间片机制用于在多个进程或线程之间分配CPU资源,确保每个进程都有机会运行。
我们当前的系统,都是分时系统,每一个进程都有自己的时间片

5.2 函数返回值问题

首先我们要先明确一个点,CPU内,寄存器,就是一套存储空间,寄存器只有一套,属于CPU本身,但是,寄存器内部的数据,可以有很多。
好了,现在有哥们问:我们之前C语言写的函数,会有返回值,而返回值的本质就是函数内部的变量,而函数内部的变量,不是具有临时性吗?不是只在函数内部有效吗?不是有作用域吗?它是怎么返回的呢?
原因是它返回的是一份拷贝,那这个拷贝是在哪里呢?以1-100求和为例,我的sum是个临时变量,每次+=之后,都会将数据保存在寄存器上,函数调用完会将其返回值记录在寄存器里,这样返回值就会被外部函数获得。

6.O(1)调度

O(1)调度算法是Linux内核中的一种进程调度算法,因时间复杂度为常数级别而得名,与进程数量无关。其核心思想是通过维护特定的数据结构,快速选择下一个要运行的进程

数据结构如下:

O(1)调度器为每个CPU维护两个队列:active队列(存放时间片未用完的任务)和expired队列(存放时间片已耗尽的任务)。

每个队列按优先级分为多个数组,对应不同的优先级。优先级范围为0~139,其中0~99为实时进程优先级,100~139为普通进程优先级。

我们注意到圈圈里面都有一个queue[140],bitmap[5],不同的是上面蓝色的当前是 active队列,下面红色的是expired队列。一个圈又是一个结构体,我们不妨定义为struct q,那这里红圈和蓝圈实际上是一个结构体数组,写为struct q array[2],蓝圈为array[0],红圈为array[1]

6.1 queue[140]

实际上,它是由结构体数组指针构成的,写作 struct tasj_struct * ,之后由链表连接而成,所以还有一个struct list_head,从0到139,总共140个,【0,99】我们先不管,先只看【60,99】,之后按优先级进行调度,这样,CPU在调度的时候只需将各个数组打开,如果里面指针为空,那就下一个,直到找到不为空的位置,但是倘如我们的进程在最后一个,139的位置,那我们的CPU岂不是还要在遍历一遍数组?实际上,不需要!这里就要看上面的那个bitmap了!

6.2 bitmap

有人可能会好奇,为什么是5而不是别的数字,实际上,这是因为我们的Int是32位,32*5=160,而32*4=128,128不够139,所以我们确定【】里面为5,而这160比特位我们称之为位图!!

6.2.1 位图

位图由一堆0和1组成,比特位位置:数组中第几个队列,比特位内容:表明该队列是否为空,为1则不为空,说明当前对应位置上挂着进程呢!

这样一来,操作系统只需要看bitmap【5】,即可确定里面那个位置有优先级最高的进程,于是便可以进行调度了!

这里在补充说明一点:CPU调度的时候,是直接从active指针,找到对应的queue[140],而我们的新增进程以及时间片到了的进程,会被从CPU上剥离下来,并重新入队列,入的是过期队列!!!

而我们的新增进程也是在这个时候会根据优先度来调度,判断出入过期队列的哪一部分的!

还有一点值得提的是,CPU调度完之后,就会跑到过期队列中,所以当我们调度完所有进程之后,所有进程都跑到过期队列中!而一但active没有进程了,那么swap(&active,&expired),交换两个指针的内容,继续调度!

6.3 总结

在系统当中查找⼀个最合适调度的进程的时间复杂度是一个常数,不随着进程增多而导致时间成
本增加,我们称之为进程调度O(1)算法!

相关文章:

  • 自然语言处理(NLP)——语言转换
  • WebAssembly:开启高性能Web应用新时代
  • 高性能服务器配置经验指南3——安装服务器可能遇到的问题及解决方法
  • C#基于Sunnyui框架和MVC模式实现用户登录管理
  • 棋盘格角点检测顺序问题
  • 几种查看PyTorch、cuda 和 Python 版本方法
  • 如何在 Unity 中导入 gltf /glb 文件
  • Vision-Language Dual-Pattern Matching for Out-of-Distribution Detection
  • 【国产化之路】VPX-3U :基于D2000 /FT2000的硬件架构到操作系统兼容
  • 鸿蒙-状态管理V1和V2在ForEach循环渲染的表现
  • Linux命令-perf
  • 企业为何要求禁用缺省口令?安全风险及应对措施分析
  • 论文笔记(七十九)STOMP: Stochastic Trajectory Optimization for Motion Planning
  • 如何创建极狐GitLab 议题?
  • 论文阅读笔记——π0.5: a Vision-Language-Action Model with Open-World Generalization
  • SpringBoot 封装统一API返回格式对象 标准化开发 请求封装 统一格式处理
  • 【Yolo精读+实践+魔改系列】Yolov1论文超详细精讲(翻译+笔记)
  • 字典与集合——测试界的黑话宝典与BUG追捕术
  • 系统思考:技术与产品协同
  • SLAM常用地图对比示例
  • 神舟二十号载人飞船与空间站组合体完成自主快速交会对接
  • 上海天文馆加持,书友可在徐家汇书院“飞越银河系”!
  • 金湘军辞去山西省省长职务
  • 蔚来李斌:当下国际贸易环境有不确定性,但坚信中国汽车产业最终将占全球四成份额
  • 新“出差三人组”亮相!神二十乘组简历来了
  • 从香料到文化,跟着陈晓卿寻味厦门