一种无锁链表管理装置的制造方法

文档序号:8258312阅读:318来源:国知局
一种无锁链表管理装置的制造方法
【技术领域】
[0001]本发明涉及通信技术领域,尤其涉及一种无锁链表管理装置。
【背景技术】
[0002]链表(Linked list)是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
[0003]链表是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,链表允许插入和移除表上任意位置上的节点,但是不允许随机存取。
[0004]由于在可编程逻辑器件设计中,存储资源有限,链表数据存储结构因为其灵活性已被大量的使用。但是,可编程逻辑器件设计为多为流水线设计结构,那么就有同一时刻在同一条链表上添加两个或以上节点的可能性。为了保证链表结构的正确性,在添加链表节点时,必须保证同一条链表同时只能操作一个节点。
[0005]目前,实现同一条链表上只能同时操作一个节点,一般的实现方法是使用加锁机制管理链表。对于一个高性能的,需要经常进行大规模运算的系统,流水线结构是提高逻辑吞吐量从而增强计算性能的一个重要办法。而流水线结构要求流水线上的数据能够流动起来,这样吞吐量才能达到满意的效果,但是通过加锁来避免链表建立错误的办法,就会经常打断流水线操作。并且,加锁操作还会影响流水线上的本节点之后的节点,从而严重降低系统的吞吐量。

【发明内容】

