Linux内核事件通知链学习

1.Linux内核子系统

https://blog.csdn.net/qq_36016407/article/details/73558361

 

 系统调用子系统、进程管理、虚拟文件子系统、内存管理、网络管理。

Linux内核中各个子系统相互依赖,当其中某个子系统状态发生改变时,就必须使用一定的机制告知使用其服务的其他子系统,以便其他子系统采取相应的措施。为满足这样的需求,内核实现了事件通知链机制(notificationchain)。

通知链只能用在各个子系统之间,而不能在内核和用户空间进行事件的通知。

内核更详细的版本:

https://blog.csdn.net/hguisu/article/details/6122513#t7

 

 

 可以看到网络服务,也就是套接字是和TCP/IP驱动程序联系在一起的,前者会使用后者。

2.介绍

转自:https://blog.csdn.net/wh8_2011/article/details/50541212

https://blog.csdn.net/frank_jb/article/details/93191300

 

 例如上图中的事件通知链,针对网络子系统,对应三个事件的通知链,有表示ipv4地址发生变化时的inetaddr_chain,表示ipv6地址发生变化的inet6addr_chain;还有表示设备注册、状态变化的netdev_chain。当有这些事件发生时,会在链表中找到一个优先级高的,执行对应的回调函数。

2.1 通知链的核心结构:

struct notifier_block
{
    int(*notifier_call)(struct notifier_block *, unsigned long, void*);
    structnotifier_block *next;
    intpriority;
};

2.2 运作机制

1、通知者定义通知链。

2、被通知者向通知链中注册回调函数。调用的是notifier_chain_register。

3、当事件发生时,通知者发出通知(执行通知链中所有元素的回调函数)。调用的是notifier_call_chain。

通知者是检测事件发生的,若发生,则通知所有对该事件感兴趣的一方 事件发生。

 

posted @ 2021-05-24 00:53  lypbendlf  阅读(304)  评论(0编辑  收藏  举报