Linux系统进程间隔定时器Itimer(上)(3)

文章作者 100test 发表时间 2007:03:14 16:42:10
来源 100Test.Com百考试题网


当用户通过setitimer()系统调用来设置进程的ITIMER_REAL间隔定时器时,it_real_incr被设置成非零值,于是该系统调用相应地设置好real_timer.expires值,然后进程的real_timer定时器就被加入到内核动态定时器链表中,这样该进程的ITIMER_REAL间隔定时器就被启动了。当real_timer定时器到期时,它的关联函数it_real_fn()将被执行。注意!所有进程的real_timer定时器的function函数指针都指向it_real_fn()这同一个函数,因此it_real_fn()函数必须通过其参数来识别是哪一个进程,为此它将unsigned long类型的参数p解释为进程task_struct结构的地址。该函数的源码如下

(kernel/itimer.c): 

void it_real_fn(unsigned long __data) 

{ 

struct task_struct * p = (struct task_struct *) __data. 

unsigned long interval. 



send_sig(SIGALRM, p, 1). 

interval = p->it_real_incr. 

if (interval) { 

if (interval > (unsigned long) LONG_MAX) 

interval = LONG_MAX. 

p->real_timer.expires = jiffies   interval. 

add_timer(&.p->real_timer). 

} 

}

函数it_real_fn()的执行过程大致如下:

(1)首先将参数p通过强制类型转换解释为进程的task_struct结构类型的指针。

(2)向进程发送SIGALRM信号。

(3)在进程的it_real_incr非0的情况下继续启动real_timer定时器。首先,计算real_timer定时器的expires值为(jiffies+it_real_incr)。然后,调用add_timer()函数将real_timer加入到内核动态定时器链表中。

7.7.3 itimer定时器的系统调用

与itimer定时器相关的syscall有两个:getitimer()和setitimer()。其中,getitimer()用于查询调用进程的三个间隔定时器的信息,而setitimer()则用来设置调用进程的三个间隔定时器。这两个syscall都是现在kernel/itimer.c文件中。



相关文章


Linux系统进程间隔定时器Itimer(上)(2)
Linux系统进程间隔定时器Itimer(上)(3)
Linux系统进程间隔定时器Itimer(上)(1)
推荐:深思Linux操作系统发展之路(1)
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