使用、管理多队列数据的共用缓存空间的方法和系统与流程

文档序号:11638309阅读:247来源:国知局
使用、管理多队列数据的共用缓存空间的方法和系统与流程
本发明涉及通信技术领域,尤其涉及多队列数据的存储规则、管理与快速查询多队列的方法、管理多队列数据存储的系统。

背景技术:
在现代通信网络中,数据的存储是网络中的重要组成部分。数据存储是数据流在加工过程中产生的临时文件或加工过程中需要查找的信息。数据以某种格式记录在计算机内部或外部存储介质上。尤其在通信节点上,数据在处理过程中需要存储,如交换设备等。其中,对于多个队列的存储,是通信系统中数据缓存的重要类型。虽然数据的存储,已经有多种实现方式,但是现有的技术仍然存在以下问题:传统的多队列数据存储,通常采用分区存储的处理方式,由于数据的随机性,每个队列的数据多少可能变化很大,每个队列使用单独的分区存储空间,往往使得数据较少的队列空间浪费,无法充分利用全部的存储空间。本发明针对以上几点,采取了分块式、带有块指针并且每块空间存在于不同的逻辑队列中的方式,解决了多队列共用存储空间,提升了功能性和空间利用率。在具有交换功能的设备中,为防止阻塞,交换设备有时需要在输入、输出端都带有缓存功能,但是这也使得完成交换,需要从输入队列转入输出队列,增加了处理时延。本发明可以使得交换动作,只涉及指针的更新,而无需将数据读出、写入的更换队列过程,提高了交换速度。在PON网络中,将互相通信的ONU的两组数据,通过OLT运算编码合为一组数据并下行发送,与源ONU存储的其中一组原始数据再进行逆运算,即可获得另一组数据,这就是网络编码在PON中的应用,可以减少下行数据流量。本发明针对这一应用,可以将所有网络编码数据存储在同一存储空间,避免了因为网络编码数据的随机性带来的空间浪费,并通过队列指针的索引,大大提高数据处理的灵活性。

技术实现要素:
本发明提供了一种网络编码数据的存储空间的设计方式,能够快速的查询、更新数据存储空间中的内容,是一种新的管理网络编码数据的存储规则的方法,实现简单、高效。为了实现上述技术,本发明通过以下技术方案实现:建立缓存空间体系,主要包括存储有效数据的子空间、记录子空间信息的子空间指针和记录多队列信息的队列指针,通过子空间指针和队列指针的记录,使得子空间分别属于不同的队列;在初始化缓存空间后,在子空间中写入或读出数据,并通过更新子空间指针和队列指针,使得在队列中加入或删除子空间,完成多个队列共用所有子空间的管理。步骤1,建立缓存空间,主要包括存储有效数据的子空间K、记录子空间信息的子空间指针P和记录多队列信息的队列指针LP;其中,子空间与子空间指针具有固定对应关系;根据队列指针及子空间指针,确定每个子空间分别属于不同的队列;步骤2,在使用缓存空间时,首先初始化各个子空间K和子空间指针P,初始化队列指针LP;步骤3,在写入数据时,需要在子空间K中存入数据,更新子空间指针P,更新队列指针LP,在队列中加入子空间K;步骤4,在读出数据时,需要从子空间K中读出数据,更新子空间指针P,更新队列指针LP,从队列中删除子空间K。步骤5,如果缓存数据需要记录所有数据的时间顺序,可以同时加入时间队列,包括子空间指针和队列指针信息;在写入数据时,在时间队列中加入子空间;在读出数据时,从时间队列中删除子空间;步骤6,如果交换数据,需要更新子空间指针P和队列指针LP,即将子空间K从一个队列交换到另一个队列。一方面,所述“建立缓存空间,主要包括存储有效数据的子空间、记录子空间信息的子空间指针和记录多队列信息的队列指针”,具体为:步骤1-1,建立子空间,将空间分块,每一块子空间可以存储若干字节数据,子空间的大小由存储数据的特征决定;如果一组数据超出子空间存储上限,可以使用多个子空间K存储。步骤1-2,建立子空间指针,每一项记录一个子空间的信息,主要包括子空间有效数据结束地址,包括在数据队列或空闲队列中的前一个子空间地址和后一个子空间地址,可以包括时间队列中的前一个子空间地址和后一个子空间地址,可以包括存入数据的时间。步骤1-3,建立队列指针,每一项记录逻辑队列起始和结束的子空间,逻辑队列分为数据队列和空闲队列两种类型,其中数据队列是指逻辑上属于一组数据的子空间组成的队列,可以有多个数据队列;空闲队列是指当前未使用的子空间组成的队列,通常只需要有一个空闲队列。步骤1-4,还可以建立时间队列指针,记录时间队列起始和结束的子空间,时间队列是指根据时间顺序,子空间组成的队列。所述步骤1-3“逻辑队列分为数据队列和空闲队列两种类型,其中数据队列是指逻辑上属于一组数据的子空间组成的队列,可以有多个数据队列”,具体为步骤1-3-1,如果缓存空间中不对数据进行区分,则可以只有一个数据队列,表示存入有效数据的子空间组成的队列;步骤1-3-2,如果为有多个收发端口,数据需要根据接收或发送端口分类,则每个端口对应一个数据队列,数据队列数量与端口数量有关;步骤1-3-3,如果数据根据源、目的地址进行区分,从同一个源地址到同一个目的地址的数据属于一组数据,则数据队列数量与源地址与目的地址的组合有关;步骤1-3-4,如果数据队列可能性多,但具有规律,数据队列指针可以使用列表的方式,进行排列管理;当步骤3-2中端口数较多,使用一维列表;步骤3-3中源地址和目的地址组合,使用二维列表;步骤1-3-5,如果数据队列可能性多,不适宜穷举,步骤3-3中源地址与目的地址组合情况很多时,可以将数据队列加入标签,标记当前每个数据队列的类型,同类型的数据存入相同的队列中,当某一队列清空,允许更新标签,用于存储其他队列数据。所述步骤1-3“空闲队列是指当前未使用的子空间组成的队列,通常只需要有一个空闲队列”,具体为步骤1-3-6,如果所有子空间没有区别,可以在任何数据队列中使用,只需要一个空闲队列,此时为所有队列共用缓存空间的方式;步骤1-3-7,如果所有子空间存在区别,允许使用多个空闲队列,每个空闲队列可以使用的规则不同,此时缓存空间不是完全共用的方式。另一方面,所述“在使用缓存空间时,首先初始化各个子空间K和子空间指针P,初始化队列指针LP”,具体为步骤2-1,定义一个子空间为空闲子空间NK,不存储实际有效数据,特殊子空间NK可以只逻辑上存在,而没有实际例化。定义一个无效时间NT,用于表示存入数据时间无效。步骤2-2,初始化子空间是指将子空间中的数据清除,由于子空间是否存储有效数据,取决于子空间是否属于空闲队列,因此初始化子空间可以不进行实际操作。步骤2-3,初始化子空间指针是指将子空间指针,按照子空间在空闲队列中的方式进行赋值,即有效数据结束地址为0,第1个子空间指针前一个子空间地址为空闲子空间,后一个子空间地址为第2个子空间,中间每个子空间指针的前一个子空间地址和后一个子空间地址按顺序排列,最后1个子空间指针前一个子空间地址为倒数第2个子空间,后一个子空间地址为空闲子空间。每个子空间指针时间队列中的前一个子空间地址和后一个子空间地址,均为空闲子空间;存入数据时间初始化为无效时间。步骤2-4,初始化队列指针是指将数据队列和空闲队列和时间队列的指针赋值,数据队列起始和结束子空间为空闲子空间,表示数据队列为空;空闲队列起始子空间为第1个子空间,结束子空间为最后1个子空间,结合子空间指针初始化,表示所有子空间属于空闲队列;时间队列起始和结束子空间为空闲子空间,表示时间队列为空。所述“在写入数据时,需要在子空间K中存入数据,更新子空间指针P,更新队列指针LP,在队列中加入子空间K”,具体为步骤3-1,写入数据时,根据数据的类型,确定子空间应该属于的数据队列。步骤3-2,如果空闲队列为空,则不可以写入数据;如果空闲队列不为空,则可以写入数据。步骤3-3,查询空闲队列的起始子空间,在此子空间中存入数据,数据结束时记录有效数据结束地址。步骤3-4,如果数据队列不为空,则数据队列原来的结束子空间,其子空间指针后一个子空间为写入数据的子空间;如果数据队列为空,则跳过此步骤6-4。步骤3-5,写入数据的子空间,其子空间指针前一个子空间为数据队列原有的结束子空间;子空间指针后一个子空间为空闲子空间。步骤3-6,空闲队列原来的第2个子空间,其子空间指针前一个子空间为空闲子空间,如果空闲队列此时为空,则跳过此步骤6-6。步骤3-7,数据队列如果原本为空,则起始子空间为写入数据的子空间;数据队列如果不为空,则起始子空间不变;数据队列结束子空间为写入数据的子空间。步骤3-8,空闲队列起始子空间为空闲队列原来的第2个子空间,如果为空闲子空间,则此时空闲队列为空,空闲队列结束子空间也为空闲子空间。所述“在读出数据时,需要从子空间K中读出数据,更新子空间指针P,更新队列指针LP,从队列中删除子空间K”,具体为步骤4-1,读出数据时,根据数据的类型,确定子空间应该属于的数据队列。步骤4-2,如果数据队列为空,则不可以读出数据,如果数据队列不为空,则可以读出数据。步骤4-3,查询数据队列的起始子空间,从此子空间中读出数据,直到有效数据结束。步骤4-4,如果空闲队列不为空,则空闲队列原来的结束子空间,其子空间指针后一个子空间为读出数据的子空间;如果空闲队列为空,则跳过此步骤7-4。步骤4-5,读出数据的子空间,其子空间指针前一个子空间为空闲队列原有的结束子空间;子空间指针后一个子空间为空闲子空间。步骤4-6,数据队列原来的第2个子空间,其子空间指针前一个子空间为空闲子空间,如果数据队列此时为空,则跳过此步骤7-6。步骤4-7,空闲队列如果原本为空,则起始子空间为读出数据的子空间;空闲队列如果不为空,则起始子空间不变;空闲队列结束子空间为读出数据的子空间。步骤4-8,数据队列起始子空间为数据队列原来的第2个子空间,如果为空闲子空间,则此时数据队列为空,数据队列结束子空间也为空闲子空间。所述“如果缓存数据需要记录所有数据的时间顺序,可以同时加入时间队列,包括子空间指针和队列指针信息;在写入数据时,在时间队列中加入子空间”,具体为步骤5-1,如果空闲队列为空,则不可以写入数据;如果空闲队列不为空,则可以写入数据。步骤5-2,查询空闲队列的起始子空间,在此子空间中存入数据。步骤5-3,如果时间队列不为空,则时间队列原来的结束子空间,其子空间指针的时间队列后一个子空间为写入数据的子空间;如果时间队列为空,则跳过此步骤7-3。步骤5-4,写入数据的子空间,其子空间指针的时间队列前一个子空间为时间队列原有的结束子空间;子空间指针的时间队列后一个子空间为空闲子空间;更新存入数据的时间。步骤5-5,时间队列如果原来为空,则起始子空间为写入数据的子空间;时间队列如果不为空,则起始子空间不变;时间队列结束子空间为写入数据的子空间。所述“如果缓存数据需要记录所有数据的时间顺序,可以同时加入时间队列,包括子空间指针和队列指针信息;在读出数据时,从时间队列中删除子空间”,具体为步骤5-6,如果数据队列为空,则不可以读出数据,如果数据队列不为空,则可以读出数据。步骤5-7,查询数据队列的起始子空间,从此子空间中读出数据。步骤5-8,读出数据的子空间在时间队列中前一个子空间,其子空间指针时间队列后一个子空间为读出数据的子空间在时间队列中后一个子空间。步骤5-9,读出数据的子空间在时间队列中后一个子空间,其子空间指针时间队列前一个子空间为读出数据的子空间在时间队列中前一个子空间。步骤5-10,读出数据的子空间如果是时间队列起始子空间,则时间队列起始子空间为时间队列原来的第2个子空间;读出数据的子空间如果是时间队列结束子空间,则时间队列结束子空间为时间队列原来的倒数第2个子空间。所述“如果交换数据,需要更新子空间指针P和队列指针LP,即将子空间K从一个队列交换到另一个队列”,具体为步骤6-1,根据数据的类型,确定输入数据应该属于的数据队列K1,在子空间中写入数据。步骤6-2,根据交换查表,确定数据输出应该属于的数据队列K2。步骤6-3,查询输入数据队列K1起始子空间,即为实现交换的子空间。步骤6-4,如果数据队列K2不为空,则数据队列K2原来的结束子空间,其子空间指针后一个子空间为实现交换的子空间;如果数据队列K2为空,则跳过此步骤9-4。步骤6-5,实现交换的子空间,其子空间指针前一个子空间为数据队列K2原有的结束子空间:子空间指针后一个子空间为空闲子空间。步骤6-6,数据队列K1原来的第2个子空间,其子空间指针前一个子空间为空闲子空间,如果数据队列K1此时为空,则跳过此步骤9-6。步骤6-7,数据队列K2如果原本为空,则起始子空间为实现交换的子空间;数据队列K2如果不为空,则起始子空间不变;数据子空间K2结束子空间为实现交换的子空间。步骤6-8,数据队列K1起始子空间为数据队列K1原来的第2个子空间,如果为空闲子空间,则此时数据队列K1为空,数据队列K1结束子空间也为空闲子空间。步骤6-9,从输出数据队列K2子空间中读出数据,完成数据输出。步骤6-10,如果交换查表能够完成快速查询,则可以通过指针操作,直接写入输出数据队列K2中;如果数据输出能够即时完成,则可以直接从输入数据队列K1中,读出数据,完成数据输出。由于多队列数据共用缓存空间,因此可以简化交换操作。另一方面,一种管理多队列数据的共用缓存空间的系统,其特征在于,所述系统包括:数据存储单元,用于存放需要缓存的数据,按照分块的方式分为若干子空间。数据存储指针单元,用于存放数据存储单元的指针信息,与数据存储单元具有固定对应关系。逻辑队列指针单元,用于存放数据队列和空闲队列的指针信息,可以存放时间队列的指针信息。初始化单元,用于对数据存储单元和数据存储指针单元进行初始化,对逻辑队列指针单元进行初始化。数据写入单元,用于写入数据时,控制数据存储单元写入数据,控制数据存储指针单元和逻辑队列指针单元的更新。数据读出单元,用于读出数据时,控制数据存储单元读出数据,控制数据存储指针单元和逻辑队列指针单元的更新。数据交换单元,用于交换数据时,控制数据存储指针单元和逻辑队列指针单元的更新。一种管理多队列数据的共用缓存空间的系统,具体为所述数据存储单元,划分为若干子空间,每个子空间可以存储若干字节数据,允许多个子空间联合存储一组数据。所述数据存储指针单元,用于存放的数据存储指针单元信息包括:数据存储单元中有效数据的结束地址,在数据或空闲队列中前一个数据存储单元的地址和后一个数据存储单元的地址,在时间队列中前一个数据存储单元的地址和后一个数据存储单元的地址,存入有效数据的时间。所述逻辑队列指针单元,用于存放各个数据队列的起始数据存储单元地址和结束数据存储单元地址,存放空闲队列的起始数据存储单元地址和结束数据存储单元地址,存放时间队列的起始数据存储单元地址和结束数据存储单元地址。所述初始化单元,用于初始化数据存储单元各个子空间;初始化数据存储指针单元,包括初始化数据存储单元的有效数据结束地址,初始化在数据或空闲队列中前一个数据存储单元的地址和后一个数据存储单元的地址,初始化在时间队列中前一个数据存储单元的地址和后一个数据存储单元的地址,初始化存入有效数据的时间;初始化逻辑队列指针单元,包括初始化各个数据队列的起始数据存储单元地址和结束数据存储单元地址,初始化空闲队列的起始数据存储单元地址和结束数据存储单元地址,初始化时间队列的起始数据存储单元地址和结束数据存储单元地址。所述数据写入单元,用于写入数据时,控制数据存储单元写入数据,控制数据存储指针单元的更新,包括更新数据存储单元中有效数据的结束地址,更新在数据或空闲队列中前一个数据存储单元的地址和后一个数据存储单元的地址,更新在时间队列中前一个数据存储单元的地址和后一个数据存储单元的地址,更新存入有效数据的时间;控制逻辑队列指针单元的更新,包括更新对应数据队列的起始数据存储单元地址和结束数据存储单元地址,更新空闲队列的起始数据存储单元地址和结束数据存储单元地址,更新时间队列的起始数据存储单元地址和结束数据存储单元地址。所述数据读出单元,用于读出数据时,控制数据存储单元读出数据;控制数据存储指针单元的更新,包括更新数据存储单元中有效数据的结束地址,更新在数据或空闲队列中前一个数据存储单元的地址和后一个数据存储单元的地址,更新在时间队列中前一个数据存储单元的地址和后一个数据存储单元的地址,更新存入有效数据的时间;控制逻辑队列指针单元的更新,包括更新对应数据队列的起始数据存储单元地址和结束数据存储单元地址,更新空闲队列的起始数据存储单元地址和结束数据存储单元地址,更新时间队列的起始数据存储单元地址和结束数据存储单元地址。所述数据交换单元,用于交换数据时,控制数据存储指针单元的更新,包括更新数据存储单元中有效数据的结束地址,更新在数据或空闲队列中前一个数据存储单元的地址和后一个数据存储单元的地址,更新在时间队列中前一个数据存储单元的地址和后一个数据存储单元的地址,更新存入有效数据的时间;控制逻辑队列指针单元的更新,包括更新对应数据队列的起始数据存储单元地址和结束数据存储单元地址,更新空闲队列的起始数据存储单元地址和结束数据存储单元地址,更新时间队列的起始数据存储单元地址和结束数据存储单元地址。由以上技术方案可以看出,由于本发明通过分块式的存储方式,并通过指针记录每块数据在队列中前一个和后一个数据的地址,使得不连续的存储数据,在逻辑上成为不同队列中可控的存储连续数据;通过管理每个队列的头、尾指针,使得所有队列能够使用共同的存储空间,提高了内存空间的利用率;通过时间队列的管理,使得每组数据同时存在于本队列中,并按照时间顺序排列,可以更加灵活的根据时间调度数据。本发明充分利用了存储空间,并有很强的灵活调度能力。附图说明图1、本发明实施例提供的多队列共用存储空间的使用方法实施例总体流程图;图2、本发明实施例提供的多队列共用存储空间的使用方法实施例建立流程图;图3、本发明实施例提供的多队列共用存储空间的使用方法实施例队列分类流程图;图4、本发明实施例提供的多队列共用存储空间的使用方法实施例初始化流程图;图5、本发明实施例提供的多队列共用存储空间的使用方法实施例写入数据流程图;图6、本发明实施例提供的多队列共用存储空间的使用方法实施例读出数据流程图;图7、本发明实施例提供的多队列共用存储空间的使用方法时间队列写入数据流程图;图8、本发明实施例提供的多队列共用存储空间的使用方法时间队列读出数据流程图:图9、本发明实施例提供的多队列共用存储空间的使用方法实施例交换数据流程图;图10、本发明实施例提供的多队列共用存储空间的系统实施例总体结构图;图11、本发明实施例提供的多队列共用存储空间的系统实施例具体结构图。具体实施方式本发明实施示例提供了一种多队列数据共用存储空间的使用方法、一种多队列数据共用存储空间的系统。常用的存储单元为随机存储器(RAM,randomaccessmemory),可以按需随意取出或存入,且读取速度与存储位置无关。在本发明实施示例中,应用双端口的RAM,可以将写入与读出功能同时实现,所以本文将以双端口RAM为例来对本发明实施示例进行描述。双端口RAM是有两对读写端口的RAM,可以分别为两对读写端口赋予不同的读写地址,这样就能够同时完成对网络编码数据的写入与读出功能,这样的方式具有写入、读出快速,操作简单的优点。实施例一:本发明实施例提供的多队列数据共用存储空间的使用方法,在交换系统中的应用,实施例如下文所述:一方面为OLT中网络编码数据及指针存储空间的设计方式,其特征主要包括:建立缓存空间体系,主要包括存储有效数据的子空间、记录子空间信息的子空间指针和记录多队列信息的队列指针,通过子空间指针和队列指针的记录,使得子空间分别属于不同的队列;在初始化缓存空间后,在子空间中写入或读出数据,并通过更新子空间指针和队列指针,使得在队列中加入或删除子空间,完成多个队列共用所有子空间的管理。步骤201,建立缓存空间,主要包括存储有效数据的子空间K、记录子空间信息的子空间指针P和记录多队列信息的队列指针LP;其中,子空间与子空间指针具有固定对应关系;根据队列指针及子空间指针,确定每个子空间分别属于不同的队列;子空间从K1开始,到KN结束,共有N块子空间。子空间指针从P1开始,到PN结束,共有N个子空间指针,与子空间K依次对应。队列指针从LP1开始,到LPM结束,共有M个队列。步骤202,在使用缓存空间时,首先初始化各个子空间K和子空间指针P,初始化队列指针LP。初始化时,需要初始化子空间K,初始化子空间指针P,初始化队列指针LP。步骤203,在写入数据时,需要在子空间K中存入数据,更新子空间指针P,更新队列指针LP,在队列中加入子空间K。写入数据时,在子空间K中写入数据,更新子空间指针P,更新队列指针LP。步骤204,在读出数据时,需要从子空间K中读出数据,更新子空间指针P,更新队列指针LP,从队列中删除子空间K。读出数据时,从子空间K中读出数据,更新子空间指针P,更新队列指针LP。步骤205,如果缓存数据需要记录所有数据的时间顺序,可以同时加入时间队列,包括子空间指针和队列指针信息;在写入数据时,在时间队列中加入子空间;在读出数据时,从时间队列中删除子空间。加入时间顺序,在子空间指针P中加入时间指针信息,在队列指针中加入新的队列指针。步骤206,如果交换数据,需要更新子空间指针P和队列指针LP,即将子空间K从一个队列交换到另一个队列。交换数据时,需要更新子空间指针P,更新队列指针LP。其中,建立缓存空间,主要包括存储有效数据的子空间、记录子空间信息的子空间指针和记录多队列信息的队列指针,具体为步骤211,建立子空间,将空间分块,每一块子空间可以存储若干字节数据,子空间的大小由存储数据的特征决定;如果一组数据超出子空间存储上限,可以使用多个子空间K存储。子空间K可以存储R字节数据,如果数据超出R字节,由多个子空间共同存储,此时子空间指针中有效数据结束地址特定,如为0地址,由于存在数据队列与空闲队列之分,不与未存储数据冲突;或直接设定存储字节数R为一组数据可能的上限。步骤212,建立子空间指针,每一项记录一个子空间的信息,主要包括子空间有效数据结束地址,包括在数据队列或空闲队列中的前一个子空间地址和后一个子空间地址,可以包括时间队列中的前一个子空间地址和后一个子空间地址,包括存入数据的时间。子空间指针P,记录子空间K的信息,包括有效数据结束地址PE,在数据队列或空闲队列中的前一个子空间地址PA和后一个子空间地址PB,可以包括时间队列中的前一个子空间地址PC和后一个子空间地址PD,包括存入数据的时间PT。步骤213,建立队列指针,每一项记录逻辑队列起始和结束的子空间,逻辑队列分为数据队列和空闲队列两种类型,其中数据队列是指逻辑上属于一组数据的子空间组成的队列,可以有多个数据队列;空闲队列是指当前未使用的子空间组成的队列,通常只需要有一个空闲队列。队列指针LP,记录逻辑队列起始子空间LPA和结束子空间LPB地址,逻辑队列分为数据队列和空闲队列,存入数据的队列为逻辑队列Q1、Q2、Q3……QM,未存入数据的队列为空闲队列Q0,通常需要一个空闲队列。步骤214,还可以建立时间队列指针,记录时间队列起始和结束的子空间,时间队列是指根据时间顺序,子空间组成的队列。时间队列指针LPT,记录时间队列起始子空间LPC和结束子空间LPD,时间队列QT是数据根据时间顺序排成的队列,用于可能出现的时间顺序。另外,逻辑队列分为数据队列和空闲队列两种类型,其中数据队列是指逻辑上属于一组数据的子空间组成的队列,可以有多个数据队列,具体为步骤2131,如果缓存空间中不对数据进行区分,则可以只有一个数据队列,表示存入有效数据的子空间组成的队列。如果存储数据不进行区分,只有一个数据队列Q1。步骤2132,如果为有多个收发端口,数据需要根据接收或发送端口分类,则每个端口对应一个数据队列,数据队列数量与端口数量有关;如果数据对应多个端口,则每一个端口对应一个队列Q1、Q2……QM。步骤2133,如果数据根据源、目的地址进行区分,从同一个源地址到同一个目的地址的数据属于一组数据,则数据队列数量与源地址与目的地址的组合有关。如果数据由源和目的地址区分,则每一个组合对应一个队列Q11、Q12……QMM。步骤2134,如果数据队列可能性多,但具有规律,数据队列指针可以使用列表的方式,进行排列管理;当步骤3-2中端口数较多,使用一维列表;步骤3-3中源地址和目的地址组合,使用二维列表。队列数量较多时,队列指针可以按照一维列表或二维列表的组织方式,如可能存在1024个逻辑端口,适宜使用1024个表项的一维列表;如4K个MAC地址,一个地址对应一个队列,使用4K大小与MAC地址对应的一维列表;如可能存在64个源设备和64个目的设备,使用64*64大小的二维列表。步骤2135,如果数据队列可能性多,不适宜穷举,步骤3-3中源地址与目的地址组合情况很多时,可以将数据队列加入标签,标记当前每个数据队列的类型,同类型的数据存入相同的队列中,当某一队列清空,允许更新标签,用于存储其他队列数据。队列数量过多而无法有效组织,或总是只有有限个队列,如任意IP网段对应一个队列,64*64个源和目的总是只维持不超过16个队列,适宜采用标签记录的方式。即在队列指针中加入一条记录队列信息的标签LP-List。空闲队列是指当前未使用的子空间组成的队列,通常只需要有一个空闲队列,具体为当有数据存入一个子空间时,空闲队列删除该子空间,数据队列加入该子空间;当有一个子空间读出数据释放缓存时,数据队列删除该子空间,空闲队列加入该子空间。步骤2136,如果所有子空间没有区别,可以在任何数据队列中使用,只需要一个空闲队列,此时为所有队列共用缓存空间的方式;子空间K性质一致,可以任意队列使用,则只有一个空闲队列Q0。步骤2137,如果所有子空间存在区别,允许使用多个空闲队列,每个空闲队列可以使用的规则不同,此时缓存空间不是完全共用的方式。子空间K性质不同,可以使用多个空闲队列Q01、Q02……Q00。如数据队列Q1优先级高于Q2,需要至少保留S个子空间,则空闲队列Q01中有S个子空间,Q02中有T个子空间,数据队列Q1、Q2均可使用Q02中子空间K,当空间不足时,只有Q1可以使用Q01中的子空间。另一方面,在使用缓存空间时,首先初始化各个子空间K和子空间指针P,初始化队列指针LP,具体为步骤221,定义一个子空间为空闲子空间NK,不存储实际有效数据,特殊子空间NK可以只逻辑上存在,而没有实际例化。定义一个无效时间NT,用于表示存入数据时间无效。空闲子空间NK,不存储有效数据,是所有队列的开始和结束子空间,如空闲标号K0。无效时间NT,用于表示存入数据时间无效,如无效时间记为0,有效时间从1到G循环。步骤222,初始化子空间是指将子空间中的数据清除,由于子空间是否存储有效数据,取决于子空间是否属于空闲队列,因此初始化子空间可以不进行实际操作。初始化子空间K,其中的有效数据初始化为特定数值,如初始数据为全0。步骤223,初始化子空间指针是指将子空间指针,按照子空间在空闲队列中的方式进行赋值,即有效数据结束地址为0,第1个子空间指针前一个子空间地址为空闲子空间,后一个子空间地址为第2个子空间,中间每个子空间指针的前一个子空间地址和后一个子空间地址按顺序排列,最后1个子空间指针前一个子空间地址为倒数第2个子空间,后一个子空间地址为空闲子空间。每个子空间指针时间队列中的前一个子空间地址和后一个子空间地址,均为空闲子空间;存入数据时间初始化为无效时间。初始化子空间指针P,其中所有PE为0地址;P1A为K0,P2A为K1……,PMA为KM-1;P1B为K2,P2B为K3……PMB为K0;所有PC为K0;所有PD为K0;所有PT为0时间。步骤224,初始化队列指针是指将数据队列和空闲队列和时间队列的指针赋值,数据队列起始和结束子空间为空闲子空间,表示数据队列为空;空闲队列起始子空间为第1个子空间,结束子空间为最后1个子空间,结合子空间指针初始化,表示所有子空间属于空闲队列;时间队列起始和结束子空间为空闲子空间,表示时间队列为空。初始化队列指针LP,其中所有LPA为K0,所有LPB为K0;特别的,LP0A为K1,LP0B为KM;所有LPC为K0,所有LPD为K0。以上初始化所有内容,使得每一个子空间K初始时按顺序排列,属于空闲队列,不属于数据队列,不属于时间队列。在写入数据时,需要在子空间K中存入数据,更新子空间指针P,更新队列指针LP,在队列中加入子空间K,具体为步骤231,写入数据时,根据数据的类型,确定子空间应该属于的数据队列。根据数据类型确定数据队列,如提取数据对应的端口号、IP地址等,明确数据队列为Q1。步骤232,如果空闲队列为空,则不可以写入数据;如果空闲队列不为空,则可以写入数据。空闲队列LP0A和LP0B为K0,表示没有空闲子空间,不可写入数据;否则,LP0A和LP0B不为K0,可写数据。步骤233,查询空闲队列的起始子空间,在此子空间中存入数据,数据结束时记录有效数据结束地址。假设LP0A为K1,则在K1中写入数据;当数据结束时,更新P1E。步骤234,如果数据队列不为空,则数据队列原来的结束子空间,其子空间指针后一个子空间为写入数据的子空间;如果数据队列为空,则跳过此步骤。LP1A和LP1B不为K0,表示队列Q1不为空,假设LP1B为K512,则P512B更新为K1;如果LP1A和LP1B为K0,则跳过此步骤。步骤235,写入数据的子空间,其子空间指针前一个子空间为数据队列原有的结束子空间;子空间指针后一个子空间为空闲子空间。P1A更新为K512或K0,与上一步骤对应;P1B更新为K0。步骤236,空闲队列原来的第2个子空间,其子空间指针前一个子空间为空闲子空间,如果空闲队列此时为空,则跳过此步骤。假设P1B原来为K2,则P2A更新为K0;如果P1B原来为K0,则跳过此步骤。步骤237,数据队列如果原本为空,则起始子空间为写入数据的子空间;数据队列如果不为空,则起始子空间不变;数据队列结束子空间为写入数据的子空间。如果LP1A和LP1B为K0,则LP1A更新为K1;如果LP1A和LP1B不为K0,则LP1A不变;LP1B总是更新为K1。步骤238,空闲队列起始子空间为空闲队列原来的第2个子空间,如果为空闲子空间,则此时空闲队列为空,空闲队列结束子空间也为空闲子空间。如果P1B原来为K2,LP0A更新为K2;如果P1B原来为K0,LP0A和LP0B更新为K0。以上步骤,使得子空间K1存入数据,从队列Q0的头部删除,加入队列Q1的尾部,完成了从空闲队列到数据队列的转换。队列Q0的头部由K1变为K2,队列Q1的尾部由K512变为K1,并兼顾了可能出现的空队列情况(与K0相关)。在读出数据时,需要从子空间K中读出数据,更新子空间指针P,更新队列指针LP,从队列中删除子空间K,具体为步骤241,读出数据时,根据数据的类型,确定子空间应该属于的数据队列。根据数据类型确定数据队列,假设读出数据队列为Q2。步骤242,如果数据队列为空,则不可以读出数据,如果数据队列不为空,则可以读出数据。如果LP2A和LP2B为K0,表示没有数据,不可读出数据;否则,LP2A和LP2B不为K0,可读数据。步骤243,查询数据队列的起始子空间,从此子空间中读出数据,直到有效数据结束。如果LP2A和LP2B不为K0,假设LP2A为K3,则从K3读出数据,直到P3E指示位置。步骤244,如果空闲队列不为空,则空闲队列原来的结束子空间,其子空间指针后一个子空间为读出数据的子空间;如果空闲队列为空,则跳过此步骤。如果LP0A和LP0B不为K0,假设LP0B为K800,则P800B更新为K3;如果LP0A和LP0B为K0,则跳过此步骤。步骤245,读出数据的子空间,其子空间指针前一个子空间为空闲队列原有的结束子空间;子空间指针后一个子空间为空闲子空间。P3A更新为K800或K0,与上一步骤对应;P3B更新为K0。步骤246,数据队列原来的第2个子空间,其子空间指针前一个子空间为空闲子空间,如果数据队列此时为空,则跳过此步骤7-6。假设P3B原来为K47,则P47A更新为K0;如果P3B原来为K0,则跳过此步骤。步骤247,空闲队列如果原本为空,则起始子空间为读出数据的子空间;空闲队列如果不为空,则起始子空间不变;空闲队列结束子空间为读出数据的子空间。如果LP0A和LP0B为K0,则LP0A更新为K3;如果LP0A和LP0B不为K0,则LP0A不变;LP0B总是更新为K3。步骤248,数据队列起始子空间为数据队列原来的第2个子空间,如果为空闲子空间,则此时数据队列为空,数据队列结束子空间也为空闲子空间。如果P3B原来为K47,LP2A更新为K47;如果P3B原来为K0,LP2A和LP2B更新为K0。以上步骤,使得子空间K3读出数据,从队列Q2的头部删除,加入队列Q0的尾部,完成了从数据队列到空闲队列的转换。队列Q2的头部由K3变为K47,队列Q0的尾部由K800变为K3,并兼顾了可能出现的空队列情况(与K0相关)。如果缓存数据需要记录所有数据的时间顺序,可以同时加入时间队列,包括子空间指针和队列指针信息;在写入数据时,在时间队列中加入子空间,具体为步骤251,如果空闲队列为空,则不可以写入数据;如果空闲队列不为空,则可以写入数据。如果LP0A和LP0B为K0,不可写入数据;如果LP0A和LP0B不为K0,可以写入数据。步骤252,查询空闲队列的起始子空间,在此子空间中存入数据。假设LP0A为K9,则在K9中写入数据。步骤253,如果时间队列不为空,则时间队列原来的结束子空间,其子空间指针的时间队列后一个子空间为写入数据的子空间;如果时间队列为空,则跳过此步骤。如果LPC和LPD不为K0,假设LPD为K5,则P5D更新为K9;如果LPC和LPD为K0,跳过此步骤。步骤254,写入数据的子空间,其子空间指针的时间队列前一个子空间为时间队列原有的结束子空间;子空间指针的时间队列后一个子空间为空闲子空间;更新存入数据的时间。P9C更新为K5,P9D更新为K0,更新存入数据时间P9T。步骤255,时间队列如果原来为空,则起始子空间为写入数据的子空间;时间队列如果不为空,则起始子空间不变;时间队列结束子空间为写入数据的子空间。如果LPC和LPD为K0,则LPC更新为K9;如果LPC和LPD不为K0,则LPC不变;LPD总是更新为K9。在读出数据时,从时间队列中删除子空间,具体为步骤256,如果数据队列为空,则不可以读出数据,如果数据队列不为空,则可以读出数据。假设读出数据队列为Q4,如果LP4A和LP4B为K0,不可读出数据;如果LP4A和LP4B不为K0,可以读出数据。步骤257,查询数据队列的起始子空间,从此子空间中读出数据。假设LP4A为K71,则在K71中读出数据。步骤258,读出数据的子空间在时间队列中前一个子空间,其子空间指针时间队列后一个子空间为读出数据的子空间在时间队列中后一个子空间。假设P71C为K70,P71D为K72,则P70D更新为K72。步骤259,读出数据的子空间在时间队列中后一个子空间,其子空间指针时间队列前一个子空间为读出数据的子空间在时间队列中前一个子空间。与上一步骤一致,P72C更新为K70。步骤2510,读出数据的子空间如果是时间队列起始子空间,则时间队列起始子空间为时间队列原来的第2个子空间;读出数据的子空间如果是时间队列结束子空间,则时间队列结束子空间为时间队列原来的倒数第2个子空间。如果P71C为K0,则LPC更新为K72;如果P71D为K0,则LPD更新为K70。以上为按队列读出数据,通常从时间队列中间读出某一子空间数据。当数据按照时间顺序读出时,将时间队列按照数据队列的方式处理,更新子空间指针和队列指针信息,时间队列与数据队列地位对调,原理一致不予赘述。如果交换数据,需要更新子空间指针P和队列指针LP,即将子空间K从一个队列交换到另一个队列,具体为步骤261,根据数据的类型,确定输入数据应该属于的数据队列K1,在子空间中写入数据。假设子空间属于数据队列Q5,数据已经写入。步骤262,根据交换查表,确定数据输出应该属于的数据队列K2。假设子空间需要交换到数据队列Q6。步骤263,查询输入数据队列K1起始子空间,即为实现交换的子空间。需要交换的子空间为Q5的起始子空间,LP5A为K99。步骤264,如果数据队列K2不为空,则数据队列K2原来的结束子空间,其子空间指针后一个子空间为实现交换的子空间;如果数据队列K2为空,则跳过此步骤。如果LP6A和LP6B不为K0,假设LP6B为K98,则P98B更新为K99;如果LP6A和LP6B为K0,则跳过此步骤。步骤265,实现交换的子空间,其子空间指针前一个子空间为数据队列K2原有的结束子空间;子空间指针后一个子空间为空闲子空间。P99A更新为K98,P99B更新为K0。步骤266,数据队列K1原来的第2个子空间,其子空间指针前一个子空间为空闲子空间,如果数据队列K1此时为空,则跳过此步骤9-6。假设P99B为K100,则P100A更新为K0;如果P99B为K0,则跳过此步骤。步骤267,数据队列K2如果原本为空,则起始子空间为实现交换的子空间;数据队列K2如果不为空,则起始子空间不变;数据子空间K2结束子空间为实现交换的子空间。如果LP6A和LP6B为K0,则LP6A更新为K99;否则LP6A不变;LP6B总是更新为K99。步骤268,数据队列K1起始子空间为数据队列K1原来的第2个子空间;如果为空闲子空间,则此时数据队列K1为空,数据队列K1结束子空间也为空闲子空间。LP5A更新为K100,如果LP5A更新为K0,则LP5B也更新为K0。步骤269,从输出数据队列K2子空间中读出数据,完成数据输出。按照读出数据的步骤,将子空间K99从Q6队列输出,即完成了数据的读出。步骤2610,如果交换查表能够完成快速查询,则可以通过指针操作,直接写入输出数据队列K2中;如果数据输出能够即时完成,则可以直接从输入数据队列K1中,读出数据,完成数据输出。由于多队列数据共用缓存空间,因此可以简化交换操作。如果快速查询,将数据写入K99,指针直接更新为Q6,省略了先进入Q5,后交换的过程;如果即时读出,将数据读出K99,指针直接更新为Q0,省略了先交换Q6,后读出的过程。由于多数据共用缓存空间,任意写入或读出子空间,只要控制指针即可完成各种操作。以上步骤,完成了子空间K99从队列Q5头部交换到队列Q6尾部的过程,Q5头部由K99变为K100,Q6尾部由K98变为K99,同时兼顾了可能出现的空队列情况,交换快速而不需要数据从子空间中读出并写入的过程。以上即为对本发明实施例提供的一种存储多队列数据的共用缓存空间使用方法实施例的描述。实施例二:本发明实施例提供的一种管理多队列数据的共用缓存空间的系统,实施例如下文所述:管理多队列数据的共用缓存空间的系统,其结构如图所示,所述系统包括:数据存储单元410,用于存放需要缓存的数据,按照分块的方式分为若干子空间。数据存储指针单元420,用于存放数据存储单元410的指针信息,与数据存储单元410具有固定对应关系。逻辑队列指针单元430,用于存放数据队列和空闲队列的指针信息,可以存放时间队列的指针信息。初始化单元440,用于对数据存储单元410和数据存储指针单元420进行初始化,对逻辑队列指针单元430进行初始化。数据写入单元450,用于写入数据时,控制数据存储单元410写入数据,控制数据存储指针单元420和逻辑队列指针单元430的更新。数据读出单元460,用于读出数据时,控制数据存储单元410读出数据,控制数据存储指针单元420和逻辑队列指针单元430的更新。数据交换单元470,用于交换数据时,控制数据存储指针单元420和逻辑队列指针单元430的更新。一种管理多队列数据的共用缓存空间的系统,具体为所述数据存储单元410,划分为若干子空间,每个子空间可以存储若干字节数据,允许多个子空间联合存储一组数据。所述数据存储指针单元420,用于存放的数据存储单元410的指针信息包括:数据存储单元中有效数据的结束地址421,在数据或空闲队列中前一个数据存储单元的地址422和后一个数据存储单元的地址423,在时间队列中前一个数据存储单元的地址424和后一个数据存储单元的地址425,存入有效数据的时间426。所述逻辑队列指针单元430,用于存放各个数据队列的起始数据存储单元地址431和结束数据存储单元地址432,存放空闲队列的起始数据存储单元地址433和结束数据存储单元434地址,存放时间队列的起始数据存储单元地址435和结束数据存储单元地址436。所述初始化单元440,用于初始化数据存储单无各个子空间441;初始化数据存储指针单元442,包括初始化数据存储单元的有效数据结束地址,初始化在数据或空闲队列中前一个数据存储单元的地址和后一个数据存储单元的地址,初始化在时间队列中前一个数据存储单元的地址和后一个数据存储单元的地址,初始化存入有效数据的时间;初始化逻辑队列指针单元443,包括初始化各个数据队列的起始数据存储单元地址和结束数据存储单元地址,初始化空闲队列的起始数据存储单元地址和结束数据存储单元地址,初始化时间队列的起始数据存储单元地址和结束数据存储单元地址。所述数据写入单元450,用于写入数据时,控制数据存储单元写入数据451;控制数据存储指针单元的更新452,包括更新数据存储单元中有效数据的结束地址,更新在数据或空闲队列中前一个数据存储单元的地址和后一个数据存储单元的地址,更新在时间队列中前一个数据存储单元的地址和后一个数据存储单元的地址,更新存入有效数据的时间;控制逻辑队列指针单元的更新453,包括更新对应数据队列的起始数据存储单元地址和结束数据存储单元地址,更新空闲队列的起始数据存储单元地址和结束数据存储单元地址,更新时间队列的起始数据存储单元地址和结束数据存储单元地址。所述数据读出单元460,用于读出数据时,控制数据存储单元读出数据461;控制数据存储指针单元的更新462,包括更新数据存储单元中有效数据的结束地址,更新在数据或空闲队列中前一个数据存储单元的地址和后一个数据存储单元的地址,更新在时间队列中前一个数据存储单元的地址和后一个数据存储单元的地址,更新存入有效数据的时间;控制逻辑队列指针单元的更新463,包括更新对应数据队列的起始数据存储单元地址和结束数据存储单元地址,更新空闲队列的起始数据存储单元地址和结束数据存储单元地址,更新时间队列的起始数据存储单元地址和结束数据存储单元地址。所述数据交换单元470,用于交换数据时,控制数据存储指针单元的更新471,包括更新数据存储单元中有效数据的结束地址,更新在数据或空闲队列中前一个数据存储单元的地址和后一个数据存储单元的地址,更新在时间队列中前一个数据存储单元的地址和后一个数据存储单元的地址,更新存入有效数据的时间;控制逻辑队列指针单元的更新472,包括更新对应数据队列的起始数据存储单元地址和结束数据存储单元地址,更新空闲队列的起始数据存储单元地址和结束数据存储单元地址,更新时间队列的起始数据存储单元地址和结束数据存储单元地址。本发明实施例提供的一种管理多队列数据的共用缓存空间的系统中,数据存储单元410、数据存储单元指针420、逻辑队列指针430、初始化单元440、数据写入单元450、数据读出单元460和数据交换单元470等的工作方式,与上文描述的一种存储多队列数据的共用缓存空间使用方法相同,在此不再重复描述。以上对本发明实施例所提供的一种多队列数据共用存储空间的使用方法、多队列数据共用存储空间的系统进行了详细介绍,本文中应用了具体个例对本发明实施例的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明实施例的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1