CN101326494B - 协调硬件事务和软件事务对存储单元的访问的方法和系统 - Google Patents
协调硬件事务和软件事务对存储单元的访问的方法和系统 Download PDFInfo
- Publication number
- CN101326494B CN101326494B CN2006800465322A CN200680046532A CN101326494B CN 101326494 B CN101326494 B CN 101326494B CN 2006800465322 A CN2006800465322 A CN 2006800465322A CN 200680046532 A CN200680046532 A CN 200680046532A CN 101326494 B CN101326494 B CN 101326494B
- Authority
- CN
- China
- Prior art keywords
- storage unit
- software transaction
- software
- visit
- transaction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
- G06F9/467—Transactional memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/50—Control mechanisms for virtual memory, cache or TLB
- G06F2212/507—Control mechanisms for virtual memory, cache or TLB using speculative control
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Storage Device Security (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明提供了用于协调硬件事务存储器事务和软件事务存储器事务对存储单元的访问的方法、系统和程序。在硬件事务存储器中执行的硬件事务发起访问存储单元的请求。响应由在软件事务存储器中执行的一个软件事务进行的操作,将错误返回到硬件事务请求。
Description
背景技术
事务执行和存储器允许程序作为单个原子操作来对存储单元进行读取和修改。事务是包括存储器读取和写入的机器指令的有限序列。事务可顺序执行,使得一个事务的步骤不与另一个事务的步骤交错。此外,事务是原子的,以及或者提交它对存储器的写入、使得事务对存储器的改变是其它进程全部同时可见的,或者中止并放弃改变。
对于事务执行存在两种模型,硬件事务存储器(HTM)和软件事务存储器(STM)。HTM包括完全在处理器硬件中实现的硬件事务。对于硬件事务,可将数据存储在硬件寄存器和高速缓存中,使得通过硬件自动进行所有高速缓存动作,并且仅在提交事务时才将HTM中的数据写入主存储器。在事务进行提交之前,HTM保持所有推测写入,而不传播到主系统存储器、如随机访问存储器(RAM)设备。如果硬件事务中止,则放弃保持HTM中的试探写入的高速缓存线。HTM硬件事务可利用高速缓存一致性协议来检测和管理HTM硬件事务之间的冲突。高速缓存一致性协议跟踪硬件事务中的访问。如果两个硬件事务正访问同一个存储单元,则当存在冲突时,HTM中止一个事务,否则可将事务的改变提交给系统存储器。
通过软件来实现软件事务存储器(STM)。将所有推测STM事务数据存储在系统存储器中,并将它表示为处于未提交状态。当STM事务提交时,将事务写入的任何数据表示为已提交并且随后是其它线程和事务可用的。在某些STM系统中,可设置标志以便将数据表示为已提交并且在存储器中是其它事务可访问且可用的。
HTM事务通常需要比STM事务更少的开销,因为HTm事务完全通过硬件进行。由于硬件限制,可将HTM事务限于较小的事务,而STM事务可处理很大且较长的事务。
本领域需要允许HTM和STM事务在集成环境中共同操作并防止HTM与STM事务之间的冲突、以便提供HTM的效率同时提供STM的保证的技术。发明内容根据本发明的第一方面,提供了一种用于协调硬件事务和软件事务对存储单元的访问的方法,包括:由能够在硬件事务存储器中执行的所述硬件事务发起访问存储单元的请求,其中,所述硬件事务和软件事务能够访问存储单元;以及由在软件事务存储器中执行的软件事务来执行操作,其中,所述操作使错误返回到硬件事务请求,其中,由所述软件事务执行的、使所述错误返回的操作包括:所述软件事务将用于访问所请求的存储单元的虚拟存储器地址改变为新的虚拟存储器地址,其中响应在一个软件事务改变了所请求的存储单元的所述存储器地址之后、所述硬件事务没有使用所述新的虚拟存储器地址来访问所请求的存储单元,而将所述错误返回到所述硬件事务。根据本发明的第二方面,提供了一种用于协调硬件事务和软件事务对存储单元的访问的系统,包括:存储器,包括存储单元;硬件事务存储器,用于存储硬件事务所使用的数据;软件事务存储器,用于存储软件事务的数据;其中,所述硬件事务适合于在所述硬件事务存储器中发起访问所述存储单元其中之一的请求;以及其中,所述软件事务适合于在所述软件事务存储器中执行,所述软件事务执行使错误返回到硬件事务请求的操作,其中,由所述软件事务执行的、使所述错误返回的操作包括:所述软件事务将用于访问所请求的存储单元的虚拟存储器地址改变为新的虚拟存储器地址,其中响应在一个软件事务改变了所请求的存储单元的所述存储器地址之后、所述硬件事务没有使用所述新的虚拟存储器地址来访问所请求的存储单元,而将所述错误返回到所述硬件事务。根据本发明的第三方面,提供了一种用于协调硬件事务和软件事务对存储单元的访问的方法,包括:由在硬件事务存储器中执行的硬件事务来发起访问存储单元的请求;以及响应由在软件事务存储器中执行的一个软件事务进行的操作,将错误返回到硬件事务请求,其中,由所述软件事务执行的、使所述错误返回的操作包括:所述软件事务将用于访问所请求的存储单元的虚拟存储器地址改变为新的虚拟存储器地址,其中响应在一个软件事务改变了所请求的存储单元的所述存储器地址之后、所述硬件事务没有使用所述新的虚拟存储器地址来访问所请求的存储单元,而将所述错误返回到所述硬件事务。
附图说明
图1示出计算环境的一实施例。
图2示出映射到STM所有权表中的记录的存储单元的一实施例。
图3示出页面保护属性信息的一实施例。
图4示出软件事务的事务描述符信息的一实施例。
图5示出具有关于访问存储单元的软件事务的信息的STM所有权记录。
图6示出软件事务访问存储单元所执行的操作的一实施例。
图7示出硬件事务访问存储单元所执行的操作的一实施例。
图8和图10示出软件事务访问存储单元所执行的操作的另一实施例。
图9示出图8的操作中的页面跟踪信息的一实施例。
具体实施方式
图1示出计算环境的一个实施例。系统2包括例如中央处理器等处理器4以及例如易失性存储设备等用作系统2的主存储器的存储器6。处理器4包括硬件事务存储器(HTM)8,其中包括处理器4的硬件中的寄存器和其它存储区、如板载高速缓存,它存储处理器4的硬件中执行的硬件事务10所使用的数据。在提交阶段,将更新从HTM 8到存储器6的硬件事务10写入。硬件事务10利用例如高速缓存一致性协议等技术来防止两个或多于两个硬件事务10相对于同一个存储单元执行冲突操作。处理器4还包括事务后备缓冲器(TLB)12,它使处理器6能够通过存储器6中的虚拟地址空间来访问数据。TLB 12将虚拟地址转换为物理地址,并检查访问权限,使得仅当请求进程具有正确的授权时,才容许对处理器4的硬件指令、数据或I/O的访问。
可在一个或多个电子存储设备中实现的存储器6包括应用存储器14,它存储来自应用程序以及硬件事务10和软件事务16的数据。可将应用存储器14中的数据存储在页面18中,其中各页面18具有映射到虚拟地址的多个可寻址位置。软件事务16包括原子事务,其数据存储在软件事务存储器(STM)20中,该存储器通过存储器6中的数据结构来实现。在提交阶段,将STM 20中存储的写入施加到对其它进程和事务可用的应用存储器14。
虚拟存储管理器22管理存储器6中的虚拟地址到物理地址的映射,其中,虚拟地址可对存储器6中或者交换到存储装置24中的页面18上的数据寻址。虚拟存储管理器22在数据页面被访问时将数据页面18从存储装置24换入到存储器6中,以及从存储器6将数据页面18换出到存储装置24中,以便为存储装置24中已经请求存储单元的页面留出空间。存储装置24可包括例如硬盘驱动器等非易失性存储装置,或者例如低级易失性存储设备等电子存储设备,或者例如闪存设备、电可擦除可编程存储器(EEPROM)等非易失性电子存储器。虚拟存储管理器22保存包含关于换入到存储器6中的页面的信息的页面保护属性26,用来管理对页面18中的存储单元的访问。
软件事务16利用软件事务存储器(STM)所有权表28,该表由软件事务16用于使它们对应用存储器中的存储单元的访问同步,并防止两个软件事务16同时访问和修改同一个存储单元。页面跟踪器30提供应用存储器14中被软件事务16所访问的页面18的列表。可将能够在系统2中执行的各事务编译为将作为软件事务16执行的软件功能模块32以及编译为将由硬件事务10执行的硬件功能模块34。这样,任何事务均可在HTM 8或STM 20中执行,以便提供执行事务的综合方法。
图2示出应用存储器堆50中例如所示虚拟地址a1、a2、a3和a4等可寻址存储单元如何映射到STM所有权表28中例如52a、52b等所有权记录条目的一个实施例。由可在一个进程的独立线程上执行的软件事务16来共享STM所有权表28。可使用哈希函数将虚拟存储器地址映射到STM所有权表28中的所有权记录条目。STM所有权表28中的各所有者记录指向事务描述符,例如事务描述符54a、54b,它们提供关于“拥有”或被容许对存储单元的访问的软件事务16的信息。如果不存在正访问那个存储单元的事务,则STM所有权记录可包括空指针或者其它某种形式的指示。
图3示出可包含在提供一个页面18的属性信息的页面保护属性26的实例60中的信息的一个实施例。页面保护属性60提供属性信息为其提供的页面18的页面标识符(ID)62以及表明软件事务16是否有权访问所标识页面上的一个存储单元的事务标志64。
图4示出事务描述符54、如54a、54b(图2)中包含的信息的一实施例,其中包括:事务标识符(ID)70,标识一个软件事务16;事务状态,标识软件事务的状态,例如活动(但未提交)、已提交(它表示软件事务正采用来自STM 20的更新来更新事务期间被访问的应用存储器14中的存储单元)或者表明事务不再访问该存储单元的已完成;以及被访问的存储单元74的本地副本。
图5示出例如所有权记录52a和52b(图2)等STM所有权记录52中包含的信息的一实施例,其中包括:记录标识符(ID)80,标识所有权记录,它可包括对记录的索引;事务描述符指针82,标识有权访问与所有权记录52相关联的存储单元的事务描述符54;以及用来访问与STM所有权记录52相关联的存储单元的虚拟存储器地址84。
图6示出由编译软件功能模块32中编码的软件事务16执行的操作的一个实施例,该事务使用STM所有权表28来使对应用存储器14的访问同步。在框100,软件事务16发起访问应用存储器14中的存储单元以便进行读或写操作的操作。要访问存储单元,软件事务16访问(在框102)存储单元的所有权记录52,以便确定另一个软件事务是否正访问(即拥有)该存储单元。可通过将哈希函数应用于软件事务16想要访问的存储单元的虚拟存储器地址,来确定要访问的所有权记录标识符80。如果被访问的所有权记录52包含指向没有已完成或中止事务状态72(图4)的事务描述符54的指针82,则另一个软件事务正访问这个存储单元。如果(在框104)另一个活动软件事务不拥有该存储单元,则请求访问的软件事务将存储单元的被访问的所有权记录52中的事务描述符指针82更新(在框106)为指向标识发起访问的软件事务的事务描述符。软件事务在页面保护属性60中设置(在框108)包括被请求存储单元的页面18的事务标志64(图3),以表明该页面正被软件事务16访问。
在一个实施例中,更新(在框110)页面保护属性60中的事务标志64可能产生那个页面的页面错误或者以其它方式使处理器4中的TLB 12中止正访问页面16上的存储单元的任何硬件事务10。在一个实施例中,可执行TLB终结(shootdown),以便中止正访问其事务标志64被更新的页面上的存储单元的任何硬件事务10。这个过程确保正确处理硬件事务10和软件事务16之间的冲突,因为在软件事务16访问该存储单元时,硬件事务10被中止。然后,在更新存储单元的所有权记录52以便将软件事务标识为有权访问该存储单元之后,软件事务16访问(在框112)该存储单元。还可将事务状态72设置为活动,从而表明软件事务16有权访问该存储单元,但当前未更新应用存储器14的存储单元中的数据、即未提交任何写入。在活动(但未提交)状态中,软件事务16可能正从存储单元进行读取或者在STM20中缓冲更新。如果(在框104)另一个软件事务有权访问该存储单元,则软件事务根据软件事务16的事务描述符54(图4)来确定(在框114)事务状态72,其中软件事务16的事务描述符54由存储单元的所有权记录52中的事务描述符指针82来标识。如果(在框116)事务状态为已提交、即采用STM 20中的写入更新应用存储器14中的存储单元,则请求软件事务16可等待当前所有者完成更新或者帮助更新。在拥有访问权的当前软件事务完成更新之后,控制进入框106,将对于该存储单元的访问权提供给请求软件事务。否则,如果事务状态72为未提交但为活动的,则当前所有者对该存储单元的所有权被中止(在框120),并且控制进入框106,将该存储单元的访问权和所有权提供给请求软件事务16。在某些实施例中,如果拥有存储单元的当前软件事务处于无法从其中回滚(roll back)的状态,则它不会被中止。如果事务所执行的改变在该事务结束时可以反转(即返回到事务开始之前的状态),则可“回滚”该事务。如果当前软件事务所有者处于可以从其中回滚的状态,则它可以被中止。在框116的检查当前所有者软件事务是否正更新存储单元的操作是检查事务是否可回滚的一个实施例。
图7示出由编译硬件功能模块34中编码的硬件事务10执行的操作的一个实施例,该事务使用页面保护属性26来使对应用存储器14的访问同步。在框150,硬件事务10发起访问事务存储器8中的存储单元的操作。硬件事务10确定(在框152)包括被请求存储单元的页面18是否正被软件事务访问。这可由TLB 12或者确定包括被请求存储单元的页面的页面保护属性60中的事务标志64是否表明页面18具有被一个软件事务16访问的存储单元的某个其它处理器4的硬件来确定。如果(在框152)包括被请求存储单元的页面18未被访问,则对硬件事务10提供对存储单元的访问权(在框154)。
否则,如果(在框152)将事务标志64设置成表明软件事务16有权访问包括被请求存储单元的页面,则将页面错误返回(在框156)给请求硬件事务10。然后,硬件事务10可确定(在框158)页面跟踪器30是否表明页面正被软件事务16访问。在一个实施例中,硬件事务10可运行中止处理程序来确定页面错误是软件事务访问包括请求存储单元的页面的结果,还是由可通过调用虚拟存储管理器22以将包括被请求存储单元的页面18换入应用存储器16来校正的一种类型的页面错误所引起的。如果(在框158)页面跟踪器30或某个其它信息表明页面正由软件事务16访问,则请求硬件事务10中止。否则,如果(在框158)页面错误不是由软件事务16访问页面上的存储单元引起的,则硬件事务10确定(在框162)页面错误是否为可能导致一般保护错误的无效页面错误,即无法纠正的页面错误。如果(在框162)页面错误不是无效页面错误,则(在框164)虚拟存储管理器22可换入包括被请求存储单元的页面18。然后,在页面18被换入应用存储器14之后,硬件事务10可访问(在框154)页面18。
否则,如果页面错误是通过将页面16从存储装置24换入应用存储器无法纠正的无效页面错误,则中止硬件事务(在框166),并且硬件事务或者管理错误的其它代码可确定是作为执行该功能的硬件34形式的硬件事务10还是作为执行该功能的软件形式32的软件事务16来重试该功能。该策略可提供,在作为软件事务进行重试并执行功能模块32的软件形式之前,重试被中止硬件事务预定次数。
通过在包括被请求存储单元的页面被活动软件事务访问时阻止硬件事务访问被请求的存储单元,图7的实施例提供确定硬件事务是否将与软件事务冲突的操作。硬件事务10还可执行其它操作、例如通过使用高速缓存一致性协议来避免与其它硬件事务冲突。此外,对于图6和图7的操作,如果两个软件事务正访问一个存储页面上同一个存储单元,则发生两个软件事务之间的争用。在访问一个页面上的不同存储单元的两个软件事务之间不会发生争用。
在图6和图7的所述实施例中,软件事务设置页面保护属性、例如事务标志64(图3),以便防止硬件事务访问被软件事务访问的页面上的存储单元。在备选实施例中,软件事务16可执行不同类型的操作,以防止硬件事务10访问软件事务正访问的存储单元。
图8和图10说明软件事务18引起尝试访问被软件事务16访问的存储单元的硬件事务10的页面错误所执行的操作的一备选实施例。对于图8,在执行(在框200)图6的框106的操作之后以及在执行112之前,获得对存储单元的访问权的软件事务16(在框202)将页面18设置成不许访问(no access)。将页面18设置成“不许访问”涉及改变页面保护属性,它引起TLB终结以及访问该页面的其它硬件事务的中止。但是,即使将页面改变为“不许访问”,软件事务和其它软件事务也需要访问该页面。要允许软件事务16访问页面,引起TLB终结的软件事务可调用(在框210)虚拟存储管理器22来创建虚拟存储器别名,它可涉及在操作系统页表中创建新条目,使得将新的虚拟页面映射到相同物理页面(即,刚设置成不许访问的物理页面)。软件事务16使用这个新虚拟页面(或别名页面)来访问存储单元。为将新虚拟存储器地址(别名页面)的使用传递到其它软件事务,软件事务16将关于重新映射页面的信息存储在页面跟踪器数据结构、如30中。在图9的实施例中,页面跟踪器30具有已经重新映射到新虚拟地址的各页面的条目230,并且各条目230包括重新映射到新虚拟地址的页面的页面地址232和新虚拟地址234。软件事务16采用已被重新映射的页面地址232和新虚拟地址234来更新(在框212)页面跟踪器条目230,以供软件事务用来访问那个页面。因此,如果TLB 12尝试使用旧虚拟地址来访问硬件事务10的存储单元,则将返回错误,因为TLB 12所使用的虚拟存储器地址不再有效。
图10示出在前一个软件事务16重新映射存储单元的虚拟地址以防止硬件事务10访问那个存储单元的实施例中由软件事务16所执行的操作的一个实施例。当软件事务开始访问存储单元时,图10的操作可作为图6的框112的一部分来执行。在这个实施例中,将不执行框108和110中的操作,即框106中的操作之后跟随框112中的操作。当发起(在框250)访问存储单元的操作时,软件事务16确定(在框252)在页面跟踪器数据结构30中是否存在该存储单元的页面跟踪器条目230。如果没有,则软件事务16使用(在框254)当前或已知的虚拟存储器地址来访问该存储单元。如果存在页面跟踪器条目230,则软件事务16根据页面跟踪器条目230来确定(在框256)用于另一个软件事务所改变的存储单元的新虚拟存储器地址234、即别名地址。然后,软件事务16使用(在框258)所确定虚拟存储器地址来访问该存储单元。因此,当虚拟地址改变时,将不会阻止其它软件事务16访问该存储单元,因为在页面跟踪器条目230中表明了新的虚拟地址。但是,硬件事务可中止,因为它们在访问存储单元时没有访问页面跟踪器30。
对于图8、图9和图10的所述实施例,仅当硬件事务正访问或尝试访问与被软件事务访问的另一个位置处在相同的页面中的存储单元时,才可能发生访问错误。在软件事务已经提交或完成之后,它则将页面改回完全访问(full access),使得不再触发错误。因此,仅在软件事务正运行时将页面设置成不许访问,以便防止任何硬件事务与软件事务发生冲突。在将页面重置回完全访问时,还更新页面跟踪器中的信息,以便表明该页面不再被重新映射并且不再具有新的虚拟地址。
对于所述实施例,软件事务执行引起错误、如访问错误而被返回到正访问或尝试访问存储单元的硬件事务的操作。在某些实施例中,如果硬件事务正访问或尝试访问包括存储单元的页面上的存储单元,则可将错误返回给硬件事务。或者,仅当硬件事务正在访问被软件事务访问的同一个存储单元时,才可返回错误。
所述操作可使用标准编程和/或工程技术以产生软件、固件、硬件或者它们的任何结合,作为方法、装置或制品来实现。所述操作可作为“计算机可读介质”中包含的代码来实现,其中,处理器可从计算机可读介质中读取和执行代码。计算机可读介质可包括例如磁存储介质(如硬盘驱动器、软盘、磁带等)、光存储装置(CD-ROM、DVD、光盘等)、易失性和非易失性存储设备(如EEPROM、ROM、PROM、RAM、DRAM、SRAM、闪存、固件、可编程逻辑等)等。实现所述操作的代码还可通过硬件逻辑(例如集成电路芯片、可编程门阵列(PGA)、专用集成电路(ASIC)等)来实现。更进一步,实现所述操作的代码可通过“传输信号”来实现,其中,传输信号可通过空间或通过例如光纤、铜线等传输介质来传播。在其中对代码或逻辑进行编码的传输信号还可包括无线信号、卫星传输、无线电波、红外信号、蓝牙等。在其中对代码或逻辑进行编码的传输信号能够由发射站发射并由接收站接收,其中,可在接收或发射站或设备上、通过硬件或计算机可读介质对传输信号中编码的代码或逻辑进行解码和存储。“制品”包括其中可实现代码的计算机可读介质、硬件逻辑和/或传输信号。本领域的技术人员自然会认识到,可在不背离本发明的范围的前提下对本配置进行许多修改,并且制品可包括本领域已知的适当信息承载介质。
所述操作可由电路来执行,其中,“电路“指的是硬件或软件或者它们的结合。用于执行所述实施例的操作的电路可包括硬件设备,例如集成电路芯片、可编程门阵列(PGA)、专用集成电路(ASIC)等。电路还可包括例如集成电路等处理器组件以及例如存储器等计算机可读介质中的代码,其中,由处理器执行所述代码以便执行所述实施例的操作。
在所述实施例中,响应软件事务所执行的操作而将错误返回给尝试访问或正访问存储单元的硬件事务。在备选实施例中,如果软件事务正在对被请求存储单元或者包括被请求存储单元的页面进行访问或发起访问,则可将备选返回代码或消息提供给硬件事务,以便使它中止。
术语“一实施例”、“实施例”、“多个实施例”、“该实施例”、“这些实施例”或者“一个或多个实施例”、“一些实施例”和“一个实施例”表示“本发明的一个或多个(但不是全部)实施例”,除非另有明确规定。
术语“包括”、“包含”、“具有”及其变化表示“包括但不限于”,除非另有明确规定。
项的枚举列表不意味着项的任一个或全部是互斥的,除非另有明确规定。
术语“一”和“该”表示“一个或多个”,除非另有明确规定。
相互通信的设备无需彼此连续通信,除非另有明确规定。另外,相互通信的设备可直接或者通过一个或多个中介间接通信。
具有相互通信的若干组件的一实施例的描述不意味着需要所有这类组件。相反,描述了许多任选组件,以便说明本发明的大量可能的实施例。
此外,虽然可按顺序来描述过程步骤、方法步骤、算法等,但是,这类过程、方法和算法可配置成轮流进行工作。换言之,可用以描述步骤的任何序列或顺序不一定表示必需以那个顺序执行所述步骤。可按照任何可行的顺序来执行本文所述的过程的步骤。此外,可同时执行某些步骤。
当本文描述单个装置或产品时,大家易于清楚地知道,一个以上设备/产品(无论它们是否配合工作)可用来代替单个设备/产品。类似地,在本文描述一个以上设备或产品(无论它们是否配合工作)的情况下,大家易于清楚地知道,单个设备/产品可用来代替一个以上设备或产品,或者可使用与所示多个数量不同数量的设备。
或者可通过没有明确描述为具有这类功能性/特征的一个或多个其它设备来体现设备的这类功能性和/或特征。因此,在本发明的其它实施例不需要包括该设备本身。
图6、图7、图8和图10的所示的操作示出以某个顺序发生的某些事件。在备选实施例中,某些操作可按照不同的顺序来执行或者被修改或去除。此外,可对上述逻辑增加步骤,并且仍然符合所述实施例。另外,本文所述操作可依次发生,或者可并行处理某些操作。此外,可由单个处理单元或者由分布式处理单元来执行操作。
为了说明和描述的目的,提供了对本发明的各种实施例的以上描述。它不是意在涵盖本发明的各个方面或者将本发明限于所公开的精确形式。根据上述教导,许多修改及变更都是可行的。本发明的范围不是由这个详细描述来限定,而是由所附权利要求书来限定。上述说明、示例和数据提供了对本发明的构成的制造和使用的全面描述。由于在不背离本发明的精神和范围的前提下可实现本发明的许多实施例,因此本发明在于以下所附的权利要求书。
Claims (19)
1.一种用于协调硬件事务和软件事务对存储单元的访问的方法,包括:
由能够在硬件事务存储器中执行的所述硬件事务发起访问存储单元的请求,其中,所述硬件事务和软件事务能够访问存储单元;以及
由在软件事务存储器中执行的软件事务来执行操作,其中,所述操作使错误返回到硬件事务请求,
其中,由所述软件事务执行的、使所述错误返回的操作包括:所述软件事务将用于访问所请求的存储单元的虚拟存储器地址改变为新的虚拟存储器地址,其中响应在一个软件事务改变了所请求的存储单元的所述存储器地址之后、所述硬件事务没有使用所述新的虚拟存储器地址来访问所请求的存储单元,而将所述错误返回到所述硬件事务。
2.如权利要求1所述的方法,其中,由所述软件事务执行的、使所述错误返回的操作包括:所述软件事务访问包括所请求的存储单元的页面上的一个存储单元。
3.如权利要求2所述的方法,其中,如果两个软件事务正在访问一个存储页面上的同一个存储单元,则发生所述两个软件事务之间的争用,以及在访问一个页面上的不同存储单元的两个软件事务之间不会发生争用。
4.如权利要求2所述的方法,其中,由所述软件事务执行的、使所述错误返回的操作包括:将包括所述存储单元的所述页面指示为被所述软件事务访问,其中所述操作还包括:
由所述硬件事务来确定,来自所述硬件事务的所请求的存储单元是否处于指示为正被一个软件事务访问的一个页面上,其中,响应确定包括所请求的存储单元的所述页面正被一个软件事务访问而返回所述错误。
5.如权利要求1所述的方法,其中,所述错误能够与正被一个软件事务访问的所述存储单元无关,其中所述操作还包括:
由所述硬件事务来确定所返回的错误是否与正被一个软件事务访问的所述存储单元有关;以及
响应确定所述错误与正被一个软件事务访问的所述存储单元有关,而由所述硬件事务中止所述硬件事务。
6.如权利要求5所述的方法,其中,确定所返回的错误是否与正被一个软件事务访问的所述存储单元有关的步骤包括:确定包括所请求的存储单元的页面是否正被一个软件事务访问。
7.如权利要求1所述的方法,其中,所述错误可与正被一个软件事务访问的所述存储单元无关,其中所述操作还包括:
由所述硬件事务来确定所述错误是否与软件事务的操作无关;以及
由所述硬件事务调用虚拟存储管理器来把包括所请求的存储单元的所述页面加载到存储器中,以便提供对所述页面和所请求的存储单元的硬件事务访问。
8.如权利要求1所述的方法,其中,所请求的存储单元包括第一所请求的存储单元,其中由所述软件事务执行的所述操作还包括:
提供存储单元的信息,该信息表明软件事务正在访问所述存储单元;
由第一软件事务发起访问第二所请求的存储单元的请求;
根据所述信息来确定第二软件事务是否正在更新第二所请求的存储单元;以及
响应确定所述第二软件事务正在访问第二所请求的存储单元,使所述第一或第二软件事务这两者其中之一能够对第二所请求的存储单元进行访问。
9.如权利要求8所述的方法,其中,允许对第二所请求的存储单元进行访问的步骤包括:允许对包括第二所请求的存储单元的页面进行访问,其中由所述软件事务执行的所述操作还包括:
确定所述第二软件事务是否处于可从其中回滚的状态,其中,响应确定所述第二软件事务的状态不能回滚而使所述第二软件事务能够继续访问包括所述存储单元的所述页面;以及
响应确定可回滚所述第二软件事务,而中止所述第二软件事务对包括第二所请求的存储单元的所述页面的访问,并允许对包括第二所请求的存储单元的所述页面的所述第一软件事务访问。
10.如权利要求1所述的方法,其中,由所述软件事务执行的所述操作还包括:
提供由软件事务使用的、表明访问各存储单元的已更新虚拟存储器地址的信息;以及
由一个软件事务来确定在访问一个存储单元时用于访问所述存储单元的所述已更新虚拟存储器地址。
11.如权利要求1所述的方法,其中,在向所述硬件事务提供对所请求的存储单元的访问权之后,发生由所述软件事务执行的、使所述错误返回的操作。
12.一种用于协调硬件事务和软件事务对存储单元的访问的系统,包括:
存储器,包括存储单元;
硬件事务存储器,用于存储硬件事务所使用的数据;
软件事务存储器,用于存储软件事务的数据;
其中,所述硬件事务适合于在所述硬件事务存储器中发起访问所述存储单元其中之一的请求;以及
其中,所述软件事务适合于在所述软件事务存储器中执行,所述软件事务执行使错误返回到硬件事务请求的操作,
其中,由所述软件事务执行的、使所述错误返回的操作包括:所述软件事务将用于访问所请求的存储单元的虚拟存储器地址改变为新的虚拟存储器地址,其中响应在一个软件事务改变了所请求的存储单元的所述存储器地址之后、所述硬件事务没有使用所述新的虚拟存储器地址来访问所请求的存储单元,而将所述错误返回到所述硬件事务。
13.如权利要求12所述的系统,其中,由所述软件事务执行的、使所述错误返回的操作包括:所述软件事务访问包括所请求的存储单元的页面上的一个存储单元。
14.如权利要求13所述的系统,其中,如果两个软件事务正在访问一个存储页面上的同一个存储单元,则发生所述两个软件事务之间的争用,以及在访问一个页面上的不同存储单元的两个软件事务之间不会发生争用。
15.如权利要求13所述的系统,其中,由所述软件事务执行的、使所述错误返回的操作包括:将包括所述存储单元的所述页面指示为被所述软件事务访问,其中所述硬件事务还适合于执行以下步骤:
确定来自所述硬件事务的所请求的存储单元是否处于指示为正被一个软件事务访问的一个页面上,其中,响应确定包括所请求的存储单元的所述页面正被一个软件事务访问而返回所述错误。
16.如权利要求13所述的系统,其中,所述错误能够与正被一个软件事务访问的所述存储单元无关,其中接收所返回的错误的所述硬件事务还适合于执行以下步骤:
确定所返回的错误是否与正被一个软件事务访问的所述存储单元有关;以及
响应确定所述错误与正被一个软件事务访问的所述存储单元有关,而中止所述硬件事务。
17.如权利要求12所述的系统,其中,所述错误可与正被一个软件事务访问的所述存储单元无关,其中所述硬件事务还适合于执行以下步骤:
确定所述错误是否与软件事务的操作无关;以及
调用虚拟存储管理器来把包括所请求的存储单元的所述页面加载到存储器中,以便提供对所述页面和所请求的存储单元的硬件事务访问。
18.如权利要求12所述的系统,其中,所请求的存储单元包括第一所请求的存储单元,还包括:
存储单元的信息,该信息表明软件事务正在访问所述存储单元;
其中,在所述软件事务存储器中执行的第一软件事务还适合于执行以下步骤:
发起访问第二所请求的存储单元的请求;
根据所述信息来确定第二软件事务是否正在更新第二所请求的存储单元;以及
响应确定所述第二软件事务正在访问第二所请求的存储单元,使所述第一或第二软件事务这两者其中之一能够对第二所请求的存储单元进行访问。
19.如权利要求12所述的系统,其中,在向所述硬件事务提供对所请求的存储单元的访问权之后,发生使所述错误返回的软件事务操作。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/303,529 US7809903B2 (en) | 2005-12-15 | 2005-12-15 | Coordinating access to memory locations for hardware transactional memory transactions and software transactional memory transactions |
US11/303,529 | 2005-12-15 | ||
PCT/US2006/046499 WO2007078538A2 (en) | 2005-12-15 | 2006-12-05 | Coordinating access to memory locations for hardware transactional memory transactions and software transactional memory transactions |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101326494A CN101326494A (zh) | 2008-12-17 |
CN101326494B true CN101326494B (zh) | 2012-07-18 |
Family
ID=37964017
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2006800465322A Expired - Fee Related CN101326494B (zh) | 2005-12-15 | 2006-12-05 | 协调硬件事务和软件事务对存储单元的访问的方法和系统 |
Country Status (4)
Country | Link |
---|---|
US (1) | US7809903B2 (zh) |
EP (1) | EP1960878B1 (zh) |
CN (1) | CN101326494B (zh) |
WO (1) | WO2007078538A2 (zh) |
Families Citing this family (64)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7747565B2 (en) * | 2005-12-07 | 2010-06-29 | Microsoft Corporation | Garbage collector support for transactional memory |
US8799882B2 (en) * | 2005-12-07 | 2014-08-05 | Microsoft Corporation | Compiler support for optimizing decomposed software transactional memory operations |
US8813052B2 (en) * | 2005-12-07 | 2014-08-19 | Microsoft Corporation | Cache metadata for implementing bounded transactional memory |
US8683143B2 (en) * | 2005-12-30 | 2014-03-25 | Intel Corporation | Unbounded transactional memory systems |
US20070186056A1 (en) * | 2006-02-07 | 2007-08-09 | Bratin Saha | Hardware acceleration for a software transactional memory system |
US8898652B2 (en) | 2006-03-23 | 2014-11-25 | Microsoft Corporation | Cache metadata for accelerating software transactional memory |
US8180977B2 (en) * | 2006-03-30 | 2012-05-15 | Intel Corporation | Transactional memory in out-of-order processors |
US8180967B2 (en) * | 2006-03-30 | 2012-05-15 | Intel Corporation | Transactional memory virtualization |
US8316352B2 (en) * | 2006-06-09 | 2012-11-20 | Oracle America, Inc. | Watchpoints on transactional variables |
US7840947B2 (en) * | 2006-06-09 | 2010-11-23 | Oracle America, Inc. | Delayed breakpoints |
US8190859B2 (en) * | 2006-11-13 | 2012-05-29 | Intel Corporation | Critical section detection and prediction mechanism for hardware lock elision |
US8132158B2 (en) * | 2006-12-28 | 2012-03-06 | Cheng Wang | Mechanism for software transactional memory commit/abort in unmanaged runtime environment |
US8719807B2 (en) * | 2006-12-28 | 2014-05-06 | Intel Corporation | Handling precompiled binaries in a hardware accelerated software transactional memory system |
US7802136B2 (en) | 2006-12-28 | 2010-09-21 | Intel Corporation | Compiler technique for efficient register checkpointing to support transaction roll-back |
US7809895B2 (en) * | 2007-03-09 | 2010-10-05 | Oracle America, Inc. | Low overhead access to shared on-chip hardware accelerator with memory-based interfaces |
US7827383B2 (en) * | 2007-03-09 | 2010-11-02 | Oracle America, Inc. | Efficient on-chip accelerator interfaces to reduce software overhead |
US8185698B2 (en) * | 2007-04-09 | 2012-05-22 | Bratin Saha | Hardware acceleration of a write-buffering software transactional memory |
US8006227B2 (en) * | 2007-06-01 | 2011-08-23 | Microsoft Corporation | Efficiently locating transactional code blocks in a transactional memory system |
US8176253B2 (en) * | 2007-06-27 | 2012-05-08 | Microsoft Corporation | Leveraging transactional memory hardware to accelerate virtualization and emulation |
US8140773B2 (en) | 2007-06-27 | 2012-03-20 | Bratin Saha | Using ephemeral stores for fine-grained conflict detection in a hardware accelerated STM |
US9280397B2 (en) * | 2007-06-27 | 2016-03-08 | Intel Corporation | Using buffered stores or monitoring to filter redundant transactional accesses and mechanisms for mapping data to buffered metadata |
US9043553B2 (en) | 2007-06-27 | 2015-05-26 | Microsoft Technology Licensing, Llc | Leveraging transactional memory hardware to accelerate virtualization and emulation |
US8332580B2 (en) * | 2008-04-02 | 2012-12-11 | Zikbit Ltd. | System, method and apparatus for memory with embedded associative section for computations |
US8533663B2 (en) * | 2008-05-12 | 2013-09-10 | Oracle America, Inc. | System and method for utilizing available best effort hardware mechanisms for supporting transactional memory |
US8769514B2 (en) * | 2008-06-27 | 2014-07-01 | Microsoft Corporation | Detecting race conditions with a software transactional memory system |
US8370577B2 (en) | 2009-06-26 | 2013-02-05 | Microsoft Corporation | Metaphysically addressed cache metadata |
US8489864B2 (en) * | 2009-06-26 | 2013-07-16 | Microsoft Corporation | Performing escape actions in transactions |
US8812796B2 (en) * | 2009-06-26 | 2014-08-19 | Microsoft Corporation | Private memory regions and coherence optimizations |
US8356166B2 (en) * | 2009-06-26 | 2013-01-15 | Microsoft Corporation | Minimizing code duplication in an unbounded transactional memory system by using mode agnostic transactional read and write barriers |
US8161247B2 (en) | 2009-06-26 | 2012-04-17 | Microsoft Corporation | Wait loss synchronization |
US8250331B2 (en) * | 2009-06-26 | 2012-08-21 | Microsoft Corporation | Operating system virtual memory management for hardware transactional memory |
US8225139B2 (en) * | 2009-06-29 | 2012-07-17 | Oracle America, Inc. | Facilitating transactional execution through feedback about misspeculation |
US8229907B2 (en) * | 2009-06-30 | 2012-07-24 | Microsoft Corporation | Hardware accelerated transactional memory system with open nested transactions |
CN101739291B (zh) * | 2009-12-02 | 2013-01-30 | 北京航空航天大学 | 一种支持有条件部分回滚的硬件事务嵌套处理方法 |
US9477515B2 (en) | 2009-12-15 | 2016-10-25 | Intel Corporation | Handling operating system (OS) transitions in an unbounded transactional memory (UTM) mode |
US8316194B2 (en) | 2009-12-15 | 2012-11-20 | Intel Corporation | Mechanisms to accelerate transactions using buffered stores |
US8521995B2 (en) * | 2009-12-15 | 2013-08-27 | Intel Corporation | Handling operating system (OS) transitions in an unbounded transactional memory (UTM) mode |
US8539465B2 (en) | 2009-12-15 | 2013-09-17 | Microsoft Corporation | Accelerating unbounded memory transactions using nested cache resident transactions |
US8095824B2 (en) * | 2009-12-15 | 2012-01-10 | Intel Corporation | Performing mode switching in an unbounded transactional memory (UTM) system |
US8533440B2 (en) * | 2009-12-15 | 2013-09-10 | Microsoft Corporation | Accelerating parallel transactions using cache resident transactions |
US8402218B2 (en) | 2009-12-15 | 2013-03-19 | Microsoft Corporation | Efficient garbage collection and exception handling in a hardware accelerated transactional memory system |
US9092253B2 (en) * | 2009-12-15 | 2015-07-28 | Microsoft Technology Licensing, Llc | Instrumentation of hardware assisted transactional memory system |
US8924692B2 (en) | 2009-12-26 | 2014-12-30 | Intel Corporation | Event counter checkpointing and restoring |
US8464261B2 (en) | 2010-03-31 | 2013-06-11 | Oracle International Corporation | System and method for executing a transaction using parallel co-transactions |
US8214560B2 (en) | 2010-04-20 | 2012-07-03 | International Business Machines Corporation | Communications support in a transactional memory |
US9110691B2 (en) * | 2010-11-16 | 2015-08-18 | Advanced Micro Devices, Inc. | Compiler support technique for hardware transactional memory systems |
US10387324B2 (en) * | 2011-12-08 | 2019-08-20 | Intel Corporation | Method, apparatus, and system for efficiently handling multiple virtual address mappings during transactional execution canceling the transactional execution upon conflict between physical addresses of transactional accesses within the transactional execution |
US9086986B2 (en) * | 2012-09-07 | 2015-07-21 | International Business Machines Corporation | Detection of conflicts between transactions and page shootdowns |
US9086987B2 (en) * | 2012-09-07 | 2015-07-21 | International Business Machines Corporation | Detection of conflicts between transactions and page shootdowns |
JP2014085839A (ja) * | 2012-10-24 | 2014-05-12 | International Business Maschines Corporation | 並列実行機構及びその動作方法 |
US9141454B2 (en) * | 2012-12-27 | 2015-09-22 | Intel Corporation | Signaling software recoverable errors |
US9182986B2 (en) | 2012-12-29 | 2015-11-10 | Intel Corporation | Copy-on-write buffer for restoring program code from a speculative region to a non-speculative region |
WO2015009275A1 (en) | 2013-07-15 | 2015-01-22 | Intel Corporation | Improved transactional memory management techniques |
US9286224B2 (en) | 2013-11-26 | 2016-03-15 | Intel Corporation | Constraining prefetch requests to a processor socket |
US9971627B2 (en) | 2014-03-26 | 2018-05-15 | Intel Corporation | Enabling maximum concurrency in a hybrid transactional memory system |
US9632862B2 (en) * | 2014-12-20 | 2017-04-25 | Intel Corporation | Error handling in transactional buffered memory |
US11029995B2 (en) | 2015-05-14 | 2021-06-08 | Oracle International Corporation | Hardware transactional memory-assisted flat combining |
GB2539429B (en) * | 2015-06-16 | 2017-09-06 | Advanced Risc Mach Ltd | Address translation |
GB2539428B (en) | 2015-06-16 | 2020-09-09 | Advanced Risc Mach Ltd | Data processing apparatus and method with ownership table |
CN105045563B (zh) * | 2015-06-19 | 2017-10-10 | 陕西科技大学 | 一种推测嵌套软件事务存储的冲突管理方法 |
US9952804B2 (en) | 2016-03-08 | 2018-04-24 | International Business Machines Corporation | Hardware transaction transient conflict resolution |
US20170371701A1 (en) * | 2016-06-27 | 2017-12-28 | Kshitij A. Doshi | Apparatuses, methods, and systems for granular and adaptive hardware transactional synchronization |
CN110737392B (zh) * | 2018-07-20 | 2023-08-25 | 伊姆西Ip控股有限责任公司 | 管理存储系统中的地址的方法、设备和计算机可读存储介质 |
US10754776B2 (en) | 2018-07-30 | 2020-08-25 | International Business Machines Corporation | Cache balance when using hardware transactional memory |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020108025A1 (en) * | 1998-10-21 | 2002-08-08 | Nicholas Shaylor | Memory management unit for java environment computers |
US6640285B1 (en) * | 2000-10-26 | 2003-10-28 | Emc Corporation | Method and apparatus for improving the efficiency of cache memories using stored activity measures |
US7395382B1 (en) * | 2004-08-10 | 2008-07-01 | Sun Microsystems, Inc. | Hybrid software/hardware transactional memory |
US7870545B2 (en) * | 2005-12-16 | 2011-01-11 | Intel Corporation | Protecting shared variables in a software transactional memory system |
US7730286B2 (en) * | 2005-12-30 | 2010-06-01 | Intel Corporation | Software assisted nested hardware transactions |
US8683143B2 (en) * | 2005-12-30 | 2014-03-25 | Intel Corporation | Unbounded transactional memory systems |
US20070186056A1 (en) * | 2006-02-07 | 2007-08-09 | Bratin Saha | Hardware acceleration for a software transactional memory system |
US7502897B2 (en) * | 2006-06-28 | 2009-03-10 | Intel Corporation | Object based conflict detection in a software transactional memory |
US7542977B2 (en) * | 2006-06-29 | 2009-06-02 | Intel Corporation | Transactional memory with automatic object versioning |
US8185698B2 (en) * | 2007-04-09 | 2012-05-22 | Bratin Saha | Hardware acceleration of a write-buffering software transactional memory |
-
2005
- 2005-12-15 US US11/303,529 patent/US7809903B2/en not_active Expired - Fee Related
-
2006
- 2006-12-05 CN CN2006800465322A patent/CN101326494B/zh not_active Expired - Fee Related
- 2006-12-05 EP EP06839074.9A patent/EP1960878B1/en not_active Not-in-force
- 2006-12-05 WO PCT/US2006/046499 patent/WO2007078538A2/en active Application Filing
Non-Patent Citations (1)
Title |
---|
Mark Moir.Hybrid Transactional Memory.Sun Microsystems.2005,1-10. * |
Also Published As
Publication number | Publication date |
---|---|
WO2007078538A3 (en) | 2007-08-30 |
US20070143287A1 (en) | 2007-06-21 |
US7809903B2 (en) | 2010-10-05 |
EP1960878A2 (en) | 2008-08-27 |
CN101326494A (zh) | 2008-12-17 |
WO2007078538A2 (en) | 2007-07-12 |
EP1960878B1 (en) | 2016-11-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101326494B (zh) | 协调硬件事务和软件事务对存储单元的访问的方法和系统 | |
US8782327B1 (en) | System and method for managing execution of internal commands and host commands in a solid-state memory | |
US6990559B2 (en) | Mechanism for resolving ambiguous invalidates in a computer system | |
US7107411B2 (en) | Apparatus method and system for fault tolerant virtual memory management | |
JP5010601B2 (ja) | 直接更新ソフトウェアトランザクショナルメモリ | |
US10740010B2 (en) | Memory module and memory system including memory module | |
US20190324908A1 (en) | Robust transactional memory | |
CN104246727B (zh) | 数据处理系统以及用于操作数据处理系统的方法 | |
CN101310258A (zh) | 在软件事务内存系统中保护共享变量 | |
CN101788922A (zh) | 基于辅助线程实现事务存储系统的方法和装置 | |
US20050160232A1 (en) | System and method for conflict responses in a cache coherency protocol with ordering point migration | |
US20090198920A1 (en) | Processing Units Within a Multiprocessor System Adapted to Support Memory Locks | |
CN109952567A (zh) | 用于旁通高级dram存储器控制器的内部高速缓存的方法和装置 | |
US10235215B2 (en) | Memory lock mechanism for a multiprocessor system | |
US7024520B2 (en) | System and method enabling efficient cache line reuse in a computer system | |
US8214603B2 (en) | Method and apparatus for handling multiple memory requests within a multiprocessor system | |
US20090198695A1 (en) | Method and Apparatus for Supporting Distributed Computing Within a Multiprocessor System | |
US20090198916A1 (en) | Method and Apparatus for Supporting Low-Overhead Memory Locks Within a Multiprocessor System | |
US6895476B2 (en) | Retry-based late race resolution mechanism for a computer system | |
US20130262804A1 (en) | Data duplication system, data duplication method, and program thereof | |
KR101939361B1 (ko) | 비휘발성 메모리를 이용한 로깅 방법 | |
US6996675B2 (en) | Retrieval of all tag entries of cache locations for memory address and determining ECC based on same | |
EP3910484B1 (en) | Systems and methods for managing cache replacement | |
CN112005222B (zh) | 鲁棒的事务性存储器 | |
JP4131579B2 (ja) | データ管理システムおよびデータ管理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120718 Termination date: 20201205 |