操作系统:进程优先级

本文详细解释了进程优先级的基本概念,如PID、PRI和NI在Linux2.6内核中的作用,探讨了进程调度的原理,包括CPU如何在时间片中切换进程以及Linux内核中的调度队列设计,如nr_active和bitmap在队列管理中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.进程优先级

1.1.基本概念

1.2.其他概念

1.3.进程切换 

2.解读Linux2.6内核进程的调度队列


1.进程优先级

1.1.基本概念

我们在日常生活中的经验,排队的本质就是确认优先级,排队的原因就是资源不足,需要进行分配。那么在内存资源有限的场景下,且均需要CPU调度,进程优先级就显得十分必要了。 

进程优先级:cpu资源分配的先后顺序

在PCB中实现就是一个int类型字段,数值越小,优先级越大。 

UID:执行者的身份

PRI:进程优先级,默认值为80

NI:优先级的修正数值

!注意:PRI在NI调整的瞬间回到默认值80

通过top命令我们可以更改NI

我们知道进程优先级,有一定的范围

1.2.其他概念

以上是进程相关的一些概念,一般情况下,多个进程都是在一个CPU上被调度,并且多进程场景下在任意时刻,都会出现多个单进程在某一个时间片内快速切换,CPU进行运算,进行高频切换进程,这时候处于进程的“并发”

1.3.进程切换 

CPU在调度进程时不会一直调度某一个进程直至完成,而是会在一个时间片中连续、分开调度多个进程,进行多进程的并发,这时候就需要了解进程是如何进行切换以及如何继续运行的。

就是进程在运行队列排队时,当第一次被CPU调度,会产生一份进程上下文,当在这个时间片完成调度后,这段上下文会被保存在进程PCB相关的结构体tss_struct中,然后再把排队的下一个进程PCB的上下文放入寄存器中,这样CPU通过读取放入的上下文就知道从哪里开始继续将这个进程运行下去。

2.解读Linux2.6内核进程的调度队列

nr_active用于判断调度队列是否为空,如果nr_active的值为0那么就进行active和expired的交换。

bitmap[5]为位图,因为有140个优先级,也就是140个对应优先级的进程队列,为了提高查找非空队列的效率就用0,1这两个数字和5*32个比特位表示队列是否为空。

活动队列active和过期队列expired两个互相配合,一个处理进程,一个新增进程,最终在交换两个队列的地址。

这也就是CPU在调度进程时的状态 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值