共享式永久存储器的基于容量的锁定和访问的制作方法

文档序号:15686139发布日期:2018-10-16 21:04阅读:152来源:国知局

在某些计算机架构中,计算系统可包括多个相区别的计算节点,每个计算节点具有其自己的、通过快速区块链部署总账(fabric)紧耦合的处理电路(例如,cpu、soc等),使得计算节点能够发现全局可访问的、低延迟字节可寻址永久存储器池。这种架构有时会被称为机柜式架构,并且因此,基于此架构的计算系统在此可被称为机柜式系统。某些示例性机柜式系统可包括数以千计的计算节点和千万亿字节的全局永久存储器。

附图说明

图1是图示一种示例性机柜式系统的框图,该机柜式系统包括经由存储器区块链部署总账连接至全局永久存储器的示例性节点;

图2是图示一种示例性机柜式系统中的示例性地址空间和地址映射的框图;

图3是图示一种可响应于处理器中正被调用的锁定-访问指令而执行的示例性进程的进程流程图;

图4是图示一种可响应于接收到锁定-访问消息而执行的示例性进程的进程流程图;

图5a是图示在处理器中调用锁定-加载指令并且目标数据对象d未锁定时,处理器、存储器侧加速器以及全局永久存储器之间的示例性交互的信号图;

图5b是图示在处理器中调用锁定-加载指令并且目标数据对象d锁定时,处理器、存储器侧加速器以及全局永久存储器之间的示例性交互的信号图;

图6a是图示在处理器中调用锁定-存储指令并且目标数据对象d未锁定时,处理器、存储器侧加速器以及全局永久存储器之间的示例性交互的信号图;

图6b是图示在处理器中调用锁定-存储指令并且目标数据对象d锁定时,处理器、存储器侧加速器以及全局永久存储器之间的示例性交互的信号图;

图7是图示一种可响应于处理器中正被调用的访问-解锁指令而执行的示例性进程的进程流程图;

图8是图示一种可响应于接收到访问-解锁消息而执行的示例性进程的进程流程图;

图9a是图示在处理器中调用加载-解锁指令并且为该请求处理器锁定了目标数据对象d时,处理器、存储器侧加速器以及全局永久存储器之间的示例性交互的信号图;

图9b是图示在处理器中调用加载-解锁指令并且并未为该请求处理器锁定目标数据对象d时,处理器、存储器侧加速器以及全局永久存储器之间的示例性交互的信号图;

图10a是图示在处理器中调用存储-解锁指令并且为该请求处理器锁定了目标数据对象d时,处理器、存储器侧加速器以及全局永久存储器之间的示例性交互的信号图;

图10b是图示在处理器中调用存储-解锁指令并且并未为该请求处理器锁定目标数据对象d时,处理器、存储器侧加速器以及全局永久存储器之间的示例性交互的信号图;

图11是图示另一种可响应于接收到锁定-访问消息而执行的示例性进程的进程流程图;

图12是图示又一种可响应于接收到锁定-访问消息而执行的示例性进程的进程流程图;

图13是图示再一种可响应于接收到锁定-访问消息而执行的示例性进程的进程流程图;以及

图14是图示一种存储了锁定-访问指令和访问-解锁指令的示例性非暂态机器可读介质的框图。

具体实施方式

在此描述的示例性机柜式系统中,在消息中使用存储器容量来请求与全局永久存储器的某些存储事务(例如,加载请求、存储请求等等)。在此使用的“存储器容量”是一种不可伪造的指针,其授权对指定数据对象或数据结构进行特定类型(一种或多种)的访问(即,对地址空间中的指定地址或指定地址范围的访问)。存储器容量所授权访问的数据对象(地址空间范围)可小至永久存储器中的最小可寻址对象(例如,字节)或大至整个地址空间。存储器容量与常规指针的区别至少在于:(1)存储器容量是不可伪造的,而常规指针是可伪造的;以及(2)存储器容量携带其指定的访问权限(例如,只读、读写等等),而常规指针不携带。在某些示例中,可通过整体地设计系统而确保存储器容量的不可伪造性,例如,计算节点的指令集可使得节点无法扩展由存储器容量授予的特权(例如,可撤销权限但不可授予权限,可减少范围但不可扩大范围)。

通过适当地控制系统内存储器容量的分配,可实现精粒度存储器访问保护,因为仅当永久存储器的给定物理存储地址具有容许对其进行访问的、不可伪造的存储器容量时,进程和/或节点才可对其进行访问,并且仅可对该物理存储地址执行该存储器容量容许的访问类型。这种精粒度存储器访问可避免许多可能会因未授权的存储器访问而引起的漏洞和安全隐患,比如缓存和栈溢出。例如,在某些示例性系统中,通过创建区域的存储器容量并且将存储器容量提供给节点,可将该全局永久存储器中该节点被允许访问的区域分配给该节点。

当两个或更多个节点均已获授权访问全局永久存储器的同一区域时,可通过多种方式实现对该区域中的地址(或地址范围)的互斥访问。例如,如果节点期望在特定数据对象上执行访问操作(例如,读、写、修改),则可使用原子访问操作来执行该访问,这可防止在该原子访问操作的进程中有其他节点同时访问该数据对象。然而,在某些示例中,节点可能期望在一个或多个数据对象上原子地执行多个访问操作(即,确保在完成所有访问操作之前、不会有数据对象被其他节点修改);这例如可经由锁定机制实现。具体地,锁定机制允许为特定节点“锁定”目标数据对象(或者,在一些示例中为地址范围),这可防止其他节点访问该地址,直至该地址被“解锁”或“释放”。

在此描述的用于实施基于存储容器的存储器访问保护的某些示例性机柜式系统中,存储器的指令集以及控制对全局永久存储器的访问的存储器侧加速器(msa)使得处理器可使用单个消息(下文中称为“锁定-访问消息”)同时从msa请求在目标数据对象上执行特定的访问操作(例如,加载、存储)并且为该处理器锁定该目标数据对象。更详细地,这种锁定-访问消息可包括至少两个存储器容量:指向请求对其进行访问操作的该永久存储器中该目标数据对象的存储器容量(第一存储器容量);以及指向该永久存储器中控制对该目标数据对象的锁定的锁定对象的存储器容量(第二存储器容量)。响应于锁定-访问消息,msa可提取由该第二存储器容量指向的该锁定对象中存储的数据,并且基于提取的数据、确定是否为该请求处理器锁定该目标数据对象并且对该目标数据对象执行所请求的访问操作。例如,如果锁定对象不包括实体(例如,处理器、进程、线程、节点等)的标识符,则msa可允许为请求实体锁定该目标数据对象(这可通过msa在锁定对象中存储该请求实体的标识符表示),并且可执行所请求的访问操作。又例如,如果该锁定对象存储了另一实体(例如,处理器、进程、线程等等)的标识符,则msa可驳回锁定该目标数据对象的请求并且驳回所请求的访问操作,因为已经为该另一实体锁定了该目标数据对象。

