独占指令的模拟的制作方法

文档序号:18266323发布日期:2019-07-27 09:11阅读:170来源:国知局
独占指令的模拟的制作方法

本技术涉及模拟领域,尤其涉及独占指令的模拟。



背景技术:

一些数据处理装置使用独占指令来实现存储器中的值的原子更新(atomicupdate)。对存储器位置的原子更新是针对系统其余部分而言即时发生并且没有中断的更新,确保没有其他进程可以干扰该存储器位置的更新。独占指令(通常是加载独占指令与存储独占指令进行配对)是实现原子更新的一种方法。



技术实现要素:

在至少一些示例中,本技术提供了一种用于控制目标程序代码在主机数据处理装置上的执行以模拟目标程序代码在目标处理装置上的执行的方法,该方法包括:响应于目标程序代码的加载独占指令,将加载独占指令映射到要由主机数据处理装置执行的加载指令以从存储器位置加载值,并且存储与加载独占指令有关的元数据,其中,元数据至少包括从存储位置加载的值;以及响应于目标程序代码的存储独占指令,使用要由主机数据处理装置执行的原子比较和交换指令来仿真存储独占指令;原子比较和交换指令将由元数据指定的从存储器位置加载的值指定为在原子比较和交换指令被执行时要与存储在存储器位置的值进行比较的比较值。

在另一示例中,本技术提供了一种用于控制主机数据处理装置以执行上述方法的计算机程序。

在另一示例中,本技术提供了一种存储上述计算机程序的存储介质。

在另一示例中,本技术提供了一种装置,包括:主机处理电路;和控制电路,被配置为控制主机处理电路以执行上述方法。

在另一示例中,本技术提供了一种用于控制目标程序代码在主机数据处理装置上的执行以模拟目标程序代码在目标处理装置上的执行的计算机程序,其中,该计算机程序包括:

加载独占程序逻辑,响应于目标程序代码的加载独占指令,将加载独占指令映射到要由主机数据处理装置执行的加载指令以从存储器位置加载值,并且存储与加载独占指令有关的元数据,其中,元数据至少包括从存储位置加载的值;以及存储独占程序逻辑,响应于目标程序代码的存储独占指令,使用要由主数据处理装置执行的原子比较和交换指令来仿真存储独占指令;原子比较和交换指令将由元数据指定的从存储器位置加载的值指定为在原子比较和交换指令被执行时要与存储在存储器位置的值进行比较的比较值。

附图说明

通过结合附图来阅读以下示例的描述,本技术的其他特征和优点将变得显而易见,其中:

图1a是示出数据处理装置对加载独占指令的响应的示例的流程图。

图1b是示出数据处理装置对存储独占指令的响应的示例的流程图。

图2示意性地示出了用于使用独占指令来执行存储器位置的原子更新的装置的示例。

图3是示出如图2中的装置对存储器访问请求的响应的示例的流程图。

图4是示出原子比较和交换指令(atomiccompare-and-swapinstruction)的示例的流程图。

图5示意性地示出了在主机数据处理装置上模拟目标程序代码的示例。

图6a是示出模拟对加载独占指令的响应的流程图。

图6b是示出模拟代码对存储独占指令的响应的流程图。

图7示出了目标程序代码的指令、模拟代码的指令和由主机数据处理装置执行的动作之间的比较。

图8示意性地示出了用于执行模拟的主机装置的示例布置。

图9a和9b示出了由访问共享资源的两个处理代理执行的指令的可能序列。

具体实施方式

一些数据处理装置使用独占指令(通常是加载独占指令和存储独占指令的组合)来提供对存储器位置的原子更新。

在执行加载独占指令时,数据处理装置从由加载独占指令指定的存储器位置加载数据,并且将存储器位置标记为(针对该数据处理装置的)独占。在执行存储独占指令时,装置确定由指令指定的存储器位置在相应加载独占指令之后是否仍然被标记为独占(由其他进程对被标记为独占的位置的访问可以使得独占标签被移除)。如果存储器位置不再被标记为独占,则处理装置返回存储独占失败指示并且不写入存储器位置。相反,如果存储器位置仍然被标记为独占,则过程继续,并且数据处理装置将数据存储到指定的存储器位置并且返回存储独占成功指示。

