一种基于共享的参数表实时刷新方法和系统的制作方法

文档序号:6644954阅读:180来源:国知局
专利名称:一种基于共享的参数表实时刷新方法和系统的制作方法
技术领域
本发明涉及电通信技术,尤其涉及一种基于共享的参数表实时刷新方法和系统。
背景技术
参数表在很多应用系统中大量存在,这类系统一般包含配制参数表的配制界面和使用这些参数表的应用进程。参数表的配制界面提供包括对参数表进行增加、删除、修改等基本操作,配制更新后通过某种机制(如定时器或触发器)通知使用参数表的应用进程,将配制界面更新后的参数重新装载到应用进程中。对于这类参数表数据,具有这样的特征,数据量小(一般不超过10000条记录)或在某时间点进行批量更新。
对于这种参数表数据,刷新时一般采用整表更新,而不采用基于记录级方式的更新,这种提供基于整表方式的刷新方式在很多应用系统中都有需求。
在实时系统中,数据表的刷新效率对于系统的正常运行及维持业务的不间断起着关键作用,尤其是针对某些基于电信级的应用系统,要保证业务全天候不间断运行,且响应迅速,就更需要刷新的速度要尽量保持快速,这样刷新选择的方式就显得尤为重要。
在现有技术中,如图1所示,它包括刷新管理模块1和内存区2,内存区2由共享内存数据区和刷新进程加载区组成;刷新管理模块1负责刷新进程的加载,以及其中的数据到共享内存数据区的切换。
如图2所示,其大致的参数表刷新过程如下(1)通过扫描参数刷新表等方式检测有无参数表需要刷新,如果没有,则直接退出;若有,则继续步骤(2)。
(2)将共享内存所有参数表数据拷贝到刷新进程加载区中,并在其中装载所有需要刷新的参数表数据;(3)加载完毕,试图给共享内存数据区的参数表数据加写锁,如果仍然有应用访问该共享内存中的参数表,则该写锁处于等待状态,直至获取写锁成功后,将刷新进程加载区内的已经刷新的参数表数据再拷贝到相应的共享内存数据区中。
(4)最后释放参数表写锁,完成刷新过程。
现有技术具有如下缺点(1)当参数表数据被其它进程读取时,参数表加写锁无法马上返回成功,必须等待其它进程完成读操作后才能获取,这个过程可能由于其它进程长时间访问参数表而影响刷新的执行效率。
(2)刷新进程加载区内参数表数据拷贝到共享内存的操作为写操作,这一过程完成前应用进程也无法读参数表数据,如果数据量很大,会导致业务的间断。
如上所述,现有的刷新方式在应用访问频繁时存在着等待和碰撞的问题,可能导致产生读写过程的“碰撞现象”,对于应用进程需要频繁读取参数表数据的情况,碰撞现象会制约刷新的效率,从而影响系统特别是实时系统中的效率。

发明内容
本发明的目的在于提供一种高效率的基于共享的参数表实时刷新方法和系统,以解决现有技术中在应用访问频繁时存在着等待和碰撞的问题。
本发明所采用的基于共享的参数表实时刷新方法采用如下步骤A、在共享内存中,设置至少两个数据区和一个管理区,所述的数据区装载有参数表,所述的管理区装载有状态表,所述的状态表反映不同数据区中针对于同一参数表的状态;B、在刷新数据时,根据不同数据区中相应参数表的状态,获取可加载的参数表进行刷新。
所述的步骤A中,所述的状态表具有状态标识,该状态标识反映对应参数表在不同数据区的状态,所述状态分为空闲态、加载态、激活态和非激活访问态,其中;空闲态表示相应的参数表可以在对应的数据区加载数据;加载态表示相应的参数表正在对应的数据区加载数据;激活态表示外部应用进程可以直接访问该参数表的数据;非激活访问态表示在激活态发生切换后,仍有外部应用进程继续访问数据区中相应原参数表的数据。
所述的不同参数表可共享相同数据区。
所述的状态表中设置有“表访问信号量”子项,所述的“表访问信号量”标识相应状态的参数表的当前被进程访问数。
所述的步骤B包括如下步骤B1、查寻相应空闲态的参数表,进行如下操作B11、若无空闲态参数表,则退出;B12、若有空闲态参数表,从空闲态的列表中任取一个,进行参数表的数据加载,继续如下步骤B2;B2、加载结束后对相应的参数表进行状态转换。
所述的步骤B1之前还包括如下步骤查寻是否存在非激活访问态的参数表B01、如果存在非激活访问态的参数表,进行如下操作B010、若该表的访问信号量为0,将该参数表由非激活访问态转化为空闲态;B011、若该表的访问信号量大于0,结束检测;B02、如果不存在非激活访问态的参数表,结束检测。
所述的步骤B2包括如下步骤B21、将相应状态表的激活标识加写锁,将其状态切换为激活态;B22、根据该表的表访问信号量作如下操作B221、若该表的表访问信号量大于0,则将其状态转换为非激活访问态;B222、若该表的表访问信号量为0,则将激活态转换为空闲态;B23、释放激活标识写锁。
所述的步骤B之后还包括如下步骤所述的参数表刷新后,所有访问该参数表的操作转换到更新后的激活态参数表中。
这种基于共享的参数表实时刷新系统,包括刷新管理模块和内存区,其特征在于所述的内存区包括至少两个数据区和管理区,其中所述的数据区装载有参数表;所述的管理区装载有状态表,所述的状态表反映不同数据区中针对于同一参数表的状态;所述的刷新管理模块根据应用进程对参数表的访问,对数据区中的参数表的状态和管理区中的状态表作相应设置。
所述的刷新管理模块完成参数表在共享内存数据区的加载,以及管理区内状态表中状态标识的切换,以及数据区和管理区中参数表的调用、读写;外部应用进程对数据区中参数表的访问或退出访问,刷新管理模块在管理区中的状态表予以记录。
本发明的有益效果为在本发明中,通过设置数据区和管理区,在数据区装载有参数表,在管理区装载有状态表,在刷新数据时,根据不同数据区中相应参数表的状态,获取可加载的参数表进行刷新,刷新时对数据区内数据不加锁,更新时不影响外界访问,数据更新时不会由于外界应用进程的访问而阻塞,本发明可通过控制数据区的数量值,从而增加处于空闲态的参数表数量,从而使刷新不会受到刷新间隔时间的限制,读写没有冲突和碰撞,实现了内存参数表的无间隙平滑更新,本发明的刷新过程不存在数据块之间的相互拷贝操作,提高了刷新的整体性能,而且,本发明支持多个应用进程同时刷新不同数据表,提高了多进程间刷新的并发度。


图1为现有技术系统结构示意图;图2为现有技术控制流程示意图;图3为本发明系统结构示意图;图4为本发明基本控制流程示意图;图5为本发明具体控制流程示意图;图6为本发明中状态转换示意图。
具体实施例方式
下面根据附图和实施例对本发明作进一步详细说明根据图3,本发明包括刷新管理模块1和内存区2,内存区2包括至少两个数据区21和管理区22,在本实施例中,如图3所示,设置有m个数据区21,分别为数据区211、212、…、21m。
数据区21装载有参数表,管理区22装载有状态表,状态表反映不同数据区21中针对于同一参数表的状态,状态表具有状态标识,该状态标识反映对应参数表在不同数据区的状态,所述状态分为空闲态、加载态、激活态和非激活访问态,其中;空闲态表示相应的参数表可以在对应的数据区加载数据;加载态表示相应的参数表正在对应的数据区加载数据;激活态表示外部应用进程可以直接访问该参数表的数据;非激活访问态表示在激活态发生切换后,仍有应用进程继续访问数据区中相应原参数表的数据。
如图3所示,例如,管理区22装载有n个状态表,每个数据区21装载有n个参数表,管理区22中的每个状态表对应于数据区21中不同状态的对应参数表,以参数表表n为例,它的空闲标识对应数据区211中的参数表表n,激活标识对应数据区212中的参数表表n,…,非激活访问标识对应数据区21m中的参数表表n。
状态表中设置有“表访问信号量”子项,“表访问信号量”所标识的是,对于处于不同数据区的同一参数表,在各种状态下的被访问数。在本发明中,不同状态的不同参数表可共享相同数据区。
如图3所示,刷新管理模块1根据应用进程对参数表的访问,对数据区21中的参数表的状态和管理区22中的状态表作相应设置,完成参数表在共享内存数据区21的加载,以及管理区22内状态表中状态标识的切换,以及数据区21和管理区22中表项的调用、读写;外部应用进程对数据区21中参数表的访问或退出访问,刷新管理模块1在管理区21中的状态表予以记录。
如图4所示,本发明的基本控制流程如下1)在共享内存中,设置至少两个数据区21和一个管理区22,数据区21装载有参数表,管理区22装载有状态表,状态表反映不同数据区中针对于同一参数表的状态。
2)当有参数表需要刷新时,从相应空闲态的参数表的列表中任取一个进行的数据装载。
3)加载结束后对相应的参数表进行状态转换。
如图5所示,本发明的具体控制流程如下1、在共享内存中,设置m个数据区21和一个管理区22,数据区21装载有参数表,管理区22装载有状态表,状态表反映不同数据区中针对于同一参数表的状态。
2、现有参数表需要刷新,查寻是否存在相应的非激活访问态的参数表,进行如下操作21、如果存在非激活访问态的参数表,进行如下操作211、若该表的表访问信号量为0,如图6所示,将该参数表由非激活访问态转化为空闲态,继续如下步骤3。
212、若该表的表访问信号量大于0,结束检测,继续如下步骤3。
22、如果不存在非激活访问态的参数表,结束检测,继续如下步骤3。
3、查寻是否存在相应空闲态的参数表,进行如下操作31、若无空闲态参数表,则报警退出。
32、若有空闲态参数表,从空闲态的列表中任取一个,进行参数表的数据装载,继续如下步骤4。
4、相应状态表的激活标识加写锁,将其状态切换为激活态。
5、如图6所示,根据该表的表访问信号量作如下操作51、若该表的表访问信号量大于0,则将其状态转换为非激活访问态,继续如下步骤6。
52、若该表的表访问信号量为0,则将激活态转换为空闲态,继续如下步骤6。
6、释放该表的激活标识写锁。
7、参数表刷新后,所有访问该参数表的操作转换到更新后的激活态参数表中。
对于本发明的状态转换,现以一直观例说明如下设定具有i、j、k三个数据区21,该三个数据区21均有表A,在三个数据区21中分别对应参数表为a1、a2、a3。
如图6所示,数据加载初始化时默认a1为空闲态。
参数表a1加载成功后,将参数表a1的状态修改为激活态。
3分钟后接收到表A数据更新的通知,则从剩下的处于空闲态的参数表a2、a3中任意选定参数表a2为新的数据加载对象。
在参数表a2中加载数据完毕后,发出激活态切换通知,将参数表a2转换为激活态,再判断此时仍有外界应用进程B访问参数表a1,于是将参数表a1转换为非激活访问态。
切换完毕后,所有访问表A的进程均从参数表a2对象去访问,而访问原参数表a1对象的应用进程B仍然可以继续访问参数表a1,不受状态切换导致的任何影响。对处于非激活访问态的参数表a1,若5分钟后应用进程B访问完毕,下次刷新时将参数表a1又转换为空闲态,供刷新时循环利用。
刷新进程进行切换操作时,将激活态标识值变更为已更新数据的加载态标识值,加写锁,但该写锁瞬间释放;外部应用进程在获取激活态标识值后(先获取读锁,然后也是瞬间释放),便直接进入数据区访问,并且数据区也不加任何锁。这种加锁机制消除了数据表刷新时的读写碰撞问题。
权利要求
1.一种基于共享的参数表实时刷新方法,其特征在于它采用如下步骤A、在共享内存中,设置至少两个数据区和一个管理区,所述的数据区装载有参数表,所述的管理区装载有状态表,所述的状态表反映不同数据区中针对同一参数表的状态;B、在刷新数据时,根据不同数据区中相应参数表的状态,获取可加载的参数表进行刷新。
2.根据权利要求1所述的基于共享的参数表实时刷新方法,其特征在于所述的步骤A中,所述的状态表具有状态标识,该状态标识反映对应参数表在不同数据区的状态,所述状态分为空闲态、加载态、激活态和非激活访问态,其中;空闲态表示相应的参数表可以在对应的数据区加载数据;加载态表示相应的参数表正在对应的数据区加载数据;激活态表示外部应用进程可以直接访问该参数表的数据;非激活访问态表示在激活态发生切换后,仍有外部应用进程继续访问数据区中相应原参数表的数据。
3.根据权利要求2所述的基于共享的参数表实时刷新方法,其特征在于所述的不同参数表可共享相同数据区。
4.根据权利要求2所述的基于共享的参数表实时刷新方法,其特征在于所述的状态表中设置有“表访问信号量”子项,所述的“表访问信号量”标识相应状态的参数表的当前被进程访问数。
5.根据权利要求1-4中任意一项所述的基于共享的参数表实时刷新方法,其特征在于所述的步骤B包括如下步骤B1、查寻相应空闲态的参数表,进行如下操作B11、若无空闲态参数表,则退出;B12、若有空闲态参数表,从空闲态的列表中任取一个,进行参数表的数据加载,继续如下步骤B2;B2、加载结束后对相应的参数表进行状态转换。
6.根据权利要求5所述的基于共享的参数表实时刷新方法,其特征在于所述的步骤B1之前还包括如下步骤查寻是否存在非激活访问态的参数表B01、如果存在非激活访问态的参数表,进行如下操作B010、若该表的表访问信号量为0,将该参数表由非激活访问态转化为空闲态;B011、若该表的表访问信号量大于0,结束检测;B02、如果不存在非激活访问态的参数表,结束检测。
7.根据权利要求5所述的基于共享的参数表实时刷新方法,其特征在于所述的步骤B2包括如下步骤B21、将相应状态表的激活标识加写锁,将其状态切换为激活态;B22、根据该表的表访问信号量作如下操作B221、若该表的表访问信号量大于0,则其状态转换为非激活访问态;B222、若该表的表访问信号量为0,则将其状态转换为空闲态;B23、释放激活标识写锁。
8.根据权利要求5所述的基于共享的参数表实时刷新方法,其特征在于所述的步骤B之后还包括如下步骤所述的参数表刷新后,所有访问该参数表的操作转换到刷新后的激活态参数表中。
9.一种基于共享的参数表实时刷新系统,包括刷新管理模块(1)和内存区(2),其特征在于所述的内存区(2)包括至少两个数据区和管理区(22),其中所述的数据区(21)装载有参数表;所述的管理区(22)装载有状态表,所述的状态表反映不同数据区(21)中针对于同一参数表的状态;所述的刷新管理模块(1)根据应用进程对参数表的访问,对数据区(21)中的参数表的状态和管理区中的状态表作相应设置。
10.根据权利要求9所述的基于共享的参数表实时刷新系统,其特征在于所述的刷新管理模块(1)完成参数表在共享内存数据区(21)的加载,以及管理区(22)内状态表中状态标识的切换,以及数据区(21)和管理区(22)中参数表的调用、读写;外部应用进程对数据区(21)中参数表的访问或退出访问,刷新管理模块(1)在管理区(21)中的状态表予以记录。
全文摘要
一种涉及电通信技术的基于共享的参数表实时刷新方法和系统,采用如下步骤A.在共享内存中,设置至少两个数据区和一个管理区,所述的数据区装载有参数表,所述的管理区装载有状态表,所述的状态表反映不同数据区中针对于同一参数表的状态,B.在刷新数据时,根据不同数据区中相应参数表的状态,获取可加载的参数表进行刷新;所述的步骤A中,所述的状态表具有状态标识,该状态标识反映对应参数表在不同数据区的状态,所述状态分为空闲态、加载态、激活态和非激活访问态;所述的状态表中设置有“表访问信号量”子项,所述的“表访问信号量”标识相应状态的参数表的当前被进程访问数,本发明实时刷新效率高。
文档编号G06F12/00GK1859461SQ20051010131
公开日2006年11月8日 申请日期2005年11月9日 优先权日2005年11月9日
发明者李建斌, 尹春雷, 王斌 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1