首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scheduler_tick -在Linux中这是从哪里来的?

问scheduler_tick -在Linux中这是从哪里来的?
EN

Stack Overflow用户
提问于 2012-10-03 12:24:35
回答 1查看 6.8K关注 0票数 2

我想了解当处理器产生内核代码的机会并执行维护和调节工作时的中断机制。我所知道的是,计时器中断为操作系统提供了这个功能。

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

对于Linux,scheduler_tick是用来调度新任务的内核函数,但是未知的是谁调用了scheduler_tick及其父函数?

2)在Linux中还有其他的中断调用scheduler_tick吗?如果有的话,他们是哪一个?

代码语言:javascript
复制
 /*
   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;
.......
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-25 19:46:25

当您访问交叉引用(X)源浏览器时,这很容易回答。

点击这里:http://lxr.linux.no/#linux+v3.6.3/kernel/sched/core.c#L3214获得一个Linux内核的在线x-ref项目。(这个不是x-ref汇编程序代码。)

这个链接指向scheduler_tick函数定义。单击函数名称,然后在新面板中的右选择行"Function或声明“链接的用法.”。过了一段时间,所有提到这个函数的代码都会被列出:

代码语言:javascript
复制
 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#L1373是update_process_times函数的一部分:

代码语言:javascript
复制
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的交叉引用搜索过程以获得列表:

代码语言:javascript
复制
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 (高分辨率定时器,这可以不同于通常的系统定时器)。每个实现可以使用不同的中断。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12708407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档