Linux的动态定时器-时间轮

简介:
定时器—有时也称为动态定时器或内核定时器—是管理内核时间的基础。定时器是一种软件功能,即允许在将来的某个时刻,函数在给定的时间间隔用完时被调用。注意的是定时器并不会周期运行,它在超时后就自行销毁,这也是定时器被称为动态定时器的一个原因。动态定时器不断地创建和销毁,而且它的运行次数也不受限制。
  定时器在内核代码中属于一个基础组件。要想完全弄清楚linux2.6中内核定时器的实现,得先从初始化开始。
  在start_kernel(void)-->init_timers(void)
void __init init_timers(void)
{
int err = timer_cpu_notify(&timers_nb, (unsigned long)CPU_UP_PREPARE,
(void *)(long)smp_processor_id());
init_timer_stats();
BUG_ON(err == NOTIFY_BAD);
register_cpu_notifier(&timers_nb);
open_softirq(TIMER_SOFTIRQ, run_timer_softirq);
}
在timer_cpu_notify(&timers_nb,(unsigned long)CPU_UP_PREPARE,
(void*)(long)smp_processor_id());
  中执行
  init_timers_cpu(cpu) //初始化本cpu中的timers
  初始化的主要代码是:
spin_lock_init(&base->lock);
for (j = 0; j < TVN_SIZE; j++) {
INIT_LIST_HEAD(base->tv5.vec + j);
INIT_LIST_HEAD(base->tv4.vec + j);
INIT_LIST_HEAD(base->tv3.vec + j);
INIT_LIST_HEAD(base->tv2.vec + j);
}
for (j = 0; j < TVR_SIZE; j++)
INIT_LIST_HEAD(base->tv1.vec + j);
base->timer_jiffies = jiffies;
base->next_timer = base->timer_jiffies;
  这段代码的主体是base,base的定义是:structtvec_base *base;
  这个tvec_base是动态定时器的主要数据结构,每个cpu上有一个,它包含相应cpu中处理动态定时器需要的所有数据。为简化分析仅考虑单cpu。给出这个数据机构:
struct tvec_base {
spinlock_t lock;
struct timer_list *running_timer;
unsigned long timer_jiffies;
unsigned long next_timer;
struct tvec_root tv1;
struct tvec tv2;
struct tvec tv3;
struct tvec tv4;
struct tvec tv5;
} ____cacheline_aligned;

最新内容请见作者的GitHub页:http://qaseven.github.io/
相关文章
|
30天前
|
网络协议 Ubuntu Linux
Linux 动态/静态配置ip网卡信息
Linux 动态/静态配置ip网卡信息
36 0
|
3月前
|
Java Linux 程序员
Linux 下 JNA 调用动态连接库文件 so
Linux 下 JNA 调用动态连接库文件 so
61 0
|
23天前
|
监控 Linux 编译器
Linux C++ 定时器任务接口深度解析: 从理论到实践
Linux C++ 定时器任务接口深度解析: 从理论到实践
67 2
|
3月前
|
算法 Linux 编译器
【Linux】静态进程和动态进程
【Linux】静态进程和动态进程
50 0
|
9月前
|
Linux 数据安全/隐私保护
【Linux】配置动态IP
【Linux】配置动态IP
139 0
|
7月前
|
Linux
14.3.4 【Linux】使用 LVM thin Volume 让 LVM 动态自动调整磁盘使用率
14.3.4 【Linux】使用 LVM thin Volume 让 LVM 动态自动调整磁盘使用率
68 0
|
7月前
|
Linux
手把手教你写Linux设备驱动---定时器(一)(基于友善之臂4412开发板)
手把手教你写Linux设备驱动---定时器(一)(基于友善之臂4412开发板)
85 0
|
7月前
|
Linux
Linux驱动中断与时间篇——高精度定时器hrtimer
Linux驱动中断与时间篇——高精度定时器hrtimer
|
7月前
|
Linux
Linux驱动中断与时间篇——低分辨率定时器
Linux驱动中断与时间篇——低分辨率定时器
|
7月前
|
Linux 项目管理
Linux内核基础篇——动态输出调试
Linux内核基础篇——动态输出调试