今天悟空得到了一个好消息,就是八戒竟然主动邀请他去上课了,这让悟空很是意外,意外之余有点小感动。所以悟空一大早就来到了课室,看到八戒正在那里睡觉。
悟空:你是猪啊,怎么还睡啊?
八戒:猴哥啊,你终于来了,老师说了,你这次再不来上课,我就也不要来了。
这时达人来了,看到悟空达人很高兴,因为他今晚应该能睡一个好觉了,最近悟空每天晚上都是凌晨来找他,搞得他每晚都没法睡觉。
达人:我们开始上课吧,今天我们要讲的是Linux内核如何管理高精度定时器的。大家都知道,Linux内核采用红黑树来管理高精度定时器。为了减少多个CPU之间上锁的问题,Linux内核为每个CPU定义了自己的高精度定时器,同时每个CPU又根据时间基准不同,定义了三种类型的时间基准,实时时间、启动时间和单调时间,具体的内核组织方式,我们可以看一下下面这个图:
悟空:那么老师,这里是不是说每个CPU都有三个红黑树呢?
达人:是的,每个CPU都有自己独立的hrtimer_cpu_base结构成员,这个和低分辨率的定时器tvec_base结构体成员是一样的。tvec_base采用了5个双向链表来管理,而高精度定时器采用了三个红黑树来管理。
悟空:老师,tvec_base的五个链表之间的定时器迁移比较复杂,那么这三颗红黑树上的定时器迁移又是怎么处理的呢?
达人:这三颗树是彼此独立的,树和树之间没有定时器的迁移,平时大家用的最多的高精度定时器是实时时间的高精度定时器。
悟空:哦,原来是这样啊。