对块数据进行输入输出操作的方法和装置制造方法

文档序号:6635421阅读:176来源:国知局
对块数据进行输入输出操作的方法和装置制造方法
【专利摘要】本发明提供了一种处理输入输出冲突的方法和装置,包括接收IO请求,IO请求中包括数据块的块号,将所述数据块的块号作为IO请求的标记;如果存在和IO请求的标记对应的等待队列,根据预先设置的排列策略将IO请求添加到对应的等待队列中;按照排列顺序释放等待队列中的IO请求,并对释放的IO请求的数据块进行IO请求操作。本发明通过对IO请求进行标记,并将该IO请求添加到和该IO请求的标记对应的等待队列中,从等待队列中按照排列顺序获取IO请求进行IO请求操作,解决了对同一块数据进行IO请求操作产生冲突的问题,从而保证了块数据的完整性。
【专利说明】对块数据进行输入输出操作的方法和装置

【技术领域】
[0001]本发明涉及数据处理【技术领域】,尤其涉及一种对数据块进行输入输出(10,InputOutput)操作的方法和装置。

【背景技术】
[0002]对于块数据的1操作分为读和写两类,但由于磁盘1处理能力远低于CPU处理能力,所以在多个功能模块同时对某块数据进行读/写操作时就会产生冲突,例如在克隆、快照等不同功能模块同时进行工作时,有可能在同一时间对同一块数据进行读写操作,t匕如,在克隆功能进行读取操作时,可能镜像功能正在进行写操作,这种情况下,会导致克隆功能读取的数据可能是不完整甚至是错误的。


【发明内容】

[0003]为了解决上述技术问题,本发明提供了一种对数据块进行输入输出操作的方法和装置,能够避免同时对同一块数据进行1请求操作产生的冲突,从而保证块数据的完整性。
[0004]为了达到本发明目的,本发明提供了一种对数据块进行输入输出操作的方法,包括:接收1请求,所述1请求中包括数据块的块号;将所述数据块的块号作为1请求的标记;如果存在和所述1请求的标记对应的等待队列,根据预先设置的排列策略将所述1请求添加到对应的等待队列中;按照排列顺序释放所述等待队列中的1请求,并对释放的1请求的数据块进行1请求操作。
[0005]进一步地,所述将所述数据块的块号作为1请求的标记之后还包括:判断是否存在和所述1请求的标记对应的等待队列;如果不存在和所述1请求的标记对应的等待队列,建立和所述1请求的标记对应的等待队列,并根据预先设置的排列策略将所述1请求添加到对应的等待队列中。
[0006]进一步地,所述排列策略包括:按照进入等待队列的时间顺序排列,或者,按照1请求的数据块的优先等级排列。
[0007]进一步地,所述对释放的1请求的数据块进行1请求操作之后还包括:判断所述1请求操作发生错误是否发生错误;如果所述1请求操作发生错误,将所述等待队列中的所有1请求置成错误并结束本流程。
[0008]进一步地,所述对释放的1请求的数据块进行1请求操作之后还包括:在所述1请求操作完成后,如果所述等待队列不为空,触发所述等待队列按照排列顺序释放1请求,如果所述等待队列为空,结束本流程。
[0009]一种对数据块进行输入输出操作的装置,包括:接收模块,用于接收1请求,所述1请求中包括数据块的块号;标记模块,用于将所述数据块的块号作为1请求的标记;第一处理模块,用于如果存在和所述1请求的标记对应的等待队列,根据预先设置的排列策略将所述1请求添加到对应的等待队列中;第二处理模块,用于按照排列顺序释放所述等待队列中的1请求;第三处理模块,用于对释放的1请求的数据块进行1请求操作。
[0010]进一步地,所述装置还包括:第一判断模块,用于判断是否存在和所述1请求的标记对应的等待队列;所述第一处理模块,还用于在所述第一判断模块判断出不存在时,建立和所述1请求的标记对应的等待队列,并根据预先设置的排列策略将所述1请求添加到对应的等待队列中。
[0011]进一步地,所述装置还包括:第二判断模块,用于判断所述等待队列中是否存在其它1请求;所述第二处理模块,还用于在所述第二判断模块判断出不存在时,释放所述1请求。
[0012]进一步地,所述装置还包括:第三判断模块,用于判断对释放的1请求的数据块进行的1请求操作是否发生错误;所述第三处理模块,还用于在所述第三判断模块判断出发生错误时,将所述等待队列中的所有1请求置成错误并结束处理。
[0013]进一步地,所述装置还包括:第四判断模块,用于在所述第三处理模块对释放的1请求操作完成后,判断所述等待队列是否为空;第四处理模块,用于在所述第四判断模块判断出不为空时,触发所述第二处理模块按照排列顺序释放等待队列中的1请求;在所述第四判断模块判断出为空时,结束处理。
[0014]与现有技术相比,本发明包括:接收1请求,所述1请求中包括数据块的块号;将所述数据块的块号作为1请求的标记;如果存在和所述1请求的标记对应的等待队列,根据预先设置的排列策略将所述1请求添加到对应的等待队列中;按照排列顺序释放所述等待队列中的1请求,并对释放的1请求的数据块进行1请求操作。本发明通过将对同一数据块的1请求添加到和该1请求的标记对应的等待队列中,从等待队列中顺序获取1请求进行1请求操作,解决了对同一块数据进行1请求操作产生冲突的问题,从而保证了块数据的完整性。

【专利附图】

【附图说明】
[0015]图1是本发明对数据块进行输入输出操作的方法的流程示意图。
[0016]图2是本发明对数据块进行输入输出操作的装置的结构示意图。

【具体实施方式】
[0017]下面结合附图对本发明进行进一步的详细说明。通过足够详细的描述这些实施示例,使得本领域技术人员能够实践本发明。在不脱离本发明的主旨和范围的情况下,可以对实施做出逻辑的、实现的和其他的改变。
[0018]图1是本发明对数据块进行输入输出操作的方法的流程示意图,如图1所示,包括:
[0019]步骤11,接收1请求,该1请求中包括数据块的块号。
[0020]在本步骤中,接收来自功能模块的1请求,因为每个数据块都具有块号,该块号以逻辑单元号(LUN, Logical Unit Number)为单位,所以1请求中包括所请求进行1操作的数据块的块号。
[0021]步骤12,将该1请求中数据块的块号作为该1请求的标记。
[0022]步骤13,判断是否存在和该1请求的标记对应的等待队列,如果不存在,进入步骤14 ;如果存在,进入步骤15。
[0023]步骤14,建立和该1请求的数据块的标记对应的等待队列。
[0024]步骤15,根据预先设置的排列策略将该1请求添加到对应的等待队列中。
[0025]在本步骤中,等待队列中的1请求可以根据进入时间顺序排列,当然也可以有其它的排列方式,例如1请求的数据块的优先等级等,在此不限制。
[0026]步骤16,判断等待队列中是否存在其它1请求,如果是,进入步骤17 ;如果否,进入步骤18。
[0027]步骤17,按照排列顺序释放等待队列中的1请求,进入步骤19。
[0028]步骤18,释放该1请求;
[0029]步骤19,对释放的1请求的数据块进行1请求操作。
[0030]步骤20,判断该1请求操作是否发生错误,如果是,进入步骤21 ;如果否,进入步骤22。
[0031]步骤21,将该等待队列中的所有1请求置成错误,并结束本流程。
[0032]在本步骤中,如果在进行1请求操作时发生错误,例如无法进行读操作或者写操作,需要释放等待队列中的1请求,但因为已经发生错误,则将等待队列中的所有1请求都置成错误,以防止发生数据不一致的问题。
[0033]步骤22,该1请求操作完成后,判断等待队列是否为空,如果是,结束本流程;如果否,返回步骤17。
[0034]本发明通过对1请求进行块号标记,并将该1请求添加到和该1请求的块号标记对应的等待队列中,从等待队列中顺序获取1请求进行1请求操作,解决了对同一块数据进行1请求操作产生冲突的问题,保证了块数据的完整性。
[0035]图2是本发明对数据块进行输入输出操作的装置的结构示意图,如图2所示,包括:
[0036]接收模块,用于接收1请求,该1请求中包括数据块的块号。
[0037]标记模块,用于根据该数据块的块号,对该1请求进行标记,具体地,将该1请求中数据块的块号作为该1请求的标记。
[0038]第一判断模块,用于判断是否存在和该1请求的标记对应的等待队列。
[0039]第一处理模块,用于在第一判断模块判断出存在时,根据预先设置的排列策略将该1请求添加到对应的等待队列中;在第一判断模块判断出不存在时,建立和该1请求的数据块的标记对应的等待队列,并根据预先设置的排列策略将该1请求添加到对应的等待队列中。
[0040]第二判断模块,用于判断等待队列中是否存在其它1请求。
[0041]第二处理模块,用于在第二判断模块判断出不存在时,释放该1请求;在第二判断模块判断出存在时,按照排列顺序释放所述等待队列中的1请求。
[0042]第三判断模块,用于判断对释放的1请求的数据块进行的1请求操作是否发生错误。
[0043]第三处理模块,用于对释放的1请求的数据块进行1请求操作,如果第三判断模块判断出发生错误,将该等待队列中的所有1请求置成错误,并结束处理。
[0044]第四判断模块,用于在对释放的1请求操作完成后,判断等待队列是否为空。
[0045]第四处理模块,用于在第四判断模块判断出不为空时,触发第二处理模块按照排列顺序释放等待队列中的1请求;在第四判断模块判断出为空时,结束处理。
[0046]本发明的对数据块进行输入输出操作的装置是和对数据块进行输入输出操作的方法对应的,因此,对数据块进行输入输出操作的装置具体的实现细节可参看对数据块进行输入输出操作的方法,在此不赘述。
[0047]本发明通过对1请求进行块号标记,并将该1请求添加到和该1请求的块号标记对应的等待队列中,从等待队列中顺序获取1请求进行1请求操作,解决了对同一块数据进行1请求操作产生冲突的问题,保证了块数据的完整性。
[0048]应当理解,虽然本说明书根据实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施方式中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。上文所列出的一系列的详细说明仅仅是针对本发明的可行性实施方式的具体说明,它们并非用于限制本发明的保护范围,凡未脱离本发明技艺精神所作的等效实施方式或变更均应包含在本发明的保护范围之内。
【权利要求】
1.一种对数据块进行输入输出操作的方法,其特征在于,包括: 接收1请求,所述1请求中包括数据块的块号; 将所述数据块的块号作为1请求的标记; 如果存在和所述1请求的标记对应的等待队列,根据预先设置的排列策略将所述1请求添加到对应的等待队列中; 按照排列顺序释放所述等待队列中的1请求,并对释放的1请求的数据块进行1请求操作。
2.根据权利要求1所述的方法,其特征在于,所述将所述数据块的块号作为1请求的标记之后还包括:判断是否存在和所述1请求的标记对应的等待队列; 如果不存在和所述1请求的标记对应的等待队列,建立和所述1请求的标记对应的等待队列,并根据预先设置的排列策略将所述1请求添加到对应的等待队列中。
3.根据权利要求1所述的方法,其特征在于,所述排列策略包括:按照进入等待队列的时间顺序排列,或者,按照1请求的数据块的优先等级排列。
4.根据权利要求1?3中任一项所述的方法,其特征在于,所述对释放的1请求的数据块进行1请求操作之后还包括:判断所述1请求操作发生错误是否发生错误; 如果所述1请求操作发生错误,将所述等待队列中的所有1请求置成错误并结束本流程。
5.根据权利要求4所述的方法,其特征在于,所述对释放的1请求的数据块进行1请求操作之后还包括: 在所述1请求操作完成后,如果所述等待队列不为空,触发所述等待队列按照排列顺序释放1请求,如果所述等待队列为空,结束本流程。
6.一种对数据块进行输入输出操作的装置,其特征在于,包括: 接收模块,用于接收1请求,所述1请求中包括数据块的块号; 标记模块,用于将所述数据块的块号作为1请求的标记; 第一处理模块,用于如果存在和所述1请求的标记对应的等待队列,根据预先设置的排列策略将所述1请求添加到对应的等待队列中; 第二处理模块,用于按照排列顺序释放所述等待队列中的1请求; 第三处理模块,用于对释放的1请求的数据块进行1请求操作。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:第一判断模块,用于判断是否存在和所述1请求的标记对应的等待队列; 所述第一处理模块,还用于在所述第一判断模块判断出不存在时,建立和所述1请求的标记对应的等待队列,并根据预先设置的排列策略将所述1请求添加到对应的等待队列中。
8.根据权利要求6所述的装置,其特征在于,所述装置还包括:第二判断模块,用于判断所述等待队列中是否存在其它1请求; 所述第二处理模块,还用于在所述第二判断模块判断出不存在时,释放所述1请求。
9.根据权利要求6?8中任一项所述的装置,其特征在于,所述装置还包括:第三判断模块,用于判断对释放的1请求的数据块进行的1请求操作是否发生错误; 所述第三处理模块,还用于在所述第三判断模块判断出发生错误时,将所述等待队列中的所有1请求置成错误并结束处理。
10.根据权利要求9中所述的装置,其特征在于,所述装置还包括:第四判断模块,用于在所述第三处理模块对释放的1请求操作完成后,判断所述等待队列是否为空; 第四处理模块,用于在所述第四判断模块判断出不为空时,触发所述第二处理模块按照排列顺序释放等待队列中的1请求;在所述第四判断模块判断出为空时,结束处理。
【文档编号】G06F13/26GK104360966SQ201410677526
【公开日】2015年2月18日 申请日期:2014年11月21日 优先权日:2014年11月21日
【发明者】穆裕, 张道伟 申请人:浪潮(北京)电子信息产业有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1