【问题标题】:scheduler_tick - from where is this called in Linux?scheduler_tick - 在 Linux 中从哪里调用它?
【发布时间】:2013-02-19 02:56:48
【问题描述】:

我想了解当处理器为内核代码提供机会并执行维护和调节工作时的中断机制。我所知道的是定时器中断为操作系统提供了这种便利。

1) 我想知道什么是相关的中断号,以及在 Linux 的情况下调用的第一个 OS 例程是什么。如果我知道这个的文件和函数名会很好。

在 Linux 中,scheduler_tick 是调用来调度新任务的内核函数,但不知道是谁调用了 scheduler_tick 及其父函数?

2) 在 Linux 中是否还有其他调用 scheduler_tick 的中断?它们是哪些(如果有的话)?

 /*
   This function gets called by the timer code, with HZ frequency.
   We call it with interrupts disabled.
 */

 void scheduler_tick(void)
 {
         int cpu = smp_processor_id();
         struct rq *rq = cpu_rq(cpu);
         struct task_struct *curr = rq->curr;
.......

【问题讨论】:

  • 可能来自定时器中断?我不知道。 :)
  • 是的,它来自定时器中断——但是,这是唯一的来源吗?我看到它被多个函数调用,但不确定根是否只是定时器中断。

标签: linux interrupt schedule


【解决方案1】:

当您可以访问交叉引用 (x-ref) 源浏览器时,这很容易回答。

点击这里:http://lxr.linux.no/#linux+v3.6.3/kernel/sched/core.c#L3214 获取 Linux Kernel 的在线 x-ref 项目。 (这个不会 x-ref 汇编代码。)

此链接转到scheduler_tick 函数定义。单击函数名称,然后在右侧的新面板中选择“函数原型或声明”链接“用法...”行之后。一段时间后,将列出所有提到此功能的代码:

 include/linux/sched.h, line 309  << declaration
 kernel/sched/core.c, line 3214   << definition
 kernel/timer.c, line 1373        << calling

所以,timer.c: 1373 http://lxr.linux.no/#linux+v3.6.3/kernel/timer.c#L1373update_process_times 函数的一部分:

1355 /*
1356  * Called from the timer interrupt handler to charge one tick to the current
1357  * process.  user_tick is 1 if the tick is user time, 0 for system.
1358  */
1359 void update_process_times(int user_tick)

这个函数只能从定时器中断处理程序中调用;它应该在每个滴答声中被调用。

update_process_times重复交叉引用搜索过程以获取列表:

References:
 arch/alpha/kernel/smp.c, line 520 
 arch/arm/kernel/time.c, line 108 
 arch/cris/arch-v10/kernel/time.c, line 171 
 arch/cris/arch-v32/kernel/time.c, line 206 
 arch/h8300/kernel/time.c, line 40 
 arch/ia64/kernel/time.c, line 184 
 arch/m68k/kernel/time.c, line 38 
 arch/parisc/kernel/time.c, line 163 
 include/linux/sched.h, line 308 
 kernel/time/tick-sched.c, line 683 
 kernel/time/tick-sched.c, line 841

相关中断号

中断号取决于平台(有时甚至在启动时分配)。你没有说你对什么平台感兴趣。

2) 在 Linux 中是否还有其他调用 scheduler_tick 的中断?它们是哪些(如果有的话)?

有几种计时器实现,包括 hrtimers(高分辨率计时器,这可能与通常的系统计时器不同)。每个实现可能使用不同的中断。

【讨论】:

    猜你喜欢
    • 2011-06-20
    • 2013-07-13
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 2014-02-17
    相关资源
    最近更新 更多