Rfid中间件进程间数据通讯的方法及装置的制作方法

文档序号:6483092阅读:259来源:国知局
专利名称:Rfid中间件进程间数据通讯的方法及装置的制作方法
技术领域
本发明涉及RFID(Radio Frequency Identification,射频识别)中间件进程间的 数据交换领域,特别是涉及一种在RFID中间件主模块与RFID中间件电子标签采集模块的 进程间进行数据传递的方法。本发明还涉及一种用于RFID中间件中进程间数据通讯的装置。
背景技术
RFID中间件可以自动识别和收集RFID设备的电子标签数据,广泛地运用于各种 物流、制造及重要物品跟踪等领域。RFID中间件在自动识别(如RFID阅读器)和应用系统 之间架起了数据通信的桥梁,它的最基本的功能是收集和/或过滤电子标签。在RFID阅读器工作时,RFID中间件会不停地读取电子标签。在一个大型的工作环 境中,可能有数百台RFID设备在同时工作,这对于RFID中间件的性能提出了严格的要求。在RFID中间件中每个电子标签的数据长度一般在十几个字节;因此,在一次设备 扫描周期中,采集的电子标签数据量绝大多数情况下都在数十字节到数百个字节的范围。进程间通讯是大中型计算机应用系统中必不可少的一个功能,通过进程间通信, 可以实现两个互相独立的进程之间的数据交换。目前在国内外的许多应用软件中,已经普遍采用内存技术(包括共享内存、内存 队列、信号灯等等)来实现快速数据交换。但是在RFID中间件中尚未出现针对RFID应用 领域特点的进程间快速数据交换手段。中国发明专利申请公开说明书CN1859325(
公开日2006年11月8日)公开了一 种“基于链表的进程间消息传递方法”,采用基于共享内存指针的消息传递技术和共享内存 链表的数据结构实现进程间的数据交换。它是一种通用的进程间通讯方法,没有小块数据 的交换,不能实现常量时间内的进程间的消息投递、接收与释放。中国发明专利申请公开说明书CN1501277(
公开日2004年6月2日)公开了一 种“总线式进程间通信方法”,应用于具有Unix或Linux操作系统环境的平台中。其结合共 享内存技术和信号灯集合技术实现进程间的数据交换。与前一专利申请类似,它也没有为 小块数据进行优化,同时该专利申请中的方法不适用于Windows和WinCE操作系统。中国发明专利申请公开说明书CN101373509(
公开日2009年2月25日)公开了 一种“一种基于分布式ALE的RFID中间件”,采用分布式资源来并行计算,即利用多台计算 机并行工作来提高系统的负载,用于解决负载过度问题。

发明内容
本发明要解决的技术问题是提供一种RFID中间件进程间数据通讯的方法,对进 程间的小块数据交互过程进行优化,能够实现常量时间复杂度的数据投递、接收和释放;为 此,本发明还要提供一种用于RFID中间件中进程间数据通讯装置。为解决上述技术问题,本发明的RFID中间件进程间数据通讯的方法是通过以下技术方案实现的RFID中间件主模块与每个RFID中间件电子标签采集模块都建立各自独立的消息 队列;RFID中间件主模块定时向各RFID中间件电子标签采集模块的消息队列发送电子标 签采集或电子标签写入指令;RFID中间件电子标签采集模块收到电子标签采集指令后,从 RFID设备采集电子标签,并将采集到的标签数据及设备状态发送到RFID中间件主模块的 消息队列上。本发明的用于RFID中间件中进程间数据通讯装置包括,RFID中间件主模块和多 个RFID中间件电子标签采集模块,RFID中间件电子标签采集模块负责采集RFID阅读器上 的电子标签数据,RFID中间件主模块接收每个RFID中间件电子标签采集模块的电子标签 数据;RFID中间件主模块与每个RFID中间件电子标签采集模块都建立各自的消息队 列,RFID中间件主模块定时向各RFID中间件电子标签采集模块的消息队列发送各种指令; RFID中间件电子标签采集模块收到电子标签采集指令后,从RFID设备采集电子标签,并将 采集到的标签数据及设备状态发送到RFID中间件主模块的消息队列上。本发明通过对RFID中间件中最频繁的进程间小块数据通讯进行优化,实现了常 量时间复杂度的数据块投递、接收和释放。本发明能够满足RFID中间件对于实时电子标签采集的性能要求,并使RFID中间 件主模块与RFID中间件电子标签采集模块实现松散耦合。本发明可以在所有具有共享内存的操作系统上工作,包括Wind0WS、Win CE,Linux 和Unix系统。RFID中间件在运行时,绝大多数的通讯过程其数据量都在数十字节到数千字节之 间。对于这一类通讯对象,可能每个通讯对象很小,但需要频繁的创建和销毁,而且数量很 多。如果采用常见的动态分配和释放的办法,将会导致内存碎片和效率的问题。本发明通 过尽可能减少实际内存分配的次数并且增大实际内存分配的粒度,从而提高性能并能预防 内存碎片的产生。


