在Linux设备驱动编程中,我们可以利用Linux内核中提供的一组函数和数据结构来完成定时触发工作或着完成某周期性的事务。内核定时器是内核用来控制在未来某个时间点(基于jiffies)调度执行某个函数的一种机制。
被调度的函数肯定是异步执行的,它类似于一种“软中断”,而且是处于非进程的上下文中,所以调度函数必须遵守以下规则:
1. 不能访问用户空间,因为没有进程上下文,无法与特定的进程与用户关联
2. 不能执行调度或休眠
3. 没有current指针
4. 任何被访问的数据结构都应该针对并发访问进行保护,以防竞争条件
内核定时器的调度函数运行过一次后就不会再运行了,但可以通过在被调度的函数中重新调度自己来周期运行。
内核定时器的数据结构如下所示:
struct timer_list {