
linux kernel 进程描述符task_struct中有几个成员标识 linux 进程的优先级,prio, static_prio, normal_prio,rt_priority。
他们之间究竟是什么关系,究竟什么样的优先级才能最快能被调度器调度执行?
详细解读之前,可以先明确上面的一个问题,task_struct 中的成员变量 prio越小,进程的优先级越高。prio 的取范围为0..139。
上述描述在include/linux/sched.h 中也有描述,
/* * Priority of a process goes from 0..MAX_PRIO-1, valid RT * priority is 0..MAX_RT_PRIO-1, and SCHED_NORMAL/SCHED_BATCH * tasks are in the range MAX_RT_PRIO..MAX_PRIO-1. Priority * values are inverted: lower p->prio value means higher priority. * * The MAX_USER_RT_PRIO value allows the actual maximum * RT priority to be separate from the value exported to * user-space. This allows kernel threads to set their * priority to a value higher than any user task. Note: * MAX_RT_PRIO must not be smaller than MAX_USER_RT_PRIO. */ #define MAX_USER_RT_PRIO 100 #define MAX_RT_PRIO MAX_USER_RT_PRIO #define MAX_PRIO (MAX_RT_PRIO + 40) #define DEFAULT_PRIO (MAX_RT_PRIO + 20)
需要提到调度器不同的调度策略,后两种是预留的还没有实现的,不用管。SCHED_FIFO/SCHED_RR 为实时进程调度策略,SCHED_NORMAL/SCHED_BATCH 为非实时进程也就是普通进程的调度策略。fork 优先级
/* * Scheng 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 /* Can be ORed in to make sure the process is reverted back to SCHED_NORMAL on fork */ #define SCHED_RESET_ON_FORK 0x40000000
其中,实时进程(sched policy 为)的优先级取范围是0..99,非实时进程的取范围为100..139。
接下来会一一描述,但是有一条请绝对坚信并牢记,
task_struct 中的成员变量 prio越小,进程的优先级越高。prio 的取范围为0..139。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-40531-1.html
美军刚出发就有中军舰尾随