- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Netlink 基于socket的Linux内核 用
Netlink 基于socket的Linux内核 用
1引言
Linux中的进程间通信机制源自于Unix平台上的进程通信机制。Unix的两大分支ATT Unix和BSD Unix在进程通信实现机制上的各有所不同,前者形成了运行在单个计算机上的System VIPC,后者则实现了基于socket的进程间通信机制。同时Linux也遵循IEEE制定的Posix IPC标准,在三者的基础之上实现了以下几种主要的IPC机制:管道(Pipe)及命名管道(Named Pipe),信号(Signal),消息队列(Message queue),共享内存(Shared Memory),信号量(Semaphore),套接字(Socket)。通过这些IPC机制,用户空间进程之间可以完成互相通信。为了完成内核空间与用户空间通信,Linux提供了基于socket的Netlink通信机制,可以实现内核与用户空间数据的及时交换。
本文第2节概述相关研究工作,第3节与其他IPC机制对比,详细介绍Netlink机制及其关键技术,第4节使用KGDB+GDB组合调试,通过一个示例程序演示Netlink通信过程。第5节做总结并指出Netlink通信机制的不足之处。
2相关研究
到目前Linux提供了9种机制完成内核与用户空间的数据交换,分别是内核启动参数、模块参数与sysfs、sysctl、系统调用、netlink、procfs、seq_file、debugfs和relayfs,其中模块参数与sysfs、procfs、debugfs、relayfs是基于文件系统的通信机制,用于内核空间向用户控件输出信息;sysctl、系统调用是由用户空间发起的通信机制。由此可见,以上均为单工通信机制,在内核空间与用户空间的双向互动数据交换上略显不足。Netlink是基于socket的通信机制,由于socket本身的双共性、突发性、不阻塞特点,因此能够很好的满足内核与用户空间小量数据的及时交互,因此在Linux 2.6内核中广泛使用,例如SELinux,Linux系统的防火墙分为内核态的netfilter和用户态的iptables,netfilter与iptables的数据交换就是通过Netlink机制完成。
3 Netlink机制及其关键技术
3.1 Netlink机制
Linux操作系统中当CPU处于内核状态时,可以分为有用户上下文的状态和执行硬件、软件中断两种。其中当处于有用户上下文时,由于内核态和用户态的内存映射机制不同,不可直接将本地变量传给用户态的内存区;处于硬件、软件中断时,无法直接向用户内存区传递数据,代码执行不可中断。针对传统的进程间通信机制,他们均无法直接在内核态和用户态之间使用,原因如下表:
通信方法无法介于内核态与用户态的原因
管道(不包括命名管道)局限于父子进程间的通信。
消息队列在硬、软中断中无法无阻塞地接收数据。
信号量无法介于内核态和用户态使用。
内存共享需要信号量辅助,而信号量又无法使用。
套接字在硬、软中断中无法无阻塞地接收数据。
1*(引自参考文献5)
解决内核态和用户态通信机制可分为两类:
1.处于有用户上下文时,可以使用Linux提供的copy_from_user()和copy_to_user()函数完成,但由于这两个函数可能阻塞,因此不能在硬件、软件的中断过程中使用。
2.处于硬、软件中断时。
2.1可以通过Linux内核提供的spinlock自旋锁实现内核线程与中断过程的同步,由于内核线程运行在有上下文的进程中,因此可以在内核线程中使用套接字或消息队列来取得用户空间的数据,然后再将数据通过临界区传递给中断过程.
2.2通过Netlink机制实现。Netlink套接字的通信依据是一个对应于进程的标识,一般定为该进程的ID。Netlink通信最大的特点是对对中断过程的支持,它在内核空间接收用户空间数据时不再需要用户自行启动一个内核线程,而是通过另一个软中断调用用户事先指定的接收函数。通过软中断而不是自行启动内核线程保证了数据传输的及时性。
3.2 Netlink优点
Netlink相对于其他的通信机制具有以下优点:
1.使用Netlink通过自定义一种新的协议并加入协议族即可通过socket API使用Netlink协议完成数据交换,而ioctl和proc文件系统均需要通过程序加入相应的设备或文件。
2.Netlink使用socket缓存队列,是一种异步通信机制,而ioctl是同步通信机制,如果传输的数据量较大,会影响系统性能。
3.Netlink支持多播,属于一个Netlink组的模块和进程都能获得该多播消息。
4.Netlink允许内核发起会话,而ioctl和系统调用只能由用户空间进程发起。
在内核源码有关Netlink协议的头文件中包含
您可能关注的文档
- AD转换器常见架构与产品.doc
- AE渲染输出详细设置教程 转载.doc
- AgileEAS NET平台开发案例 药店系统.doc
- AIWA 卡座 中的皇帝,XK S9000.doc
- AJAX异步调用数据库.doc
- ALSTOM燃气轮机产品与性能.doc
- altera FPGA CPLD设计 基础篇 no.doc
- AMD主板芯片、CPU插槽的发展历史.doc
- Android手机专业性能测试软件Quadrant.doc
- Android手机十大出游必备应用软件分享.doc
- 2026年保密员考试题库100道及答案参考.docx
- 2026年国家电网招聘之文学哲学类考试题库300道(考点梳理).docx
- 2026年中级经济师之中级经济师金融专业考试题库300道及答案【新】.docx
- 2026年国家电网招聘之人力资源类考试题库300道含完整答案【全国通用】.docx
- 2026年试验检测师之交通工程考试题库300道【精练】.docx
- 2026年一级建造师之一建水利水电工程实务考试题库500道附完整答案(夺冠系列).docx
- 2026年一级建造师之一建铁路工程实务考试题库300道含完整答案【夺冠】.docx
- 2026年二级建造师之二建公路工程实务考试题库500道汇编.docx
- 2026年国家电网招聘之文学哲学类考试题库300道及完整答案【网校专用】.docx
- 2026年公安机关理论考试题库300道附完整答案【考点梳理】.docx
最近下载
- (编号TCAIM 014-2024)-《帕金森病中西医结合诊疗指南》.pdf VIP
- 硝基漆安全技术说明书.pdf VIP
- 第三单元工具与技术单元复习试题科学六年级上册教科版2017.doc VIP
- DB23_T 3919-2024 大跨钢结构技术标准.pdf VIP
- 起重机械吊索具检查与报废标准40.pdf VIP
- 2025年食品法规与标准模拟卷(附答案).docx VIP
- R-Biopharm拜发分析系统检测试剂盒R7021说明书.pdf
- 06 《诫子书》理解性默写-学年七年级语文上册知识梳理与能力训练.docx VIP
- TCAQ10201-2024质量管理小组活动准则_可搜索.pdf VIP
- 2025年商品和服务税收分类编码操作手册1.08.7.pdf VIP
原创力文档


文档评论(0)