进程的优先级与切换

1.进程的概念

1.1进程的优先级是什么

cpu资源分配的先后顺序,就是进程的优先级。
1.2为什么要有优先级

cpu资源是有限的,要分配资源

优先级高的进程可以优先执行,配置优先级对于多任务环境的linux系统很有用,可以有效的提高效率。
1.3linux靠什么设计进程的优先级

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

NI:代表这个进程的nice值
nice值:进程优先级的修改数据

1.2.nice值

1.概念

PRI值越⼩越快被执⾏,那么加⼊nice值后,

将会使得PRI变为:PRI(new)=PRI(old)+nice

这样,当nice值为负值的时候,那么该程序将会优先级值将变⼩,即其优先级会变⾼,则其越快

被执⾏所以,调整进程优先级,在Linux下,就是调整进程nice值
2.nice值的范围

nice其取值范围是-20⾄19,⼀共40个级别。

并且优先级不能频繁修改,会影响系统整体的进程执行安排
3.nice值为什么有范围

系统默认PRI为80,那么有了nice值后其范围为60 - 99。

设置范围是因为如果优先级如果差距过大,低优先级进程可能永远无法得到执行机会,无法满足在一段时间内所有的进程都分配到cpu的资源,这样是不公平的

例如,你要同时听歌,打游戏,如果优先级设置的差距过大会导致音乐进程每几秒才能获得几毫秒的CPU时间,导致

音乐节奏混乱,完全无法正常听歌

1.3.补充概念-竞争、独⽴、并⾏、并发

• 竞争性:系统进程数⽬众多,⽽CPU资源只有少量,甚⾄1个,所以进程之间是具有竞争属性的。为

了⾼效完成任务,更合理竞争相关资源,便具有了优先级

• 独⽴性:多进程运⾏,需要独享各种资源,多进程运⾏期间互不⼲扰

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

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

之为并发

2.进程的切换

1.进程的上下文

2.Linux2.6内核进程O(1)调度队列

⼀个CPU拥有⼀个runqueue(调度队列)

补充:

• 普通优先级:100〜139(我们都是普通的优先级,想想nice值的取值范围,可与之对应!)

• 实时优先级:0〜99(暂时不关⼼)

*我们主要关注*active,expired,nr_active,bitmap5,qunue140

调度队列里有分别有活动队列和过期队列

• active指针永远指向活动队列

• expired指针永远指向过期队列

先来说活动队列

1.时间片还没有结束的进程按照优先级放在该队列

2.nr_active:总共有多少个运⾏状态的进程

3.queue140:⼀个元素就是⼀个进程队列,相同优先级的进程按照FIFO规则进⾏排队调度,所以,

数组下标就是优先级!
系统是如何按顺序选择进程的?

1.在qunue数组中从0开始遍历

2.找到第⼀个⾮空队列,该队列必定为优先级最⾼的队列

3.拿到选中队列的第⼀个进程,开始运⾏,调度完成!

4.遍历queue140时间复杂度是常数!但还是太低效了!

• bitmap5:⼀共140个优先级,⼀共140个进程队列,为了提⾼查找⾮空队列的效率,就可以⽤

5*32个⽐特位表⽰队列是否为空,这样,便可以⼤⼤提⾼查找效率

过期队列同理,当进程从活动对列跑完后进入过期队列,当活动对列的进程都结束后交换active指针与expired指针所指的队列

就相当于有具有了⼀批新的活动进程!

相关推荐
ManageEngineITSM6 小时前
工单分类怎么设计?类别、子类别与自动分派的实用方法
大数据·服务器·数据库·人工智能·分类·数据挖掘
CANI_PLUS7 小时前
电脑文件共享
运维·服务器
Linux界最忧郁之人7 小时前
华为云ECS&IMS&AS实战|弹性云服务器、私有镜像、弹性伸缩完整实验
linux·运维·服务器·centos·华为云·openstack
whyutianict_vv7 小时前
零基础转 AI 运维:投入清单、技术路线与核对表
linux·运维·人工智能·ai
无言听风雨丶7 小时前
systemd 与信号 / 僵尸进程:Linux 进程管理的底层逻辑与排错
linux·服务器·网络
DevOpenClub8 小时前
高考一分一段 API:分数查位次、科类枚举与历史对照
linux·数据库·高考
小贾要学习8 小时前
【C++后端开发项目】Reactor 模型 / C++ 仿写 muduo HTTP 服务器:让底层网络库真正跑起网页
linux·服务器·c++·http·网络编程·muduo·reactor模型
g5zhu58968 小时前
没有公网ip的情况下,本地能ping服务器服务器不能ping本地,让服务器能访问本地某端口的简单方法
服务器·网络协议·tcp/ip
Blockbuater_drug8 小时前
OpenMM分子动力学模拟02 安装:Linux:conda 一条命令装通 GPU 加速的分子模拟环境
linux·conda·cuda·gpu驱动·pythonpath·openmm安装
程序员JerrySUN8 小时前
PCIe Gen5 SSD 为什么读得快、写得慢?从存储原理到 Linux 性能实测
linux·服务器·网络