Chinaunix首页 | 论坛 | 博客
  • 博客访问: 375079
  • 博文数量: 82
  • 博客积分: 1104
  • 博客等级: 少尉
  • 技术积分: 926
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-16 15:14
文章分类
文章存档

2012年(82)

分类: LINUX

2012-05-23 15:23:27

这个函数是不是说检查定时器是否已经被激活(调用add_timer或者mod_timer)?
还是说检查对应的回调函数是否已经在执行?

《深入Linux设备驱动程序内核机制》第八章 <时间管理>关于定时器部分的叙述:

一个处于pending状态的定时器是处在处理器的定时器管理队列中正等待被调度执行的定时器对象。如果一个要被 del_timer函数删除的timer对象已经被调度执行了(内核源码称这种定时器状态为inactive),函数将直接返回0,否则函数将通过 detach_timer将该定时器对象从队列中删除掉。在多处理器的SMP系统中,del_timer_sync函数要完成的任务除了同 del_timer一样从定时器队列中删除一个定时器对象外,它还会确保当函数返回时系统中没有任何处理器正在执行定时器对象上的定时器函数,而如果只是 调用del_timer,那么当del_timer函数返回时,被删除的定时器对象的定时器函数可能正在其他处理器上运行。”

所以timer_pending是用来判断一个处在定时器管理队列中的定时器对象是否已经被调度执行add_timer只是把一个定时器对象加入到内核 的管理队列,但是何时执行实际上由时钟中断(更确切地,是内核在时钟中断的softirq部分才开始扫描定时器管理队列)一个定时器对象pending 意味着它的回调函数尚未被调度执行,而一旦一个定时器对象被调度执行,之后它将被从定时器管理队列中摘除,除非它再次被提交。
阅读(8670) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~