读书笔记:LLD3(4)内核定时器

2016-04-15  本文已影响0人  rlkbk

内核定时器可用来在未来的某个时间点(基于时钟滴答)调度执行的某个函数。

当定时器运行时,调度定时器的进程可能正在休眠或在其他处理器上执行,或干脆已经退出。

定时器运行在软中断的上下文中,也是一种原子上下文。

进程上下文之外(原子上下文)必须遵守的规则:

不允许访问用户空间。因为没有进程上下文,无法将任何特定进程与用户空间关联起来。

current指针在原子模式下没有任何意义,也是不可用的。因为相关代码和被中断的进程没有任何关联。

不能执行休眠或调度。原子代码不可以调用schedule或者wait_event,也不能调用任何可能引起休眠的函数。

内核代码可以调用in_interrpt()来判断自己是否处于中断上下文。

定时器API:

#include <linux/timer.h>

struct timer_list{

          /* ...*/

          unsigned long expires;

          void  (*function)(unsigned long);

          unsigned long data;

};

void init_timer(struct timer_list *timer);

struct timer_list  TIMER_INITIALIZE(_function, _expires, _data);

void add_timer(struct timer_list * timer);

int  del_timer(struct timer_list *timer);

上一篇 下一篇

猜你喜欢

热点阅读