快速业务通道

Linux 时钟处理机制(一)

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-27
。欢迎访问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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号