免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2537 | 回复: 3
打印 上一主题 下一主题

[其他] 实时进程调度优先级讨论 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-03 18:57 |只看该作者 |倒序浏览
本帖最后由 fengyuting5 于 2012-05-03 19:01 编辑

本文针对2.6.25内核,
针对实时进程调度算法主要有两种SCHED_FIFO(先进先出),SCHED_RR(时间片)实时进程优先级号为0-99,
在内核调度源码中对号越大代表优先级越高吗,也被先调度, 还是反过来,请高手指点一下,
这里要说一点,ulk第三版说是数字越小优先级越高,但是也有人说反过来的,实际的恐怕还是内核源码能说明问题,
不知道有没有高手研究这一块源码,

论坛徽章:
0
2 [报告]
发表于 2012-05-03 19:44 |只看该作者
那个容易混淆。
对于实时优先级,sched_setscheduler设置的时候,越大表示优先级越高(可以看man 文档)。
而内核态,越小优先级越高 ....  所以系统调用会做个转换。。。

恩,应该是这样。。.

论坛徽章:
0
3 [报告]
发表于 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;
}

论坛徽章:
0
4 [报告]
发表于 2012-05-04 10:54 |只看该作者
回复 3# hauto

非常感谢啊,其实内核的进程调度部分还是没看懂,找不到先调度小的,有没有相关的文档,


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP