- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
支持多线程并发与消息异步处理Linux Netlink通信机制研究
支持多线程并发与消息异步处理Linux Netlink通信机制研究
摘要:Netlink是Linux操作系统内核空间与用户空间最流行的进程间通信机制之一,但目前在多线程程序中的使用还存在一些问题。介绍了Netlink相对于Linux其它传统通信手段的优点,阐述了使用Netlink进行用户程序与内核模块通信的实现方法,分析了目前公开资料上Netlink线程并发支持机制存在的问题,并给出了支持多线程并发与消息异步处理的正确方法,最后在真实机器上进行了验证。结果显示,该方法能有效支持在多线程Linux应用中使用Netlink进行用户态与内核态通信。
关键词:Linux;nelink;进程间通信;多线程并发;异步处理
DOIDOI:10.11907/rjdk.172576
中图分类号:TP319文献标识码:A文章编号2017)010009905
0引言
Linux是当今应用最广泛的操作系统之一,其兼容性好,能适应从嵌入式设备、个人用户终端到高性能服务器的不同硬件平台,具有多任务与多用户能力。Linux符合POSIX标准,在GNU公共许可权限下可免费获得其内核源代码,同时还具备完整的软件生态链,包含各种开发工具及第三方软件库,非常方便用户开发定制自己的应用。
Linux采用模块化单内核架构,支持内核模块动态加载与卸载,其系统地址空间结构如图1所示。Linux所有
图1Linux操作系统结构
内核代码可看作一个整体,运行在一个独立的地址空间中,通常被称为内核空间[1]。运行于内核空间的代码不受任何限制,能够自由地访问任何有效地址以及直接进行设备访问。而用户应用运行在内核之上,其不能随意占用系统资源与修改系统配置,从而确保系统安全性与稳定性。
在日常应用中,应用程序通常包括上层用户界面程序与底层内核驱动模块两部分,用户界面负责接收用户输入及显示最终处理结果,内核驱动则负责调用内核处理用户请求。因此内核空间与用户空间进行通信的方法非常重要。
目前,Linux常用的内核用户通信机制有以下几种[2]:
(1)设备驱动接口。设备节点位于/dev目录下。设备驱动接口允许用户访问设备节点[3],利用copy_from_user()与copy_to_user()函数,在用户态与内核态间拷贝数据。但是这两个函数只支持阻塞式调用,不能在中断中使用,而且只支持用户程序主动进行通信,通常用在硬件驱动中。
(2)Proc与sysfs文件系统。Proc与sysfs是虚拟文件系统,用于显示进程、处理器、内存、中断等信息[4,5]。用户可以通过读写这两种文件系统与内核进行通信。其最大缺点是不支持基于事件的信号机制,数据传输大小也不能超过一个内存页,可扩展性较差。
(3)内存映射。/dev/mem是Linux系统中一种特殊的字符设备文件[6],应用程序通过这个节点,可以在内核地址空间与用户地址空间进行映射,然后访问映射后的内存区域,实现用户空间与内核空间的通信。但是对内核地址的误操作将引起严重后果,导致系统崩溃。
(4)Netlink套接字。Netlink是一种面向数据报的消息系统,目前在Linux内核中有非常多应用可用于通信,包括路由、IPSEC、防火墙、netfilter日志等[710]。Netlink具有以下特点:消息具有较强的扩展能力,用户可以自定义消息格式,且提供了基于事件的信号机制,允许大数据传输;支持全双工传输,允许内核主动发起传输通信;支持单播与组播两种通信方式[11]。
如上所述,目前在Linux系统内核空间与用户空间通信方式中:设备节点适合于驱动程序开发,但只支持单工传输;Proc与sysfs文件使用方便,但不支持传输大数据;内存映射传输效率最高,但误操作时会对系统造成严重破坏;Netlink则使用很灵活,能满足大多数用户需求。
本文首先介绍Netlink套接字基本使用方法与通信流程,然后详细阐述使用Netlink如何实现多线程并发与消息异步处理通信,最后在真实硬件平台上对该机制进行验证。
1Netlink机制概述
Netlink机制包含用户态接口与内核态接口,其中用户态沿用标准的socket接口,内核态则提供了专用接口。
1.1用户态Netlink接口
Netlink用户态接口与BSD套接字接口基本一致,包括:socket()、bind()、sendmsg()、recvmsg()、close等常用接口。
1.1.1Netlink套接字??建
int socket(int domain, int type, int protocol)
其中,domain参数为AF_NETLINK或PF_N
您可能关注的文档
最近下载
- 人教版七年级数学上册第五章一元一次方程.pptx VIP
- 超星学习通网课《从爱因斯坦到霍金的宇宙》尔雅答案2025题目及答案.docx
- 证监会行业分类指引 2012版 (2).xls VIP
- 通信中级整理-终端与业务.pdf VIP
- 【初中数学】第五章一元一次方程单元测试+2024-2025学年人教版数学七年级上册.docx VIP
- 快乐日记(三上日记范文).docx VIP
- 4.1 《喜看稻菽千重浪》课件(共46张PPT)统编版高中语文必修上册.pptx VIP
- 群众安全满意度培训课件.pptx VIP
- 石材厂15万吨年砂石料加工项目突发环境事件应急预案2024年第一版.docx VIP
- 道德与法治人教版二年级上册教案.doc VIP
原创力文档


文档评论(0)