悟空学Linux专栏----第20篇
来源:互联网 发布:帝国cms tags自动生成 编辑:程序博客网 时间:2024/05/22 13:32
自从悟空发现高精度定时器的精度很高之后,悟空就决定开始研究高分辨率的定时器。有了低分辨率定时器的基础之后,悟空想内核表示高分辨率定时器的结构中应该至少包括三个成员。
一个表示到期时间的成员,而且这个成员肯定不是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成员,具体的结构体如下:
Struct timerqueue_node{
Struct rb_node node;
Ktime_t expires;
};
悟空想了很久也没有想明白,悟空决定再次夜访达人先生。
悟空:老师,为什么Linux内核的struct hrtimer结构体中包含的不是struct rb_node结构体,而是Struct timerqueue_node结构体?这样不是增加了管理的复杂度吗?
达人:红黑树是一种有序的二叉树,而我们这里对红黑树的排序方法,就是采用了expires时间,这个成员是红黑树的排序准则。
悟空:那么为什么struct hrtimer中还有_softexpires成员,这个成员不是就表示了到期时间吗?
达人:这两个成员通常是相等,但是有些时候,用户希望到期时间是一个区间的时候,而不是一点的时候,这两个成员就不相等了,_softexpires成员保存的是这个区间的开始时间,expires成员保存的是这个区间的结束时间。
悟空:哦,原来是这样啊。
- 悟空学Linux专栏----第20篇
- 悟空学Linux专栏----第1篇
- 悟空学Linux专栏----第2篇
- 悟空学Linux专栏----第3篇
- 悟空学Linux专栏----第4篇
- 悟空学Linux专栏----第5篇
- 悟空学Linux专栏----第6篇
- 悟空学Linux专栏----第7篇
- 悟空学Linux专栏----第8篇
- 悟空学Linux专栏----第9篇
- 悟空学Linux专栏----第10篇
- 悟空学Linux专栏----第11篇
- 悟空学Linux专栏----第12篇
- 悟空学Linux专栏----第13篇
- 悟空学Linux专栏----第15篇
- 悟空学Linux专栏----第16篇
- 悟空学Linux专栏----第17篇
- 悟空学Linux专栏----第18篇
- iOS应用程序生命周期(前后台切换,应用的各种状态)详解
- hdu2544 最短路(dijkstra/优先队列)
- 何时、如何开启 MySql 日志?
- DEBUG模式和RELEASE模式
- Razor视图引擎、控制器与路由机制学习
- 悟空学Linux专栏----第20篇
- Mac下SSH跳点连接及代理连接
- 一个简单的makefile编写说明
- Objective-C - 容器元素转换NSInteger
- Android蓝牙BLE开发步骤
- 安卓应用中的本地存储
- ios8可交互式通知(ios自学笔记)
- 校验、AJAX与过滤器
- 如何使用云桌面系统提高涉密网络安全性与方便性