详解Linux内核进程调度函数schedule()的触发和执行时机

更新时间:2023-07-08 08:38:19 阅读: 评论:0

详解Linux内核进程调度函数schedule()的触发和执⾏时机详解Linux内核进程调度函数schedule()的触发和执⾏时机
内核的调度操作分为触发和执⾏两个部分,触发时仅仅设置⼀下当前进程的TIF_NEED_RESCHED标志,执⾏的时候则是通过schedule()函数来完成进程的选择和切换。当前进程的thread_info->flags中TIF_NEED_RESCHED位表⽰需要调⽤schedule()函数进⾏调度。内核在两种情况下会设置该标志,⼀个是在时钟中断进⾏周期性的检查时,另⼀个是在被唤醒进程的优先级⽐正在运⾏的进程的优先级⾼时。
周期性地更新当前任务的状态时:
定时中断处理函数中会调⽤schedule_tick()⽤于处理关于调度的周期性检查和处理,其调⽤路径是和时钟处理有关的tick_periodic()-
>update_process_times()->scheduler_tick()或者tick_sched_handle()->update_process_times()->scheduler_tick(),主要⽤于更新就绪队列的时钟、CPU负载和当前任务的运⾏时间统计等,如下所⽰:
//linux-3.13/kernel/sched/core.c
void scheduler_tick(void)
{
卡耐基语言的突破int cpu = smp_processor_id();        //获取当前cpu编号
struct rq *rq = cpu_rq(cpu);        //取得对应cpu的rq(就绪队列)猪脚姜醋广东正宗做法
struct task_struct *curr = rq->curr;    //获取当前运⾏的任务
sched_clock_tick();
有趣的汉字小故事raw_spin_lock(&rq->lock);
update_rq_clock(rq);            //更新队列时钟
我最亲爱的
curr->sched_class->task_tick(rq, curr, 0);  //调⽤当前任务的调度类对应的函数
update_cpu_load_active(rq);          //更新本处理器的负载
raw_spin_unlock(&rq->lock);
perf_event_task_tick();
#ifdef CONFIG_SMP
rq->idle_balance = idle_cpu(cpu);
trigger_load_balance(rq, cpu);        //必要时进⾏负载均衡
#endif
rq_last_tick_ret(rq);
}草乌的功效与作用
其中curr->sched_class->task_tick(rq, curr, 0);这⾏代码调⽤了当前任务的调度类的task_tick()函数,这个函数根据具体情况决定是否需要对当前任务设置TIF_NEED_RESCHED标志,如果需要则最终调⽤t_tsk_need_resched()设置该标志。需要注意的是,此处仅仅是设置标志⽽没有执⾏schedule()函数,在各种系统调⽤、中断的返回代码最后,才会根据这个标志来决定是否执⾏schedule()函数。照片像素调整
睡眠的任务被唤醒时:
怎么给软件加密码当睡眠任务所等待的事件到达时,内核(例如驱动程序的中断处理函数)将会调⽤wake_up()唤醒相关的任务,并最终调⽤
try_to_wake_up()。它完成三件事:将任务重新添加到就绪队列,将运⾏标志设置为TASK_RUNNING,如果被唤醒的任务可以抢占当前运⾏任务则设置当前任务的TIF_NEED_RESCHED标志。
设置了TIF_NEED_RESCHED标志之后,真正调⽤执⾏schedule()函数的时机只有两种,第⼀种是系统调⽤或者中断返回时,根据阅读感受
TIF_NEED_RESCHED标志决定是否调⽤schedule()函数(从效率⽅⾯考虑,趁着还在内核态把该处理的事情处理完毕);第⼆种情况是当前任务因为原因需要睡眠,进程睡眠后⽴即调⽤schedule()函数,在内核中这种情况也⽐较多,⽐如磁盘、⽹卡等设备驱动程序中。
参考⽂献:《Linux技术内幕》

本文发布于:2023-07-08 08:38:19,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1085143.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:调度   内核   进程   当前任务   函数
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图