首页> 中国专利> 证明并发处理环境内的执行跟踪的正确性的系统和方法

证明并发处理环境内的执行跟踪的正确性的系统和方法

摘要

本发明涉及一种证明并发处理环境内的执行跟踪的正确性的系统和方法。由于多核处理器已成为通用机器的标准架构,因此要求程序设计者编写针对并行性优化的软件。由于并行代码的复杂性,检验其正确性是一个重要问题。仍缺少提供复杂代码的检验的工具,例如测试代码执行所提供的那样。因此,在此描述了用于评估程序跟踪的正确性的系统和方法。此外,在此描述的系统和方法没有过多的计算要求,并且所评估的程序跟踪的大小将增加。

著录项

  • 公开/公告号CN101894065A

    专利类型发明专利

  • 公开/公告日2010-11-24

    原文格式PDF

  • 申请/专利权人 国际商业机器公司;

    申请/专利号CN201010116123.3

  • 申请日2010-02-09

  • 分类号G06F11/36(20060101);

  • 代理机构11247 北京市中咨律师事务所;

  • 代理人于静;杨晓光

  • 地址 美国纽约

  • 入库时间 2023-12-18 01:09:32

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-02-11

    未缴年费专利权终止 IPC(主分类):G06F11/36 授权公告日:20131106 终止日期:20190209 申请日:20100209

    专利权的终止

  • 2017-11-24

    专利权的转移 IPC(主分类):G06F11/36 登记生效日:20171103 变更前: 变更后: 申请日:20100209

    专利申请权、专利权的转移

  • 2013-11-06

    授权

    授权

  • 2011-01-05

    实质审查的生效 IPC(主分类):G06F11/36 申请日:20100209

    实质审查的生效

  • 2010-11-24

    公开

    公开

说明书

背景技术

由新的多核处理器架构引入的当前计算硬件中的多个处理单元的可用性提供了使用传统算法和数据结构的程序所无法发掘的计算能力。在先前的单处理器架构中,在任何给定时间,只能执行一个执行线程,因此可以相对容易地防止两个线程同时在同一数据结构上操作以避免数据结构中出现数据损坏,同时具有最小的性能影响。

但是在使用多核处理器的情况下,通过计算机可执行代码(或简称为“代码”)编程多个线程以同时在不同的处理单元(或“核心”)上运行。阻止这些线程在数据结构上并发操作并非避免数据损坏的有效方法,因为如果最多只有一个线程运行,则资源(即,多核处理器中的核心)被浪费。需要新的算法来允许多个线程能够并发访问数据结构。这意味着重新编写实现数据结构的代码。新的代码更难以检验正确性,因为考虑多个并发执行路径而不是单个执行路径本质上更复杂。

能够检验并行算法的正确性的检验器很少,并且所有这些检验器或者仅检验数据结构的简单特性,或者检验只拥有简单特性的数据结构(参见例如Vafeiadis发表在VMCIA 2009上的Shape-value Abstraction forVerifying Linearizability(用于检验线性一致性的形状值提取)以及Fraser在2004年发表的剑桥大学技术报告Practical lock-freedom(实用的无锁特性))。因此,需要诸如正确性检验器之类的自动化工具来帮助开发人员评估已编写代码的正确性并提高效能,同时提高数据结构本身的质量和可靠性。

此外,检验并行算法的正确性历来被视为是一种计算密集型的复杂操作。因此,如果对算法的执行进行任何分析,都会受到限制。例如,给定可针对数据结构执行的所有可能原子操作(即,无法再细分为其他可见的子操作的操作),软件测试程序将使用多个并发线程以某种随机顺序重复执行这些操作。测试程序的输出是所有执行的原子操作及其结果的历史。通常,较长的测试程序历史包括更丰富的操作组合(例如,更多数量的重叠操作),并相应地改进了检验器的准确性。但是,使用传统检验方法意味着较长的历史需要更多的计算要求。因此进一步需要一种高效的检验器:其计算要求不会随着历史的长度而过分增加。

发明内容

数据结构可以根据不同的准则被定义为“正确”。在本发明的非限制方面中,本发明的一个实施例使用一个被广泛接受的正确性准则;即ACMTransactions on Programming Languages and Systems(美国计算机学会编程语言和系统汇刊)12(3):463-492(1990)上由Herlihy等人所著的“Linearizability:A Correctness Condition for Concurrent Objects(线性一致性:并发对象的正确性条件)”中所提出的“线性一致性(Linearizability)”。线性一致性特性是连续算法如何必须并行执行以确保正确的理论模型。

在下面进一步详细描述的示例性实施例中,描述了一种检验使用数据结构实现连续算法的测试程序所生成的执行历史的线性一致性特性的方法和系统。此外,本发明的实施例仅遍历一次所生成的历史结果,从而避免回溯。因此,与本发明的实施例关联的计算要求不会随着输出历史长度的增长而过分增加。

