简单谈谈Linux内核定时器
发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,软件意义上的定时器最终依赖硬件定时器来实现, 内核在时钟中断发生后检测各定时器是否到期 , 到期后的定时器处理函数将作为软中断在底半部执行 。实质上,时钟中断处理程序会 换起TIMER_SOFTIRQ
千家信息网最后更新 2025年12月04日简单谈谈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安全错误
数据库的锁怎样保障安全
范县软件开发电话
逃离塔科夫美服选哪个服务器
labview软件开发方案
酷点网络技术有限公司
网络安全课堂游戏设计
软件开发代码是否交付
慈溪软件开发免费咨询
永大服务器显示英文应该怎么搞
服务器加载apk
c 和数据库
计算机网络安全毕业实践报告
神力科莎被踢出服务器
金铲铲不在一个服务器
sql数据库全部查询
苹果服务器系统u盘安装教程
云平台和服务器
网络安全隔离卡切换
ibm服务器 京东
服务器局域网设置外网安全吗
公安系统软件开发行业竞争情况
班主任网络安全培训总结
网络安全接受小白有培训
服务器虚拟化用到软件
魔域单机版怎么架设服务器
虹口区市场软件开发有哪些
数据和数据库的关系
开展网络安全检查需要资质么
管家婆的以前的数据库怎么删掉
数据库恢复两个关键问题
怎么打开服务器的磁盘管理