基于共享内存设计的无线终端数据库构建方法

文档序号:6522599阅读:316来源:国知局
基于共享内存设计的无线终端数据库构建方法
【专利摘要】本发明涉及一种基于共享内存设计的无线终端数据库构建方法,包括以下步骤:1)对每一个无线终端的用户表进行划分,并使用位图来分配每个无线终端的ID;2)利用位图分配的ID来标识无线终端的关键字,并通过利用非指针链表进行遍历共享内存中的哈希表;3)在共享内存中为每个进程设置一个标志位,用于标识该进程是否对共享内存中终端数据加锁,在进程重启加载共享内存后,检查该标志位是否加锁,若加锁,则先执行释放该锁。与现有技术相比,本发明具有节省内存空间、避免由于指针带来的多进程空间加载共享内存访问越界的情况、解决了多进程访问共享内存这块临界区导致的该临界区信息锁永远无法释放的问题等优点。
【专利说明】基于共享内存设计的无线终端数据库构建方法
【技术领域】
[0001 ] 本发明涉及一种无线终端数据库构建方法,尤其是涉及一种基于共享内存设计的无线终端数据库构建方法。
【背景技术】
[0002]无线终端数据管理中,终端的mac、ip、流量、时长等需要被监管,多个业务进程使用共享内存访问这些终端的数据信息,相对与其它的存储介质,共享内存访问速度有较大的提升。
[0003]传统共享内存空闲空间分配若使用链表方法,链表本身结构额外在共享内存需要占用大量内存,对于临界区紧缺的共享内存,需要更加合理的优化共享内存大小。
[0004]传统共享内存空间被多进程加载地址要么是根据每个进程空闲的地址空间随机分配,要么是指定将要加载到每个进程的地址,对于这两种加载方式,随机分配或者当指定的加载地址已经被该进程加载后,无线终端数据中的一些指针索引,将会出现偏差,造成越界访问。
[0005]传统共享内存互斥锁,对于解决正常多进程访问临界区能起到有效保护,若获取锁的进程此时崩溃,直接导致共享内存中的锁永远无法被释放。

【发明内容】

[0006]本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种基于共享内存设计的无线终端数据库构建方法,节省内存空间、避免由于指针带来的多进程空间加载共享内存访问越界的情况、解决了多进程访问共享内存这块临界区导致的该临界区信息锁永远无法释放的问题。
[0007]本发明的目的可以通过以下技术方案来实现:
[0008]一种基于共享内存设计的无线终端数据库构建方法,其特征在于,包括以下步骤:
[0009]I)对每一个无线终端的用户表进行划分,并使用位图来分配每个无线终端的ID ;
[0010]2)利用位图分配的ID来标识无线终端的关键字,并通过非指针链表进行遍历共享内存中的哈希表;
[0011]3)在共享内存中为每个进程设置一个标志位,用于标识该进程是否对共享内存中终端数据加锁,在进程重启加载共享内存后,检查该标志位是否加锁,若加锁,则先执行释放该锁。
[0012]所述的对每一个无线终端的用户表进行划分,并使用位图来分配每个无线终端的ID具体为:
[0013]无线终端上线后发送鉴权关联报文,经过无线接入模块通知终端管理模块终端接入的基本信息,共享内存中利用位图数据结构,使用bit来标识该ID是否被分配出去,寻找到ID最小的未被分配出去的终端信息存储位置;[0014]之后利用终端MAC进行哈希散列到MAC哈希表中,建立终端存储位置信息与MAC哈希表关联,等待DHCP或者其他终端的IP分配模块通知终端管理模块IP信息,将IP信息进行哈希散列到IP的哈希表中,建立终端存储位置信息与IP哈希表关联。
[0015]所述的利用非指针链表进行遍历共享内存中的哈希表具体为:
[0016]共享内存中链表利用位图分配的ID来代替MAC哈希与IP哈希链表的next与prev指针,即通过MAC与IP索引到哈希桶后的遍历该键值的链表,该链表并未存储下一个或者上一个哈希到相同键值的终端的指针,而是位图分配的ID。
[0017]终端信息存储与哈希表共同存储在共享内存当中。
[0018]与现有技术相比,本发明具有以下优点:
[0019]I)位图用于标识共享内存分配方式与用户结构信息,相对于传统的链表,不但节省了内存空间,更加能够适应整个无指针的共享内存。
[0020]2)非指针哈希表与链表的设计,避免由于指针带来的多进程空间加载共享内存访问越界的情况。
[0021]3)多进程加锁信息可以很好的避免多进程对共享内存中的临界区访问中的异常。【专利附图】

【附图说明】
[0022]图1为基本链表的不意图;
[0023]图2为共享内存与不同进程的内存关系示意图。
【具体实施方式】
[0024]下面结合附图和具体实施例对本发明进行详细说明。
[0025]实施例
[0026]一种基于共享内存设计的无线终端数据库构建方法,包括以下步骤:
[0027]I)对每一个无线终端的用户表进行划分,并使用位图来分配每个无线终端的ID ;
[0028]2)对于加载地址空间偏差造成的指针偏差,本发明利用位图分配的ID来标识终端的关键字,不使用指针的类哈希表与类链表,并且封装出接口给其他模块调用,克服由于加载地址不一致,导致根据指针索引访问终端信息失败;
[0029]对于无线终端的关键字MAC与IP等,给出对应的索引,其他模块通过MAC与IP即可直接从共享内存中找到对应无线终端信息,从而即达到了减少了使用查找其他介质存储而多花费的时间,又能够正确的访问到内存数据。
[0030]3)对于共享内存中由于进程崩溃导致的锁无法释放问题,在共享内存中为每个进程设置一个标志位,用于标识该进程是否对共享内存中终端数据加锁,在进程重启加载共享内存后,检查该标志位是否加锁,若加锁,则先执行释放该锁,即使进程重启,该终端信息被加的锁依然能够释放,从而保证共享内存的锁特性。
[0031]如图1所示,基本链表存放在无线终端信息中,图中next与prev均使用位图分配的ID来寻找终端位置,同时设置了一个头尾结点来标识该哈希键值下非指针的链表,查找终端通过遍历链表比对MAC/IP等关键信息来实现。
[0032]如图2所示,表示共享内存与不同进程的内存关系,由于操作系统的内存地址空间是一个4G的线性地址空间,3G以上为内核态进程空间,共享内存申请出来的内存存放在操作系统的3G以下线性地址空间中。普通进程地址空间是相互独立的一个4G空间,并非是线性地址上,其他进程通过地址映射技术将这个内存映射到自己的地址空间内;图2中用户数据库用来标识真正存放用户信息的位置,其下方为一块存放MAC与IP的哈希桶,不同进程根据需求从哈希桶中获取到终端信息存储位置,进而去访问。进程A、B、X分别将这块共享内存映射到了自己不同的地址空间内,对用户数据进行访问,由于整个共享内存中并未存储指针,所以,在索引查找终端信息时,不会由于每个进程将共享内存映射到自己地址空间不一样而访问失败或者访问越界。图2最下方为一个存放不同模块的模块锁,用来标识哪个模块正在访问共享内存数据。
[0033]本发明相对于现有方案的优点是:
[0034](I)位图在一个8192*128大小的用户表中,相对于500M的整个共享内存空间,能够节省20M的内存空间。
[0035](2)相对于指定地址加载方式,在内存使用高的进程中,指定加载的地址可能会被使用而造成加载偏移;
[0036]相对于随机分配方式,为每个进程在共享内存保留一个偏移信息来解决多进程加载共享内存偏移这个问题,本发明不会导致由于偏移计算错误导致另外引入的越界问题。
[0037](3)解决了多进程访问共享内存这块临界区导致的该临界区信息锁永远无法释放的问题。
【权利要求】
1.一种基于共享内存设计的无线终端数据库构建方法,其特征在于,包括以下步骤: 1)对每一个无线终端的用户表进行划分,并使用位图来分配每个无线终端的ID; 2)利用位图分配的ID来标识无线终端的关键字,并通过非指针链表进行遍历共享内存中的哈希表; 3)在共享内存中为每个进程设置一个标志位,用于标识该进程是否对共享内存中终端数据加锁,在进程重启加载共享内存后,检查该标志位是否加锁,若加锁,则先执行释放该锁。
2.根据权利要求1所述的无线终端数据库构建方法,其特征在于,所述的对每一个无线终端的用户表进行划分,并使用位图来分配每个无线终端的ID具体为: 无线终端上线后发送鉴权关联报文,经过无线接入模块通知终端管理模块终端接入的基本信息,共享内存中利用位图数据结构,使用bit来标识该ID是否被分配出去,寻找到ID最小的未被分配出去的终端信息存储位置; 之后利用终端MAC进行哈希散列到MAC哈希表中,建立终端存储位置信息与MAC哈希表关联,等待DHCP或者其他终端的IP分配模块通知终端管理模块IP信息,将IP信息进行哈希散列到IP的哈希表中,建立终端存储位置信息与IP哈希表关联。
3.根据权利要求1所述的无线终端数据库构建方法,其特征在于,所述的利用非指针链表进行遍历共享内存中的哈希表具体为: 共享内存中链表利用位图分配的ID来代替MAC哈希与IP哈希链表的next与prev指针,即通过MAC与IP索引到哈希桶后的遍历该键值的链表,该链表并未存储下一个或者上一个哈希到相同键值的终端的指针,而是位图分配的ID。
【文档编号】G06F17/30GK103678553SQ201310655909
【公开日】2014年3月26日 申请日期:2013年12月6日 优先权日:2013年12月6日
【发明者】李少华, 俞梦涛 申请人:上海寰创通信科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1