[发明专利]一种基于Linux内核的多点到多点数据发布和订阅方法有效
| 申请号: | 201510197093.6 | 申请日: | 2015-04-23 |
| 公开(公告)号: | CN104778089B | 公开(公告)日: | 2017-12-26 |
| 发明(设计)人: | 李飞;刘俊涛;冀峰;潘景剑;王嘉;孙磊 | 申请(专利权)人: | 河北远东通信系统工程有限公司 |
| 主分类号: | G06F9/54 | 分类号: | G06F9/54 |
| 代理公司: | 河北东尚律师事务所13124 | 代理人: | 王文庆 |
| 地址: | 050200 河北省石*** | 国省代码: | 河北;13 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 基于 linux 内核 多点 数据 发布 订阅 方法 | ||
技术领域
本发明属于数据通信领域,尤其涉及在多任务操作系统环境下,任务间通信的方法。
背景技术
Linux操作系统是多用户、多任务操作系统,广泛应用在各种通信和电子设备上。在多任务操作系统上,多个任务并发协同工作,可有效提高硬件平台的使用效率和业务的处理能力。但是同时,多任务并发协同工作,为设计人员带来了任务间同步和任务间通信的要求。
Linux操作系统下,常用的任务间通信(IPC)方法包括信号量、管道、共享内存、消息队列和套接字(Socket),每种通信方式的特点如下:
信号量:信号量是一种异步通信机制,任务不需要执行任何操作来等待信号的到达。信号异步通知接收信号的任务发生了某个事件,然后操作系统将会中断接收到信号的任务的执行,转而去执行相应的信号处理程序。信号通知任务发生某种事件,无法传输大量数据。
管道:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的任务间使用。
共享内存(shared memory):共享内存就是映射一段能被其他任务所访问的内存,这段共享内存由一个任务创建,但多个任务都可以访问。共享内存是最快的IPC方式,它是针对其他任务间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现任务间的同步和通信。
套接字:套接字通过TCP/IP协议进行数据通信,可用于不同CPU间任务和同一个CPU上多任务之间的通信;
消息队列:消息队列是一个消息的链表,具有特定的格式及特定的优先级,写任务可以向消息队列中写入数据,读任务可以从消息队列冲读取消息;
各种通信方式都有其特点,因此,适合在各种不同通信需要情况下使用。例如:管道只能在具有亲缘关系的任务间使用,只支持单项数据流,管道所传送的是无格式字节流,不区分消息的边界;共享内存适合任务间大数据量的交互,但是由于多个任务可以同时访问同一块内存,数据的安全性和一致性需要严密的任务间同步来保证;套接字适合不同主机任务间通信,但是对于同一主机上的任务,套接字的网络特征却成了累赘,数据的传输要经过复杂的TCP/IP协议封装,各层报头封装,CRC校验和确认等等特征都降低了通信的传输效率;消息队列效率较高,但是,同一任务无法通过异步通知模型同时访问多个消息队列,而且消息队列只支持点对点数据通信,无法实现一点对多点或者多点对多点的数据通信。
发明内容
本专利的目的是提出一种轻量级的、高效率的、支持异步通知模型的、多点对多点的任务间通信方法,称为多点到多点数据发布和订阅方法。
本发明通过以下技术方案来实现上述目的:一种基于Linux内核的多点到多点数据发布和订阅方法,包括以下步骤:
S1:Linux系统加载内核模块,在其文件系统中生成发布文件和订阅文件,在内核中生成邮箱池;
S2:一个或多个发布任务分别进行发布数据准备,一个或多个接收任务分别进行订阅数据准备;
S3:一个或多个发布任务分别发送数据并将数据写入Linux内核,Linux内核通知每个接收任务分别接收数据,每个接收任务分别接收并读取数据,所有的接收任务均读取数据之后,Linux内核将数据删除。
其中,步骤S2中的发布任务进行发布数据准备具体为:
S201:发布任务打开发布文件,根据发布文件在邮箱池中查找与要创建的邮箱名称相同的邮箱,若找到,则将该邮箱的地址返回给发布任务;若未找到,则执行步骤S202;
S202:在内核中创建以该名称命名的邮箱,将邮箱插入邮箱池,然后为邮箱创建若干报头和若干报文,在邮箱的预留空间中登记发布任务的个数和接收任务的个数,将创建的邮箱的地址返回给发布任务。
其中,步骤S2中的接收任务进行订阅数据准备具体为:
S211:接收任务打开订阅文件并生成订单,订单中包含内核等待队列;
S212:根据订阅文件在邮箱池中查找与要订阅的邮箱名称相同的邮箱,若找到,则将生成的订单保存到该邮箱中;若未找到,则执行步骤S213;
S213:在内核中创建以该名称命名的邮箱,将邮箱插入邮箱池,然后为邮箱创建若干报头和若干报文,在邮箱的预留空间中登记发布任务的个数和接收任务的个数,将生成的订单保存到创建的邮箱中;
S214:将订单地址返回给接收任务;
S215:接收任务通过poll函数等待在订单的内核等待队列上。
其中,在内核中创建以该名称命名的邮箱,将邮箱插入邮箱池,然后为邮箱创建若干报头和若干报文,具体为:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于河北远东通信系统工程有限公司,未经河北远东通信系统工程有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510197093.6/2.html,转载请声明来源钻瓜专利网。





