linux 进程调度

kernel/sched/core.c

一、主调度器

inlude/linux/sched.h中定义了struct task_struct {}。

进程调度最核心的两个问题是,什么时间放弃cpu,接下来由谁获得cpu。放弃cpu有两种方式,一种是主动调用schedule(),一种是周期调度器强行调度scheduler_tick()。

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

pick_next_task();

判断当前cpu就绪队列rq-running中的进程数目是否与普通进程的就绪队列中的进程数目相同,如果相同就说明系统中全是普通进程,直接通过cfs算法的调度类的pick_next_task_fair(kernel/sched/fair.c)函数来从普通进程的就绪队列中寻找进程即可。  

否则,遍历调度类的链表,并从中选择一个优先级最高的进程。调度器类已经按如下顺序排序:rt_sched_class → fair_sched_class → idle_sched_class → NULL。

__schedule()调用了pick_next_task(); __schedule()是主调度器。

schedule(),do_task_dead(),schedule_idle(),preempt_schedule_common(),preemt_schedule_lock(),preempt_schedule_notrace(),preempt_schedule_irq()都调用了__schedule(); __schedule()函数主要是对当前task做善后工作,对新task做准备工作。


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值