一种数据保护方法及装置与流程

文档序号:12733335阅读:198来源:国知局
一种数据保护方法及装置与流程

本发明涉及互联网协议存储局域网络(Internet Protocol Storage Area Network,IPSAN)技术领域,尤其涉及一种数据保护方法及装置。



背景技术:

随着社会的发展和计算机的普及,网络中的信息量呈爆炸性增长,存储的网络化成为IT技术的新亮点。存储网络的搭建,使得人们可以将海量的信息存储到网络端,便于共享。在用户端,操作系统为用户提供访问协议栈的接口,保证用户可以通过协议栈访问工作队列,进行数据存储与读取。

在多核CPU硬件结构中,如果要充分发挥处理器的计算能力,必须采用多线程执行。在多线程编程中,当用户对工作队列中的共享数据资源进行操作时,需要使用互斥锁来对共享数据进行保护。具体的,当用户对工作队列的共享数据进行访问,例如执行入队或出队操作时,需要在操作的队首和队尾加互斥锁从而对共享数据加以保护。需要说明的是,互斥操作的开销是非常大的,而在现有技术中,对于临界区(共享数据资源区域)的所有入队操作,均添加互斥锁,系统开销非常大。



技术实现要素:

基于上述现有技术的缺陷和不足,本发明提出一种数据保护方法及装置,采用该方法,仅在工作队列不满时对数据添加互斥锁进行保护,省去了在队列已满时的互斥开销。

一种数据保护方法,应用于工作队列,该方法包括:

接收并存储入队数据;

判断所述工作队列是否已满;

如果所述工作队列未满,则在所述工作队列的队尾添加互斥锁。

优选地,在所述接收并存储入队数据之后,在所述判断所述工作队列是否已满之前,该方法还包括:

生成表征所述工作队列状态的变量;

其中,当所述工作队列已满时,所述变量的取值为设定的第一取值;当所述工作队列未满时,所述变量的取值为设定的第二取值。

优选地,所述生成表征所述工作队列状态的变量,包括:

生成表征所述工作队列状态的原子整形变量。

优选地,所述判断所述工作队列是否已满,包括:

根据所述变量,判断所述工作队列是否已满。

优选地,所述根据所述变量,判断所述工作队列是否已满,包括:

读取所述变量的值;

如果所述变量的值为所述设定的第一取值,则判断所述工作队列已满;

如果所述变量的值为所述设定的第二取值,则判断所述工作队列未满。

一种数据保护装置,应用于工作队列,该装置包括:

数据接收单元,用于接收并存储入队数据;

判断单元,用于判断所述工作队列是否已满;

处理单元,用于在所述判断单元判断所述工作队列未满时,在所述工作队列的队尾添加互斥锁。

优选地,所述装置还包括:

变量生成单元,用于生成表征所述工作队列状态的变量;

其中,当所述工作队列已满时,所述变量的取值为设定的第一取值;当所述工作队列未满时,所述变量的取值为设定的第二取值;

优选地,所述变量生成单元生成表征所述工作队列状态的变量时,具体用于:

生成表征所述工作队列状态的原子整形变量。

优选地,所述判断单元判断所述工作队列是否已满时,具体用于:

根据所述变量,判断所述工作队列是否已满。

优选地,所述判断单元根据所述变量,判断所述工作队列是否已满时,具体用于:

读取所述变量的值;

如果所述变量的值为所述设定的第一取值,则判断所述工作队列已满;

如果所述变量的值为所述设定的第二取值,则判断所述工作队列未满。

本发明提出的数据保护方法,应用于工作队列,该方法包括:接收并存储入队数据;判断所述工作队列是否已满;如果所述工作队列未满,则在所述工作队列的队尾添加互斥锁。采用上述技术方案,仅在队列不满时在队尾添加互斥锁,免除了队列已满时添加互斥锁带来的互斥开销,整体上节省了系统开销。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1是本发明实施例提供的一种数据保护方法的流程示意图;

图2是本发明实施例提供的协议栈结构示意图;

图3是本发明实施例提供的另一种数据保护方法的流程示意图;

图4是本发明实施例提供的一种数据保护装置的结构示意图;

图5是本发明实施例提供的另一种数据保护装置的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例公开了一种数据保护方法,应用于工作队列,参见图1所示,该方法包括:

S101、接收并存储入队数据;

具体的,本发明实施例技术方案可应用于互联网协议存储局域网络(Internet Protocol Storage Area Network,IPSAN)。在IPSAN中,用户PC终端访问协议栈,对内核协议栈工作队列进行操作。鉴于传统的内核协议栈的功能冗余、定制性差、操作系统开销大、内存拷贝开销大等缺陷,采用把协议栈构建在用户空间的方式可以很好地避免这些问题。

例如,在Linux操作系统中,参见图2所示,系统调用接口提供了用户空间访问协议栈的入口:socket层提供了一组公用接口来支持TCP和UDP协议;网络协议层负责实现TCP/IP协议族中的各种网络协议的处理流程;设备无关层提供了一组公用接口供设备驱动程序使用,其中设备驱动程序针对特定的物理设备来设计实现,提供了操作网络设备的入口。底层数据包从用户终端的网卡缓冲区进入内核时,会触发硬件中断,对应的中断处理例程会以直接内存存取(Direct Memory Access,DMA)等方式把数据包从网卡缓冲区拷贝到内核开辟的缓冲区中。

基于上述配置,用户终端能够对工作队列进行入队或出队操作。当用户端对工作队列进行入队操作时,即是将需要存储的数据,发送给工作队列,使工作队列进行存储;当用户端对工作队列进行出队操作时,即是从工作队列中读取出需要的数据。

在工作队列中,有一些数据是共享数据资源,这些数据资源可以被多个用户线程进行访问操作。为了保证当一个线程对这些数据进行访问操作时不被其它需要访问操作这些数据的线程打扰,工作队列需要对这些数据设置保护锁,以便这些数据只能在同一时间被一个线程访问操作。也就是说,本发明实施例技术方案是为了对工作队列中的共享数据进行保护,实际应用于工作队列的临界区,也就是需要进行锁保护的数据资源所在的队列区域。因此,本发明实施例所涉及的工作队列,可以看做是需要对数据加互斥锁保护的工作队列。

S102、判断所述工作队列是否已满;

具体的,工作队列在每接受一次入队操作后,都检验一次工作队列是否已满。

S103、如果所述工作队列未满,则在所述工作队列的队尾添加互斥锁。

具体的,如果在接受一次入队操作后,工作队列检测判断工作队列尚未满,则后续还可以有用户端执行入队操作,同样的,可能会发生多个用户端开启线程执行入队操作的情况,因此需要对工作队列中已有的数据加入队互斥锁,以保护在同一时刻只能有一个线程执行入队操作。又由于入队操作都是在队列尾部进行的,因此在工作队列的队尾加互斥锁,对入队操作进行保护。

相反的,如果在接受一次入队操作后,工作队列检测判断工作队列已满,则后续不会再有用户端执行入队操作,因为此时工作队列已经没有空间再接受入队操作,此时,也就不会发生入队冲突的情况,因此,当判断工作队列已满时,工作队列就不需要再为队列中的数据添加互斥锁,以节省系统互斥开销。

本发明提出的数据保护方法,应用于工作队列,该方法包括:接收并存储入队数据;判断所述工作队列是否已满;如果所述工作队列未满,则在所述工作队列的队尾添加互斥锁。采用上述技术方案,仅在队列不满时在队尾添加互斥锁,免除了队列已满时添加互斥锁带来的互斥开销,整体上节省了系统开销。

可选的,在本发明的另一个实施例中,参见图3所示,在执行步骤S301、接收并存储入队数据之后,在执行步骤S303、判断所述工作队列是否已满之前,该方法还包括:

S302、生成表征所述工作队列状态的变量;

其中,当所述工作队列已满时,所述变量的取值为设定的第一取值;当所述工作队列未满时,所述变量的取值为设定的第二取值。

具体的,本发明实施例技术方案根据工作队列是否已满的状态,决定是否对队列添加入队操作互斥锁保护。因此,明确工作队列的状态,是决定是否为工作队列添加互斥锁的关键信息。基于上述原理,在每次接受入队数据后,生成一个表征工作队列状态的变量,该变量用于标识工作队列是否已满:当工作队列已满时,生成的变量的值为第一取值;当工作队列尚未满时,生成的变量的值为第二取值。通过生成的变量的取值不同,可以直观明确地确定当前工作队列的状态。

例如,在每次接受入队操作,存储入队数据后,生成变量FullFlag:当工作队列已满时,FullFlag=1;当工作队列尚未满时,FullFlag=0。通过读取变量FullFlag的值,即可快速的确定工作队列状态。

需要说明的是,在具体实现本发明实施例技术方案时,根据程序形式限制,还可以生成两个互斥的变量,用于标识工作队列状态。例如,生成变量FullFlag和EmptyFlag:当工作队列已满时,FullFlag=1,EmptyFlag=0;当工作队列尚未满时,FullFlag=0,EmptyFlag=1。通过读取FullFlag或EmptyFlag两者其一的值,就可以确定工作队列状态。

