Chinaunix
标题:
实时进程调度优先级讨论
[打印本页]
作者:
fengyuting5
时间:
2012-05-03 18:57
标题:
实时进程调度优先级讨论
本帖最后由 fengyuting5 于 2012-05-03 19:01 编辑
本文针对2.6.25内核,
针对实时进程调度算法主要有两种SCHED_FIFO(先进先出),SCHED_RR(时间片)实时进程优先级号为0-99,
在内核调度源码中对号越大代表优先级越高吗,也被先调度, 还是反过来,请高手指点一下,
这里要说一点,ulk第三版说是数字越小优先级越高,但是也有人说反过来的,实际的恐怕还是内核源码能说明问题,
不知道有没有高手研究这一块源码,
作者:
hauto
时间:
2012-05-03 19:44
那个容易混淆。
对于实时优先级,sched_setscheduler设置的时候,越大表示优先级越高(可以看man 文档)。
而内核态,越小优先级越高 .... 所以系统调用会做个转换。。。
恩,应该是这样。。.
作者:
hauto
时间:
2012-05-03 22:15
找了下代码:
static void __setscheduler(struct task_struct *p, int policy, int prio)
{
BUG_ON(p->array);
p->policy = policy;
p->rt_priority = prio;
p->normal_prio = normal_prio(p);
/* we are holding p->pi_lock already */
p->prio = rt_mutex_getprio(p);
/*
* SCHED_BATCH tasks are treated as perpetual CPU hogs:
*/
if (policy == SCHED_BATCH)
p->sleep_avg = 0;
if (policy == SCHED_NORMAL && sched_interactive == 0)
p->sleep_avg = 0;
set_load_weight(p);
}
static inline int normal_prio(struct task_struct *p)
{
int prio;
if (has_rt_policy(p))
prio = MAX_RT_PRIO-1 - p->rt_priority;
else
prio = __normal_prio(p);
return prio;
}
作者:
fengyuting5
时间:
2012-05-04 10:54
回复
3#
hauto
非常感谢啊,其实内核的进程调度部分还是没看懂,找不到先调度小的,有没有相关的文档,
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2