简单谈谈Linux内核定时器
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,软件意义上的定时器最终依赖硬件定时器来实现, 内核在时钟中断发生后检测各定时器是否到期 , 到期后的定时器处理函数将作为软中断在底半部执行 。实质上,时钟中断处理程序会 换起TIMER_SOFTIRQ
千家信息网最后更新 2026年11月02日简单谈谈Linux内核定时器
软件意义上的定时器最终依赖硬件定时器来实现, 内核在时钟中断发生后检测各定时器是否到期 , 到期后的定时器处理函数将作为软中断在底半部执行 。实质上,时钟中断处理程序会 换起TIMER_SOFTIRQ软中断 ,运行当前处理器上到期的所有定时器。
总结起来还是软中断的流程
a.注册软中断处理函数
/*/linux/kernel.timer.c*/void __init init_timers(void) -->open_softirq(TIMER_SOFTIRQ, run_timer_softirq, NULL);
b.添加timer_list到某个链表
void add_timer (struct timer_list *timer);
c.触发软中断处理函数
void irq_exit(void) -->tick_nohz_stop_sched_tick(); -->raise_softirq_irqoff(TIMER_SOFTIRQ);
d.调用软中断处理函数
static void run_timer_softirq(struct softirq_action *h)
-->__run_timers(base);
-->遍历执行时间到达的timer_list中的定时器处理函数
在Linux设备驱动编程中,可以利用Linux内核中提供的一组函数和数据结构来完成定时触发工作或者完成某种周期性的事务。这组函数和数据结构使得驱动程序师在多数情况下不用关心具体的软件定时器究竟对应着怎样的内核和硬件行为。
1) 一个timer_list 结构体的实例对应一个定时器,其定义如下:
struct timer_list { struct list_head entry, /*定时器列表*/ unsigned long expires, /*定时器到期时间*/ void (*function) (unsigned long), /*定时器处理函数*/ unsigned long data,/*作为参数被传入定时器处理函数*/ struct timer_base_s *base, ...};实例化 struct timer_list my_timer;
2) 初始化定时器
void init_timer (struct timer_list *timer);TIMER_INITIALIZER (_function, _expires, _data)DEFINE_TIMER (_name, _function, _expires, _data)setup_timer ();
3) 增加定时器
void add_timer (struct timer_list *timer);
4) 删除定时器
int del_timer (struct timer_list *timer);
5) 修改定时器的expire
int mod_timer (struct timer_list *timer, unsigned long expires);
定时器
函数
处理
内核
结构
实例
数据
数据结构
时钟
时间
硬件
程序
软件
驱动
不用
事务
半部
参数
周期
周期性
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
科技互联网企业
科技金融是不是互联网金融
中国互联网科技股
互联网品科技
互联网科技未来
广州互联网科技公司
西安互联网科技
华中科技大学互联网
博兴的互联网电子科技公司
江苏南京365互联网科技
互联网校园科技培训
世界互联网科技公司市值排名
银川新华互联网科技学校联系电话
互联网科技如何创业
南博望互联网科技有限公司
智帮互联网科技公司最近动向
领航科技大厦互联网公司
新氧科技和美国互联网有关系吗
西安左小互联网科技有限公司
马化腾互联网科技教学
互联网科技活动banner
没上市的科技互联网公司
科技与互联网发展
合肥互联网科技公司
亿账通互联网科技
齐家互联网科技有限公司
滨湖区互联网智能科技产品供应
博兴的互联网电子科技公司
上海宁丞科技互联网
中国科技创新与世界互联网大会