zoukankan      html  css  js  c++  java
  • 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。

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

  • 相关阅读:
    ES基础(十三)Dynamic Template和Index Template
    ES基础(十一)显式Mapping设置与常见参数介绍
    ES基础(十)Dynamic Mapping 和常见字段类型
    ES基础(九)Query & Simple Query String Query
    ES基础(八)Request Body 与 Query DSL
    Docker 核心技术与实现原理
    error gathering device information while adding custom device
    Linux下使用内核源码单独编译某一模块
    kata container endpoint
    Virtio_user for Container Networking
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/14802756.html
Copyright © 2011-2022 走看看