而且,在某些示例中,处理器的指令集和msa可使得处理器可对msa使用单个消息(下文中称为“访问-解锁消息”)同时请求在数据对象上执行特定的访问操作(例如,加载、存储)并且解锁该数据对象。更详细地,此访问-解锁消息可包括至少两个存储器容量:指向该目标数据对象的存储器容量(第三存储器容量)以及指向锁定该目标数据对象的锁定对象的存储器容量(第四存储器容量)。响应于访问-解锁消息,msa可提取由第四存储器容量指向的该锁定对象中存储的数据,并且基于该锁定对象、确定是否为该请求处理器解锁该目标数据对象并且对该目标数据对象执行所请求的访问操作。例如,如果锁定对象包括请求实体的标识符,则msa可允许执行所请求的访问操作,并且可允许解锁该目标数据对象,这可通过msa清空该锁定对象(例如,在该锁定对象中存储全零)来表示。又例如,如果该锁定对象为空或包括另一实体的标识符,则msa可驳回解锁该目标数据对象的请求并且驳回所请求的访问操作,因为该目标数据对象未被锁定或者已为另一处理器而锁定。

锁定-访问消息和访问-解锁消息可大大减少给定节点与msa之间发送的消息进入锁定机制的数量。具体地,作为提供锁定机制的替换方案,由节点向msa发送请求锁定数据对象的第一消息。如果获得了锁定,则从msa向该节点发送第二消息作为确认,然后从节点向控制器发送后续消息以请求访问操作(每个后续消息具有从控制器发向节点的对应的返回消息)。当完成期望的访问操作后,在从节点发向控制器的次末消息中请求解锁,随后在从控制器发向节点的最末消息中确认解锁。由此,在此替换性方案中,如果在锁定的数据对象上存在待执行的n个访问操作,则节点与msa之间的消息总数为2n+4。然而,在此描述的使用锁定-访问消息和访问-解锁消息的示例中,节点与msa之间的消息总数为2n。消息数量的这种减少在n极小的情况下尤其有益,例如,n=2时,消息数量减少50%;n=3时,消息数量减少40%;n=4时,消息数量减少33%;以此类推。在具有大量共享式永久存储器的大型机柜式系统中,由节点与共享式永久存储器之间的消息发送而产生的延迟的量级可能大于本地存储器的访问延迟,因此上述发送消息数量的减少可极大地减小系统的总延迟。

图1图示一种示例性机柜式系统10。该示例性系统10可包括经由存储器区块链部署总账200和msa300连接至全局永久存储器(永久存储器)400的多个节点100(例如,节点100_1至100_n)。示例性系统10还可包括全局策略引擎500。

图1中图示其中一个节点100的示例的放大视图,由虚线表示。每个节点可包括处理电路110、本地存储器120以及存储器区块链部署总账桥接器130。除了每个节点包括处理电路110、本地存储器120和存储器区块链部署总账桥接器130之外,各节点100不必一定彼此相同;例如,每个节点100中处理器115的数量和/或类型可变,每个节点100中本地存储器120的类型和尺寸可变,等等。

处理电路110可包括安全区域140和多个处理器115。在某些示例中,处理电路110还可包括可支持该处理器115的额外元件和/或提供额外的功能性,比如缓存器、协同处理器、定时源等等。在某些示例中,此类额外元件可与处理器集成在同一集成电路中;例如,处理电路110可为片上系统(sos)。

处理器115可被配置为实施指令集,该指令集包括下文中描述的锁定-访问指令和/或访问-解锁指令。例如,处理器115可根据指令集架构而被设计,以使得该处理器115能够运行下文中描述的锁定-访问指令和/或访问-解锁指令,从而使得:当在处理器115中调用这些指令时,处理器115执行下文中关于图3和/或图7描述的操作。处理器115还可运行用于节点100的主操作系统(os),以及各种不同的其他进程和计算机程序。

安全区域140可为处理器电路115中的元件,用于执行处理器电路110上运行的、不受该主操作系统(os)控制的进程。该安全区域140例如可由运行机器可读指令的处理器或协同处理器、专用硬件(比如专用集成电路(asic)、复杂可编程逻辑装置(cpld)、域可编程门阵列(fpga)、专用指令集处理器(asip)等等)或者这些的组合构成。

本地存储器120可为可由处理电路110进行本地访问的任意存储装置。例如,本地存储器120可为动态随机存取存储器(dram)。本地存储器120例如可存储即将由处理器115运行的机器可读指令。

存储器区块链部署总账桥接器130可提供与存储器区块链部署总账200的桥接。在某些示例中,存储器区块链部署总账桥接器130包括允许对访问控制规则进行配置的可编程硬件元件(比如,例如防火墙),该访问控制规则命令了可由节点100上运行的os访问的该全局永久存储器400的区域。例如,存储器区块链部署总账桥接器130可在安全区域140的控制下创建该全局永久存储器400的区域向节点100的物理地址空间(下文中称为“孔”)的映射。具体而言,存储器区块链部署总账桥接器130的访问-控制规则可经由安全区域140下发的带内存储器事务配置,该带内存储器事务将存储器区块链部署总账桥接器130的特定存储器映射桥接控制寄存器作为目标。存储器区块链部署总账桥接器130可校验源自该安全区域140的、对这些寄存器的访问,从而确保该安全区域140外没有实体可改变该访问-控制规则。由访问控制规则创建的孔映射将节点100上的物理地址映射到永久存储器400中的地址上,使该永久存储器400的对应区域可由节点100访问。

例如,图2图示系统10中地址空间的示例性映射。每个节点100可具有映射至节点100的物理地址空间(pas)的虚拟地址空间(vas)。节点100的pas中的地址子集可对应于节点100的本地存储器120中的物理地址,而pas中的其余地址可用于映射至备用物理地址空间(bpas)。bpas中的地址可对应于全局永久存储器400中的物理地址。当为给定节点100创建孔时,这提供了节点100的pas中的地址与bpas中的地址子集之间的映射(例如,映射至永久存储器400中的区域)。通过为各共享节点100提供从其相应的pas的地址向bpas的相同地址的映射,可授权该多个节点100访问该永久存储器400的同一区域。在某些示例中,节点100可全部使用相同的vas和pas,并且可等同地将vas地址映射至pas地址。在某些示例中,节点100的处理器115可控制节点100的vas与pas之间的映射,而pas与bpas之间的映射可仅由该节点100的安全区域140控制。

安全区域140内运行的进程与该存储器区块链部署总账桥接器130一起构成节点100的可信构件(tc),其具有系统级信用并且可实现源极全局存储器控制的建立和强制执行。具体而言,仅该安全区域140可为节点100建立由该存储器区块链部署总账桥接器强制执行的孔,并且仅该安全区域140可创建对应于永久存储器400中区域的初始存储器容量(即,该存储器容量并非由给定节点100已可访问的存储器容量获得)。在某些示例中,安全区域140还可为该初始存储器容量创建授权标记。因此,由于tc安全地独立于节点100上的os,该os无法在不被tc介入的情况下改变访问-控制规则、创建初始存储器容量或者创建授权标记。例如,如果节点100上运行的os想要获得对永久存储器400中区域的访问权限,则该os可从tc请求将永久存储器400的该区域分配给节点100。tc可基于全局策略引擎500设定的策略、决定是否将该区域分配给永久存储器400。

