简单谈谈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安全错误
数据库的锁怎样保障安全
江苏根荣互联网科技
美国互联网保险保险科技
互联网科技公司的优势
互联网科技战争
腾讯阿里互联网科技
九亚互联网科技
互联网科技logo
科技互联网创业计划书
深圳市运趣互联网科技有限公司
以后互联网后是啥科技
栖莱科技互联网股份有限公司
彤创互联网科技有限公司
世界互联网科技公司市值排名
昊天互联网科技有限公司
互联网科技人工智能实验室
怎样加入科技互联网
每天都有哪些好的互联网科技
东营紫格互联网科技
广州智享互联网科技
互联网科技收购价值
新华互联网科技
A股互联网金融科技公司
中国 科技 互联网
期待互联网科技
互联网科技论文
互联网金融科技平台
互联网金融科技名词解释
电子商务与互联网科技的关系
南京一网一红互联网科技有限公司
求路客互联网科技电话