bonus和prio的计算方法
static int effective_prio(task_t *p)
{
int bonus, prio;
if (rt_task(p)) ;;如果是实时进程则返回(实时进程的动态优先级是由setscheduler()函数设置且一经设置不再改变)
return p->prio;
bonus = CURRENT_BONUS(p) - MAX_BONUS / 2; ;;根据睡眠时间设置bonus值
prio = p->static_prio - bonus; ;;由静态优先级和bonus值来设置动态优先级
if (prio < MAX_RT_PRIO) ;;动态优先级范围不能小于MAX_RT_PRIO也不能超过MAX_PRIO,所以此处做下判断。
prio = MAX_RT_PRIO;
if (prio > MAX_PRIO-1)
prio = MAX_PRIO-1;
return prio;
}
#define CURRENT_BONUS(p) \
(NS_TO_JIFFIES((p)->sleep_avg) * MAX_BONUS / \ ;;把睡眠时间转化为bonus值
MAX_SLEEP_AVG)
【内核】非实时进程、实时进程、静态优先级、动态优先级、实时优先级
https://www.cnblogs.com/visayafan/archive/2011/12/08/2280459.html
recalc_task_prio函数
https://blog.csdn.net/yunsongice/article/details/5526340
Linux进程调度策略的发展和演变--Linux进程的管理与调度(十六)
https://blog.csdn.net/gatieme/article/details/51701149