TIMER_SOFTIRQ软中断的处理函数是在 init_timers 函数里面初始化的: void __init init_timers(void) { init_timer_cpus(); open_softirq(TIMER_SOFTIRQ, run_timer_softirq); } 可以看到TIMER_SOFTIRQ软中断的处理函数是run_timer_softirq: static __latent_entropy void run_timer_softirq(struct softirq_action...
__run_timers(this_cpu_ptr(&timer_bases[BASE_DEF])); //no_hz模式下执行timer } 2.3.3 hrtimers_init void __init hrtimers_init(void) { //类似init_timers,这里主要是初始化per-cpuhrtimer相关变量和注册hrtimer相关的软中断handler hrtimers_prepare_cpu(smp_processor_id()); // hrtimer inte...
void__init init_timers(void) { open_softirq(TIMER_SOFTIRQ, run_timer_softirq) } //run_timer_softirq函数分析 void run_timer_softirq(struct softirq_action *h) { struct tvec_base *base = this_cpu_ptr(&tvec_bases); struct tvec_base是个Per-CPU变量,只在本地CPU有效, void __run_timers(str...
函数init_timers()的实现如清单2-1(省略了部分和主要功能无关的内容,以后代码同样方式处理) 注:本文中所有代码均来自于Linux2.6.25源代码 单2-1 init_timers函数 void __init init_timers(void) { int err = timer_cpu_notify(&timers_nb, (unsigned long)CPU_UP_PREPARE, (void *)(long)smp_processor_...
系统初始化时,start_kernel会调用定时器系统的初始化函数init_timers: 1. void __init init_timers(void) 2. { 3. int err = timer_cpu_notify(&timers_nb, (unsigned long)CPU_UP_PREPARE, 4. void *)(long)smp_processor_id()); 5.
当中init_timers相当于time wheel低精度timer。hrtime_init相当于hrtimer高精度timer。以及timekeeping_init就是gtod了和而time_init就是我们所要适配的和平台相关的timer的移植了。 既然已经了解了主要的功能和代码,也知道了系统启动流程。那么接下去就一个一个来学习了。
void__init init_timers(void) { interr = timer_cpu_notify(&timers_nb, (unsignedlong)CPU_UP_PREPARE, (void*)(long)smp_processor_id()); init_timer_stats(); BUG_ON(err != NOTIFY_OK); register_cpu_notifier(&timers_nb);/* 注册cpu notify,以便在hotplug时在cpu之间进行定时器的迁移 */ ...
INIT_LIST_HEAD(&timer->list); return; } /* * 添加到链表中 */ list_add(&timer->list, vec->prev); } internal_add_timer 函数的主要工作是计算定时器到期时间所属的等级范围,然后把定时器添加到链表中。 执行到期的定时器staticinlinevoidcascade_timers(struct timer_vec *tv) ...
高精确度计时器(简称 hrtimers)提供一个高精确度的计时器管理框架,这个框架独立于此前讨论过的标准计时器框架,原因是合并这两个框架太复杂。尽管计时器在 jiffies 粒度上运行,hrtimers 在纳秒粒度上运行。 hrtimer 框架的实现方式与标准计时器 API 不同。hrtimer 不使用 buckets 和串联操作,而是维护一个按时间排序...
hrtimer,是High-resolution kernel timers的缩写,从字面意思就知道,这是一个高精度内核timer。 HRTIMER用法示例 先调用hrtimer_init初始化,然后设置function回调,例如,此处设置回调为coalesced_timer_fn。 1 2 3 4 5 6 7 8 9 10 static enum hrtimer_restart coalesced_timer_fn(struct hrtimer *timer)...