下面结合附图与具体实施方式
对本发明作进一步详细的说明图1是消息队列中的空闲空间队列结构示意图;图2是消息队列中的数据队列结构示意图;图3是RFID中间件主模块与RFID中间件电子标签采集模块之间的数据流图。
具体实施例方式本发明通过基于共享内存的消息队列,实现RFID中间件中进程间的数据交换,通 过基于固定大小区块的内存池的分配策略,可以实现在大多数情况下,常量时间复杂度的 数据交互。参见图3所示,所述的RFID中间件进程间数据通讯的方法通过RFID中间件主模 块和多个RFID中间件电子标签采集模块来实现。RFID中间件电子标签采集模块负责采集 RFID阅读器上的电子标签数据,RFID中间件主模块接收每个标签采集模块的电子标签数据。RFID中间件主模块与每个RFID中间件电子标签采集模块都建立各自的消息队 列。RFID中间件主模块定时向各RFID中间件电子标签采集模块的消息队列发送各种指令; RFID中间件电子标签采集模块收到电子标签采集指令后,从RFID设备采集电子标签,并将 采集到的标签数据及设备状态发送到RFID中间件主模块的消息队列上。所述消息队列构建在操作系统的共享内存上,所述操作系统包括Wind0WS、Win CE、Linux 禾口 Unix 系统。所述消息队列包括数据队列(其结构如图2所示)和空闲空间队列(其结构如图 1所示,每个空闲空间队列管理一定数量的定长的空闲数据块);当不同进程需要进行数据 通讯时,发送进程向数据队列中投递消息数据,接收进程从数据队列实时取出消息数据;消 息数据从数据队列中取出后放到空闲空间队列中。所述消息队列为每个消息分配预订长度的块数据空间。所述消息队列中的数据队列包括多个消息包,每个消息包包括元数据和实际数 据;所述元数据描述实际数据的大小、消息包的大小、消息包的消息类型和消息包的标识。在消息队列中,实现快速数据交换的关键是在常量时间内完成小对象(即小块数 据)的分配与释放。为此,在本发明中采取了两层内存分配器架构第一层内存分配器直接 调用操作系统接口响应内存分配请求;第二层内存分配器则视当前请求空间的大小采取不 同的策略当需要分配的内存空间大小超过32K字节时,则认为其“足够大”,不属于小块空 间的范畴,直接调用第一层分配器;否则,则认为其是小块空间。为了降低系统负担,直接从 定长的空闲空间队列中获取内存,而不再求助于第一层分配器。第二层分配器在机制上应避免太多小块数据造成的内存碎片。为了方便管理,第 二层分配器自动将任何小块区间上调至32字节的倍数(例如客户端请求30字节,就自动 调整为32字节),并维护1024个定长的空闲空间队列(free-list),这些空闲空间队列各 自管理的空闲数据块(即空闲空间)大小分别为32、64、96…32K字节。所述的两层内存分配器框架,实现的方法是对消息队列进行初始化,包括如下步骤检测消息队列是否已经初始化。如果消息 队列尚未初始化,则初始化空闲空间队列,分配1024个空闲空间队列,每个空闲空间队列 的只管理定长的空闲空间,它们分别管理大小为32、64、96…32K字节的定长空闲空间。同 时还需要初始化互斥信号量,以同步多任务或多线程对消息队列进行访问。如果消息队列 已经初始化,则打开指定消息队列所对应的共享内存,获取当前的数据队列和空闲空间队 列的信息。消息队列的分配,包括以下步骤如果请求的空间大于32K字节,则通过第一层分 配器直接调用操作系统来分配内存。如果当前请求的空间小于32K字节,则自动调整到32K 字节的整数倍。此时可以直接定位到对应的空闲空间队列,在绝大多数情况下,如果该空闲 空间队列有空闲数据,则直接从中获取一块空闲空间即可。由于采取了固定大小的空闲空 间队列,可以实现在常量时间复杂度内完成内存的分配,而与空闲空间大小以及申请内存 的大小没有关系。如果该空闲空间队列没有空闲数据,则需要重新对该空闲空间队列进行 填充,预设取得20个同等大小的新内存块,万一系统内存不足,获得内存块数可能少于20 个。
消息队列的回收,包括以下步骤回收数据时,首先判断区块大小,大于32K字节 的通过第一层分配器,交由操作系统来释放空间。小于32K字节的直接定位到对应的空闲 空间队列。将释放的数据挂到该空闲空间队列的末尾。由于不需要进行线性、二分的查找, 只需要根据数据大小进行回收,所以可以实现常量时间复杂度的消息回收。以上通过实施例对本发明进行了详细的说明,但这些并非构成对本发明的限制。 在不脱离本发明原理的情况下,本领域技术人员还可做出许多变形和改进,这些也应视为 本发明的保护范围。
权利要求
1. 一种RFID中间件进程间数据通讯的方法,其特征在于RFID中间件主模块与每个 RFID中间件电子标签采集模块都建立各自独立的消息队列;RFID中间件主模块定时向各 RFID中间件电子标签采集模块的消息队列发送电子标签采集或电子标签写入指令;RFID 中间件电子标签采集模块收到电子标签采集指令后,从RFID设备采集电子标签,并将采集 到的标签数据及设备状态发送到RFID中间件主模块的消息队列上。
2.如权利要求1所述的方法,其特征在于所述消息队列构建在操作系统的共享内存 上,所述操作系统包括Windows、Win CE、Linux和Unix系统。
3.如权利要求1所述的方法,其特征在于所述消息队列包括数据队列和空闲空间队 列;当不同进程需要进行数据通讯时,发送进程向数据队列中投递消息数据,接收进程从数 据队列实时取出消息数据;消息数据从数据队列中取出后放到空闲空间队列中。
4.如权利要求1所述的方法,其特征在于所述消息队列为每个消息分配预订长度的 块数据空间。
5.如权利要求1所述的方法,其特征在于所述消息队列包括多个消息包,每个消息包 包括元数据和实际数据;所述元数据描述实际数据的大小、消息包的大小、消息包的消息类 型和消息包的标识。
6.如权利要求1所述的方法,其特征在于所述消息队列采用两层内存分配器实现快 速数据交换,第一层内存分配器直接调用操作系统接口及相应内存分配请求;第二层内存 分配器根据不同情况采取不同的策略,当需要分配的内存空间大小超过32K字节时,直接 调用第一层分配器;否则,则认为其是小块空间;第二层分配器自动将任何小块区间上调至32字节的倍数。
7.如权利要求1所述的方法,其特征在于消息队列进行初始化的方法包括如下步骤 检测消息队列是否已经初始化;如果消息队列尚未初始化,则初始化空闲空间队列分配 1024个空闲空间队列,每个空闲空间队列管理定长的空闲空间;初始化互斥信号量,以同 步多任务或多线程对消息队列进行访问;如果消息队列已经初始化,则打开指定消息队列 所对应的共享内存,获取当前的数据队列和空闲空间队列的信息。
8.如权利要求1所述的方法,其特征在于消息队列的分配方法包括如下步骤如果请 求的空间大于32K字节,则通过第一层分配器直接调用操作系统来分配内存;如果当前请 求的空间小于32K字节,则自动调整到32K字节的整数倍,并直接定位到对应的空闲空间队 列;如果该空闲空间队列有空闲数据,则直接从中获取一块空闲空间即可;如果该空闲空 间队列没有空闲数据,则需要重新对该空闲空间队列进行填充。
9.如权利要求1所述的方法,其特征在于消息队列的回收方法包括如下步骤回收的 数据大于32K字节的通过第一层分配器交由操作系统来释放空间;小于32K字节的直接定 位到对应的空闲空间队列。
10.一种用于RFID中间件中进程间数据通讯装置,其特征在于包括,RFID中间件主模 块和多个RFID中间件电子标签采集模块,RFID中间件电子标签采集模块负责采集RFID阅 读器上的电子标签数据,RFID中间件主模块接收每个RFID中间件电子标签采集模块的电 子标签数据;RFID中间件主模块与每个RFID中间件电子标签采集模块都建立各自的消息队列, RFID中间件主模块定时向各RFID中间件电子标签采集模块的消息队列发送各种指令;RFID中间件电子标签采集模块收到电子标签采集指令后,从RFID设备采集电子标签,并将 采集到的标签数据及设备状态发送到RFID中间件主模块的消息队列上。
全文摘要
本发明公开了一种RFID中间件的进程间数据通讯方法。RFID中间件主模块与每个RFID中间件电子标签采集模块都建立各自的消息队列。RFID中间件主模块定时向各RFID中间件电子标签采集模块的消息队列发送各种指令;电子标签采集模块将采集到的标签数据,发送到主模块的消息队列上。本发明还公开了一种用于RFID中间件中进程间数据通讯装置。本发明针对RFID中间件的应用特点,对进程间的小块数据交互过程进行优化,实现了常量时间复杂度的数据投递、接收、释放算法。本发明能够满足RFID中间件对于实时电子标签采集的性能要求,适用于RFID中间件的电子标签采集模块,并使RFID中间件的主模块与电子标签采集模块实现松散耦合。
文档编号G06K7/00GK102004891SQ20091005787
公开日2011年4月6日 申请日期2009年9月3日 优先权日2009年9月3日
发明者丛力群, 张洋, 李尚春, 陈圣煜, 陈松 申请人:上海宝信软件股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1