- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于OpenWrt平台进程间通信
基于OpenWrt平台进程间通信 摘 要:OpenWrt是一款基于Linux内核的开源路由器操作系统,文章研究内容是,利用Linux进程间通信中的命名管道方法,设计一系列接口函数,提供消息的注册、注销、发送、接收。使消息传递在简单、方便的同时,也能满足路由器系统的要求。这种函数库称为消息总线。 关键词:进程间通信(IPC);Linux;消息总线 1 消息总线设计需求 D-Bus消息总线是面向桌面系统设计,接口丰富,但占用资源较多。重新设计的消息总线将满足占用系统资源少,且可以满足路由器软件系统的消息转发需求。消息总线(Message Bus,以后简称M-Bus)模块作为路由器软件系统的基础软件模块,M-Bus被设计成了一个为路由器操作系统各应用程序提供模块间通信的唯一上层平台。M-Bus自身被抽象化成一个提供进程间通信方法的函数功能库,负责路由器软件系统各模块间的消息转发和消息广播,实现的方式是向整个系统提供C的API接口以供其他应用程序调用。M-Bus底层是使用套接字、信号量、管道等Linux基本进程间通信方法进行封装。M-Bus在消息处理方式是消息的直接转发。消息的直接转发使用命名管道来实现,参与通信的各个进程直接调用M-Bus库函数,各个应用程序根据自身注册到消息总线上的消息处理函数,做出下一步的动作。 2 消息总线总体设计 消息总线被设计成了一个为路由器操作系统各应用程序提供模块间通信的唯一上层平台。消息总线自身被抽象化成一个提供进程间通信方法的函数功能库,负责路由器软件系统各模块间的消息转发和消息广播,实现的方式是向整个系统提供C的API接口以供其他应用程序调用。消息总线底层是使用套接字、信号量、管道等Linux基本进程间通信方法进行封装。消息总线在消息处理方式是消息的直接转发。消息的直接转发使用命名管道来实现,参与通信的各个进程直接调用消息总线库函数,各个应用程序根据自身注册到消息总线上的消息处理函数,做出下一步的动作。消息总线包括以下三个子模块:(1)消息总线的接口集合,包括消息的发送、消息的接收、消息发送者与接收者的登记等一系列消息总线能够提供的API函数。(2)消息总线的守护进程。(3)消息总线内部工作处理,为上层API函数提供基础。路由器的各应用程序通过调用消息总线的API函数来使用消息总线的功能。消息总线提供了本地资源初始化、销毁本地资源、注册、卸载、发送消息、接收消息、登记消息处理等API函数。消息总线中所定义的消息,是进程间传递数据的载体,消息的定义遵循以下原则:(1)每个消息都有自身的名字,消息的名字表示要发送的消息是什么命令。(2)消息的名字在系统中是唯一的。(3)系统能处理消息的种类的能力是有限的。各个模块收到消息后会跟据消息的名字执行相应的处理函数,(4)消息具有统一定义的数据结构,包括消息头、携带数据、消息上下文(Context)。消息的名字(也可称为消息的类型)作为消息头中的一个数据域的形式存在。 3 消息总线数据结构的设计 消息的自身是数据传递的载体并且消息具有相应的结构。消息结构组织分为两类:一类是各模块之间通信的消息结构;另一类是各模块本地维护的消息结构。 其中,消息头被定义成各模块间通信的唯一结构,各模块间的通信是通过解析消息头来提取数据,从而实现进程间的通信。而各模块本地维护的消息结构称之为消息上下文,每个模块都会有自身的消息上下文,由各个模块自己组织与管理,与外界隔离。图1描述了消息头的数据结构: 图1 消息头数据结构示意图 消息头中包含以下定义内容:(1)消息的发送者:定义该消息是由哪个模块发送的,路由器所有模块的名称均用宏定义。(2)当前进程PID:该消息的发送进程的PID。(3)消息的名字:该消息发的是什么指令。(4)消息的同步:当接收进程收到消息后需要做反馈操作,回复发送进程进行收到确认。如果不做同步操作则不需要回复。(5)数据长度:消息所携带的数据长度。(6)携带数据起始位:所携带数据的起始位地址。起始位地址加上所携带数据的长度就可以表示该消息携带的所有数据,即消息的消息体。作者称各模块自身维护的消息为本地消息,描述本地消息的数据结构称为消息上下文,路由器软件系统中每个模块(每个应用程序)自身只能存在一个消息上下文。设计消息上下文的原因在于是想把使用消息总线的所有数据与操作方式都组织到一起,然后封装成统一的结构来进行描述。每个应用程序注册到消息总线上的时候,都会生成自身的消息上下文。图2描述了消息上下文的数据结构定义。 图2 消息上下文数据结构示意图 消息上下文中包括了以下内容:(1)注册到消息总线上的应用程序自身名字。名字由字符串表示,系统中所有的应用程序名字均使用宏进行定义。(2)当前注册到消息总线上的进程ID
您可能关注的文档
最近下载
- 《北京市房屋租赁合同自行成交版》.doc VIP
- 机修工考试题库及答案.doc VIP
- 八年级数学趣味数学知识竞赛课件(比赛用) (共51张PPT).pptx VIP
- 机修工培训考试题库.pdf VIP
- 《古建筑木结构维护与加固技术标准》(GB_T 50165—2020)修订解析.pdf VIP
- 七年级数学知识竞赛课件 (共42张PPT).pptx VIP
- 八年级数学趣味数学知识竞赛课件(比赛用) (共51张PPT).pptx VIP
- 七年级数学趣味数学竞赛比赛用课件 (共48张PPT).pptx VIP
- 《少盐限油健康饮食》课件.ppt VIP
- 2022年初中数学趣味数学竞赛课件(共43张ppt).pptx VIP
文档评论(0)