在某些示例中,一旦tc已经向节点100提供了该永久存储器400的区域的初始存储器容量,该节点100可自由地从该初始存储器容量获取额外的存储器容量(获取的存储器容量)。获取的存储器容量可具有与初始存储器容量相比完全相同或者减少的范围以及访问权限;换言之,获取的存储器容量与该初始存储器容量对应于同一对象,或者对应于完全包含于其内的对象,并且提供与该初始存储器容量相同或者更少的访问权限。节点100可使用这些存储器容量(在某些例程中还有授权标记)来获取对永久存储器400中该区域的数据对象的访问。例如,节点100可向msa300发送存储器访问消息,包括获取的存储器容量和授权标记;一旦校验了消息的完整性和该授权标记的真实性,msa可对该存储器容量指定的数据对象执行所请求的访问。

如上所述,在某些示例中,可为某些存储器容量创建授权标记。在此类示例中,由tc创建的授权标记可为可由msa300识别为提供其携载的授权以访问永久存储器400的区域的任意标记。在一些示例中,包含多个存储器容量的消息可对两个存储器容量使用一个授权标记;在其他示例中,每个存储器容量可具有其自己的授权标记。在某些示例中,存储器容量不包含额外的授权标记;在这种情况下,例如,该存储器容量本身可携带访问存储器400中对象所需的全部授权。

授权标记的一个示例可包括与存储器容量相关联的主容量的句柄。例如,当tc将永久存储器400的区域分配给节点100时,其可创建可存储在该永久存储器400的受限区域中的新的主存储器容量,并且该授权标记可包括该主存储器容量的句柄。一旦接收到存储器访问消息,msa300就可提取对应于该句柄的主存储器容量,并且可基于提取到的主存储器容量、允许或不准许对该存储器容量指向的区域进行访问。例如,如果该主存储器容量指示该句柄无效(例如,句柄的世代数与主存储器容量的世代数不匹配),则该相关联的存储器容量被视为无效,并且拒绝对该区域的访问。

存储器区块链部署总账200可包括任意数量的总线、网络连接器和/或其他用于在节点100与msa300之间传输存储器访问消息和响应(如果合适的话,包括数据负载)的通信介质。例如,存储器区块链部署总账200可包括互连、开关、路由器等等。在某些示例中,存储器区块链部署总账200级机制用于支持系统10的可信模型。例如,与存储器区块链部署总账200连接的构件(例如,处理电路110、msa300等等)下发的存储器访问消息可包括已认证的、加密可校验的完整校验和。当接收到区块链部署总账数据包时,各构件可验证事务的完整性(例如,其在传输过程中未被修改)以及事务发起者的真实性(例如,其不是由未授权主体注入该区块链部署总账中的)。已认证的完整校验和可充当存储器区块链部署总账200的许可控制机制,任何未经认证的数据包都将被存储器区块链部署总账200的源节点和目标节点拒收。尽管在上文中存储器区块链部署总账桥接器130被描述为节点100的组件,这仅用于描述的便利性,在某些示例中该存储器区块链部署总账桥接器130可被视为是存储器区块链部署总账200的组件。类似地,在某些示例中,msa300可被视为是该存储器区块链部署总账的组件。

为简单起见,在以下说明中并未明确提及经由授权标记来校验存储器容量以及经由完整校验和来验证区块链部署总账数据包。然而,应理解的是,在某些示例中,下文中描述的、由msa300响应于各种不同消息而执行的操作可依据处于有效状态的授权标记和/或完整校验和的验证而定。

msa300用于控制对永久存储器400的访问。例如,msa300可执行比如下文中关于图4、8和11-13描述的操作。例如,msa300可包括:被配置为执行在此描述的功能的专用硬件(比如asic、cpld、fpga、asip等等),运行机器可读指令以执行在此描述的功能的处理器,或者这些硬件和指令的任意组合。在图1中图示一个msa300,但系统10可包括任意数量的msa300。例如,可能存在多个msa300,其分别控制对永久存储器400中不同区域的访问。又例如,永久存储器400可由多个分立的存储装置构成,并且可为每个分立的存储装置提供msa300。

全局永久存储器400可包括多个永久存储装置。具体而言,永久存储器400的永久存储装置以字节可寻址的方式、相对于节点100永久存储信息。相对于节点100永久存储信息意味着:所存储的信息具有独立于各个节点100的时效。换言之,永久存储器400的永久存储装置是“永久的”,以使得可在不影响存储在该永久存储器400中信息的使用期限的情况下关闭或重置任意或所有节点100。永久存储器400的永久存储装置可为非易失性存储装置或易失性存储装置。非易失性存储装置以非易失方式存储信息,这意味着信息即使在装置断电之后也持续存在;而易失性存储装置以易失方式存储信息,这意味着信息在装置断电之后丢失。可用于该永久存储器400的非易失性存储装置的示例包括:基于忆阻器的随机存取存储器(ram)、闪存、基于相变存储元件的ram(有时被称为pcm或pcram)、导电桥接存储元件ram(有时被称为cbram或可编程金属化单元)、基于磁阻存储元件的ram(有时被称为mram)、永磁ram(有时被称为feram)、电池支持的ram等等。可用于该永久存储器400的易失性存储装置的示例包括静态ram(sram)、动态ram(dram)等等。

全局策略引擎500可为全局永久存储器400设定访问策略。例如,全局策略引擎500可以安全地连接至每个节点100的安全区域140,并且可将访问协议传输给安全区域140,该访问协议控制该安全区域140如何分配永久存储器400的各区域。例如,访问协议可控制:安全区域140是否将为给定节点100创建给定孔,是否可将永久存储器的给定区域分配给多个节点100进行共享访问,等等。在某些示例中,全局策略引擎500是由运行机器可读指令的处理器形成的。

因此,系统10可部署可信模型,其中该全局策略引擎500、msa300、存储器区块链部署总账桥接器130以及安全区域140可具有系统级信用,而每个节点100上的处理器115仅具有节点级信用。具体而言,节点100上的处理器115(更具体地,处理器115上运行的os和处理器115的存储器管理单元(mmu))受信以通过在其授权访问的物理地址空间(pas)上的访问-控制、在较宽的虚拟地址空间(vas)内强制执行精粒度存储器容量访问控制,但其不受信以控制对永久存储器400上全局物理存储器的访问。对永久存储器400上全局物理存储器的访问必须由tc明确地授权给节点,这是在存储器区块链部署总账桥接器130处强制进行的。一旦被授权访问永久存储器400的物理区域,节点100就受信以对该区域进行精粒度(vas和存储容器)分割和隔离,并且同时履行对存储器容量撤销的支持。此外,对永久存储器400的某些区域的访问可被限制在存储器区块链部署总账桥接器130级,以使得那些孔映射仅可由安全区域140中运行的tc访问,例如,在使用主存储器容量的示例中,对主存储器容量的访问可受限于tc。因此,在系统10采用的可信模型中,对全局永久存储器400的访问是在存储器事务的“源”处(即,在节点100处)选择控制的,而“目标”(msa300)隐含地信任通过存储器区块链部署总账200接收到的、包括有效存储器容量的存储器访问消息,尽管目标组件可校验此类事务的完整性和真实性。

