内核定时器,schedule_timeout, ,POSIX timer

本文深入探讨了Linux内核中的定时器机制,包括init_timeout、mod_timer和add_timer等内核定时器的使用,以及高分辨率定时器hrtimer的工作原理。同时,介绍了schedule_timeout在内核中的广泛应用,如在select、poll和socket超时等场景。此外,文章还提到了系统级定时器,如alarm和setitimer,以及POSIX timer的相关函数,并简单阐述了它们与信号处理的关系。
摘要由CSDN通过智能技术生成

一、内核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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值