自从悟空发现高精度定时器的精度很高之后,悟空就决定开始研究高分辨率的定时器。有了低分辨率定时器的基础之后,悟空想内核表示高分辨率定时器的结构中应该至少包括三个成员。
一个表示到期时间的成员,而且这个成员肯定不是unsigned long类型的成员,因为内核表示时间的方法主要有两种,一个jiffies,一个是ktime_t,而要实现ns级别的精度,内核必须采用ktime_t类型。
第二个成员是高精度定时器执行的挂钩函数,这个函数主要用于执行到期之后需要执行的任务。
第三个成员就是内核管理高精度定时器的管理数据结构,低分辨率的定时器采用了五个双向链表来管理这些定时器,而高精度定时器应该也有一种管理方式,悟空想应该是红黑树吧。
悟空想验证一下自己的想法,于是悟空找到了内核高精度定时器的结构体:
struct hrtimer {
struct timerqueue_node node;
ktime_t _softexpires;
enum hrtimer_restart (*function)(struct hrtimer *);
struct hrtimer_clock_base *base;
unsigned long state;
......
};
看完这个结构体悟空感觉有点小激动,因为悟空发现他的猜想是对的,struct hrtimer中的确包含了这三个成员。但是悟空不太明白的是,为什么管理数据结构的红黑树的成员,没有采用红黑树的struct rb_node的结构体,而是采用了struct timerqueue_node成员,该结构体中包含一个expires成员,具体的结构体如下: