Linux 时钟处理机制(一)
。欢迎访问phome.net
清单2-6 tick_notify 函数 static int tick_notify(struct notifier_block *nb, unsigned long reason, void *dev){ switch (reason) { case CLOCK_EVT_NOTIFY_ADD: return tick_check_new_device(dev); …… return NOTIFY_OK;} 由代码可知:对于新加入时钟事件设备这个事件,将会调用函数 tick_check_new_device .顺着该函数的调用序列向下查找.tick_set_periodic_handler 函数将时钟事件设备的 event_handler 成员赋值为 tick_handle_periodic 函数的地址.由此可知,函数 tick_handle_periodic 为硬件时钟中断发生时,真正的运行函数.
函数 tick_handle_periodic 的处理过程分成了以下两个部分: 全局处理:整个系统中的信息处理 局部处理:局部于本地 CPU 的处理 总结一下,一次时钟中断发生后, OS 主要执行的操作( tick_handle_periodic ): 全局处理(仅在一个 CPU 上运行): 更新 jiffies_64 更新 xtimer 和当前时钟源信息等 根据 tick 计算 avenrun 负载 局部处理(每个 CPU 都要运行): 根据当前在用户态还是核心态,统计当前进程的时间:用户态时间还是核心态时间 唤醒 TIMER_SOFTIRQ 软中断 唤醒 RCU 软中断 调用 scheduler_tick (更新进程时间片等等操作,更多内容参见参考文献) profile_tick 函数调用 以上就介绍完了硬件时钟的处理过程,下面来看软件时钟. 3 软件时钟处理 这里所说“软件时钟”指的是软件定时器( Software Timers ),是一个软件上的概念,是建立在硬件时钟基础之上的.它记录了未来某一时刻要执行的操作(函数),并当这一时刻真正到来时,这些操作(函数)能够被 按时执行.举个例子说明:它就像生活中的闹铃,给闹铃设定振铃时间(未来的某一时间)后,当时间(相当于硬件时钟)更新到这个振铃时间后,闹铃就会振铃. 这个振铃时间好比软件时钟的到期时间,振铃这个动作好比软件时钟到期后要执行的函数,而闹铃时间更新好比硬件时钟的更新. 实现软件时钟原理也比较简单:每一次硬件时钟中断到达时,内核更新的 jiffies ,然后将其和软件时钟的到期时间进行比较.如果 jiffies 等于或者大于软件时钟的到期时间,内核就执行软件时钟指定的函数. 拥有帝国一切,皆有可能。欢迎访问phome.net 拥有帝国一切,皆有可能。欢迎访问phome.net |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |