LINUX 进程优先级与调度策略

1. 调度策略
//https://android.googlesource.com/kernel/common/+/refs/heads/android-4.14/include/uapi/linux/sched.h
.......
/*
 * Scheduling policies
 */
#define SCHED_NORMAL		0
#define SCHED_FIFO		1
#define SCHED_RR		2
#define SCHED_BATCH		3
/* SCHED_ISO: reserved but not implemented yet */
#define SCHED_IDLE		5
#define SCHED_DEADLINE		6
/*    
0: 默认的调度策略,针对的是普通进程。
1:针对实时进程的先进先出调度。适合对时间性要求比较高但每次运行时间比较短的进程。
2:针对的是实时进程的时间片轮转调度。适合每次运行时间比较长得进程。
3:针对批处理进程的调度,适合那些非交互性且对cpu使用密集的进程。
SCHED_ISO:是内核的一个预留字段,目前还没有使用
5:适用于SCHED_DEADLINE优先级较低的后台进程。
6:SCHED_DEADLINED在规定的期限内cpu必须要花指定的时间在本进程上。

SCHED_NORMAL和SCHED_BATCH调度普通的非实时进程,
SCHED_FIFO和SCHED_RR和SCHED_DEADLINE则采用不同的调度策略调度实时进程,
SCHED_IDLE则在系统空闲时调用idle进程.
*/

可以通过chrt查看进程的调度策略和优先级

pencil: $ chrt -p 551
pid 551's current scheduling policy: SCHED_BATCH
pid 551's current scheduling priority: 0  #实时优先级,普通进程为0

pencil: $ chrt -p 511
pid 511's current scheduling policy: SCHED_FIFO
pid 511's current scheduling priority: 15 #实时进程优先级 1(优先级最低)~99(优先级最高)
2. 内核优先级表示
2.1 概述
  • 内核使用0~139表示内部优先级, task_struct.prio的数值越低, 优先级越高(注意:这里指的是 task_struct.prio,还有其他优先级表示,注意区分

  • 实时优先级范围是 0 - MAX_RT_PRIO-1(即0 ~ 99)

  • 普通进程的静态优先级范围是从 MAX_RT_PRIO - MAX_PRIO-1(即100~139),nice的值[-20,19]的映射的范围就是对应优先级的100 - 139,

优先级范围 描述
0——99 实时进程
100——139 非实时进程

贴下这部分的代码,内核里面有详尽的注释

https://elixir.bootlin.com/linux/v5.1.5/source/include/linux/sched/prio.h

#define MAX_NICE	19
#define MIN_NICE
  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值