Linux的时钟处理机制
所以对应了四种通知链头结构: struct atomic_notifier_head :原子通知链的链头 struct blocking_notifier_head :可阻塞通知链的链头 struct raw_notifier_head :原始通知链的链头 struct srcu_notifier_head : SRCU 通知链的链头 通知链元素的类型: struct notifier_block :通知链中的元素,记录了当发出通知时,应该执 行的操作(即回调函数) 链头中保存着指向元素链表的指针。通知链元素结构则保存着回调函数的类 型以及优先级,参见 notifier.h 文件。 2.2.2 运作机制 通知链的运作机制包括两个角色: 被通知者:对某一事件感兴趣一方。定义了当事件发生时,相应的处理函数 ,即回调函数。但需要事先将其注册到通知链中(被通知者注册的动作就是在通 知链中增加一项)。 通知者:事件的通知者。当检测到某事件,或者本身产生事件时,通知所有 对该事件感兴趣的一方事件发生。他定义了一个通知链,其中保存了每一个被通 知者对事件的处理函数(回调函数)。通知这个过程实际上就是遍历通知链中的 每一项,然后调用相应的事件处理函数。 包括以下过程: 通知者定义通知链 被通知者向通知链中注册回调函数 当事件发生时,通知者发出通知(执行通知链中所有元素的回调函数) 整个过程可以看作是“发布——订阅”模型(参见参 考资料) 被通知者调用 notifier_chain_register 函数注册回调函数,该函数按照优 先级将回调函数加入到通知链中 。注销回调函数则使用 notifier_chain_unregister 函数,即将回调函数从通知链中删除。2.2.1节讲 述的4种通知链各有相应的注册和注销函数,但是他们最终都是调用上述两个函 数完成注册和注销功能的。有兴趣的读者可以自行查阅内核代码。 通知者调用 notifier_call_chain 函数通知事件的到达,这个函数会遍历通 知链中所有的元素,然后依次调用每一个的回调函数(即完成通知动作)。 2.2.1节讲述的4种通知链也都有其对应的通知函数,这些函数也都是最终调用 notifier_call_chain 函数完成事件的通知。 更多关于通知链的内容,参见参考文献。 (编辑:佛山站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |