timer-----内核定时器
来源:互联网 发布:java爬虫 使用代理ip 编辑:程序博客网 时间:2024/06/05 05:15
概述:
**********定时器的作用是:当在一个给定的时间到达时,可以来调用一个函数来执行你想完成的任务,优点是,定时器不会阻塞当前进程.
**********定时器是基于时钟滴答的,可以用来完成各种你想要去完成的任务.
**********一个内核定时器,其实是一个数据结构,在该结构内有定时器执行函数,时间一到该函数就会被执行.(在头文件<linux/timer.h>中)
定时器结构(主要关注三个成员)
struct timer_list {struct list_head entry;unsigned long expires;//表示定时器期望运行定时器函数的jiffies值void (*function)(unsigned long);//定时器执行函数unsigned long data;//传递给内核执行函数的参数struct tvec_base *base;#ifdef CONFIG_TIMER_STATSvoid *start_site;char start_comm[16];int start_pid;#endif};**********定时器运行时和调用该定时器的进程不在同一个进程上下文中,也就是说它俩没有任何关系了,谁也影响不到谁.
**********定时器运行时,调用定时器的进程可能处的状态是:可能在睡眠,可能在一个不同的处理器上运行,可能已经退出.
**********定时器函数的执行必须是原子操作不能被打断.
**********定时器函数的运行是在调用该定时器进程的进程上下文之外运行的
**********在进程上下文之外,有一下限制条件
1. 不允许存取用户空间,因为没有进程上下文,没有和任何特定进程相关联的到用户空间的途径
2. 该进程的current指针在原子态没有意义,并且current不能使用,因为相关的代码没有和已被中断的进程有联系
3. 在进程上下文之外也不能进行睡眠或者调度.
**********内核可以通过调用in_interrupt()宏函数(包含在头文件<asm/hardirq.h>)来判断某一执行动作是否在进程上下文中,如果处理器在当前中断上下文中运行就返回0.
内核定时器的使用步骤:
**********第一步:定义和初始化定时器
struct timer_list tl{ .expires = ,//具体值自己设定 .function = , .data = ,};
void init_timer(struct timer_list *timer);//初始化定时器结构体的函数或
struct timer_list TIMER_INITIALIZER(_function, _expires, _data);**********第二步:启动定时器
void add_timer(struct timer_list * timer);**********删除定时器(这个可以在定时器没到时,用来取消定时,)
int del_timer(struct timer_list * timer);
和内核定时器有关的函数:
//修改一个定时器的超时时间
int mod_timer(struct timer_list *timer, unsigned long expires);
//删除一个定时器,并且确保在该函数返回时,定时器执行函数不在任何CPU上运行.
int del_timer_sync(struct timer_list *timer);
//判断定时器是否在调度运行,返回值:1表示在运行,0表示没有
int timer_pending(const struct timer_list * timer);
0 0
- timer-----内核定时器
- 内核定时器,schedule_timeout, ,POSIX timer
- Zephys OS nano内核篇:定时器 Timer
- Timer 定时器
- TIMER 定时器
- timer 定时器
- timer 定时器
- timer定时器
- 定时器 Timer
- 定时器Timer
- timer定时器
- Timer 定时器
- Timer定时器
- 定时器TIMER
- 定时器Timer
- timer定时器
- Timer 定时器
- Timer定时器
- Linux下MySQL数据文件目录搬迁
- IT桔子2013年度中国互联网创业投资盘点(简版): 群雄逐鹿中,你还在这里坚持
- 同步和异步的区别
- cocos2dx创建精灵的五种方式
- 堆和栈
- timer-----内核定时器
- Jmeter启动GUI界面出错
- linux创建用户
- Linux内核源码特殊用法
- 连续几天不在状态了
- 搭建cassandra单数据中心集群(笔记)
- Android高级应用开发(基础篇) - stage9 - 学习笔记
- Android fragment相关
- linux下增加虚拟内存