您的位置:首页 > 运维架构 > Linux

linux内核调度策略SCHED_OTHER,SCHED_FIFO和SCHED_RR

2017-06-29 11:28 357 查看
本文主要是看了大神的这篇文章:http://blog.chinaunix.net/uid-24774106-id-3379478.html

自己稍作总结而已。

跟进程调度策略相关的代码为:

//调度策略
#define SCHED_OTHER 0
#define SCHED_FIFO 1
#define SCHED_RR 2
#ifdef __USE_GNU
# define SCHED_BATCH 3
#endif

struct sched_param {
/* ... */
int sched_priority;  //优先级
/* ... */
};

//设置进程的调度策略和优先级
//第一个参数为进程pid;
//第二个参数为调度策略;
//第三个参数为优先级;
int sched_setscheduler (pid_t pid,
int policy,
const struct sched_param *sp);


SCHED_OTHER表示普通进程,对于普通进程,第三个参数sp->sched_priority只能是0

SCHED_FIFO 和SCHED_RR表示实时进程的调度策略,第三个参数的取值范围为[1,99]。

如果sched_setscheduler 优先级设置的值和调度策略不符合的话,会返回失败的。

下面是这三个调度策略的总结:

1.对于SCHED_OTHER,即普通进程调度策略,它应该是基于CFS, 它的特点是即使是最低优先级,他也能获得一定的时间片(这个自己还不太清楚,印象中在《深入理解linux内核》中有讲过,有空再看吧)。

2.SCHED_FIFO:高优先级会抢占低优先级,高优先级运行期间,低优先级没法抢占,只能等到高优先级主动退出;对于同等优先级,先运行的进程会一直占据cpu, 只有等到先运行的进程主动退出,后续进程才能得到时间片。

3.SCHED_RR: 同上,高优先级会抢占低优先级,高优先级运行期间,低优先级没法抢占,只能等到高优先级主动退出, ;对于同等优先级的进程,各个进程会轮流运行一定的时间片(大约100ms)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: