通知链--深入理解linux网络技术内幕 第四章

今天看到《深入理解LINUX网络技术内幕》的第四章通知链,简单说下我的理解

通知链也就是内核子系统之间消息沟通的机制,用个通俗的例子来说明通知链的几个部分:

把一个小群体看成一个内核,每个人代表内核里的一个子系统,比如说,小A、小B、小C、小D四个人组成一个内核,每个人是个内核子系统,小A负责送快递,其他三人也是各司其职

定义链:

现在问题来了,如果大家都需要快递服务,怎么才能更好的做好这个服务呢,就用到了发布-订阅模型,简单来说,就是小A有一个快递通知单子(通知链表),其他客户,如果你想要在快递到达的时候通知你的话,你就在这个单子后面加上你的信息,信息(notifier_block)里面就包括下面几个方面:

1、通知我的方式(notifier_call)

2、我后面的是谁(*next),这东西大家都懂,感觉现实生活中用的倒是不多哈

3、我的用户等级,是不是VIP之类的(priority)

注册链:

这个时候其他有需求的用户就可以来注册了,小B在上面写我的快递到了就给我放楼下商店,我后面目前没有人,我的用户等级是个普通的

这个时候小C来了,他是个土壕,必须弄个VIP的等级,然后他一看单子,现在只有一个小B,还是个普通用户,那行我写在你前面(因为我是VIP么),小C在小B前面写我的快递到了就给我打电话,把next补上小B的名字,我的用户等级是个VIP

小D目前没有快递的需求,他就不注册啦

通知链:

当快递来了的时候(notifier_call_chain),小A就开始通知,怎么通知呢,按照单子的顺序,按照他们说的通知方式依次的进行通知就可以了,通知的时候,每个人会给出一个返回值,先给小C打电话,告诉他快递到啦,小C成功的接到了电话,说好的,我知道了(NOTIFY_OK),然后通知小B,给他直接放在楼下商店,结果楼下商店不让放或者关门啦,这个时候就会返回失败了等其他信息了(NOTIFY_BAD)

对应到真正的内核中,这个快递通知比如说变成了网络设备注册状态表(netdev_chain),那路由子系统需要这个通知,那么路由子系统就去注册register_netdevice_notifier(struct notifier_block *nb)

大概是这么理解的,有什么理解不对的地方,欢迎批评交流~thanks~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值