Linux内核定时器
Posted 旧年不在666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux内核定时器相关的知识,希望对你有一定的参考价值。
Linux内核定时器
1、概念
2、关键结构体
struct timer_list {
/*
* All fields that change during normal runtime grouped to the
* same cacheline
*/
struct hlist_node entry;
unsigned long expires;
void (*function)(unsigned long);
unsigned long data;
u32 flags;
int slack;
#ifdef CONFIG_TIMER_STATS
int start_pid;
void *start_site;
char start_comm[16];
#endif
#ifdef CONFIG_LOCKDEP
struct lockdep_map lockdep_map;
#endif
};
data:传递到超时处理函数的参数,主要在多个定时器同时使用时,区别是哪个timer超时;
expires:定时器超时的时间,以linux的jiffies来衡量,例如:jiffies + (3 * HZ)
void (*function)(unsigned long):定时器超时处理函数
3、相关API函数
//定时器初始化函数
init_timer(struct timer_list*)
//激活定时器
add_timer(struct timer_list*)
//修改定时器的超时时间
mod_timer(struct timer_list *, unsigned long jiffier_timerout)
//定时器状态查询,如果在系统的定时器列表中则返回1,否则返回0
int timer_pending(const struct timer_list * timer)
//删除定时器
del_timer(struct timer_list*)
4、编程流程
//实例化一个定时器对象
static struct timer_list timer;
//编写定时器超时回调函数
static void timer_timeout_callback(unsigned long arg)
{
//这里添加相应的逻辑
//如果想要执行周期性的操作,这里调用mod_timer更新超时时间就好
mod_timer(&timer, jiffies + (20 * HZ));
}
//初始化定时器
static void XXX_init(void)
{
init_timer(&timer);
test_timer.expires = jiffies + (20 * HZ);
test_timer.function = timer_timeout_callback;
test_timer.data = ((unsigned long)0);
add_timer(&timer);
}
//删除定时器
static void XXX_exit(void)
{
del_timer(&timer);
}
以上是关于Linux内核定时器的主要内容,如果未能解决你的问题,请参考以下文章
LINUX PID 1和SYSTEMD PID 0 是内核的一部分,主要用于内进换页,内核初始化的最后一步就是启动 init 进程。这个进程是系统的第一个进程,PID 为 1,又叫超级进程(代码片段