Linux的时钟处理机制
函数 cascade 用于调整软件时钟(这个调整过程是指:将马上就要到期的软 件时钟从其所在的链表中删除,重新计算到期时间的相对值(到期时间 - timer_jiffies ),然后根据该值重新插入到 base 中)。注意到在软件时钟处 理过程中,每次都是从 tv1 中取出一个链表进行处理,而不是从 tv2~tv5 中取 ,所以对软件时钟就要进行必要的调整。 在讲解 cascade 函数之前,再从直观上理解下为什么需要进行调整。所有软 件时钟都是按照其到期时间的相对值(相对于 timer_jiffies )被调加到 base 中的。但是 timer_jiffies 的数值都会在处理中增加1(如3.3.2节所示),也 就是说这个相对值会随着处理发生变化,当这个相对值小于等于256时,就要将 软件时钟从 tv2~tv5 中转移到 tv1 中( tv1 中保存着下256个 tick 内到期的 所有软件时钟)。 函数 cascade 的实现如清单3-10 清单3-10 cascade 函数
该函数根据索引,取出相应的 tv ( tv2~tv5 )中的链表,然后遍历链表每 一个元素。按照其到期时间重新将软件时钟加入到软件时钟的 base 中。该函数 返回 tv 中被调整的链表索引值(参见图3-1)。 清单3-9中调整软件时钟的代码如下:
这部分代码表明:如果 index 有0再到0时( index 是对 timer_jiffies 取 模),说明时间已经过了256个 tick ,这时要把 tv2 中软件时钟转移到 tv1 中。如果 index 和第一个 cascade 函数的返回值都从0再到到0时,说明时间已 经过了256*64个 tick ,这时要把 tv3 中软件时钟转移到 tv1 或者 tv2 中。 之后的调整过程依次类推。 (编辑:应用网_阳江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |