`
emowuyi
  • 浏览: 1470561 次
文章分类
社区版块
存档分类
最新评论

linux内核分析之软定时器笔记

 
阅读更多

定时器是一种软件功能,即允许在将来的某个时刻,函数在给定的时间间隔用完时被调用。超时表示与定时器相关的时间间隔已经用完的那个时刻。

linux上考虑两种类型的定时器,即动态定时和间隔定时器。第一种类型由内核使用,而间隔定时器由进程在用户态创建。

动态定时器

动态定时的主要数据结构是一个叫做tvec_bases的per cpu变量,他包含NR_CPUS个元素,系统中每个CPU都有一个。每个元素是一个tvec_base_t类型的数据结构,他包含相应CPU中处理动态定时器需要的所有数据。

字段tv1的数据解雇为tvec_root_t类型,包含一个vec数组,这个数组由256个list_head元素组成(即256个动态定时器链表组成)。这个结构包含了在紧接着到来的255个节拍内将要到期的所有动态定时器。

字段tv2,tv3和tv4的数据结构都是tvec_t类型,该类型有一个数组vec。这些链表包含在紧接着到来的2^14-1/2^20-1以及2^26-1个节拍内将要到期的所有动态定时器。

字段tv5与前面的字段几乎相同,但唯一区别就是vec数组的最后一项是一个大expires字段值得动态定时器链表。tv5从不需要从其他的数组补充。

动态定时器编程

1,申请timer_list结构并对其初始化,其中必须初始化的有expires,function

2,调用init_timer函数初始化

该函数最终调用下面函数

可看到初始化的几个相关变量。

3,调用add_timer函数将申请的timer_list结构添加到合适的链表

该函数最终调用如下函数添加到对应的链表

其中对于定时器的修改、删除等操作,内核提供了相应的函数。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics