操作系统学习-4.Linux进程调度学习3-调度整体过程

调度整体过程

周期性调度过程我们从 在timer.c中开始分析

    void update_process_times(int user_tick)
{
      struct task_struct *p = current;
     
      /* Note: this timer irq context must be accounted for as well. */
      account_process_tick(p, user_tick);
      run_local_timers();
      rcu_check_callbacks(user_tick);
      scheduler_tick();
      run_posix_cpu_timers(p);
    }

timer定时器每次都会调用 scheduler_tick();

void scheduler_tick(void)
{
  int cpu = smp_processor_id();
  struct rq *rq = cpu_rq(cpu);
  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);
  calc_global_load_tick(rq);
  sched_freq_tick(cpu);
  raw_spin_unlock(&rq->lock);
 
  perf_event_task_tick();
 
  rq_last_tick_reset(rq);
}

然后在 scheduler_tick(); 中会调度不同的任务。就是这么简单

而调用update_process_times 的情况大致流程如下图。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沈万三djh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值