图3图示可由其中一个节点100的处理器115响应于正被调用的锁定-访问指令而执行的示例性进程1000。例如,节点100上运行的os或其他进程可调用节点100的处理器115处的此指令。具体地,处理器115的指令集可包括:锁定-访问指定,当在给定处理器115处被调用时,可使该给定处理器115执行图3中所示的操作。换言之,处理器115可根据能够使该处理器115适当地处理此锁定-访问指令(当被调用时)的指令集架构而被设计为执行在此描述的操作。

在此使用的“锁定-访问指令”指的是可由机柜式系统(比如机柜式系统10)的处理器(比如处理器115)运行的、使该处理器生成并发送锁定-访问消息给该机柜式系统的msa(比如msa300)的任意指令。该锁定-访问消息包括:第一存储器容量,指向正请求对其进行锁定和访问的永久存储器中的目标数据对象;第二存储器容量,指向该永久存储器中的锁定对象,该锁定对象控制该目标数据对象(或包含该目标数据对象的区域)的锁定;以及所请求的访问操作的类型的指示。通过发送该锁定-访问消息给msa,该处理器可经由单个消息同时请求在该机柜式系统中全局共享式永久存储器(比如该永久存储器400)的指定目标数据对象上执行访问操作并且为该处理器锁定该目标数据对象(或者,在某些示例中,该永久存储器中包括该目标数据对象的指定区域)。由于可请求多种类型的存储器访问操作,可将多种相区别的指令归类为“锁定-访问指令”。具体而言,任意存储器访问操作可具有特定的锁定-访问指令,例如,提取存储在数据对象中的数据并将其返还给处理器115的加载操作(也称为读操作),将指定数据存储在数据对象中的存储操作(也称为写操作),增/减数值,等等。在下文中,指定访问操作为“加载”的锁定-访问指令的例程可被称为“锁定-加载指令”,而指定访问操作为“存储”的锁定-访问指令的例程可被称为“锁定-存储指令”。

