《深入理解LINUX网络内幕》读书笔记2

用户空间和内核接口

Linux有用户空间和内核空间,编程时用户空间想使用内核空间的功能只能通过特定的接口,这些接口就是系统调用。

内核把内部信息输出到用户空间,除了system call外,还有三个特殊的接口:

  • procfs:一个虚拟文件系统,mount在/proc下,内核以文件的形式输出内部信息到用户空间,这里的文件用户空间只可读不可写。

  • sysctl:mount在/proc/sys下,允许用户空间读写内核变量的值。

2.6以后procfs、sysctl部分移植到了sysfs(/sys文件系统)

ioctl系统调用和Netlink套接字(Socket,RFC3549)

通知链

一种编程模型:发布-订阅(publish-and-subscribe)模型

作用:模块间事件同步,好处是降低了模块间的耦合。

主动端是发送事件的通知者,维护一个本模块全局链表,被动端即订阅者在初始化的时候,通过通知接口注册一个回调函数到主动端的链表上,当主动端发生事件时,依次调用链表上的回调函数,使得其他模块对该事件做响应。

定义链:

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

接口主要有注册函数notifier_chain_register、删除函数notifier_chain_unregister和执行函数notifier_call_chain

这三个接口都是内部接口,实际使用时都封装了包裹函数,通常因为要上锁。尤其是注册函数,模块通常封装成该模块特定的包裹函数。

典型例子参见net/ipv4/fib_frontend.c路由代码的初始化函数:

static struct notifier_block fib_inetaddr_notifier = {
	.notifier_call =fib_inetaddr_event,
};
static struct notifier_block fib_netdev_notifier = {
	.notifier_call =fib_netdev_event,
};
void __init ip_fib_init(void)
{
    。。。
    register_netdevice_notifier(&fib_netdev_notifier);
    register_inetaddr_notifier(&fib_inetaddr_notifier);
    nl_fib_lookup_init();
}

当发生IP地址的插入、删除等事件时,就会调用回调fib_inetaddr_event来更新路由模块。

注意:通知链的执行可以是直接调用,也可以是使用消息队列,实现进程间通信。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
深入理解Linux内核带书签的PDF是一本非常有价值的学习资源。Linux内核是操作系统的核心,负责管理硬件资源和提供用户与计算机硬件交互的接口。深入理解Linux内核可以帮助我们更好地理解操作系统的工作原理,并能够进行系统调优和故障排除。 这本书通过详细的介绍和分析,深入探讨了Linux内核的各个方面,包括进程管理、内存管理、文件系统、设备驱动、网络协议栈等等。通过学习这本书,我们可以了解内核的内部运行机制、数据结构和算法,并且了解它是如何处理各种操作系统任务的。 另外,这本书提供了书签功能,这对于学习者来说非常方便。可以使用书签功能来标记我们感兴趣或重要的内容,以便以后翻阅和复习。这样有助于我们更好地掌握书中的知识,加深理解,并能够更快地找到我们需要的信息。 带有书签的PDF版本的好处是可以轻松地在电子设备上阅读,比如电脑、平板电脑或手机。它具有可搜索的特性,这使得我们可以快速地查找特定的主题或关键词。此外,它还具有可扩展性,可以添加自己的笔记和注释,以便更好地组织知识。 总之,深入理解Linux内核带书签的PDF是一本非常有益的学习资源。它可以帮助我们深入学习和理解Linux内核,提升我们的技术水平,并且可以方便地进行知识的复习和查找。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值