一、内核timer
1、内核定时器 init_timeout,mod_timer,add_timer ----------- 通过软中断实现。将定时器按照超时时间分为五组,每个tick都会触发执行定时器软中断检查是否有超时的定时器。
2、hrtimer ----------- 高分辨率定时器,HRTIMER_CB_SOFTIRQ类型的hrtimer通过软中断实现。
3、schedule_timeout使用内核定时器的内部实现来达到timeout的目的(使用setup_timer_on_stack,__mod_timer)。
schedule_timeout在内核中被大量使用。
使用场景如select,poll,socket操作超时,sleep,usleep等等。
void run_local_timers(void) ------ tick的增加会触发此函数
{
hrtimer_run_queues();
raise_softirq(TIMER_SOFTIRQ);
softlockup_tick();
}
static void run_timer_softirq(struct softirq_action *h) ----- TIMER_SOFTIRQ被触发后执行此函数。
{
struct tvec_base *base = __get_cpu_var(tvec_bases);
hrtimer_run_pending();
if (time_after_eq(jiffies, base->timer_jiffies))
__run_timers(base);
}
二、系统级的定时器相关函数:(原理目前还看不透。。。)
1)alarm,即ITIMER_REAL类型的set