linux 定时器学习小结

来源:互联网 发布:手机播放软件 编辑:程序博客网 时间:2024/06/06 14:04

关于setitimer

有三种策略

1)实时时钟

        当应用程序调用setitimer设置实时时钟时,内核将一个实时timer加入到定时器链表中,这个timer中的时间由setitimer的参数设置,timer的处理函数呢?是内核函数it_real_fn(),在进程结构体初始化的时候由INIT_TASK宏负责将real_timer的处理函数初始化为it_real_fn()。

        setitimer函数为何不同时设置处理函数呢?因为实时定时器是由内核来处理的,内核需要尽快地处理这些定时器函数。

        发现setitimer时间间隔太小时(在rh上,ver2.4,10ms--30ms),不太准确,大于等于1s时,相对很准确。初步怀疑是每次it_real_fn()函数调用add_timer时比较耗时,耗时较长时,引起add_timer不能全部执行,待验证。

2)prof

        统计程序实际运行时间时,使用了prof策略,这个策略中时间间隔为10ms时,比较准确,比较及时。因为这是在update_process_time函数中执行的,属于中断的上半部,执行较快。(2008-10-13)