Linux系统进程间隔定时器Itimer
所谓“间隔定时器(Interval Timer,简称itimer)就是指定时器采用“间隔”值(interval)来作为计时方式,当定时器启动后,间隔值interval将不断减小.当 interval值减到0时,我们就说该间隔定时器到期.与上一节所说的内核动态定时器相比,二者最大的区别在于定时器的计时方式不同.内核定时器是通过它的到期时刻expires值来计时的,当全局变量jiffies值大于或等于内核动态定时器的expires值时,我们说内核内核定时器到期.而间隔定时器则实际上是通过一个不断减小的计数器来计时的.虽然这两种定时器并不相同,但却也是相互联系的.假如我们每个时钟节拍都使间隔定时器的间隔计数器减 1,那么在这种情形下间隔定时器实际上就是内核动态定时器(下面我们会看到进程的真实间隔定时器就是这样通过内核定时器来实现的). 间隔定时器主要被应用在用户进程上.每个Linux进程都有三个相互关联的间隔定时器.其各自的间隔计数器都定义在进程的task_struct结构中,如下所示(include/linux/sched.h): struct task_struct{ …… unsigned long it_real_value, it_prof_value, it_virt_value; unsigned long it_real_incr, it_prof_incr, it_virt_incr; struct timer_list real_timer; …… } (1)真实间隔定时器(ITIMER_REAL):这种间隔定时器在启动后,不管进程是否运行,每个时钟滴答都将其间隔计数器减1.当减到0值时,内核向进程发送SIGALRM信号.结构类型task_struct中的成员it_real_incr则表示真实间隔定时器的间隔计数器的初始值,而成员 it_real_value则表示真实间隔定时器的间隔计数器的当前值.这种间隔定时器本质上与上一节的内核定时器时一样的,因此Linux实际上是通过real_timer这个内嵌在task_struct结构中的内核动态定时器来实现真实间隔定时器ITIMER_REAL的. 2)虚拟间隔定时器ITIMER_VIRT:也称为进程的用户态间隔定时器.结构类型task_struct中成员it_virt_incr和 it_virt_value分别表示虚拟间隔定时器的间隔计数器的初始值和当前值,二者均以时钟滴答次数位计数单位.当虚拟间隔定时器启动后,只有当进程在用户态下运行时,一次时钟滴答才能使间隔计数器当前值it_virt_value减1.当减到0值时,内核向进程发送SIGVTALRM信号(虚拟闹钟信号),并将it_virt_value重置为初值it_virt_incr.具体请见7.4.3节中的do_it_virt()函数的实现. (3)PROF间隔定时器ITIMER_PROF:进程的task_struct结构中的it_prof_value和it_prof_incr成员分别表示PROF间隔定时器的间隔计数器的当前值和初始值(均以时钟滴答为单位).当一个进程的PROF间隔定时器启动后,则只要该进程处于运行中,而不管是在用户态或核心态下执行,每个时钟滴答都使间隔计数器it_prof_value值减1.当减到0值时,内核向进程发送SIGPROF信号,并将 it_prof_value重置为初值it_prof_incr.具体请见7.4.3节的do_it_prof()函数. Linux在include/linux/time.h头文件中为上述三种进程间隔定时器定义了索引标识,如下所示: #define ITIMER_REAL 0 #define ITIMER_VIRTUAL 1 #define ITIMER_PROF 2 7.7.1 数据结构itimerval 虽然,在内核中间隔定时器的间隔计数器是以时钟滴答次数为单位,但是让用户以时钟滴答为单位来指定间隔定时器的间隔计数器的初值显然是不太方便的,用户习惯的时间单位是秒、毫秒或微秒等.Linux定义了数据结构 itimerval来让用户以秒或微秒为单位指定间隔定时器的时间间隔值.其定义如下(include/linux/time.h): struct itimerval { struct timeval it_interval; /* timer interval */ struct timeval it_value; /* current value */ }; 其中,it_interval成员表 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |