zoukankan      html  css  js  c++  java
  • Linux内核对定时器的描述

    http://www.cnblogs.com/leaven/archive/2010/08/19/1803382.html

     Linux内核对定时器的描述 

    Linux在include/linux/timer.h头文件中定义了数据结构timer_list来描述一个内核定时器: 

     

    <ccid_nobr>

    <ccid_code>struct timer_list { 
    struct list_head list; 
    unsigned long expires; 
    unsigned long data; 
    void (*function)(unsigned long); 
    };

    各数据成员的含义如下: 

    (1)双向链表元素list:用来将多个定时器连接成一条双向循环队列。 

    (2)expires:指定定时器到期的时间,这个时间被表示成自系统启动以来的时钟滴答计数(也即时钟节拍数)。当一个 

    定时器的expires值小于或等于jiffies变量时,我们就说这个定时器已经超时或到期了。在初始化一个定时器后,通常 

    把它的expires域设置成当前expires变量的当前值加上某个时间间隔值(以时钟滴答次数计)。 

    (3)函数指针function:指向一个可执行函数。当定时器到期时,内核就执行function所指定的函数。而data域则 

    被内核用作function函数的调用参数。 

    内核函数init_timer()用来初始化一个定时器。实际上,这个初始化函数仅仅将结构中的list成员初始化为空。如下所示(include/linux/timer.h): 

    <ccid_code>static inline void init_timer(struct timer_list * timer) 
    { 
    timer->list.next = timer->list.prev = NULL; 
    }

    由于定时器通常被连接在一个双向循环队列中等待执行(此时我们说定时器处于pending状态)。因此函数time_pending() 

    就可以用list成员是否为空来判断一个定时器是否处于pending状态。如下所示 

     

    <ccid_nobr>

    <ccid_code>(include/linux/timer.h): 
    static inline int timer_pending (const struct timer_list * timer) 
    { 
    return timer->list.next != NULL; 
    }

    时间比较操作 

    在定时器应用中经常需要比较两个时间值,以确定timer是否超时,所以Linux内核在timer.h头文件中定义了4个时间 

    关系比较操作宏。这里我们说时刻a在时刻b之后,就意味着时间值a≥b。Linux强烈推荐用户使用它所定义的下列4个 

    时间比较操作宏(include/linux/timer.h): 

     

    <ccid_nobr>

    <ccid_code>#define time_after(a,b) ((long)(b) - (long)(a) < 0) 
    #define time_before(a,b) time_after(b,a) 
    
    #define time_after_eq(a,b) ((long)(a) - (long)(b) >= 0) 
    #define time_before_eq(a,b) time_after_eq(b,a)
  • 相关阅读:
    2019年3月6日 980. Unique Paths III
    2019年3月05日 961. N-Repeated Element in Size 2N Array
    2019年3月4日 701. Insert into a Binary Search Tree
    2019年3月1日 804. Unique Morse Code Words
    2019年2月28日 654. Maximum Binary Tree
    2019年2月26日 Unique Email Addresses、To Lower Case、Encode and Decode TinyURL
    Nexus Repository Manager 3 远程命令执行漏洞(CVE-2020-10199)复现
    常见的Web源码泄漏漏洞及其利用
    Nmap-脚本检测CVE漏洞
    Vulnhub-dpwwn-01靶机过关记录
  • 原文地址:https://www.cnblogs.com/hxu7373/p/3489344.html
Copyright © 2011-2022 走看看