Linux 时钟处理机制
er chains ):通知链元素的回调函数在进程上下文中运行,允许阻塞 3原始通知链( Raw notifier chains ):对通知链元素的回调函数没有任何限制,所有锁和保护机制都由调用者维护 4SRCU 通知链( SRCU notifier chains ):可阻塞通知链的一种变体 对应了四种通知链头结构: ●struct atomic_notifier_head :原子通知链的链头 struct notifier_block :通知链中的元素,记录了当发出通知时,应该执行的操作(即回调函数)
链头中保存着指向元素链表的指针.通知链元素结构则保存着回调函数的类型以及优先级,参见 notifier.h 文件.
2.2.2 运作机制 通知链的运作机制包括两个角色: 1被通知者:对某一事件感兴趣一方.定义了当事件发生时,相应的处理函数,即回调函数.但需要事先将其注册到通知链中(被通知者注册的动作就是在通知链中增加一项). 1通知者定义通知链 被通知者调用 notifier_chain_register 函数注册回调函数,该函数按照优先级将回调函数加入到通知链中 .注销回调函数则使用 notifier_chain_unregister 函数,即将回调函数从通知链中删除.2.2.1节讲述的4种通知链各有相应的注册和注销函数,但是他们最终都是调用上述两个函数完成注册和注销功能的.有兴趣的读者可以自行查阅内核代码. 通知者调用 notifier_call_chain 函数通知事件的到达,这个函数会遍历通知链中所有的元素,然后依次调用每一个的回调函数(即完成通知动作).2.2.1节讲述的4种通知链也都有其对应的通知函数,这些函数也都是最终调用 notifier_call_chain 函数完成事件的通知. 更多关于通知链的内容,参见参考文献. 由以上的叙述,“通知链”技术可以概括为:事件的被通知者将事件发生时应该执行的操作通过函数指针方式保存在链表(通知链)中,然后当事件发生时通知者依次执行链表中每一个元素的回调函数完成通知. 2.3 时钟初始化 内核初始化部分( start_kernel 函数)和时钟相关的过程主要有以下几个:
1tick_init() 2.3.1 tick_init 函数 函数 tick_init() 很简单,调用 clockevents_register_notifier 函数向 clockevents_chain 通知链注册元素: tick_notifier.这个元素的回调函数指明了当时钟事件设备信息发生变化(例如新加入一个时钟事件设备等等)时,应该执行的操作,该回调函数为 tick_notify (参见2.4节). 2.3.2 init_timers 函数 注:本文中所有代码均来自于Linux2.6.25 源代码
主要功能无关的内容,以后代码同样方式处理)
|
|||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |