文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>[进程调度]宏TASK_INTERACTIVE()的详细解释

[进程调度]宏TASK_INTERACTIVE()的详细解释

时间:2006-12-15  来源:pidan

最近一直在看《Linux Kernel Development》2rnd英文版(图书馆找不到中文版的,不过感觉读原版的理解得更透彻),第四章讲调度算法时,说如果一个交互式的任务在时间片用完后不是插入到过期数组(expired array),而是重新插入到活跃数组(active array),以确保交互性能(详见英文版P.51)。关于如何判断一个任务是否是交互的(interactive)由宏TASK_INTERACTIVE()实现。书上讲这个宏是基于nice值判断的,但并不是nice值越低(优先级越高)就越有可能是interactive的。具体怎样判断,书上没详细解释,于是我查了查 2.6内核的源码,把详细实现部分拿出来与大家分享。

宏TASK_INTERACTIVE()定义在 kernel/sched.c中,原形如下:

#define TASK_INTERACTIVE(p) \
        ((p)->prio <= (p)->static_prio - DELTA(p))

prio是任务的动态优先级,static_prio是任务的静态优先级,动态优先级是在静态优先级的值基础上根据任务的交互式性在-5到5的范围内的偏移值(详见英文版P.50)。
这个宏是要判断动态优先级是否小于静态优先级减去一个DELTA(p),我们再来看DELTA(p)的实现,为了方便我把相关的宏都给出来:

/* 这三个宏定义在 include/linux/sched.h 中 */
#define MAX_USER_RT_PRIO        100
#define MAX_RT_PRIO                MAX_USER_RT_PRIO
#define MAX_PRIO                (MAX_RT_PRIO + 40)

/* 这些宏定义还在 kernel/sched.c 中 */
#define INTERACTIVE_DELTA          2
#define USER_PRIO(p)                ((p)-MAX_RT_PRIO)
#define MAX_USER_PRIO                (USER_PRIO(MAX_PRIO))
#define PRIO_BONUS_RATIO         25
#define MAX_BONUS                (MAX_USER_PRIO * PRIO_BONUS_RATIO / 100)
#define PRIO_TO_NICE(prio)        ((prio) - MAX_RT_PRIO - 20)
#define TASK_NICE(p)                PRIO_TO_NICE((p)->static_prio)
#define SCALE(v1,v1_max,v2_max) \
        (v1) * (v2_max) / (v1_max)
#define DELTA(p) \
        (SCALE(TASK_NICE(p), 40, MAX_BONUS) + INTERACTIVE_DELTA)

展开后我们可以看到 DELTA(p)就是:(p的nice值 * 10 / 40)+ 2
对应-20到19的nice值(static_piro = nice + 120):
nice DELTA(p)          (p)->static_prio - DELTA(p)      (p)->prio范围[static_prio - 5,static_prio + 5]
-20      -3                     103                                       95 - 105
0        2                       118                                      115 - 125
19      约等于7              132                                      134 - 144
由此我们可以看到:
nice值最高的(19),根本就没有可能成为interactive
nice值最低的(-20),也有可能不成为interactive
这就跟书上的说法一致了。
相关阅读 更多 +
排行榜 更多 +
像素太空杀

像素太空杀

飞行射击 下载
忍者手势

忍者手势

飞行射击 下载
勇士X地下城大冒险

勇士X地下城大冒险

角色扮演 下载