内核通知链

大部分内核模块都是独立的,但有时某个模块对其他模块的事件感兴趣或者需要通知其他模块时,就需要用到内核通知链。

内核通知链只能用在内核各模块之间,无法用在内核与用户通信。

从原理来说,内核通知链就是个函数链表,链表上的每个节点都注册一个对应函数,当事件发生时,对应链表上的每个节点函数将被调用。从结构来说,链表有个通知方和接收方,通知时执行函数由被通知方注册执行。


内核通知链主要有4种:原子通知链,可阻塞通知链,原始通知链及SRCU通知链。

结构分别如下:(Linux\include\notifier.h)

原子通知链:通知链的回调函数只能在中断上下文中使用,无法被阻塞

struct atomic_notifier_head

{

spinlock_t lock;

struct notifier_block __rcu *head; 

}

ATOMIC_NOTIFIER_HEAD(name)


可阻塞通知链:通知链的回调函数可在进程上下文中使用,允许阻塞

struct blocking_notifier_head

{

struct rwsemaphore rwsem;

struct notifier_block __rcu *head;

}

BLOCKING_NOTIFIER_HEAD(name)


原始通知链:通知链的回调函数没有限制,保护机制有调用者维护

struct raw_notifier_head

{

struct notifier_block __rcu *head;

}

RAE_NOTIFIER_HEAD(name)


SRCU通知链:可阻塞通知链的一种变种

struct srcu_notifier_head

{

struct mutex mutex;

struct srcu_struct srcu;

struct notifier_block __rcu *head;

}

srcu_notifier_head必须要动态创建和清除

srcu_init_notifier_h

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值