linux 定时器

Linux 系统实现底半部的机制主要有tasklet,工作队列和软中断。

tasklet 和工作队列都是调度中断底半部的良好机制,tasklet 基于软中断实现。

内核定时器也依靠软中断实现;内核中的延时是忙等待或者睡眠等待,为了充分利用CPU资源,使系统有更好的吞吐性能,在对延迟时间的要求并不是很精确的情况下,睡眠等待通常是值得推荐的。

参考

Linux时间子系统之(十三):Tick Device layer综述

kernel/time/timer.c

start_kernel 时,会调用init_timer 初始化timer 并注册软中断

raise_softirq(TIMER_SOFTIRQ)

timer 中断处理函数中,更新处理器timer 并实时触发软中断

不同类型定时器,不同的回调函数里面会调用  update_process_times

参考

https://www.cnblogs.com/lingjiajun/p/11944753.html

https://www.cnblogs.com/hellokitty2/p/15666357.html

kernel/time/tick-sched.h  

tick_device  不同模式

 

周期模式:

scheduler_tick()具体被调用流程:tick中断->

tick_handle_periodic(tick_periodic())->update_process_times()->scheduler_tick()

oneshot 模式或者nohz

tick中断->tick_sched_timer(tick_sched_handle())->update_process_times()->scheduler_tick()。

设置timer 到期回调函数

fs/timerfd.c

设置timer 到期回调函数

 

tick_sched_timer 回调函数太耗时,导致timerfd_tmrproc 回调函数滞后

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值