未配置高精度模式(2)

       可以看出,每个CPU都必须定义两个时钟源:REALTIME和MONOTONIC。REALTIME代表实时时钟,MONOTONIC代表单调递增时钟。两者的区别在于,当用户更改系统时间时,REALTIME时钟会收到影响,但MONOTONIC不受影响。这可以从它们两个的get_time函数指针看出来,REALTIME时钟指向的是ktime_get_real,MONOTONIC指向的是ktime_get。

     时钟源的结构体定义为struct hrtimer_clock_base,其中有两个域struct rb_node       *first和struct rb_root   active,这两个域维护了hrtimer的红黑树。也就是说,每一个hrtimer_clock_base都维护了自己的一个红黑树。

      hrtimer在初始化时,都需要加入到某一个时钟源的红黑树中,这个时钟源要么是REALTIME,要么是MONOTONIC,这个关联通过struct hrtimer的base域实现。

struct hrtimer {       struct rb_node          node;       ktime_t             _expires;       ktime_t             _softexpires;       enum hrtimer_restart        (*function)(struct hrtimer *);       struct hrtimer_clock_base   *base;       unsigned long           state;   #ifdef CONFIG_TIMER_STATS        int             start_pid;       void                *start_site;       char                start_comm[16];   #endif    };  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/22407.html