下面讨论的技术提供了被配置为执行一些目标程序代码中的指令的目标数据处理装置的模拟。模拟可以在不支持(不能执行)目标程序代码中的一些指令的主机数据处理装置上被执行。模拟可以将来自目标程序代码的指令作为输入,并且将这些指令映射到可以由主机数据处理装置执行以产生相同效果的相应指令上。其特定示例可以是加载/存储独占指令,该加载/存储独占指令不被一些主机数据处理装置支持。

在不支持独占指令的主机数据处理装置上模拟独占指令的一种方法是确保系统中一次仅一个模拟cpu(中央处理单元)被执行。通过这种方式,可以防止其他模拟cpu(或相同模拟cpu中的其他处理线程)干扰存储器更新,从而确保原子性(atomicity)。然而,这可能对性能具有显着的负面影响,因为在该布置中不可能并行处理多个线程。

在不支持独占指令的主机数据处理装置上模拟独占指令的另一种方法是在遇到加载独占指令时使用存储器保护来将存储器位置改变为只读。同样,这可以通过防止其他模拟cpu更新位置,直到达到存储独占指令,从而确保对该位置的存储器更新的原子性。然而,这种方法为独占指令的执行增加了相当大的开销,例如,可能需要附加指令来设置存储器保护许可。

在不支持独占指令的主机数据处理装置上模拟独占指令的另一种方法是禁止快速访问存储器的相关区域,例如,通过禁止主机装置中的其他设备绕过cpu对存储器的直接存储器访问,使得每个存储器访问请求都可以由模拟代码中的独占监视器检查,以确定是否允许更新。然而,这种方法也为独占指令的执行增加了相当大的开销,因为它减慢了对相关存储区域的所有存储器访问。

所描述的模拟可以通过在模拟代码中生成加载指令来模拟目标程序代码中的加载独占指令。加载指令可以根据存储器地址来指定存储器位置,并且可以由主机数据处理装置来执行,主机数据处理装置从由加载指令指定的存储器位置读取值。模拟代码还通过指示主机数据处理装置存储与加载独占指令有关的元数据来响应加载独占指令。该元数据可以包括响应于加载指令从存储器位置读取的值。

为了模拟目标程序代码中的存储独占指令,模拟可以在模拟代码中生成比较和交换指令。模拟存储独占指令的比较和交换指令可以指定一些新数据、要存储数据的存储器位置、以及要使用的比较值。比较值可以是加载独占指令的相应模拟中的从存储器位置读取的值,其被指定为响应于加载独占指令而存储的元数据的一部分。

使用原子比较和交换指令来模拟加载/存储独占指令的这种方法比上述方法更有效。具体地,这种方法的开销要小得多。此外,由于比较和交换指令将响应于加载指令而加载的数据值(而不是一些相关跟踪标记,例如,计算已经对位置进行了多少更新的版本号)指定为比较值,原子性不依赖于其他线程行为正确并且以预期方式更新跟踪标记,该其他线程行为正确并且以预期方式更新跟踪标记在模拟中无法被保证,因为可以存在由主机执行的超出(模拟处理器执行加载/存储独占对的)模拟代码的控制范围的其他线程。实现了这些好处,同时仍允许执行多个线程的并行处理,因此性能不会受到显着影响。

如下面更详细描述的,比较和交换指令可以控制主机设备读取当前存储在指定的存储器位置的值,并且将该值与比较值进行比较。取决于该比较的结果,执行指令的主机数据处理装置可以将新数据写入存储器。例如,如果比较值和当前存储的值相同,则可以触发该操作。

模拟代码中生成的比较和交换指令可以指定一些新数据(存储值)作为要写入存储器位置的交换值。由主机数据处理装置响应于比较和交换指令而执行的比较和交换操作可以包括将当前存储在存储器位置的值与比较值进行比较。如果通过比较满足预定条件,则主机数据处理装置可以将交换值写入存储器位置,替换当前在该位置写入的值。预定条件可以通过比较值与当前存储的值相同来满足,或预定条件可以通过值是不同的来满足。应当理解,任意其他预定条件可以根据正在执行的处理操作的需要而被指定。

通过这种方式,可以使用原子比较和交换指令来有效地模拟存储独占指令。以与存储独占指令相同的方式,如果自模拟相应加载独占指令以来尚未更新存储器位置,则模拟可以被配置为仅将新数据值写入存储器。响应于比较和交换指令的执行,主机装置可以返回比较和交换成功或失败指示,以指示比较是否满足预定条件。

响应于比较和交换成功/失败指示,模拟可以返回存储独占成功/失败指示作为对存储独占指令的响应,从而完成存储独占指令的模拟。如果比较值与当前存储在存储器位置的值不同,则可以触发比较和交换失败指示。然而,应当理解,可以使用针对比较的结果的任意其他预定条件;例如,如果值相同,则可以触发比较和交换失败指示,并且如果它们不同,则可以触发比较和交换成功指示。这允许模拟有效地模拟模拟cpu对存储独占指令的响应。

响应于加载独占指令而生成的元数据可以被存储到目标程序代码不可访问的存储器的区域(模拟控制区域)。例如,元数据可以不是目标程序代码的模拟架构状态的一部分,但是可以由模拟用来控制在主机上模拟目标程序代码的方式。

模拟可以附加地响应于存储独占指令对存储的元数据执行有效性检查。可以在执行比较和交换操作之前执行该有效性检查,并且如果有效性检查失败,则模拟可以返回存储独占失败,并且如果有效性检查成功,则替代地仅进行比较和交换操作。有效性检查可以使用响应于加载独占指令而存储的元数据。以这种方式进行有效性检查会增加额外的保护,以确保在将新的值写入存储器位置之前元数据有效。

响应于加载独占指令而存储的元数据可以包括从存储器位置读取的值、加载独占指令的存储器地址、加载要读取的数据的数据大小、存储器属性(例如,读取/写权限)、或与存储器位置或加载独占指令有关的任意其他信息。有效性检查可以包括检查存储独占指令的相应属性或参数(例如,地址、数据大小或存储器属性)是否与加载独占指令的相应元数据相同。这可以防止不匹配的加载独占指令和存储独占指令对被映射到模拟中的加载指令和比较和交换指令,这可能产生不可预测的结果。

当目标程序代码与其他程序代码之间存在可能通信的任意指示时,模拟还可以附加地返回存储专用失败指示;该通信不一定必须与加载/存储独占指令中涉及的读/写处于相同的存储器位置。在检测到可能通信的这种指示时,这可以通过触发有效性检查失败来实现。在一些示例中,可以被用来在进程(例如,加载/存储)之间提供通信的任意事件可以被视为可能通信的指示,即使该事件也可以被用于不涉及与其他进程的通信的其他操作。模拟可能需要悲观地假设这样的事件可能是进程之间的通信,因为实际确定这样的事件是否真的是通信,就性能而言实现起来可能是不切实际或昂贵的。

在一些情况下,在相同数据处理装置上执行的目标程序代码与其他程序代码之间的通信可能在执行实际加载/存储独占指令时产生存储独占失败指示,并且这可能需要在模拟代码中进行模拟。然而,反直觉地,可能还存在以下情况:其中目标程序代码与一些其他程序代码之间的通信(不涉及由加载独占指令指定的存储器位置)不会触发实际加载/存储指令失败,但是可能会使得模拟不太可靠。例如,在使用比较和交换方法进行模拟的情况下,如果另一进程更新了位置,但是然后对相同位置进行了第二次更新以恢复在第一次更新之前存储在该位置处的原始值,则在从存储器中读取的值与元数据中指定的先前加载的值匹配时,比较和交换指令将成功。然而,真正的加载/存储独占指令对将在这种情况下失败,因为当另一进程在加载独占指令之后第一次更新位置时,位置的独占标记将被删除。因为在这种情况下比较和交换指令的结果与在没有来自其他模拟进程的干预访问时在真实系统中由存储独占指令生成的结果相同,所以在没有可能通信的情况下,不管来自其他进程的干预访问而允许比较和交换指令成功是可以接受的(尽管模拟不能完全复制真实目标系统的行为,但是它给出了相同的结果,这是可接受的)。

然而,如果存在与另一模拟进程的通信,则该通信可能使得其他进程假定包括加载/存储独占指令的进程将不能通过其独占性检查(由于来自另一进程的干预访问),因此当在(假定第一进程的存储独占指令将失败的)另一模拟进程中采取了动作时,允许比较和交换指令成功可能会产生错误行为。因此,虽然(不涉及由加载独占指令所针对的存储器位置的)通信不会使得存储独占指令在要模拟的实际系统中失败,但是在使用原子比较和交换指令的模拟中,指示除了对由加载独占指令指定的存储器位置的存储器访问之外的可能通信的事件可能产生有效性检查失败。

有效性检查还可能响应于在加载独占指令与存储独占指令之间的时间内检测到异常而失败。

在使得有效性检查失败的事件的任意上述情况中,模拟可以通过利用(不会被用于有效元数据的)一些保留值替换存储的元数据的值,来响应事件。如果确定元数据中的一个值是所述保留值,则在遇到存储独占指令时执行的有效性检查可能失败。这针对多个不同事件提供了一种触发存储独占失败的方法。模拟可以替代地针对各种不同事件中的每个事件存储各种保留值中的一个保留值,使得可以根据存储在元数据中的特定保留值来推断关于存储独占失败的原因的信息。

如果模拟尝试执行了预定次数的特定存储独占指令(即,如果有效性检查失败了预定次数),则可以替代地尝试用于模拟存储独占指令的替代技术。例如,这可以是上面讨论的选项之一,例如,限制一次运行一个模拟cpu或代理,或将存储器的相关区域的存储器保护许可改变为只读。这允许在以其他方式不会取得进展的情况下取得进展。在关于进程之间是否发生冲突的信息有限的情况下,这尤其有用。在这种情况下,主机数据处理装置可能需要在有效性检查中相对谨慎,并且可以检测一些假阳性失败(例如,假设可能产生冲突的加载/存储产生冲突,而不管它是否实际发生冲突)。通过提供替代的模拟技术,仍然可以取得前瞻性进展,但是通过尝试比较和交换方法,可以在该方法成功的情况下提高第一性能。

所描述的主机数据处理装置可以由计算机程序控制,以便执行所描述的任意方法。该计算机程序可以被存储在非暂态存储介质上,该非暂态存储介质被配置为由计算机读取和执行。

现在将参考附图来描述技术的特定实施例。

图1a示出了数据处理装置对加载独占指令的响应的示例,图1b示出了数据处理装置对存储独占指令的响应的示例。图1a和图1b中示出的方法涉及支持独占指令的实际数据处理装置。参考图1a,在步骤s10中,数据处理装置接收加载独占指令。加载独占指令指定要从其中加载数据的存储器位置。在步骤s11中,数据处理装置将来自由加载独占指令指定的存储器位置的数据加载到处理装置的寄存器(可选地,数据也可以被传送到缓存)。在步骤s12中,数据处理装置将存储器位置标记为针对该数据处理装置的独占。可以应用标记存储器位置的任意方法。例如,存储器位置可以通过以下方式来标记:设置标志,将存储器位置中的位设置为预定值,或在装置中的其他地方记录该存储器位置已经被标记为独占的指示(例如,通过将带有标记的存储器地址位置的地址存储在缓冲器中)。应当理解,标记可以在存储器位置的较大块的粒度下完成,而不仅仅是针对单个位置。

参考图1b,在步骤s13中,数据处理装置接收存储独占指令。存储独占指令指定要存储数据的存储器位置以及要写入存储器位置的数据。在步骤s14中,装置检查由存储独占指令指定的存储位置是否仍然被标记为针对该数据处理装置的独占。如果数据处理装置确定存储位置不再被标记为独占,则过程进行到步骤s15,并且数据处理装置返回存储专用失败指示。通常,处理装置不会在存储独占失败指示之后更新存储器位置。在尝试重复存储独占操作之前,处理装置可以替代地返回s10并且重复加载独占操作。

相反,如果在步骤s14中确定存储器位置仍然被标记为独占,则过程继续进行到步骤s16,并且数据处理装置将数据存储至由存储独占指令指定的存储器位置。在步骤s17中,处理装置返回存储独占成功指示。

图2示出了用于使用诸如上面给出的示例的独占指令来执行存储器位置的原子更新的装置的示例。图2示出了两个中央处理单元cpu0(20)和cpu1(21),它们通过互连23访问存储器22。当cpu做出指定存储器位置的存储器访问请求时,互连23中的独占监视器24确定由存储器访问请求指定的存储器位置是否被标记为针对该装置的独占。如果它被标记为独占,则可以防止cpu更新存储器位置。虽然图2仅示出了两个cpu,但是应当理解,可以存在任意数量的cpu。而且,应当理解,该装置可以在相同cpu上执行多个指令线程,其中独占监视器24为一个线程提供独占访问以防止来自其他线程的干预访问。

图3示出了来自图2中的cpu20和21之一的存储器访问请求的示例。图3中示出的存储器访问可以经由互连23。在步骤s30中,数据处理装置接收来自cpu20和21之一的指定存储器22中的位置的存储器访问请求。在步骤s31中,数据处理装置确定另一cpu或线程是否具有对由存储器访问请求指定的存储器位置的独占访问,即,另一cpu或线程是否已经将存储器位置标记为独占。如果存储器位置未被标记为独占,则过程进行到步骤s32并且执行存储器访问。如果在步骤s31中确定存储器位置已经被标记为独占,则过程转到步骤s33并且移除针对存储器位置的独占标签。这可以通过以下方式来完成:移除、改变或重新设置由加载独占指令设置的标志;擦除或重写由加载独占指令设置的存储器位置中的位;在设备中的其他地方记录在该位置已经发生存储器访问;或将存储器位置标记为已更新的任意其他方法。然后,过程进行到步骤s32。虽然图3示出了在存储器位置未被标记为独占时过程直接进行到步骤s32,但是应当理解,无论存储器位置是否被标记为独占,过程也可以转到步骤s33。在一些实施例中,独占标签可以针对更新存储器位置的存储请求被移除,但是可以针对读取位置的加载请求不被移除。替代地,其他实施例可以响应于加载和存储访问而移除独占标签。该过程可以由互连23中的独占监视器24控制。

图4示出了数据处理装置对原子比较和交换指令的响应的示例。在步骤s40中,数据处理装置接收比较和交换指令,该比较和交换指令指定存储器位置、比较值和要写入存储器位置的新的数据值。在步骤s41中,数据处理装置读取当前存储在由比较和交换指令指定的存储位置的值。在步骤s42中,数据处理装置确定读取的值是否与比较值相同。如果两个值不相同,则过程进行到步骤s43,数据处理装置返回比较和交换失败指示;另一方面,如果两个值相同,则过程进行到步骤s44,并且将新的数据值写入存储位置。此外,在步骤s45中,数据处理装置返回比较和交换成功指示。应当注意的是,虽然图4描述了当加载值与比较值不相同时返回比较和交换失败指示,但是当一些其他预定条件没有被满足时(例如,当他们是相同的时)也可以返回比较和交换失败。

图5示出了用于模拟的布置的示例。用于运行目标程序代码51的目标数据处理装置由模拟50来模拟,模拟50包括模拟代码52和主机数据处理装置53。模拟代码52被配置为以可以由主机数据处理装置53执行的形式来模拟目标程序代码51。目标程序代码51可以是被配置为由目标数据处理装置执行的程序代码,该目标数据处理装置被配置为支持主机数据处理装置53不能支持的指令。例如,目标程序代码51可以包括独占指令,并且主机数据处理装置53可以不被配置为支持独占指令。在该示例中,模拟程序代码52可以被配置为将独占指令转换为可以由主机数据处理装置53执行的指令。模拟程序代码52可以包括加载独占程序逻辑52a和存储独占程序逻辑52b,加载独占程序逻辑52a用于根据下面描述的方法将目标程序代码51中的加载独占指令映射至加载指令,并且存储独占程序逻辑52b用于根据下面描述的方法将存储独占指令映射至比较和交换指令。虽然图5仅示出了单层模拟,但是应当理解,在一些布置中,在硬件和所提供的指令执行环境之间、和/或在相同主机处理器上提供的多个不同的指令执行环境之间,可以存在多层模拟。

图6a和6b示出了根据本技术的方法的示例。图6a示出了根据本技术的模拟代码52对目标程序代码51中的加载独占指令的响应的示例。在步骤s60中,在目标代码51中检测到指定存储位置的加载独占指令。在步骤s61中,模拟程序代码52生成用于由主机装置53执行的加载指令,以从由加载独占指令指定的存储位置加载数据。在步骤s62中,方法包括生成并且存储与由加载独占指令指定的存储器位置有关的元数据。存储的元数据可以包括例如从存储器位置加载的值、存储器地址、数据的大小、或存储器属性。应当理解,与存储器位置有关的任意其他信息也可以被包括在元数据中。

