1. 什么是原子通知链(atomic notifier)
1.1 通知链机制
linux内核通知链机制是一种订阅-发布模型,内核的很多子系统之间具有依赖性,当其中一个子系统1产生事件,子系统2有兴趣时,子系统2可以注册子系统1的通知链,当子系统1事件发生时,通知链机制使子系统2收到该事件的消息及其数据。原子通知链是通知链中的一种。
1.2 核心函数
注册:atomic_notifier_chain_register
解注册:atomic_notifier_chain_unregister
调用:atomic_notifier_call_chain
2. 原子通知链特点
- 非阻塞性质:这种通知链执行时是原子的,不允许阻塞。它的操作是快速的、不可中断的,不会被其他任务打断。
- 适用场景:适用于需要快速、不被打断地进行通知传递的情况。通常用于轻量级的、不涉及复杂同步或互斥问题的通知需求。
3. 原子通知链中“原子操作”的实现
atomic notifier的原子操作是通过rcu机制来实现的,来看一下call函数流程:
int __atomic_notifier_call_chain(struct atomic_notifier_head *nh, unsigned long val, void *v, int nr_to_call, int *nr_calls){
int ret;
rcu_read_lock();
ret = notifier_call_chain(&nh->head, val, v, nr_to_call, nr_calls);
rcu_read_unlock(); return ret;
}
int atomic_notifier_call_chain(struct atomic_notifier_head *nh, unsigned long val, void *v){
return __atomic_notifier_call_chain(nh, val, v, -1, NULL);
}