进程的优先级与切换

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指针所指的队列

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

相关推荐
扛枪的书生1 小时前
Linux 网络管理器用法速查
linux
顺风尿一寸4 小时前
Java Socket 内核之旅:从 SocketChannel.read() 到 tcp_recvmsg 与 epoll 的完整调用链路
linux
XIAOHEZIcode10 小时前
Ubuntu 终端美化全栈指南:Bash 到 Kitty 踩坑实录
linux·ubuntu·命令行
唐青枫12 小时前
别再只会用 cron:Linux systemd Timer 定时任务实战详解
linux
AlfredZhao2 天前
生产环境里,为什么不建议把普通端口直接暴露到公网?
linux·https·443·80
小宇子2B2 天前
三、内核入口 el0_svc / entry_SYSCALL_64 的汇编做了什么——从异常向量到 C 函数
操作系统
小宇子2B3 天前
四、从 write(1, "hello", 5) 到 ksys_write() —— sys_call_table 怎么路由的
操作系统
小宇子2B3 天前
一、printf("hello") 怎么变成 write(1, "hello", 5) —— libc 的 stdout 缓冲机制
操作系统
戴为沐3 天前
Linux内存扩容指南
linux
zylyehuo4 天前
Linux 彻底且安全地删除文件
linux