linux内核调度设置,linux内核调度:调度策略与调度器类-小结

linux内核的5种主要调度策略:linux/sched.h

0818b9ca8b590ca3270a3433284dd417.png

4种调度器类:

idle_sched_class

作用:每个cup的第一个pid=0线程:swapper,是一个静态线程。启动流程:

创建流程:SMP_init-->__cpu_up()--->Core.c@init_idle(idle, cpu);

...

idle->sched_class = &idle_sched_class;//属于idel_sched_class的rq调度模型

....

#if defined(CONFIG_SMP)

sprintf(idle->comm, "%s/%d", INIT_TASK_COMM, cpu);设置线程名称swapper

#endif

Core.c (trunk\kernel\kernel\sched):        sprintf(idle->comm, "%s/%d", INIT_TASK_COMM, cpu);--->线程的名称

Init_task.h (trunk\kernel\include\linux):        .comm                = INIT_TASK_COMM,

Init_task.h (trunk\kernel\include\linux):#define INIT_TASK_COMM "swapper"

调度类属于:idel_sched_class,所以在ps里面是看不到的。一般运行在开机过程和cpu异常的时候做dump。

stop_sched_class

优先级最高的线程,会中断所有其他线程,且不会被其他任务打断。

作用:

1.发生在cpu_stop_cpu_callback 进行cpu之间任务migration;

2.HOTPLUG_CPU的情况下关闭任务。

rt_sched_class

RT,

作用:实时线程

fair_sched_class

CFS(公平),

作用:

一般常规线程

目前系統中,Scheduling Class的优先级顺序为Stop-Task>Real-Time>Fair>Idle-Task,开发者可以根据己的设计需求,來把所属的Task配置到不同的Scheduling Class中.

5种调度策略:

策略

描述

所在的调度器类

SCHED_NORAML(也称SCHED_OTHER)

(最常见的策略)、sched_normal 或者 sched_other是Linux默认的调度策略,其值为0 非实时进程的调度策略,也就是分时调度策略。分时进程则通过nice和counter值决定权值,nice越小,counter越大,被调度的概率越大,也就是曾经使用了cpu最少的进程将会得到优先调

CFS

SCHED_BATCH

(除了不能抢占外与常规任务一样,允许任务运行更长时间,更好地使用高速缓存,适合于成批处理的工作)、

CFS

SCHED_IDLE

(它甚至比nice 19还有弱,为了避免优先级反转使用);

CFS

SCHED_RR

(循环调度,拥有时间片,结束后放在队列末);

RT

SCHED_FIFO

(没有时间片,可以运行任意长的时间);

RT

SCHED_OTHER   the standard round-robin time-sharingpolicy;

SCHED_BATCH   for "batch" style execution ofprocesses; and

SCHED_IDLE    for running very low priority backgroundjobs.

For each of the above policies,param->sched_priority must be 0.

Various "real-time" policiesare also supported, for special time-

critical applications that need precisecontrol over the way in which

runnable threads are selected forexecution.  For the rules governing

when a process may use these policies,see sched(7).  The real-time

policies that may be specified in policyare:

SCHED_FIFO    a first-in, first-out policy; and

SCHED_RR      a round-robin policy.

其中前面三种策略使用的是cfs调度器类,后面两种使用rt调度器类。

-----------------------------------------------------------------------------------------------------------------------------------

实时进程将得到优先调用,实时进程根据实时优先级决定调度权值。分时进程则通过nice和counter值决定权值,nice越小,counter越大,被调度的概率越大,也就是曾经使用了cpu最少的进程将会得到优先调度。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值