内核的开发者考察了多种数据结构,例如基数树、哈希表等等,最终他们选择了红黑树(rbtree)来组织hrtimer,红黑树已经以库的形式存在于内核中,并被成功地使用在内存管理子系统和文件系统中,随着系统的运行,hrtimer不停地被创建和销毁,新的hrtimer按顺序被插入到红黑树中,树的最左边的节点就是最快到期的定时器,内核用一...
hrtimer_callback_running函数只是用来检查要迁移的定时器是否就是当前正在处理的定时器,也就是检查定时器对应的hrtimer_clock_base结构体中的running字段是否等于自己。 static inline int hrtimer_callback_running(struct hrtimer *timer) { return timer->base->running == timer; } hrtimer_check_target 函数用来...
红黑树已经以库的形式存在于内核中,并被成功地使用在内存管理子系统和文件系统中,随着系统的运行,hrtimer不停地被创建和销毁,新的hrtimer按顺序被插入到红黑树中,树的最左边的节点就是最快到期的定时器,内核用一个hrtimer结构来表示一个高精度定时器:
timerqueue_node用于表示一个hrtimer节点,它在标准红黑树节点rb_node的基础上增加了expires字段,该字段和hrtimer中的_softexpires字段一起,设定了hrtimer的到期时间的一个范围,hrtimer可以在hrtimer._softexpires至timerqueue_node.expires之间的任何时刻到期,我们也称timerqueue_node.expires为硬过期时间(hard),意思很明显:...
此时红黑树的作用就凸显了:每次发生时钟中断,除了必要的进程/线程切换,还需要检查红黑树,看看最左边节点的expire是不是已经到了,如果还没有就不处理,等下一个时钟中断再检查;如果已经到了,就执行该节点的回调函数,同时删除该节点;这个过程是在hrtimer_interrupt中执行的,该函数代码如下: ...
(2)通过hrtimer_init()初始化hrtimer实例; <kernel/time/hrtimer.c> void hrtimer_init(struct hrtimer *timer, clockid_t clock_id, enum hrtimer_mode mode) { debug_init(timer, clock_id, mode); __hrtimer_init(timer, clock_id, mode); } EXPORT_SYMBOL_GPL(hrtimer_init); 其中,clock_id是时钟...
->运行高精度定时器hrtimer_run_queues ->触发中断,调用中断回调函数,hrtimer_interrupt ->...
[ 4202.922934] hrtimer: interrupt took 19983639 ns 14.8.3安全日志 关于安全方面的日志,阿铭简单介绍几个命令或者日志。 last命令用来查看登录Linux的历史信息,具体用法如下: # last |head root pts/1 192.168.72.128 Fri Jun 26 17:41 still logged in ...
hrtimer: interrupt took 2772539 ns 网站题目:Linux基础命令---dmsg显示内核输出 网站路径:http://www.pzhseo.com/article/jjipii.html
Nov 20 14:56:47 daixuan kernel: hrtimer: interrupt took 10699930 ns [root@daixuan init.d]# ls /var/log/wtmp 查看登录历史的命令 /var/log/wtmp [root@daixuan init.d]# last 用last调用wtmp日志文件,查看登录的历史信息 root pts/0 192.168.101.17 Fri Nov 20 11:17 still logged in ...