图6b示出了根据本技术的模拟代码52对目标程序代码51中的存储独占指令的响应的示例。在步骤s63中,在目标代码51中检测到指定存储位置和要被存储在该位置的数据的存储独占指令。在步骤s64中,检查与该存储位置有关的元数据的有效性,并且在步骤s65中,确定元数据是否有效。有效性检查可以包括检查存储独占指令是否指定与加载独占指令相同的存储器地址、数据大小、或存储器属性。如果元数据已经被保留值替换,则有效性检查还可以指示元数据无效。例如,在加载独占指令与存储独占指令之间的时间段中检测到异常时,元数据可以用这样的保留值来替换。在已经检测到指示目标程序代码51与一些其他程序代码之间的可能通信的事件时,元数据也可以被替换。如果元数据无效,则过程进行到步骤s66,并且返回存储独占失败指示。替代地,如果在步骤s65中确定元数据有效,则过程进行到步骤s67,其中由模拟代码52生成比较和交换指令以供主机数据处理装置53执行。在步骤s67中生成的比较和交换指令是图4中描述的比较和交换指令,其中(存储在元数据中的)加载值被指定为步骤s42中的比较值。在s68中,确定步骤s67中的比较和交换操作是否成功。如果图4的比较和交换过程在步骤s45返回比较和交换成功指示,则在步骤s68中确定比较和交换操作成功,并且过程继续进行到步骤s69,其中由模拟代码52返回对目标代码51的存储独占成功指示。另一方面,如果图4的比较和交换过程在步骤s43中返回比较和交换失败指示,则在步骤s68中确定比较和交换操作不成功,并且过程进行到步骤s66,其中由模拟代码52返回对目标代码51的存储独占失败指示。

在存储独占失败指示之后,目标代码51可以循环回到加载独占指令,由此可以从步骤s60开始重复图6a和图6b的过程。装置可以被配置为使得在一定数量的循环之后或在一定量的时间之后,模拟代码52回退到用于模拟独占指令的替代方法,以便允许取得进展。替代地,装置可以被配置为在一定数量的循环之后结束过程并且发信号通知异常。

在需要由主机数据处理装置53执行指令之前,目标程序代码51中的加载/存储独占指令也可以提前转换成由主机支持的经转换的指令。也就是说,响应于加载独占指令或存储独占指令而生成的加载指令或比较和交换指令可以不在生成的同时被执行,而是可以存储到存储器以便稍后执行。装置还可以被配置为缓存与目标代码51相对应的经转换的主机代码的序列,或将它们存储到存储器的区域,使得如果在稍后的时间到达目标程序代码51中的相同程序地址,可以从存储器中读取先前转换的指令,而不必像第一次遇到该程序地址那样进行相同的映射决策。因此,在一些情况下,模拟代码可以通过生成用于执行s61和s62中示出的操作的主机指令并且存储这些指令以供以后使用,来响应加载独占指令。类似地,模拟代码可以通过生成用于执行s64-s69中示出的操作的指令并且存储这些指令供以后使用,来响应存储独占指令。因此,可以执行一次转换,以将包括加载/存储独占指令的代码的序列映射至包括加载指令、比较和交换指令、和(用于控制元数据存储、有效性检查、以及基于比较和交换成功/失败指示来模拟存储独占成功/失败响应的)任意干预指令的代码的序列,并且当在模拟器上执行目标代码期间到达目标代码的相同部分的后续情况下,这可以没有必要再次执行转换,因为这次要执行的主机指令可以简单地从存储器或缓存中读取。

图7示出了目标程序代码51中的指令如何对应于模拟代码52中的指令以及主机数据处理装置53执行的动作的示例。在步骤s70a中,通过在模拟代码52中生成加载指令s70b和用于生成/存储元数据的指令s71b,来响应目标程序代码51中的加载独占指令。通过在主机数据处理装置53中加载相关数据s70c,来响应模拟代码52中的加载指令s70b,并且通过将元数据存储至存储器的模拟控制区域s71c,来响应用于生成/存储元数据的指令s71b。稍后将更详细地讨论模拟控制区域。在步骤s72a中,通过模拟代码52中的相应处理指令s72b(其指示主机数据处理装置53在主机数据处理装置53中执行相应处理操作s72c),来响应目标程序代码51中的处理指令。在步骤s73a中,在模拟代码52中通过i)有效性检查例程s73b(其指示主机数据处理装置53检查相关元数据s73c)和ii)生成比较和交换指令s74b(其指示主机数据处理装置53执行比较和交换操作),来响应目标程序代码51中的存储独占指令。在步骤s75c中,主机数据处理装置53返回比较和交换成功/失败指示,并且模拟代码52通过返回存储独占成功/失败指示来进行响应。

