effective_prio()函数返回进程p的动态优先级
static int effective_prio(task_t *p)
{
int bonus, prio;
如果进程p是个实时进程,那么直接返回该实时进程的prio(实时进程的动态优先级prio不依赖于静态优先级static_prio,两者是否相等???)
|----------------------------|
| if ( rt_task(p)) |
| return p->prio; |
|----------------------------|
计算红利bonus:
|---------------------------------------------|
| bonus = CURRENT_BONUS(p) - MAX_BONUS / 2; |
|---------------------------------------------|
根据如下公式计算该进程动态优先级prio:
prio = max ( 100, min(static_prio - bonus + 5, 139) )
|------------------------------------|
| prio = p->static_prio - bonus; |
| if (prio < MAX_RT_PRIO) |
| prio = MAX_RT_PRIO; |
| if (prio > MAX_PRIO-1) |
| prio = MAX_PRIO-1; |
|------------------------------------|
return prio;
}
static int effective_prio(task_t *p)
{
int bonus, prio;
如果进程p是个实时进程,那么直接返回该实时进程的prio(实时进程的动态优先级prio不依赖于静态优先级static_prio,两者是否相等???)
|----------------------------|
| if ( rt_task(p)) |
| return p->prio; |
|----------------------------|
计算红利bonus:
|---------------------------------------------|
| bonus = CURRENT_BONUS(p) - MAX_BONUS / 2; |
|---------------------------------------------|
根据如下公式计算该进程动态优先级prio:
prio = max ( 100, min(static_prio - bonus + 5, 139) )
|------------------------------------|
| prio = p->static_prio - bonus; |
| if (prio < MAX_RT_PRIO) |
| prio = MAX_RT_PRIO; |
| if (prio > MAX_PRIO-1) |
| prio = MAX_PRIO-1; |
|------------------------------------|
return prio;
}
本文介绍了一个用于计算进程动态优先级的函数effective_prio()。该函数根据进程类型(实时或非实时)调整其优先级,并通过计算红利来平衡任务调度。对于实时进程,直接返回其固定优先级;对于非实时进程,则依据静态优先级、当前红利和最大红利来确定最终的动态优先级。
7097

被折叠的 条评论
为什么被折叠?