[0006]有鉴于此,本发明提供一种无锁链表管理装置,包括命令区分模块、新建存储模块以及链表操作模块,其中:
[0007]命令区分模块,用于区分链表节点命令的命令类型,提取出新建链表节点命令;
[0008]新建存储模块,用于存储命令区分模块提取出的新建链表节点命令;
[0009]链表操作模块,从存储模块中逐个调取新建链表节点命令并进行处理。
[0010]进一步地,命令区分模块中提取新建链表节点命令之前还包括去冗余模块,用于将接收到的链表节点命令中重复的命令聚合为一个命令,以确保每个命令都是唯一的。
[0011]进一步地,在去冗余模块接收到链表节点命令之前包括,将进入链表流水线的链表节点命令分组发送至去冗余模块。
[0012]优选地,对比组内链表节点的命令,当多个链表节点命令的命令类型和节点符号同时相同时则为重复的命令。
[0013]进一步地,命令类型为新建链表节点命令、删除链表节点命令、查找链表节点命令以及更新链表节点命令。
[0014]本发明在管理链表时不需要加锁操作,保证链表操作流水线上只有一个链表新建命令,直接让链表节点进入链表操作的流水线上,将流水线的动作流动起来,达到系统理想的吞吐量性能。利用新建存储模块存储新建链表节点命令,避免了在无锁的链表管理机制下有多个用户同时新建链表节点时,出现链表节点被替换而导致链表建立错误的问题。
【附图说明】
[0015]图1是本发明实施例中无锁链表管理装置的结构示意图;
[0016]图2是本发明实施例中无锁链表管理装置逻辑流程图;
[0017]图3是本发明实施例中无锁链表管理装置执行流程图。
【具体实施方式】
[0018]目前的可编程逻辑器件设计多为流水线设计结构,以FPGA为例,当有多人同时对一条链表进行链表节点命令的操作时,就有同一时刻在同一条链表上添加两个或两个以上节点的可能性,则会导致多个节点同时添加在同一条链表的同一个位置,那么就会发生之前的节点会被之后的节点替换,从而致使链表建立错误。为了保证链表结构的正确性,在添加链表节点时,必须保证同一条链表同时只能操作一个节点,一般的实现方法是使用加锁机制管理链表。具体实现为:当有用户对链表节点进行操作时,首先对该链表进行加锁,以链表头地址为关键词做一个加锁操作,加锁成功后才能对该链表进行链表节点命令的操作,对链表节点的命令操作完成后对该链表解锁,此时才可以处理下一个节点。如有其它用户在此期间也需对该链表进行链表节点的命令操作时,由于该链表已经加锁,所以无法对该链表进行操作,只能待上一个节点命令解锁后方可对其进行操作。对于一个高性能的,需要经常进行大规模运算的系统,流水线结构是提高逻辑吞吐量从而增强计算性能的一个重要办法。而流水线结构要求流水线上的数据能够流动起来,这样吞吐量才能达到满意的效果。但是,通过使用加锁方法来管理链表,虽然避免了链表建立错误的办法,却会经常打断流水线操作,并且还会影响流水线上的本节点之后的节点,从而严重降低系统的吞吐量。
[0019]本发明提供一种新的链表管理机制解决以上问题,在优选的实施方式中,本发明提供一种无锁链表管理装置,请参考图1,该装置包括命令区分模块、新建存储模块以及链表操作模块,通过对进入链表操作流水线上的节点数据进行预处理,并且增加一个新建存储模块,储存新建链表节点的命令,达到不需要加锁操作就能保证链表建立正确的方法。如图2所示,该装置在运行过程中执行如下处理流程:
[0020]步骤201,命令区分模块区分链表节点命令的命令类型,提取出新建链表节点命令;
[0021]步骤202,新建存储模块储存命令区分模块提取出的新建链表节点命令;
[0022]步骤203,链表操作模块从新建存储模块中调取新建链表节点命令并逐个处理。
[0023]请参考图3,在本发明中,为了保证去冗余模块的有效进行,首先将进入链表操作流水线的待操作链表节点的命令进行分组,优选地以16个命令为一组输入去冗余模块,当然也可以不满16个或多于16个,该参数可自行设定。去冗余模块接收到此16个一组的链表节点命令后,对比该组命令的命令类型和节点符号。链表节点的命令类型分为以下几种:添加节点命令、删除节点命令、更新节点命令以及查找节点命令。当两个或多个待操作链表节点命令的命令类型和节点符号同时相同时则为重复的命令,当检测到重复的命令时去冗余模块则将相同的命令丢掉或者聚合至仅剩下一个,保证一组命令通过去冗余模块后,每一个命令在组内都是唯一的命令。
[0024]例如,将进入链表操作流水线的链表节点命令,为提高工作效率以16个链表节点命令分为一组输入去冗余模块,我们将16个链表节点命令分别命名为:A1,BI,Cl,Dl,El,Fl, Gl, Al,Al,BI, B2, Cl,Dl, Al,Gl, El。其中数字代表命令类型,字母代表节点符号,那么,这16个命令通过去冗余模块后,将相同的命令丢掉或者聚合为I个,结果只剩下Al ,BI,B2,Cl,Dl, El, Fl, Gl等8个组内无重复的命令。
[0025]当有多个用户同时在一条链表上添加新的链表节点时,节点指针可能会同时指向链表的同一个节点位置,此时就会出现多个新建链表节点占用一个链表中节点位置的情况,那么就会发生之前的新建链表节点会被之后的新建链表节点替换,从而造成链表建立错误。在本发明中相应新增加一个单独的新建存储模块,用于储存新建链表节点的命令,新建链表节点命令又为添加链表节点的命令。在存储新建链表节点命令之前,命令区分模块将去冗余模块输出的无重复的链表节点命令进行分类,把新建链表节点的命令单独提出,放入单独的新建存储模块,等待被调用;此时除新建链表节点命令外的其他链表节点命令则可以直接逐个处理,以保证流水线的连续性,新建链表节点命令则从新建存储模块中逐个调取处理。需要注意的是,在链表操作模块中,在一个链表节点命令处理完成后才可调用下一个命令,根据进入流水线的先后顺序逐个处理链表节点命令。
[0026]综上所述,本发明实施例提供的无锁链表在执行新建链表节点操作时较现有技术相比,需要额外的增加一个新建存储模块,将经过区分链表节点命令类型后获知的新建链表节点提取出来储存于新增的新建存储模块,再逐个调取进行处理。从而使得链表不需要加锁操作,直接让节点进入链表操作的流水线上,将流水线的动作流动起来,达到系统理想的吞吐量性能。还避免了在无锁的链表管理机制下有多个用户同时新建链表节点时,出现链表节点被替换而导致链表建立错误的问题。
[0027]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
【主权项】
1.一种无锁链表管理装置,包括命令区分模块、新建存储模块以及链表操作模块,其特征在于: 命令区分模块,用于区分链表节点命令的命令类型,提取出新建链表节点命令; 新建存储模块,用于存储命令区分模块提取出的新建链表节点命令; 链表操作模块,从存储模块中逐个调取新建链表节点命令并进行处理。
2.如权利要求1所述的装置,其特征在于,所述命令区分模块中提取新建链表节点命令之前还包括去冗余模块,用于将接收到的链表节点命令中重复的命令聚合为一个命令,以确保每个命令都是唯一的。
3.如权利要求2所述的装置,其特征在于,在去冗余模块接收到链表节点命令之前进一步包括,将进入链表流水线的链表节点命令分组发送至去冗余模块。
4.如权利要求2所述的装置,其特征在于,所述去冗余模块具体用于,对比组内链表节点的命令,当多个链表节点命令的命令类型和节点符号同时相同时则为重复的命令。
5.如权利要求1所述的装置,其特征在于,所述命令类型包括新建链表节点命令、删除链表节点命令、查找链表节点命令以及更新链表节点命令。
6.如权利要求1所述的装置,其特征在于,所述链表操作模块进一步用于,逐个处理其他类型的链表节点命令。
【专利摘要】本发明提供了一种无锁链表管理装置,包括命令区分模块、新建存储模块以及链表操作模块,其中,命令区分模块,用于区分链表节点命令的命令类型,提取出新建链表节点命令;新建存储模块,用于存储命令区分模块提取出的新建链表节点命令;链表操作模块,用于从存储模块中逐个调取新建链表节点命令以及区分模块输出的其他命令进行处理。本发明利用新建存储模块存储新建链表节点命令,保证链表操作流水线上只有一个新建链表节点命令,避免了出现链表节点被替换而导致链表建立错误的问题。
【IPC分类】G06F11-36
【公开号】CN104572432
【申请号】CN201310512207
【发明人】熊泽磊
【申请人】杭州迪普科技有限公司
【公开日】2015年4月29日
【申请日】2013年10月24日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1