首先,进程可分为:普通进程和实时进程。区别就是实时进程会比普通进程更优先执行,且可以基于优先级进行抢占。
然后来分别介绍三个参数和三个宏定义:
静态优先级:static_prio MAX_PRIO:140
动态优先级:prio MAX_RT_PRIO:100
实时优先级:rt_priority nice:[-20,19]
Linux2.6内核将进程优先级进行了划分:
0-99:实时进程
100-139:普通进程
且数值越小,优先级越高
静态优先级是针对于普通进程的,这个值在进程启动的时候确定。它可以用nice()或者sched_setscheduler()系统调用更改,否则在运行期间一直保持恒定。而nice值是每个进程的一个属性,它不是进程优先级,而是能影响进程优先级的一个值,同样是值越小优先级越高,默认值为0。
对于实时进程,他由两个参数表明优先级:prio和rt_priority,prio才是调度所用的最终的优先级,值越小,优先级越高。而rt_priority要经过转换得到prio:prio = MAX_RT_PRIO - 1 - rt_priority,所以rt_priority的值越小,优先级越小。
需要注意的是,内核提供的修改进程优先级的函数都是修改rt_priority的值,所以会有“优先级值越小,优先级越小”的说法。