本实施例中的步骤S301、S303、S304分别对应图1所示的方法的实施例中的步骤S101、S102、S103,其具体内容请参见对应的方法实施例的内容,此处不再赘述。

可选的,在本发明的另一个实施例中,所述生成表征所述工作队列状态的变量,包括:

生成表征所述工作队列状态的原子整形变量。

具体的,在本发明实施例中,生成的变量为原子整形变量。相应的,读取该变量的值需要通过整数原子操作来实现。原子操作使得读取该变量值的操作不会被打断,在同一时间只能由一个线程读取,免去了为读取该变量的值设置互斥锁的开销。

例如,生成原子整形变量FullFlag:当工作队列已满时,FullFlag=1;当工作队列尚未满时,FullFlag=0。通过读取变量FullFlag的值,即可快速的确定工作队列状态。

可选的,在本发明的另一个实施例中,所述判断所述工作队列是否已满,包括:

根据所述变量,判断所述工作队列是否已满。

具体的,由于工作队列在每次接受入队操作后,都会生成一个表征工作队列状态的变量,因此,通过该变量,即可直观地判断该队列是否已满。具体的,根据约定的该变量取值与工作队列状态的对应关系,读取该变量的取值,即可确定该工作队列的状态。

可选的,在本发明的另一个实施例中,所述根据所述变量,判断所述工作队列是否已满,包括:

读取所述变量的值;

如果所述变量的值为所述设定的第一取值,则判断所述工作队列已满;

如果所述变量的值为所述设定的第二取值,则判断所述工作队列未满。

具体的,按照生成变量的规则,变量的不同取值对应着工作队列的不同状态,当变量取值为第一取值时,对应着工作队列已满的状态,当变量取值为第二取值时,对应着工作队列未满的状态。因此,通过读取所生成的变量的值,可以明确工作队列的状态:如果变量的值为第一取值,则说明工作队列已满;如果变量的值为第二取值,则说明工作队列未满。

例如,假设生成的变量为FullFlag,并且,按照约定,工作队列已满时,生成FullFlag=1;当工作队列尚未满时,生成FullFlag=0。那么在判断工作队列状态时,读取变量FullFlag的值,如果FullFlag=1,则说明工作队列已满,如果FullFlag=0,则说明工作队列未满。

本发明实施例还公开了一种数据保护装置,应用于工作队列,参见图4所示,该装置包括:

数据接收单元401,用于接收并存储入队数据;

判断单元402,用于判断所述工作队列是否已满;

处理单元403,用于在判断单元402判断所述工作队列未满时,在所述工作队列的队尾添加互斥锁。

具体的,本实施例中各个单元的具体工作内容,请参见对应的方法实施例的内容,此处不再赘述。

本发明提出的数据保护装置,应用于工作队列,该装置在保护工作队列数据时,在数据接收单元401接收并存储入队数据后;判断单元402判断所述工作队列是否已满;如果所述工作队列未满,则处理单元403在所述工作队列的队尾添加互斥锁。采用上述技术方案,仅在队列不满时在队尾添加互斥锁,免除了队列已满时添加互斥锁带来的互斥开销,整体上节省了系统开销。

可选的,在本发明的另一个实施例中,参见图5所示,所述装置还包括:

变量生成单元404,用于生成表征所述工作队列状态的变量;

其中,当所述工作队列已满时,所述变量的取值为设定的第一取值;当所述工作队列未满时,所述变量的取值为设定的第二取值;

具体的,本实施例中变量生成单元404的具体工作内容,请参见对应的方法实施例的内容,此处不再赘述。

可选的,在本发明的另一个实施例中,变量生成单元404生成表征所述工作队列状态的变量时,具体用于:

生成表征所述工作队列状态的原子整形变量。

具体的,本实施例中变量生成单元404的具体工作内容,请参见对应的方法实施例的内容,此处不再赘述。

可选的,在本发明的另一个实施例中,判断单元402判断所述工作队列是否已满时,具体用于:

根据所述变量,判断所述工作队列是否已满。

具体的,本实施例中判断单元402的具体工作内容,请参见对应的方法实施例的内容,此处不再赘述。

可选的,在本发明的另一个实施例中,判断单元402根据所述变量,判断所述工作队列是否已满时,具体用于:

读取所述变量的值;

如果所述变量的值为所述设定的第一取值,则判断所述工作队列已满;

如果所述变量的值为所述设定的第二取值,则判断所述工作队列未满。

具体的,本实施例中判断单元402的具体工作内容,请参见对应的方法实施例的内容,此处不再赘述。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1