因此,本发明的一个方面提供了一种由计算设备执行的检验包括针对数据结构并行执行的操作的执行历史的正确性的方法,所述方法包括:

定义规则集,所述规则集包括定义针对所述数据结构的操作行为的操作规则集、新状态规则集以及旧状态规则集;

从存储设备读取所述执行历史;

构建包括所述执行历史中包括的每个操作的开始事件和结束事件的事件集,其中每个事件都包括基于每个操作的相应开始时间和结束时间的时间戳;

根据每个相应事件的时间戳顺序地处理所述事件集中的每个事件;

响应于所述处理而构建状态集,其中当根据所述新状态规则集中包括的新状态规则处理事件创建了新状态时,将新状态添加到所述状态集,以及当根据所述旧状态规则集中包括的旧状态规则处理事件删除了旧状态时,删除所述状态集中的旧状态;以及

当所述状态集为空时,将不正确的结果输出到存储设备或显示设备中的至少一个;其中,

当已处理每一个事件并且所述状态集包括至少一个状态时,将正确的结果输出到存储设备或显示设备中的至少一个。

本发明的另一方面提供了一种检验包括在计算设备上针对数据结构并行执行的操作的执行历史的正确性的系统,所述系统包括:

在计算设备上实现的用于定义规则集的装置,所述规则集包括定义针对所述数据结构的操作行为的操作规则集、新状态规则集以及旧状态规则集;

在计算设备上实现的用于从存储设备读取所述执行历史的装置;

在计算设备上实现的用于构建包括所述执行历史中包括的每个操作的开始事件和结束事件的事件集的装置,其中每个事件都包括基于每个操作的相应开始时间和结束时间的时间戳;

在计算设备上实现的用于根据每个相应事件的时间戳顺序地处理所述事件集中的每个事件的装置;

在计算设备上实现的用于响应于所述处理而构建状态集的装置,其中当根据所述新状态规则集中包括的新状态规则处理事件创建了新状态时,将新状态添加到所述状态集,以及当根据所述旧状态规则集中包括的旧状态规则处理事件删除了旧状态时,删除所述状态集中的旧状态;以及

在计算设备上实现的用于当所述状态集为空时,将否定的结果输出到存储设备或显示设备中的至少一个的装置;

在计算设备上实现的用于当已处理每一个事件并且所述状态集包括至少一个状态时,将肯定的结果输出到存储设备或显示设备中的至少一个的装置。

本发明的再一个方面提供了一种包含计算机可执行程序代码的计算机可读介质,当所述计算机可执行程序代码由计算设备执行时,将使所述计算设备执行一种检验包括针对数据结构并行执行的操作的执行历史的正确性的方法,所述方法包括:

定义规则集,所述规则集包括定义针对所述数据结构的操作行为的操作规则集、新状态规则集以及旧状态规则集;

从存储设备读取所述执行历史;

构建包括所述执行历史中包括的每个操作的开始事件和结束事件的事件集,其中每个事件都包括基于每个操作的相应开始时间和结束时间的时间戳;

根据每个相应事件的时间戳顺序地处理所述事件集中的每个事件;

响应于所述处理而构建状态集,其中当根据所述新状态规则集中包括的新状态规则处理事件创建了新状态时,将新状态添加到所述状态集,以及当根据所述旧状态规则集中包括的旧状态规则处理事件删除了旧状态时,删除所述状态集中的旧状态;以及

当所述状态集为空时,将不正确的结果输出到存储设备或显示设备中的至少一个;其中,

当已处理每一个事件并且所述状态集包括至少一个状态时,将正确的结果输出到存储设备或显示设备中的至少一个。

附图说明

所附权利要求中列出了被认为是本发明特性的新颖特征。但是,当结合附图阅读时,可以通过参考下面对示例性实施例的详细描述,最佳地理解发明本身及其优选使用方式、进一步的目标和优点,这些附图是:

图1是示出根据本发明的一个实施例的示例性输出历史的表;

图2是示出根据本发明的一个实施例的示例性事件列表的表;

图3是示出正确的操作顺序的间隔图;

图4是示出不正确的操作顺序的间隔图;

图5是根据本发明的一个实施例的操作的流程图;

图6是根据本发明的一个实施例的状态定义表;

图7示出根据本发明的一个实施例的将插入开始事件添加到状态集;

图8示出根据本发明的另一实施例的将插入开始事件添加到状态集;

图9示出根据本发明的一个实施例的将插入结束事件添加到状态集;

图10示出根据本发明的一个实施例的将删除开始事件添加到状态集;

图11示出根据本发明的一个实施例的将删除结束事件添加到状态集;

图12示出根据本发明的一个实施例的在处理图3所示的实例时对状态集做出的更改;

图13示出根据本发明的一个实施例的在处理图4所示的实例时对状态集做出的更改;

图14是描述根据本发明的一个实施例的系统的示意图。

具体实施方式

为了进一步简化对实施例的描述,下面所述的每个实施例都假设实现检验并发优先级队列数据结构的检验工具。根据并发优先级队列数据结构的一个定义,只将优先级最高的元素从队列中删除。此类数据结构的用例包括确定接下来要处理的哪个任务的调度算法。但是,下面对并发优先级队列的说明并非旨在被解读为对本发明的限制,本领域的技术人员很容易理解如何使用其他数据结构构建其他实施例。

在本发明的一个实施例中,标识在测试运行中执行的所有原子操作的正确顺序,其中所述测试运行产生所执行的所有原子操作的执行跟踪(或“输出历史”)。由于在多核处理器上执行所述操作,并且所述输出历史是这些操作的顺序排列,因此在处理输出历史时,对数据结构的并发访问是不明确的。因此,在本发明的一个实施例中,定义了并发规则以构建在多核处理器上执行测试运行的可能效果的模型。例如,如果一个操作严格地在另一操作之前发生,则意味着该操作在另一操作开始之前结束,本发明的一个实施例不会更改此顺序。另外,如果多个操作并发地发生,则意味着一个操作在另一操作开始之后但在该另一操作结束之前开始,可以假设任何顺序,因为操作的效果何时产生并不确定。因而,本发明寻找与由数据结构操作固有的规则集定义的数据结构特性兼容的所有操作的排序。如果无法找到此类操作顺序,则表明数据结构是非线性一致的,如Herlihy等人所限定的。

为了分析输出历史中指示的操作的不同组合,本发明的一个实施例管理描述所执行操作的所有有效排序的所有可能状态的状态集合(或“状态集”)。此外,只要操作开始,本发明的一个实施例就扩展所述状态集,具体取决于是否满足预定条件。还将创建附加状态,例如,当测试历史无法指示操作是否为下一生效的操作时。因此,新状态描述操作的不同的可能执行排序。此外,如果操作生效,所产生的效果将影响其他并发操作的生效时间(如下文进一步详细介绍的),这会再次扩展有效可能性的数量。为了找到所有的可能性,本发明的一个实施例可对事件执行递归分析。

根据本发明的一个实施例,当操作结束时,从状态集中删除状态。例如,从状态集删除所有其中操作未生效的状态,因为如果找不到这些状态的有效执行时间,则这些状态不可能是正确的。相应地,如果在检验过程结束时仍存在有效状态,则测试运行所产生的历史被证实是正确的(即,线性一致的)。备选地,如果在检验过程内的某个时刻,状态集为空,则未找到测试运行的输出历史的正确排序,因此该历史不是线性一致的。

为了准确定义多核处理器所执行的操作的效果,本发明的一个实施例针对每个操作定义了事件。操作的开始为一个事件。操作的结束为另一事件。因此,如果测试运行中有5个不同的操作,则根据本发明的一个实施例,将创建10个不同的事件(即,每个操作的开始事件和结束事件)。此外,每个事件在虚拟时间内的唯一点处发生,其中虚拟时间是从零值开始严格单调递增的数值。

如上所述,下面的图形和说明描述了本发明的一个用于检验并发优先级队列数据结构的输出历史的实施例。为了简化下面的说明并且避免被视为对本发明的限制,在每个删除操作删除优先级最高的元素时,将优先级队列视为“正确”。为了进一步简化说明,下面的实施例描述了最高优先级队列。在最高优先级队列中,优先级队列中存储的最高值被从队列删除。此外,下面的说明假设所述最高优先级队列是并发最高优先级队列,即,所述队列允许多个对其数据的并行(并发)访问。

在并发最高优先级队列的测试运行中,随机地执行“插入”和“删除”操作并且将所述操作存储在输出历史中。为了模拟并发操作,本发明的一个实施例为每个操作分配指示操作的开始时间和结束时间的唯一时间戳。在此上下文中,操作的开始时间被定义为实际操作开始执行之前的时间,并且操作的结束时间被定义为操作的成功执行之后的时间。因此,通过定义具有开始和结束时间戳的操作,保证操作在此范围内生效,但未假设在此范围内操作何时生效。此外,每个时间戳必须满足两个条件:每个时间戳必须是唯一的并且时间戳必须严格地单调递增。因此,根据本发明的一个实施例,当且仅当每个事件的时间戳小于另一事件的时间戳时,该事件才被视为在另一事件之前发生。而且,每个操作可通过其开始时间或结束时间来标识。

图1示出了包含四个操作的示例性输出历史文件(或简称为“日志”文件)。如图所示,操作按其类型(例如,“删除”或“插入”)、其时间戳(例如,开始时间和结束时间)以及删除或插入的值进行描述。为了在下面的介绍中方便描述,使用“日志表项标识符”来整体描述操作。因此,在图1中,对于所列的每个操作,都有一个特定的输出历史表项,后者可通过与多核处理器所执行的操作关联的参数来唯一地标识。

如图2中所示,本发明的一个实施例通过图1中示出的日志表项构建排序的事件列表。因此,图1的日志中列出的每个原子操作都被扩展为开始事件和结束事件,其中从图1中的相应列(即,开始时间和结束时间)导出每个事件的时间戳。构建了图2中示出的事件列表之后,本发明的一个实施例实现包括图2中的事件列表的计算机代码以遍历所述事件列表并处理每个事件,如下面进一步详细所述。因此,根据一个实施例,所述事件列表被遍历一次且不需要回溯。遍历事件列表并无需回溯提高了效率并允许检验较长输出历史(例如,数千或数百万个操作)的正确性,而不大量超出检验较短输出历史的正确性的计算要求。

图3是表示图2中示出的前几个事件的可能执行顺序的间隔表示。图3示出了时间线300和一系列操作(即R0(null)310和R3(4)340),每个操作都具有时间范围。此外,由于这些操作在多核处理器上执行并且不是按顺序执行,因此,操作可能在操作时间线300上的时间间隔内的任意点生效。因而,如果在针对操作定义的间隔内,当操作可以执行并仍符合线性一致性特性时,在时间线300上存在有效的点,则执行顺序是正确的。例如,图3中示出的历史是正确的。在时间线300上的时间0处,最高优先级队列(图3中未示出)为空。结果,当R0(null)310操作在时间0处开始时,R0(null)310操作(即,ID为0的“删除”操作)将在不影响其他操作的情况下删除null值。但是要指出的是,下一操作R3(4)340(ID为3的“删除”操作)的正确性在此点是不确定的,因为R3(4)340与时间线300上的两个“插入”操作:插入操作I1(4)320和插入操作I2(5)330交织。如上所述,由于在多核处理器上并行执行数据操作时存在固有的不确定性以及图3中示出的I1(4)320操作与R3(4)340操作之间的重叠,因此可能的是,两个“插入”操作、其中的一个操作或没有一个操作在R3(4)340操作从优先级队列中删除“4”元素时生效。这样,R3(4)340的正确性在图3中是不确定的。下面针对将本发明的一个实施例应用于图3中示出的样例数据介绍了这种不确定性的解决方案。

图4是间隔表示的另一实例并示出了不正确的事件列表。也就是说,如图4所示,将不同于图2中示出的事件列表的事件列表应用于时间线400。从时间线400上的0处开始,最高优先级队列(未示出)为空。插入操作I0(9)410从时间0处开始,结果,插入的值“9”为最高优先级队列中的“峰值”或最高值。接下来,I1(10)将值“10”插入最高优先级队列并且它的值变为峰值。结果,当删除操作R2(9)430开始时,队列中的最高元素为10。此外,队列中的最高元素不会在R2(9)430的间隔内的任一点处变为9。如上所述,根据最高优先级队列(图4中未示出)的并发规则,仅当删除操作删除队列的最高值时,该删除操作才有效。因此,R2(9)430不是有效操作,因而图4中示出的顺序不正确。但是要指出的是,如果R2(9)430不在历史中,则图4中示出的历史将有效,因为删除操作R4(10)440与插入操作I1(10)420相关联。下面描述了如何根据将本发明的一个实施例应用于图4示出的样例数据而产生此结果。

因此,如图4所示,本发明的一个实施例通过定义并发规则而确定不能将删除操作分配(或配对)给相应的插入操作,但是仍然遵循最高优先级队列特性。相应地,根据本发明的一个实施例,当无法分配删除操作时,历史被视为无效,并且该历史将被拒绝。

因此,根据本发明的一个实施例,可以响应于事件而展开和折叠状态,如下所述。例如,在第一操作之前,只有一个单一状态,它指示数据结构(即,最高优先级队列,如上所述)为空并且没有任何未决操作。从此初始化的状态开始,事件将根据针对被检验的数据结构定义的相关规则来修改数据结构的状态并创建附加状态。

图5是示出根据本发明的一个实施例的用于管理状态(即,状态的展开和折叠)的方法的流程图。在步骤505,执行测试运行以建立执行跟踪(例如,如图1中所示)。例如,测试运行执行使用并发访问的数据结构(例如,在多核架构上执行的最高优先级队列)的软件。通过所述执行跟踪,在步骤510创建排序的事件列表。如上所讨论的,在本发明的一个实施例中,在执行跟踪中执行的每个原子操作都生成两个事件(开始事件和结束事件),并且每个事件都具有时间戳。因此,根据本发明的一个实施例,在步骤510创建的排序事件列表包括按时间戳排序的事件列表,从而所述排序列表严格单调递增(例如,如图2中所示)。

步骤515开始事件处理循环(如下所讨论),并处理在步骤510创建的排序列表中的第一个未处理事件。在步骤520,本发明的一个实施例判定在步骤515处理的事件是否为开始事件。当处理开始事件时,根据本发明的一个实施例,在步骤525将与开始事件同时发生的操作添加到每个未决状态。然后,对于每个当前未决的状态,步骤530添加完成所述操作的新状态(如果可能)。操作的完成依赖于一组针对数据结构定义的并发规则以及在步骤505的测试运行中执行的解决方案。例如,对于上述最高优先级队列,在步骤530可以定义完成每个插入操作的规则(因为插入操作不依赖于其他待完成的操作)。但是,在步骤530将不会完成删除操作,因为完成的删除操作需要完成匹配的插入操作(如针对最高优先级队列所定义的)。

随后,在步骤535,本发明的一个实施例判定当前状态集中是否剩余任何未决操作。如果没有,则根据本发明的一个实施例,所述过程返回步骤515以开始处理在步骤510创建的排序事件列表中的下一事件。但是,当状态集中剩余未决操作时,本发明的一个实施例在步骤540将未决操作递归地应用于每个状态以创建新状态,从而完成所述操作。

返回步骤520,如果判定遇到结束状态,则本发明的一个实施例在步骤545删除所述状态集中的操作(与在步骤520从所述排序事件列表中删除的结束事件同时发生)未决的所有状态。随后,根据本发明的一个实施例,当在步骤550判定所述状态集为空时,图5中示出的过程在步骤570结束,并将“历史不是线性一致的”例如输出到显示设备或存储设备。如果在步骤550判定所述状态集不为空,则本发明的一个实施例在步骤560判定所述排序事件列表中是否剩余任何事件。当判定已处理所有事件时,本发明的一个实施例在步骤565将“历史是线性一致的”例如输出到显示设备或存储设备。如果排序事件列表中存在尚未处理的事件,则本发明的一个实施例返回步骤515以处理下一事件。

在图6-13中,讨论了根据本发明的一个实施例的特定实例。根据图6-13的实例可以在诸如图14中示出的实例计算设备之类的通用计算设备上实现,其中所述计算设备适于通过执行计算机可读指令实现特定目的。可以由程序员使用本领域当前公知的任何手段(一个实例是JavaTM等编程语言)来准备这些计算机可读指令,如下面针对实例所讨论的。但是,要理解的是,所述实施例并不限于JavaTM编程语言。

因此,例如可以根据图6中示出的表定义状态的组成。图6中的表使用数据“集合”的概念,如JavaTM编程语言中所述(参见例如Zakhour等人所著的“The JavaTM Tutorial:A Short Course on the Basics(JavaTM教程:基础知识短期课程)”,第4版(2006年)),其中集合的内容包括要在数据结构中添加或删除的值(即,被添加到并发最高优先级队列的值将包括在“已完成插入”集合中)。但是,在JavaTM中使用集合仅是一种实施方式,本领域的技术人员将认识到可以使用其他数据结构。在其他实例中,由所有状态共享的一个数据集合在被状态集中的所有状态使用时,被定义为描述最高优先级队列中的存储内容的“确定堆”(definite heap)集合。因此,在上述实施例中,确定堆集合包含已完成的插入操作的所有日志表项,这些日志表项否则将存储在所有状态的“已完成插入”结构中,如图6中所示。因此,对于每个状态,上述最高优先级队列包括确定堆中的元素以及已完成插入结构中包含的元素。

为了进一步简化图7-13内的符号,日志表项由表示操作的字母后跟日志表项标识符以及圆括号中的值描述。例如,表项I2(15)表示“插入”操作,id为“2”,插入值为15的元素。此外,列表由方括号表示并且列表内的元素由逗号分隔,对由圆括号表示。另外,在图7-13中使用以下状态描述缩写:

●pR=“未决删除”集合

●aR=“关联删除”集合

●pI=“未决插入”集合

●fI=“已完成插入”集合

●dH=“确定堆”集合

根据本发明的一个实施例,定义一个并发规则,从而插入操作的开始事件(例如,开始I6(5)710)表示一个或多个未决插入操作。因此,通过将对应的日志表项标识符添加到所述未决插入集合来修改状态集中的每个状态,如图7中所示。在图7中示出的实例中,已经通过将I6(5)操作添加到pI 726集合而将状态720修改成为状态730(I6(5)操作包括在pI 726中)。

如图8中所示,定义另一个并发规则,从而对于其中插入操作插入高于或等于最高优先级队列峰值的值的每个状态,检查未决删除集合以判定是否存在删除此值的未决删除操作。因此,在实例状态集800中,操作I6(5)810的开始将影响状态820,因为插入的值等于最高优先级队列峰值(如dH 812集合所指示的)。因此,此并发规则规定当存在对应删除操作时,根据图5中示出的实施例,在步骤540创建新状态840,后者将关联的插入/删除对添加到aR 842集合并从pR 844集合删除所发现的已删除操作。此外,状态820被修改成为状态830,其中I6(5)操作被添加到pI 836集合。

图9示出了当插入结束(例如,I6(5)910)时的实例状态集900。当到达此事件时,本发明的一个实施例遍历状态集900以判定结束插入(例如,I6(5)910)是否仍在图6中所述的未决插入集合内。如果所述插入操作并非未决,则所述插入操作是所关联删除集合中包含的关联对的一部分。如果删除操作(其是所关联对中的第二部分)也已完成,则从列表中删除所述插入操作。如果所述未决插入集合包含插入操作,则本发明的一个实施例从所述未决插入集合删除插入操作并将所述插入操作添加到已完成插入集合。图9中示出了这两个操作。在状态920,插入I6(5)910在pI 926中,并且当处理I6(5)910的结束事件时,状态920变成状态940,其中插入I6(5)910被添加到fI 948集合。另一方面,在状态930,插入I6(5)910在aR 932集合中;因此,当插入I6(5)910和关联删除操作结束时,状态930变成950。虽然未在图9中示出,但根据本发明的另一个实施例,如果插入操作(例如,插入I6(5)910)在所有状态的已完成插入集合中,则所述插入操作被从状态集内的每个状态删除并被添加到确定堆集合。

图10示出了实例状态集1000,其中对应于删除操作的开始事件R5(3)1010被添加到状态集1000。根据本发明的一个实施例,删除操作的开始是可能事件(例如,开始插入、开始删除、结束插入以及结束删除)中的最复杂事件。如前所述,通过将此操作添加到可与插入操作的开始事件比较的未决删除集合(例如,状态1030中的pR 1034)来修改状态集中的每个状态。当所述删除操作删除高于或等于最高优先级队列值的值时,本发明的一个实施例遍历未决插入集合(例如,状态1020中的pI 1026),并针对可以通过适当插入操作建立的每个关联(如状态1040的aR 1042中所示)创建新状态(例如,状态1040)。此外,如果删除的值等于最高优先级队列峰值,则创建新状态(例如,状态1050)并将其与最高优先级队列峰值关联(如状态1050的aR 1052中所示)。如果所述峰值在确定堆集合(例如,图10中的dH 1012)中,则所述删除操作的操作数值被从确定堆集合(参见dH 1014)删除并被添加到状态集中的每个状态(例如,状态1030、1040以及1050)的已完成插入集合。接下来,虽然未在图10中示出,但将未决删除操作与其他未决插入操作递归地关联,因为已在所述确定堆中定义新峰值,并且可能是较低的值。将未决删除操作与新峰值关联也是递归的一部分,这也未在图10中示出。在本发明的一个实施例中,可以在递归步骤期间应用组合方法以有效地处理状态集。

图11中示出的是删除操作(例如,R5(3)1110)的实例结束,其是减小状态集(例如1100)的基数的事件。通过处理此事件,从状态集中删除的状态被示出为无效。例如,在状态1120,所述删除操作仍在pR 1124集合中。因此,从状态集1100删除状态1120(如标号1116所示),因为所述删除操作无法与插入操作关联。如果对应于删除操作(例如,R5(3)1110)的事件不在未决删除集合(例如,如状态集1100的pR 1134和pR1144中所示)中,则所述删除操作将在关联删除集合(例如,aR 1132和aR 1142)中。与处理插入操作的结束事件类似,本发明的一个实施例检查作为关联对的一部分的插入操作是否也已完成。当配对的插入操作未完成时,插入/删除对仍在aR集合(例如,状态1150中的aR 1152)中,并且如果所述插入和删除操作均已结束,则删除所述对(参见状态1160)。对于插入操作的结束操作,根据本发明的一个实施例,如果此事件之后没有剩余任何状态,则输出历史无效。

虽然未在图11中示出,但是空值删除(即,没有操作数的删除操作)是特殊情况。一旦出现可以删除空值的时刻,就立即删除所述操作并且不考虑可以在以后删除空值的情况。

图12示出了根据本发明的一个实施例的检验图3中示出的实例数据的一系列实例状态更改1200。状态集1201示出了初始情况,其中事件1210是第一个要处理的事件。由于事件1210对应于空值删除,因此不更改状态集1211中的任何状态。事件1220将I1(4)操作添加到状态集1221(参见pI 1228),并且事件1230结束此插入操作。事件1240开始第二个插入操作,它将I2(5)添加到现有状态(参见pI 1248),但事件1250在I2(5)结束之前开始R3(4)操作,因此,通过将R3(4)操作分别添加到pR 1257和aR 1261创建状态1255和1260。接下来,处理事件1265,这导致状态1270和1275,其中I1(4)被分别添加到fI 1274和I1(4)。在事件1280期间,由于状态1270使R3(4)在pR 1222中,因此状态1270被视为无效并从状态集1281删除,如标号1282所示。但是,状态1275从aR 1276删除插入/删除对以变成状态1285。随后,事件1290是最后一个操作,它结束操作I2(5)。由于状态集1291不为空,因此对应于状态1295的操作系列被检验为是正确的。附带地,由于状态集1291中的所有状态都包括I2(5)插入操作,因此dH 1292包括I2(5)操作。

图13示出了根据本发明的一个实施例的展示图4中示出的实例数据内的错误的一系列实例状态更改1300。对于图13,状态集1301示出了在处理事件1310之前状态(例如,状态1305)的情况。当处理事件1310时,状态集1301被修改为状态集1311(例如,状态1315在pR 1317中包括R2(9))。接下来,事件1320开始第二个删除操作。由于dH 1312的内容,处理事件1320将状态1330、1335以及1340添加到状态集1321。在处理事件1345期间,从状态集1321删除状态1330和1345,如状态集1346中所示(参见例如标号1348和1349)。处理事件1355将状态集1346中的状态1350修改为状态集1356中的状态1360。事件1365从状态集1356删除状态1360,从而导致空状态集,如标号1366中所示。

图14示出了根据本发明的一个实施例的可用于实现在此所述的检验技术的一般计算机环境1400。计算机环境1400仅是计算环境的一个实例,并非旨在暗示对计算机和网络架构的使用或功能范围的任何限制。计算机环境1400不应被认为具有与示例性计算机环境1400中示出的任何一个组件或组件组合相关的任何依赖性或要求。

计算机环境1400包括形式为计算机1402的通用计算设备。计算机1402的组件可以包括但不限于一个或多个处理器或处理单元1404、系统存储器1406,以及将包括处理器1404在内的各种系统组件连接到系统存储器1406的系统总线1408。

系统总线1408表示若干总线结构类型中的任何一种或多种,包括使用各种总线架构中的任一架构的存储器总线或存储器控制器、外围总线、加速图形端口以及处理器或本地总线。例如,此类架构可以包括工业标准架构(ISA)总线、微通道架构(MCA)总线、增强ISA(EISA)总线、视频电子标准协会(VESA)本地总线以及外围组件互连(PCI)总线(也称为夹层总线(Mezzanine bus))。

计算机1402通常包括各种计算机可读介质。此类介质可以是可由计算机1402访问的任何可用介质,包括易失性和非易失性介质、可移动和不可移动介质。

系统存储器1406包括易失性存储器(例如,随机存取存储器(RAM)1414)和/或非易失性存储器(例如,只读存储器(ROM)1412)形式的计算机可读介质。在ROM 1412中存储基本输入/输出系统(BIOS)1414,它包含有助于例如在启动期间在计算机1402内的元件之间传送信息的基本例程。RAM 1410通常包含可直接由处理单元1404访问和/或目前在处理单元1404上运行的数据和/或程序模块。

计算机1402还可以包括其他可移动/不可移动、易失性/非易失性计算机存储介质。例如,图14示出了用于从不可移动、非易失性磁介质(未示出)读取和向其中写入的硬盘驱动器1416、用于从可移动、非易失性磁盘1420(例如“软盘”)读取和向其中写入的磁盘驱动器1418,以及用于从可移动、非易失性光盘1424(例如,CD-ROM、DVD-ROM或其他光介质)读取和/或向其中写入的光盘驱动器1422。硬盘驱动器1416、磁盘驱动器1418以及光盘驱动器1422均通过一个或多个数据介质接口1426连接到系统总线1408。备选地,硬盘驱动器1416、磁盘驱动器1418以及光盘驱动器1422可以通过一个或多个接口(未示出)连接到系统总线1408。

所述盘驱动器及其关联的计算机可读介质为计算机1402的计算机可读指令、数据结构、程序模块以及其他数据提供了非易失性存储。虽然所述实例示出硬盘1416、可移动磁盘1420以及可移动光盘1424,但要理解,还可以使用其他类型的可以存储可由计算机访问的数据的计算机可读介质(例如,磁带盒或其他磁存储设备、闪存卡、CD-ROM、数字多功能盘(DVD)或其他光存储装置、随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)等)来实现示例性计算系统和环境。

可以在硬盘1416、磁盘1420、光盘1424、ROM 1412和/或RAM 1410上存储任何数量的程序模块,包括例如操作系统1426、一个或多个应用程序1428、其他程序模块1430以及程序数据1432。此类操作系统1426、一个或多个应用程序1428、其他程序模块1430以及程序数据1432中的每一个(或其某一组合)都可以实现支持分布式文件系统的全部或部分驻留组件。

用户可以通过诸如键盘1434和指点设备1436(例如“鼠标”)之类的输入设备向计算机1402输入命令和信息。其他输入设备1438(未具体示出)可包括麦克风、游戏杆、游戏板、碟形卫星天线、串行端口、扫描仪等。这些和其他输入设备通过输入/输出接口1440(连接到系统总线1408)连接到处理单元1404,但可以通过其他接口和总线结构连接,例如并行端口、游戏端口或通用串行总线(USB)。

监视器1442或其他类型的显示设备也可以通过诸如视频适配器1444之类的接口连接到系统总线1408。除了监视器1442之外,其他输出外围设备可以包括诸如可以通过输入/输出接口1440连接到计算机1402的扬声器(未示出)和打印机1446之类的组件。

计算机1402可以使用到一个或多个远程计算机(例如,远程计算设备1448)的逻辑连接在联网环境中运行。例如,远程计算设备1448可以是个人计算机、便携式计算机、服务器、路由器、网络计算机、对等设备或其他公共网络节点等。远程计算设备1448被示为可以包括在此所述的与计算机1402相关的许多或全部元件和特性的便携式计算机。

计算机1402和远程计算机1448之间的逻辑连接被示为局域网(LAN)1450和常用广域网(WAN)1452。所述LAN和WAN通过有线通信介质和相应的通信协议(如以太网,参见例如IEEE 802.3-1998标准)或无线通信介质和相应的通信协议(如Wi-Fi,参见例如IEEE 802.11-2007标准)形成逻辑连接。此类联网环境常见于家庭、办公室、企业范围的计算机网络、内联网以及互联网。

当在LAN联网环境中实施时,计算机1402通过网络接口或适配器1454连接到本地网络1450。当在WAN联网环境中实施时,计算机1402通常包括调制解调器1456或其他用于通过广域网1452建立通信的装置。调制解调器1456(可以在计算机1402的内部或外部)可以通过输入/输出接口1440或其他相应的机制连接到系统总线1408。要理解的是,示出的网络连接是示例性的,可以使用其他在计算机1402和1448之间建立通信链路的装置。

在例如使用计算环境1400示出的联网环境中,示出的与计算机1402或其中的部分相关的程序模块可以存储在远程存储器存储设备中。例如,远程应用程序1458驻留在远程计算机1448的存储设备中。出于说明的目的,诸如操作系统之类的应用程序和其他可执行程序组件在此被示为分离块(虽然认识到此类程序和组件在不同的时间驻留在计算设备1402的不同存储组件中),并且由计算机的一个或多个数据处理器执行。

在此可以在常规计算机可执行指令的上下文中描述各种模块和技术,例如由一个或多个计算机或其他设备执行的程序模块。通常,程序模块包括执行特定任务或实施特定抽象数据类型的例程、程序、对象、组件、数据结构等。通常,在各实施例中可以根据需要组合或分布程序模块的功能。

这些模块和技术的实施方式可以存储在某种形式的计算机可读介质中或通过某种形式的计算机可读介质传输。计算机可读介质可以是可由计算机访问的任何可用介质。例如但不限于,计算机可读介质可以包括“计算机存储介质”和“通信介质”。

“计算机存储介质”包括以任何方法或技术实现以存储信息(例如,计算机可读指令、数据结构、程序模块或其他数据)的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、DVD或其他光存储装置、磁带盒、磁带、磁盘存储装置或其他磁存储设备,或可用于存储所需信息并可由计算机访问的任何其他介质。

“通信介质”通常包括计算机可读指令、数据结构、程序模块或调制数据信号(例如,载波或其他传输机制)中的其他数据。通信介质还包括任何信息传送介质。术语“调制数据信号”指这样一种信号:它的一个或多个特性以某种方式设置或更改以便对信号中信息进行编码。例如但不限于,通信介质包括有线介质(例如,有线网络或直接有线连接)和无线介质(例如,声波、射频(RF)、红外线或其他无线介质)。上述任何介质的组合也包括在计算机可读介质的范围内。

如对于本领域技术人员显而易见的,本发明可以以硬件、软件或硬件和软件的组合实现。任何类型的计算机/服务器系统(多个)或其他适于执行在此所述方法的装置都是适合的。典型的硬件和软件的组合可以是具有计算机程序的通用计算机系统,所述计算机程序在加载并执行时,将执行在此所述的相应方法。备选地,可以使用包含专用硬件以执行本发明的一个或多个功能任务的专用计算机。

本发明或本发明的各方面还可以包含在计算机程序产品中,所述计算机程序产品包括使能实现在此所述方法的所有相应特性,并且所述计算机程序产品在计算机系统中加载时能够执行这些方法。计算机程序、软件程序、程序或软件在本上下文中是指一组指令的以任何语言、代码或符号表示的任何表达,旨在使具有信息处理能力的系统直接执行特定的功能,或者执行以下两者之一或全部后执行特定的功能:a)转换为另一种语言、代码或符号;和/或b)以不同的材料形式再现。

虽然显而易见的是,在此所披露的发明经过充分考虑以实现上述目标,但是将理解的是,本领域的技术人员可以设计出许多修改和实施例,并且所附权利要求旨在覆盖所有此类落入本发明的真正精神和范围内的修改和实施例。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号