在步骤块1001中,处理器115响应于正被调用的锁定-访问指令而生成锁定-访问消息,该消息包括:第一存储器容量(c1[d]),指向正请求锁定和访问的该永久存储器400中的目标数据对象(d);第二存储器容量(c2[l]),指向该永久存储器400中的锁定对象(l),其控制该目标数据对象d(或包含该目标数据对象d的区域)的锁定;以及所请求的访问操作的类型的指示。锁定-访问消息还可包括对应于请求实体(例如,请求处理器115)的标识符(id),并且如果有利于所请求的访问类型、还可包括数据负载(例如,对于存储操作,可包含数据负载)。例如,每个锁定-访问消息可包括:第一字段,包括指定该消息的类型的信息(其可隐含地指定所请求的访问的类型);第二字段,包括c1[d];第三字段,包括c2[l];第四字段,包括id;以及第五字段,用于数据负载(如果存在)。在某些示例中,不在该锁定-访问消息中指定id,而是由msa300基于源信息确定id,源信息是通过存储器区块链部署总账桥接器130和/或存储器区块链部署总账200附录至该锁定-访问消息中的。锁定-访问消息的示例包括:图5a和5b中示出的消息lock-load(锁定-加载)(c1[d],c2[l],id)以及图6a和6b中示出的消息lock-store(锁定-存储)((c1[d],c2[l],id,负载)。

如上所示,id可为正在请求锁定和访问的实体的标识符,该实体可包括例如处理器115、处理器115上运行的特定进程、处理器115的特定线程、节点100等。类似地,锁定对象l可存储已为其锁定了数据对象d的实体的标识符,该实体可包括例如处理器115、处理器115上运行的特定进程、处理器115的特定线程、节点100等。由id识别的实体类型不必一定与锁定对象l中识别的实体类型相同。下文中,具有包含在id中以及锁定对象l中的标识符的实体将被描述为处理器115,但应理解的是,这仅仅是一个示例,并且该实体不必一定是处理器115。

在步骤块1002中,处理器115经由存储器区块链部署总账桥接器130和存储器区块链部署总账200、将步骤块1001中生成的锁定-访问消息发送给msa300。尽管在此为了便利的目的将步骤块1002和1001分开进行了描述,但在某些示例中,它们可同时执行(例如,锁定-访问消息的发送也可构成该消息的生成)。

图4图示可由msa300响应于从给定节点100接收到锁定-访问消息而执行的进程2000的示例。具体地,msa300的逻辑电路和/或由msa300的处理器运行的机器可读指令可使msa300执行图4所示的操作。

在步骤块2001中,msa300从给定节点100的请求处理器115接收到锁定-访问消息。如上关于图3所述,锁定-访问消息包括第一存储器容量c1[d]、第二存储器容量c2[l]以及所请求的访问操作类型的指示。锁定-访问消息还可包括id,并且在某些例程中还包括数据负载。锁定-访问消息的示例包括:图5a和5b中示出的消息lock-load(锁定-加载)(c1[d],c2[l],id)以及图6a和6b中示出的消息lock-store(锁定-存储)(c1[d],c2[l],id,负载)。然后,进程继续进行至步骤块2002。

在步骤块2002中,msa300响应于接收到该锁定-访问消息而审查接收到的消息,以识别由第二存储器容量c2[l]指向的锁定对象l,并且从永久存储器400提取存储在该锁定对象l中的数据(数据[l])。然后,进程继续进行至步骤块2003。

在某些示例中,锁定对象l可包括用于存储各种不同信息的多个字段。例如,锁定对象l可存储锁定信息,msa300可使用该锁定信息确定给定数据对象是否锁定。在某些示例中,如果数据对象未锁定,则该锁定信息可为空;如果该数据对象已为实体(例如,处理器115)锁定,则该锁定信息可包括该实体的标识符。在某些示例中,锁定对象l可存储边界信息,边界信息可指定该永久存储器400中可由该锁定对象l控制锁定(锁定区域)的区域(地址范围)。在某些示例中,锁定对象l可存储递归计数(在下文中关于图11描述)和/或阅读器计数器(在下文中关于图12描述)。在某些示例中,锁定对象l可存储指定在该数据对象上实施的锁定的类型的信息(在可使用多个锁定类型的示例中;例如,参见下文中关于图13的描述)。

在步骤块2003中,msa300确定所提取的信息数据[l]是否指示该目标数据对象d未锁定。例如,如果锁定对象l未存储处理器115的标识符(例如,数据[l]为全零),则msa300可确定目标数据对象d未锁定。又例如,如果数据[l]包括处理器115的标识符,则msa300可确定目标数据对象d锁定。更具体地,如果数据[l]中的标识符匹配于id(对应于该请求处理器115的标识符),则msa300确定该目标数据对象d已为该请求处理器115而锁定;而如果数据[l]中的标识符与id不匹配,则msa300确定该目标数据对象d已为另一请求处理器115而锁定。又例如,锁定对象l可包括已锁标志,该已锁标志可被设定(例如,设为1)以指示目标数据对象d(或包含该目标数据对象d的区域)被锁定,或者可被重置(例如,设为0)以指示该目标数据对象d(或包含该目标数据对象d的区域)未锁定;在此示例中,当设定了已锁标志时,该锁定对象还可包括已为其锁定了该目标数据对象d的处理器115的标识符。如果目标数据对象d未锁定(步骤块2003的应答为yes),则进程继续进行至步骤块2004。如果目标数据对象d锁定(步骤块2003的应答为no),则进程继续进行至步骤块2006。

在步骤块2004中,msa300将目标数据对象d标记为已为请求处理器115而锁定。例如,msa300可通过将id(对应于该请求处理器的标识符)存储在该锁定对象l中、将该目标数据对象d标记为已为该请求处理器115而锁定,如图5a和6a所示。然后,进程继续进行至步骤块2005。

在步骤块2005中,msa300对目标数据对象d执行所请求的访问操作。例如,如果所请求的访问操作是加载操作,则msa300可提取存储在目标数据对象d中的数据(数据[d]),如图5a所示。又例如,如果所请求的访问操作是存储操作,则msa300可在目标数据对象d中存储该锁定-访问消息的数据负载,如图6a所示。msa300还可返回成功消息给该请求处理器115以指示已成功获得锁定并且已成功执行访问操作。在所请求的访问操作为加载的示例中,该成功消息还可包括所提取的数据[d]作为数据负载。此类成功消息的示例包括图5a和6a中的消息lock-load_success(data[d])和消息lock-store_success。在某些示例中,可原子地执行步骤块2004和2005。然后,该进程可结束。

在步骤块2006中,msa300放弃执行所请求的访问操作,并且放弃为请求处理器115锁定该目标数据对象d,如图5b和6b所示。msa300还可返回错误消息给该请求处理器115,指示未获得锁定并且未执行所请求的访问操作,如图5b和6b所示。此类消息的示例包括图5b和6b中的消息“lock-load_error”和消息“lock-store_error”。

图7图示可由其中一个节点100的处理器115响应于正被调用的访问-解锁指令而执行的示例性进程1010。例如,节点100上运行的os或其他进程可调用节点100的处理器115处的此类指令。具体地,处理器115的指令集可包括访问-解锁指令,当在给定处理器115中调用该指令时,可使该给定处理器115执行图7所示的操作。换言之,处理器115可根据指令集架构而被设计为能够适当地处理此类访问-解锁指令(当被调用时)以执行在此描述的操作。

在此使用的“访问-解锁指令”指的是可由机柜式系统(比如机柜式系统10)的处理器(比如处理器115)运行的、使该处理器生成并发送访问-解锁消息给该机柜式系统的msa(比如msa300)的任意指令。该访问-解锁消息包括:第三存储器容量,指向正请求对其访问和解锁的永久存储器中的目标数据对象;第四存储器容量,指向该永久存储器中的锁定对象,该锁定对象控制该目标数据对象(或包含该目标数据对象的区域)的锁定;以及所请求的访问操作的类型的指示。通过发送该访问-解锁消息给msa,处理器可经由单个消息同时请求对该机柜式系统(比如机柜式系统10)中全局共享式永久存储器中的该指定目标数据对象执行访问操作并且解锁该目标数据对象(或者,在某些示例中,该永久存储器中包括该目标数据对象的指定区域)。由于可请求多种类型的存储器访问操作,可将多种相区别的指令归类为“访问-解锁指令”。具体而言,任意存储器访问操作可具有特定的访问-解锁指令,例如,加载操作(也称为读操作)、存储操作(也称为写操作)等等。在下文中,指定访问操作为“加载”的访问-解锁指令的例程可被称为“加载-解锁指令”,而指定访问操作为“存储”的访问-解锁指令的例程可被称为“存储-解锁指令”。

在步骤块1011中,处理器115响应于正被调用的访问-解锁指令而生成访问-解锁消息,该消息包括:第三存储器容量(c3[d]),指向正请求对其锁定的永久存储器400中的目标数据对象(d);第四存储器容量(c4[l]),指向该永久存储器400中的锁定对象(l),其控制该目标数据对象d(或包含该目标数据对象d的区域)的锁定;以及所请求的访问操作的类型的指示。该访问-解锁消息还可包括对应于请求处理器115的标识符(id),并且如果有利于所请求的访问类型、还可包括数据负载(例如,对于存储操作,可包含数据负载)。例如,每个访问-解锁消息可包括:第一字段,包括指定该消息的类型的信息(其可隐含地指定所请求的访问的类型);第二字段,包括c3[d];第三字段,包括c4[l];第四字段,包括id;以及第五字段,用于数据负载(如果存在)。在某些示例中,不在该访问-解锁消息中指定id,而是由msa300基于源信息确定id,源信息是通过存储器区块链部署总账桥接器130和/或存储器区块链部署总账200附录至该访问-解锁消息中的。访问-解锁消息的示例包括:图9a和9b中示出的消息load-unlock(c3[d],c4[l],id)以及图10a和10b中示出的消息store-unlock(c3[d],c4[l],id,负载)。

在某些示例中,访问-解锁消息的第三存储器容量c3[d]和第四存储器容量c4[d]可能分别与先前由处理器115发送给msa300的锁定-访问消息的第一存储器容量c1[d]和第二存储器容量c2[d]相同。例如,处理器115可经由锁定-访问消息锁定并访问目标数据对象d,然后可经由访问-解锁消息先后访问并解锁同一目标数据对象d(在该锁定-访问消息与该访问-解锁消息之间可能伴随着该目标数据对象d的中间访问)。

在步骤块1012中,处理器115将步骤块1011中生成的访问-解锁消息发送给msa300。尽管在此为了便利的目的将步骤块1012和1011分开进行了描述,但在某些示例中,它们可同时执行(例如,访问-解锁消息的发送也可构成该消息的生成)。

图8图示可由msa300响应于从给定节点100接收到访问-解锁消息而执行的进程3000的示例。具体地,msa300的逻辑电路和/或由msa300的处理器115运行的机器可读指令可使msa300执行图8所示的操作。

在步骤块3001中,msa300从给定节点100的请求处理器115接收到访问-解锁消息。如上文中关于图7所述,访问-解锁消息包括第三存储器容量c3[d]、第四存储器容量c4[l]以及所请求的访问操作类型的指示。访问-解锁消息还可包括id,并且在某些例程中还包括数据负载。访问-解锁消息的示例包括:图9a和9b中示出的消息load-unlock(c3[d],c4[l],id)以及图10a和10b中示出的消息store-unlock((c3[d],c4[l],id,负载)。然后,进程继续进行至步骤块3002。

在步骤块3002中,msa300响应于接收到该访问-解锁消息而审查接收到的消息,以识别由第四存储器容量c4[l]指向的锁定对象l,并且从永久存储器400提取存储在该锁定对象l中的数据(数据[l])。然后,进程继续进行至步骤块3003。

在步骤块3003中,msa300确定所提取的信息数据[l]是否指示该目标数据对象d未锁定。例如,如果目标数据对象d未锁定(步骤块3003的应答为yes),则进程继续进行至步骤块3004。如果目标数据对象d锁定(步骤块3003的应答为no),则进程继续进行至步骤块3006。

在步骤块3004中,msa300对目标数据对象d执行请求的访问操作。例如,如果所请求的访问操作是加载操作,则msa300可从永久存储器400提取存储在目标数据对象d中的数据(data[d]),如图9a所示。又例如,如果所请求的访问操作是存储操作,则msa300可在目标数据对象d中存储该访问-解锁消息的数据负载,如图10a所示。msa300还可返回成功消息给该请求处理器115,以指示已成功获得锁定并且已成功执行访问操作。在所请求的访问操作为加载的示例中,该成功消息还可包括所提取的数据[d]作为数据负载。此类成功消息的示例包括图9a和10a中的消息load-unlock_success(data[d])和消息store-unlock_success。然后,该进程可继续进行至步骤块3005。

在步骤块3005中,msa300将目标数据对象d标记为未锁定。例如,msa300可通过清空(例如,在其中存储零)全部或部分该锁定对象l、将该目标数据对象d标记为未锁定,如图9a和10a所示。在某些示例中,步骤块3004和3005可原子地执行。然后,进程可结束。

在步骤块3006中,msa300放弃执行所请求的访问操作,并且放弃解锁该目标数据对象d,如图9b和10b所示。msa300还返回错误消息给该请求处理器115,指示该目标数据对象d未锁定并且未执行所请求的访问操作,如图9b和10b所示。此类错误消息的示例包括图9b和10b中的消息load-unlock_error和消息store-unlock_error。

图11图示可由msa300响应于从给定节点100接收到锁定-访问消息而执行的进程2100的示例。具体地,msa300的逻辑电路和/或由msa300的处理器运行的机器可读指令可使msa300执行图11所示的操作。

示例性进程2100是示例性进程2000的变型。具体地,示例性进程2100包括示例性进程2000,并且增加了子进程2101。特别地,示例性进程2100包括步骤块2001-2006,其类似于示例性进程2000中的步骤块2001-2006;除此以外,示例性进程2100还包括步骤块2007-2009(其构成该子进程2101)。下文中未详细描述示例性进程2100的步骤块2001-2006,以避免重复说明。上文中关于示例性进程2000对步骤块2001-2006的描述可适用于示例性进程2100的步骤块2001-2006,并且具有如下修改。

子进程2101在步骤块2003的决策产生的分支中的no分支上,位于步骤块2003与步骤块2006之间。如果步骤块2003的结果是no,则在步骤块2003之后运行子进程2101。步骤块2003和/或2006被修改为使得可经由子进程2101的路径a到达步骤块2006,而不是直接从步骤块2003到达步骤块2006。

特别地,如果步骤块2003的判断结果是no(数据[l]表示该目标数据对象d锁定),则进程继续进行至步骤块2007。在步骤块2007中,msa300确定数据[l]中的标识符是否匹配于id(即,该目标数据对象d是否已为该请求处理器锁定)。如果应答为yes(数据[l]中的标识符匹配于id),则进程继续进行至步骤块2008。如果应答为no(数据[l]中的标识符不匹配于id),则进程经由路径a继续进行至步骤块2006。

在步骤块2008中,msa300核查与锁定对象l相关联的递归计数,并且确定该递归计数的数值是否大于零。例如,该递归计数可存储在锁定对象l中,这种情况下数据[l]的一部分可对应于该递归计数。如果步骤块2008的应答为yes(递归计数大于零),则进程继续进行至步骤块2009。如果如果步骤块2008的应答为no(递归计数等于零),则进程经由路径a继续进行至步骤块2006。

在步骤块2009中,msa300减小递归计数。例如,如果递归计数存储在锁定对象l中,则msa300可通过减小递归计数的方式对该锁定对象l进行写入,但继续将标识符存储在该锁定对象l中。然后,该进程可经由路径b继续进行至步骤块2005。

因此,在示例性进程2100中增加了子进程2101,以对处理处理器115的以下现象的处理的替换方式:当已为处理器115锁定了目标数据对象d时,该处理器115发送针对该目标数据对象d的锁定-访问消息。具体地,如果已为处理器115锁定了目标数据对象d时、该处理器115发送了针对该目标数据对象d的锁定-访问消息,这可能导致msa300拒绝图4中示例性进程2000中所请求的锁定和访问操作(步骤块2006),而是使msa300执行图11中示例性进程2100中所请求的访问操作。

例如,当响应于处理器115的访问-锁定消息而锁定目标数据对象d时,msa300可将递归计数设为数值n,其中n可在该访问-锁定消息中指定,或者可根据缺省值确定。这可允许msa从同一处理器115接收到多达n个的额外的访问-锁定消息而不会发生错误,并且可执行其中所请求的访问操作(步骤块2005)。然而,在递归计数归零之后,来自同一处理器115的进一步的访问-锁定消息将会发生错误(步骤块2006)。

图11中,为了易于说明,步骤块2003和2007中反映的决策过程被概念化地例示为在两个嵌套式yes-no决策块中进行。然而,在某些示例中,决策块2003和2007中反映的决策过程可为具有三个可能的结果分支的单个非二进制决策块的一部分。例如,可在单次操作中确定数据[l]:是否不包括标识符(如果是,则前往步骤块2004),是否包括与id匹配的标识符(如果是,则前往步骤块2008),或者是否包括与id不匹配的标识符(如果是,则前往步骤块2006)。

图12图示可由msa300响应于从给定节点100接收到锁定-访问消息而执行的进程2200的示例。具体地,msa300的逻辑电路和/或由msa300的处理器运行的机器可读指令可使msa300执行图12所示的操作。

示例性进程2200是示例性进程2000的变型。具体地,示例性进程2200包括示例性进程2000,并且增加了子进程2201。特别地,示例性进程2200包括步骤块2001-2006,其类似于示例性进程2000中的步骤块2001-2006;除此以外,示例性进程2100还包括步骤块2010-2011(其构成该子进程2201)。下文中未详细描述示例性进程2200的步骤块2001-2006,以避免重复说明。上文中关于示例性进程2000对步骤块2001-2006的描述可适用于示例性进程2200的步骤块2001-2006,并且具有如下修改。

子进程2201在步骤块2003的决策产生的分支中的no分支上,位于步骤块2003与步骤块2006之间。如果步骤块2003的结果是no,则在步骤块2003之后运行子进程2201。步骤块2003和/或2006被修改为使得可经由该子进程2201的路径c到达该步骤块2006,而不是直接从步骤块2003到达该步骤块2006。

特别地,如果步骤块2003的判断结果是no(数据[l]表示该目标数据对象d锁定),则进程继续进行至步骤块2010。在步骤块2010中,msa300确定:(1)锁定该目标数据对象d的锁定类型是否允许其他处理器读取该目标数据对象d;以及(2)操作类型是否为“加载”(也称为读)。例如,可使用多种类型的锁定,比如排他锁定(防止其他处理器115以任何形式访问该目标数据对象)和只读锁定(防止其他处理器115对目标数据对象进行写入,但允许其它处理器115从该目标数据对象读取)。例如,锁定-访问消息可包括所请求的锁定的类型的指示。锁定的类型可记录在锁定对象l中。例如,锁定对象l可包括锁定的类型的字段。又例如,阅读器计数器(如下所述)可用于指示锁定的类型,并且阅读器计数器的非零数值指示锁定类型为只读锁定。如果步骤块2010中的应答为yes(锁定允许读取,并且所请求的操作为加载),则进程继续进行至步骤块2001。如果步骤块2010中的应答为no(锁定不允许读取和/或所请求的操作不为读),则进程经由路径c继续进行至步骤块2006。

在步骤块2011中,msa300增加与锁定对象l相关联的阅读器计数器。阅读器计数器例如可存储在锁定对象l中,在此情况下,数据[l]的一部分可对应于该阅读器计数器。在某些示例中,(除先前请求过锁定的处理器115的id之外)请求处理器115的id也可存储在锁定对象l中。在某些示例中,读取计数可为存储在该锁定对象l中的处理器id的数量的计数。尽管未示出,可响应于接收到的加载-解锁消息而增加该阅读器计数器。此外,如果每个读处理器115的id都存储在锁定对象l中,则可从该锁定对象l中删除发送该加载-解锁消息的处理器115的id。因此,例如,通过核查该阅读器计数器,可确定是否仍有任何处理器115正读取目标数据对象。

因此,在示例性进程2200中增加子进程2201以提供多种可请求的锁定类型的选择。具体地,子进程2201允许请求对目标数据对象d的只读锁定,这可防止随后的写入请求、但允许其他处理器115的读请求。具体地,如果当接收到访问-锁定消息时该目标数据对象d是锁定的(步骤框2002的应答是no),则无论锁定的类型或者所请求的操作类型如何,在示例性进程2000中拒绝所请求的访问(步骤块2006);但如果锁定的类型允许读取并且该请求的类型为加载(读),则在示例性进程2200中可允许所请求的操作(经由路径d)。

图12中,为了易于说明,步骤块2003和2010中反映的决策过程被概念化地例示为在两个嵌套式yes-no决策块中进行。然而,在某些示例中,决策块2003和2010中反映的决策过程可为具有三个可能的结果分支的单个非二进制决策块的一部分。例如,可在单次操作中确定:数据[l]是否不包含标识符(如果是,则前往步骤块2004);数据[l]是否包含标识符,数据[l]是否指示允许读取的锁定类型并且所请求的操作是否为加载(如果是,则前往步骤块2011);或者,数据[l]是否包含标识符并且数据[l]是否指示不允许读取的锁定类型或者所请求的操作是否不为加载(如果是,则前往步骤块2006)。

图13图示可由msa300响应于从给定节点100接收到锁定-访问消息而执行的进程2300的示例。具体地,msa300的逻辑电路和/或由msa300的处理器运行的机器可读指令可使msa300执行图13所示的操作。

示例性进程2300是示例性进程2000的变型。具体地,示例性进程2300包括示例性进程2000,并且增加了子进程2301。特别地,示例性进程2300包括步骤块2001-2006,其类似于示例性进程2000中的步骤块2001-2006;除此以外,示例性进程2300还包括步骤块2012-2013(其构成该子进程2301)。下文中未详细描述示例性进程2300的步骤块2001-2006,以避免重复说明。上文中关于示例性进程2000对步骤块2001-2006的描述可适用于示例性进程2300的步骤块2001-2006,并且具有如下修改。

子进程2301在步骤块2003的决策产生的分支中的no分支上,位于步骤块2003与步骤块2006之间。如果步骤块2003的结果是no,则在步骤块2003之后运行子进程2301。步骤块2003和/或2006被修改为使得可经由子进程2201的路径e到达步骤块2006,而不是直接从步骤块2003到达步骤块2006。

特别地,如果步骤块2003的决定结果是应答no(数据[l]表示该目标数据对象d锁定),则进程继续进行至步骤块2012。在步骤块2012中,msa300确定该访问-锁定消息中是否设有保持标志。如果步骤块2012中的应答为yes(设有保持标志),则进程继续进行至步骤块2013。如果步骤块2012中的应答为no(未设保持标志),则进程经由路径e继续进行至步骤块2006。

在步骤块2013中,msa300等待直至目标数据对象d解锁。例如,msa300可等待,直至其通过清空锁定对象l而解锁该目标数据对象d。一旦解锁目标数据对象d,进程可经由路径f继续进行至步骤块2004。

因此,在示例性进程2300中增加子进程2301以提供以下选择:保持由访问-锁定消息请求的锁定和访问,直至该目标数据对象d解锁。这可减少存储器区块链部署总账200上消息的数量,因为避免了发给请求处理器115的错误消息和发自该请求处理器115的重发尝试。然而,这种行为很可能会使处理器115永久停工并等待数据,因此在某些示例中,该特征是在无死锁的受信环境下激活的。

图13中,为了易于说明,步骤块2003和2012中反映的决策过程被概念化地例示为在两个嵌套式yes-no决策块中进行。然而,在某些示例中,决策块2003和2012中反映的决策过程可为具有三个可能的结果分支的单个非二进制决策块的一部分。例如,可在单次操作中确定:数据[l]是否不包含标识符(如果是,则前往步骤块2004);数据[l]是否包含标识符并且设有保持标志(如果是,则前往步骤块2013);或者数据[l]是否包括标识符并且未设保持标志(如果是,则前往步骤块2006)。

在上文中描述了示例性进程2000的示例性变型,其中分别对示例性进程2000增加了子进程2101、2201和2301。然而,示例性进程2000的额外的示例性变型也落入本公开的设想范围内,包括以任意运行顺序将子进程2101、2201和2301的任意组合加入该示例性进程2000的示例。当将多个子进程2101、2201和2301加入该示例性进程2000中时,该子进程可被嵌套以使得步骤块2003的no分支为第一子进程的输入,使第一子进程的输出路径a、c或e为第二子进程的输入,并且使第二子进程的输出路径a、c或e为第三子进程的输入(如果存在第三子进程)。例如,子进程2101之后可为子进程2201和2301中的任一,以使得子进程2101的输出路径a为其后的子进程2201或2301的输入。又例如,子进程2201之后可为子进程2101和2301中的任一,以使得子进程2201的输出路径c为其后的子进程2101或2301的输入。又例如,子进程2301之后可为子进程2101和2201中的任一,以使得子进程2301的输出路径e为其后的子进程2101或2201的输入。

虽然未示出,在进程2000(或其任意变型)的某些示例中,决策块2003还可确定目标数据地址d是否包含在数据[l]中包含的边界信息所指定的锁定区域内。在此示例中,如果该目标数据地址d包含在该锁定区域内并且数据[l]指示该目标数据地址未锁定,则进程沿着yes分支继续进行(例如,行进至步骤块2004)。在此示例中,如果该目标数据地址d不包含在该锁定区域内或者数据[l]指示该目标数据地址锁定,则进程沿着no分支继续进行(例如,行进至步骤块2006或者至子进程2101、2201和2301中的一个)。

虽然未示出,在进程3000(或其任意变型)的某些示例中,决策块3003还可确定目标数据地址d是否包含在数据[l]中包含的边界信息所指定的锁定区域内。在此示例中,如果该目标数据地址d包含在该锁定区域内并且数据[l]指示该目标数据地址未锁定,则进程继续进行至步骤块3004。在此示例中,如果该目标数据地址d不包含在该锁定区域内或者数据[l]指示该目标数据地址锁定,则进程继续进行至步骤块3006。

在此提供图3、4、7、8和11-13中的进程流程图及其描述以辅助对该示例性进程的理解,而非旨在对其进行穷举说明。例如,示例性进程可包括除附图所示和在此描述的之外的额外的操作。又例如,示例性进程可省略附图中所示和在此描述的某些操作。而且,为了易于说明,各操作示出为具有特定顺序,但在实践中,一些操作可同时执行和/或以不同于所例示的顺序执行。此外,为了易于理解而分开描述的某些操作在实践中可作为单个操作的一部分一起执行。

图14图示一种示例性非暂态机器可读介质5000,其存储锁定-访问指令5010和/或访问-解锁指令5020。机器可读介质5000可包括可存储指令并且可由机器读取的任意非暂态介质,比如存储装置(例如,本地存储器120、永久存储器400、usb驱动等等)、硬盘驱动、固态驱动、光盘(例如,cd、dvd、蓝光等等)、磁盘等等。

锁定-访问指令5010可包括上文中限定的任意“锁定-访问指令”。例如,锁定-访问指令5010可包括具有如下特质的指令:当在机柜式系统(比如机柜式系统10)的处理器(比如处理器115)中调用该指令时,该指令可使该处理器执行上文中关于示例性进程1000描述并且在图3中示出的操作。例如,锁定-访问指令5010可包括锁定-加载指令5011和/或锁定-存储指令5012。

锁定-访问指令5010可包括指示其指令类型(例如,其为锁定-访问指令以及所请求的访问的类型)的字段(例如,操作码),以及指定目标数据对象(或者存储指定该目标数据对象的信息的位置(例如,寄存器))并且可能还有数据负载(或存储该数据负载的位置(例如,寄存器))的字段(例如,操作码)。在某些示例中,锁定-访问指令5010还可包括指定锁定对象(或者存储指定该锁定对象的信息的位置)的字段(例如,操作码),但在其他示例中,不在该锁定-访问指令5010中指定该锁定对象(例如,运行该锁定-访问指令的处理器可被配置为基于目标数据对象自动识别锁定该目标数据对象的该锁定对象)。在某些示例中,锁定-访问指令5010还可包括:用于指定与锁定对象相关联的递归计数的设定数的字段(参见图11及其说明),用于指定所请求的锁定是否允许其他处理器在目标数据地址被锁定时读取该目标数据地址的字段(参见图12及其说明),和/或用于指定msa是否应该等待直至数据对象解锁以执行所请求的锁定和访问的字段(参见图13及其说明)。在某些示例中,可在指令类型中暗示所请求的锁定是否允许其他处理器在目标数据地址被锁定时读取该目标数据地址,并且因此其可能不通过单独的字段指定(例如,可对“只读”锁定和“排他”锁定使用不同的操作码)。

访问-解锁指令5020可包括如上限定的任意“访问-解锁指令”。例如,访问-解锁指令5020可包括具有如下特质的指令:当在机柜式系统(比如机柜式系统10)的处理器(比如处理器115)中调用该指令时,该指令可使该处理器执行上文中关于示例性进程1010描述并且在图7中示出的操作。例如,访问-解锁指令5020可包括加载-解锁指令5021和/或存储-解锁指令5022。

访问-解锁指令5020可包括指示其指令类型(例如,其为访问-解锁指令以及所请求的访问的类型)的字段(例如,操作码),以及指定目标数据对象(或者存储指定该目标数据对象的信息的位置(例如,寄存器))并且可能还有数据负载(或存储该数据负载的位置(例如,寄存器))的字段(例如,操作码)。在某些示例中,访问-解锁指令5020还可包括指定锁定对象(或者存储指定该锁定对象的信息的位置)的字段(例如,操作码),但在另一些示例中,不在该访问-解锁指令5020中指定该锁定对象(例如,运行该访问-解锁指令的处理器可被配置为基于目标数据对象自动识别锁定该目标数据对象的该锁定对象)。

在此使用的“处理器”可包括能够运行存储在非暂态机器可读介质(比如本地存储器120、永久存储器400、光盘、磁盘等)中的机器可读指令的任意逻辑电路。例如,“处理器”(比如处理器115)可为,例如,中央处理单元(cpu)、微处理器、微控制器、数字信号处理器(dsp)等。

在此使用的“协同处理器”是被配置为补充主处理器功能的处理器。在某些示例中,协同处理器可由协同处理器指令控制,该协同处理器指令为主处理器的指令流的一部分。在另一些示例中,协同处理器可独立于主处理器,并且能够与主处理器异步工作。

在此使用的“全局”意味着适于系统10的所有节点100。例如,全局永久存储器400的全局性是指:有可能使系统10中的所有节点100都获准访问该永久存储器400。这不一定意味着在给定时间点该系统中的所有节点100实际上都获准访问该永久存储器400,而是指其能够获准进行此访问(经由全局策略引擎500)。又例如,该全局策略引擎的全局性是指:其可为系统中的所有节点100设定访问协议。

在此使用的“操作系统”或“os”广义地指管理硬件和软件资源的系统软件,其可包括基于unix的os、基于linux的os、基于微软窗口的os等等,以及管理程序和容器引擎。

在此使用的“永久存储器”指的是相对于节点100永久地存储信息的任意存储装置。相对于节点100永久地存储信息意味着所存储的信息具有独立于各个节点100的时效。这可包括非易失性存储器和易失性存储器。

在此使用的“对象”指的是全局永久存储器中物理地址空间的物理存储器地址或物理存储器地址范围(即,区域)。“数据对象”是存储数据的对象,意指即将存储数据的物理存储器地址或物理存储器地址范围。“锁定对象”是控制数据对象的锁定的对象,意指经由其内存储的信息控制数据对象的锁定的物理存储器地址或物理存储器地址范围。

本公开和随附权利要求书中偶尔涉及“多个”事项。所涉及的“多个”意味着大于等于1的任意整数。当以此方式使用“多个”时,描绘该事项的词语可书写为复数形式以保持语法的一致性,但这并不一定意指指代的是多个事项。因此,例如,诸如“多个处理器,其中该处理器”的短语可包含一个处理器和多个处理器两种情况,即使使用了复数形式。

短语“多个”可用于指代一些事项的这一事实不应被解读为:在指代其他事项时省略该短语“多个”意味着该事项必然是单数或者必然是复数。

具体地,当使用冠词“一”、“一个”和“该”指代事项而不明确指示单数还是复数时,这应被理解为意指存在“至少一个”该事项,除非另外清楚指明。当以这种方式使用这些冠词时,描绘该事项的词语应书写为单数形式以保持语法的一致性,但这并不一定意味着仅指代一个该事物。因此,例如,比如“一处理器,其中该处理器…”的短语应包括一个处理器和两个处理器两种情况,即使使用了单数形式。

在此偶尔结合事项列表使用了短语“和/或”。该短语意指列表中事项的任意组合,可包含从单个事项直至全部事项以及其间的任意排列。因此,例如,“a、b和/或c”意指“{a}、{b}、{c}、{a,b}、{a,c}、{c,b}和{a,c,b}中的一个”。

虽然已参照前述示例示出并且描绘了上述公开内容,但应理解的是,在不脱离本公开的实质和范围的前提下,可做出其他形式、细节和实施方式。

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