每日阅读2之linux内核设计与实现11.7.1定时器的使用

定时器(动态定时器,内核定时器)是管理内核时间流逝的基础。内核经常需要推后执行某些代码(所谓的下半部机制),因此需要一种机制,使工作在指定的时间点完成,这就是内核定时器的作用与目标。。、

使用原理: 初始化一个定时器,设置超时时间,指定超时发生后的处理函数,激活定时器。。

定时器并不周期性运行,超时后自动撤销(动态)。。。定时器在内核中应用非常普遍。。

定时器结构timer_list,定义在文件<linux/timer.h>

struct timer_list {
struct list_head entry; //定时器链表
unsigned long expires; //超时时间,以jiffies为单位


void (*function)(unsigned long); //超时处理函数
unsigned long data; //超时处理函数传参


struct tvec_base *base;
#ifdef CONFIG_TIMER_STATS
void *start_site;
char start_comm[16];
int start_pid;
#endif
#ifdef CONFIG_LOCKDEP
struct lockdep_map lockdep_map;
#endif
};

内核提供了一组定时器相关的接口,以简化定时器操作,定义在linux/timer.h,实现在kernel/timer.c。。。

struct timer_list my_timer;

init_timer(&my_timer);

自定义超时时间,处理函数等,处理函数原型必须是


data参数使得一个处理函数可以注册多个定时器,通过区分data参数来区别它们。。若不使用这个参数,则简单的传0即可。。

激活定时器  add_timer(&my_timer)

定时器的操作有可能会被推迟到超时后的下一个时钟节拍运行,无法保证硬实时!

修改未被激活的定时器,并激活 mod_timer( ,,)

删除定时器 del_timer();

多处理器机器上,在删除定时器的时候,可能定时器中断已经在其它处理器上运行了,因此需要等待定时器处理程序退出,采用del_timer_sync()..该函数不能在中断上下文中使用。。(why?)


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值