图8示出了被配置为执行上述方法的主机数据处理装置53的示例配置。图8的主机数据处理装置53包括指令解码器80(用于解码经由指令缓存82从存储器81提取的指令)、处理电路83(用于执行由指令解码器80解码的指令)、寄存器84、和加载/存储电路85(被配置为经由数据缓存86执行来自/去往存储器81的加载/存储操作)。存储器81包括以下区域,例如,模拟控制区域81a、存储目标程序代码51的目标程序代码区域81b、存储模拟代码52的模拟代码区域81c、存储主机代码和数据的主机代码/数据区域81d、和模拟目标存储器区域81e。模拟控制区域81a是目标程序代码51不可访问的存储器的区域,并且是响应于加载独占指令而存储元数据的区域。模拟目标存储器区域81e是目标程序代码51中的加载/存储独占指令可访问的存储器的区域。

上述方法允许通过使用原子比较和交换指令来在不支持独占指令的主机数据处理装置53上模拟加载/存储独占指令。所描述的方法具有比其他方法小得多的开销,并且允许并行处理。上述方法还提供了以下优点:其不依赖于其他数据处理装置、其他cpu、或相同cpu上的其他线程的行为来确保更新的原子性。

所描述的方法可以由包括所描述的主机数据处理装置53和用于控制主机数据处理装置53的控制电路的装置来执行。控制电路可以被包括在主机数据处理装置53中或可以与主机数据处理装置53分开。

上述方法可以由主机数据处理装置53响应于存储在非暂态计算机可读存储介质上的计算机程序来执行。

所描述的方法对于本领域技术人员来说可能是违反直觉的,因为看起来执行方法的主机数据处理装置53可能返回不正确的成功/失败指示。然而,如下面通过示例参考图9a和9b所示,这不是问题。

图9a示出了根据本技术模拟加载/存储独占指令的一个模拟cpu(cpu0),以及在相同存储位置x处执行处理操作的另一模拟cpu(cpu1)。在步骤s90处,cpu0在存储器位置x处执行加载操作(模拟加载独占操作),并且在步骤s94处,cpu0在相同存储器位置x处执行原子比较和交换操作(模拟存储独占操作)。同时,在步骤s90和s94之间,cpu1对相同存储位置x处的数据执行处理操作。在步骤s91中,cpu1加载存储在x处的数据值(a)。在步骤s92,cpu1在位置x处存储不同的值(在该示例中,不同的值是a+1),并且在步骤s93中,cpu1将原始值(a)存储至位置。如果由cpu0执行的进程是使用独占指令执行,则步骤s94的存储独占操作将失败,因为在步骤s92处,x处的存储器位置将被标记为更新的(或独占标签将被移除)。然而,在本技术的方法中,s94处的原子比较和交换操作成功,因为存储在x处的值与存储在元数据中的加载值相同。通过这种方式,在存储独占操作将返回失败指示时,原子比较和交换操作返回成功指示。然而,在该示例中,只要存储在x处的值在原子比较和交换操作被执行之前返回到其原始值,并且假设cpu0和cpu1之间没有通信,那么这种差异将不会成为问题。这是有效的,因为cpu0或cpu1无法知道在s90处执行的加载操作是在s92之前还是在s93之后。因此,在这种情况下,根据所描述的方法使用的原子比较和交换指令仍然是针对加载/存储独占指令的适当模拟。

其中原子比较和交换操作可能无法提供所需结果的情况是cpu0和cpu1之间存在通信时,如图9b所示。在图9b中,一些通信s95在cpu0和cpu1之间在不同的存储器位置y处发生。通信可能使得模拟cpu1推断cpu0中的加载/存储独占对应当失败,这在s94处的存储独占成功时(因为在遇到存储独占指令时x已经返回其先前的值)可能产生不正确的结果。因此,为了提供附加的保护,在模拟cpu之间存在可能通信的任意指示,一些实施例返回存储独占失败指示,即使该通信涉及除了(响应于加载独占指令被标记用于独占访问的)一个或多个存储器位置的块之外的存储器位置。这可以通过用保留值替换存储的元数据来实现,使得在模拟存储独占指令期间的有效性检查确定元数据无效。

应当理解,图9b中描绘的场景仅是应当触发失败指示的可能事件的一个示例,并且包括其他形式的通信的其他事件也可以触发失败指示。

虽然已经根据具体实施例详细描述了技术,但是应当理解,技术不限于本文描述的特定实施例。在不脱离权利要求中限定的技术的范围的情况下,可以以多种方式修改或调整所描述的实施例。

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