CN1222890C - 多处理器系统中存储器访问的动态串行化 - Google Patents
多处理器系统中存储器访问的动态串行化 Download PDFInfo
- Publication number
- CN1222890C CN1222890C CN01141121.XA CN01141121A CN1222890C CN 1222890 C CN1222890 C CN 1222890C CN 01141121 A CN01141121 A CN 01141121A CN 1222890 C CN1222890 C CN 1222890C
- Authority
- CN
- China
- Prior art keywords
- request
- address
- requestor
- shared storage
- ordered list
- 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
- 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/084—Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1605—Handling requests for interconnection or transfer for access to memory bus based on arbitration
- G06F13/1652—Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
- G06F13/1663—Access to shared 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
- G06F12/0817—Cache consistency protocols using directory methods
- G06F12/0828—Cache consistency protocols using directory methods with concurrent directory accessing, i.e. handling multiple concurrent coherency transactions
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Multi Processors (AREA)
- Memory System (AREA)
Abstract
一种用于解决在一个共享存储器系统内部地址冲突和资源访问优先级的方法,其包含为每个竞争的资源动态地创建请求有序列表。只有在识别出一个冲突以后才将一个新请求增加到该列表中。由于资源冲突不是始终存在的,因此这对一个没有竞争资源的请求是没有影响的。
Description
技术领域
本发明涉及计算机和计算机系统,尤其涉及在一个共享存储器系统内部用于解决地址争用和资源访问优先级的机构。
背景技术
多处理器系统能够采取许多形式,而且个别方案可能包含许多独特特征。在多处理器系统当中的共同之处在于:需要解决共享地址争用。当一个或多个处理器试图更新共享数据时就会发生共享地址争用。由于解决这类冲突需要一个串行化的访问,因此系统设计员避免有这类行为发生的情况。例如,可以由操作系统给一个处理单元分配一个专用地址空间;使该处理器能不受冲突约束地工作。甚至在这种环境下,一个空闲的处理器通常将会从保存在一个共享地址空间中的一个队列中获取新作业。随着处理器速度和数目的增加,工作调度的协调变得更加重要。然而,某些工作调度要求在许多处理器当中的相互作用,甚至就相对低速的处理器来说,也要求有效地解决冲突。例如,要维护一个大数据库用于许多事务,该数据库能够由几个同时运行的应用程序进行更新。冲突解决经常成为这种系统的限制。希望有这样一种多处理器系统:最小化这些共享冲突,而且当共享冲突发生时最小化它对性能的影响。
技术的进步已经创造了快速的处理器,同时还给出了高密度、但是相对低速的存储器。已经增加了高速缓存体系、快速但小容量的存储器层,以补偿该影响并减少访问延迟。由于高速缓存是一个处理器能够访问的全部存储器的一个子集,因此需要一个目录以记录主存储器中的哪些块对应于保持在该高速缓存中的那些块。由于在一个共享存储器的多处理器系统中,所有的存储器更新必须被全部处理器所看见,因此这个系统中的全部处理器和设备都可以对这些高速缓存中的数据进行修改。在本技术中的一种普通方法是在这些高速缓存目录中添加标记以指示在该高速缓存中每一块的所有权状态(基于目录的高速缓存相关性)。这个所有权状态将指示该块的一个处理器写权限。如果一个处理器希望更新一个高速缓存中的一个数据块,它必须首先经由某些处理器间通信获得执行权限。一旦它具有了执行权限,该处理器就可以改变这个竞争块的目录所有权状态并执行它的更新。其中重要的是:处理器间通信要求在处理器之间传递共享块的所有权。这个处理器间通信能够在与存取数据有关的总延迟上增加一个显著的延迟时间。为了确保一个处理器能够更新这个竞争块,对这个处理器间通信的访问通常是串行的。这通常是指处理器必须以某种方式请求优先权以使用所需的资源。一个好的、确保公平访问的优先级方案,对确保恰当的作业分配和避免请求阻塞来说是重要的。随着存储器请求数目的增加,保持对存储器资源的平等访问变得更加困难,而且能够阻止多处理器系统的可扩展性。因此期望有一种能够减少处理器互连和相关通信的负面影响的优先级系统。已经使用了在一个集中队列或者类似有序机构中输入请求的优先级方案以确保请求按它们被接收的相同顺序呈现。当存储器系统完成了由这个队列系统呈现的每个请求时,该队列保持这个顺序。这种解决方案保证了这个次序,但是要求这个次序在对任何资源进行关于可用性或冲突计算之前进行设置。一个实例就是有关高速缓存交叉存取的可用性。就这个解决方案来说,没有请求能够绕过一个由于它的目标高速缓存交叉存取是不可用而停止的请求。这意味着:用于那个请求的额外延迟现在被增加到队列中在它之后的所有请求的延迟上。此外,在队列中的这些请求可能不具有与所述停止请求的地址争用,因此不会从强制的串行化中得到好处。能够在堆栈的输入端使用附加的补丁来避免这个队列影响。例如,基于一个地址范围创建多个堆栈,这将要求在进入堆栈中之前检查地址。这个解决方案的效果将会受到可以有多少个硬件以物理阵列或其它存储设备的形式用于这个目的的限制。同时,所有的这类改进,由于在优先级之前增加额外的请求检查和归类,将会负面影响标称延迟。其它的某些优先级方案,试图减少能够导致请求阻塞的某些复杂相互作用,而使用了取样方法。取样、或瞬态图对在一个给定时间内的这些请求加以标记,并确保在取一个新样本之前所有这些请求都得到满足。由于在当前的瞬态图中一个满足的请求只有到瞬态图为空时才能产生一个可见的请求,因此可以避免某些阻塞情况。然而,瞬态图方案取决于在请求之间没有相互依赖,在某些实现中,这可能是不真实的,而且能够导致一个死锁条件:在该瞬态图中的一个请求等待一个不在该瞬态图中的请求。这类解决方案没有试图提高在引起竞争的请求当中的访问,它仅仅将问题的范围限制到一个假定可管理的规模,并且因此可能增加标称延迟却没有保证成功。
一种最近最少使用(LRU)优先级算法可以用来确保所有的处理器都能够公平访问。为了限制优先请求的延迟,使用了一个局部LRU。这个局部LRU使用更少的位并且允许更快的优先级计算。在这个系统中,对请求进行判优,然后呈现到一个流水线结构中。请求通过这个流水线移动,并初始化一个高速缓存访问和相关的目录查找,检查资源可用性以及经常是否有其它任何请求锁定了相同的地址。如果没有所有者,则当前请求者通过设置一个锁定来承担所有权。这个锁定保持有效直到该请求已经被满足为止。一旦设置了一个锁定所有对同一个地址的后续请求将中断它们的存储访问,并且为该所有者请求设置一个资源需求来完成。这个资源需求阻止了进一步的流水线访问直到该所有者请求完成为止。然后释放该所有者请求来改变流水线的所有权状态,如果必要,将请求的数据返回到该处理器中。这样一种系统正常工作直到地址活动、如先前描述的这类处理器间同步发生为止。在那些情况下,许多请求试图访问同一地址。它们将全部进入流水线中并且为拥有处理器设置它们的资源需求,拥有的处理器完成操作,剩余的全部请求将再次为优先级竞争,一个新的拥有者将设置它的锁,然后所有的后续请求将为这个新拥有者设置一个资源需求。每个请求将使这个流水线、及其它资源仅仅为新指定的拥有者设置它的资源需求而忙碌。一旦新的拥有者完成了就再次开始这个过程。每一个完成后,就再次测试优先机构,并且资源的忙碌会导致通信和延迟的增加。此外,一个完成的处理器可以在所有处理器已经访问该数据之前向同一地址发出另一个请求。由于优先逻辑已经为最佳情况进行了优化,而且由于在一个锁定解除之后请求产生的固有延迟,新的请求能够胜过那些正在等候的请求。结合局部LRU而不是完整LRU、转移所有权的延迟、额外的通信和新请求的优化,能够引起锁定情况。优先级系统出现了这类处理器阻塞,而且进行了校正某些特例情况的尝试。已经使用了添加中止避免硬件以避免死锁情况来避免处理器初始化的恢复。
随着更多处理器请求的加入,通信和延迟也增加了,因此必需要一种改进的判优设备。
发明内容
在一个多处理器系统中,由处理器做出的、对共享存储器同一地址空间的请求以这些请求被接收的顺序得到满足。在一个包含了多个与一个公用存储器子系统相连的处理器的计算机系统中,多个请求经常同时竞争同一地址空间。存储器控制器资源的可用性和对它们的访问能够强制在这些请求当中不合理的排序。然而,同样复杂的资源相互作用,要求一个不串行所有请求的解决方案,即请求B将不会等待请求A,除非在A与B之间有一个竞争。本发明提供:所有的请求都具有对存储器资源的平等访问,除非这些请求试图同时访问存储器中的同一单元。一旦已经识别到这个冲突,就对这个单元的访问进行排序。
当共享存储器控制器处理每个请求时,就检查地址争用。如果没有指定访问规定地址范围的当前拥有者,这就授予那个请求对那个地址空间的所有权,直到它的请求被满足为止。对同一存储单元的后续请求为上一个请求设置它们的需求,以查看同一冲突,而不是第一个。当每个控制者完成时,仅仅只有一个请求程序重新设定它的需求然后进行处理。可以有任何数目的这些有序列表而且在每个列表上可以有任何数目的请求。在此之前,所有对同一地址空间的后续请求都将会查看到这个拥有者并为它的完成设置一个资源需求锁存。一旦这个地址拥有者完成了操作,就再次处理所有剩余的请求。
通过为每一个竞争地址动态地创建请求的有序列表,实现了一种串行访问一个地址空间而对不同地址空间的存储访问没有负面影响的方法。只有在识别到一个冲突以后,才将一个新请求增加到该列表中。由于地址争用不是始终存在的,因此这对一个没有竞争的地址的请求是没有影响的。增加的硬件将产生一个对应于遇到同一地址争用的上一个请求者的资源需求,而不是为拥有的请求者设置一个资源需求。可以有任意数目的这些有序列表。例如,在一个有二十个请求者的系统中,能有二十个一个请求者的有序‘列表’、或一个二十个请求者的有序列表、或是两者之间的任何组合。排序设备没有增加物理限制。这些列表的生成取决于某一锁定位。如前所述,如果没有识别到地址争用,就设置一个常规锁定,然后那个请求者就被赋予所有权。这个锁在每个不同地址有序列表中移动并始终由上一个请求者保持。新的请求者将会识别一个对应于上一个请求者而不是第一个请求者的冲突,并且由此设置它的资源需求。以这种方法,第一个请求者可以自由地更新高速缓存块的状态而不受其它所有竞争者妨碍,而且这个列表确保了对存储器的公平、有序的访问。任何时候,在这个有序列表中的一个处理器可以强制恢复并且暂时从该系统中取出。必须注意以确保这不会导致一个死锁条件。其它情况发生在设置和重新设置移动的锁定时,特别是在冲突能够在许多周期的每个周期中发生的一个流水线环境中。
还可以包含其它的竞争资源。例如,如果多个高速缓存块溢出/填充的资源是可用的,则这些有限的资源就可以成为可竞争的。能够出现相同的解决方案。几个处理器请求可能错过高速缓存,并试图载入高速缓存溢出/填充的资源,仅仅是为了发现没有资源是可用的。这个请求者将为变得可用的下一个设置它的资源需求。一旦这发生了这种情况,它将使另一个流水线通过以载入资源,仅仅是为了发现在一个周期前,在该流水线中一个请求者采纳最后一个。在这种情况下,能够以与地址争用相同的方式为溢出/填充资源创建有序列表。同样也实现了相同的好处。例如,只有那些实际上需要溢出/填充资源的请求被迫进入该列表,而且仅仅是当该资源是不可用时。
附图说明
图1是最佳实施例的多处理器系统的一个系统概述;
图2是在图1的多处理器系统中单个存储控制器的地址流程的一个框图;
图3是该最佳多处理器系统的系统概述的一个普遍示意图;
图4是多个中央处理器读取控制器的框图,其向中央处理器读取预优先级站产生请求;
图5是一个编码器的框图,其为请求者创建对应于流水线标识符的一个比较标识符;
图6是一个由读取控制器保持的地址以及该读取控制器提供地址比较的方式的框图;
图6A是一个流水线监督器的框图;
图7是待决重新设置的产生框图;
图8是需求寄存器集合的一个框图;
图9是需求和重新设置条件的一个解码框图。
具体实施方式
在这个环境中,通常在本发明运作的场所中,多个中央处理器(CP)担当请求者例如CPA、CPB、CPC和CPD,每一个向一个存储控制器(SC)产生一个对共享存储器中同一地址的读取(FETCH)请求。每一请求的指令和地址被发送给SC。当这四个请求正在处理时没有新的请求被发送。SC接收这些请求并将每一个输入到它自己的读取控制器中。依据优先级选择一个请求进入流水线,而且该请求处于第一个周期(C1)。在第二个周期(C2)期间,将与CPA有关的地址与所有“待决”的请求者进行比较。C2流水线地址被分发给所有的请求者。每一个请求者对它们的地址执行一个比较(COMPARE)。如果该地址匹配,则激活那个请求者的待决锁定,发送一个比较(COMPARE)信号。在C2中的请求查看针对另一个请求者的比较。只有一个请求能够为一个给定的地址设置待决锁定。所有比较线聚集在一起,然后产生一个比较标识符。这标识与流水线C2中地址相同的待决请求者。当CPA通过流水线移动(有其它三个有效请求)时,在SC中没有其它请求是待决的。CPA在它的C2流水线周期中没有查看到一个比较(COMPARE),而且没有为地址比较设置它的需求寄存器。在C2中还可用的是目录结果。这指示寻找数据在该高速缓存中是否是可用的,以及所有权状态是否适于读取(FETCH)请求类型。如果数据不在该高速缓存中,就载入溢出/填充控制,并且CPA为来自主存储器的数据设置它的需求寄存器。如果所有权状态指示一个专用无效(INVALIDATE)必须发送给另一个处理器,则发送该INVALIDATE(专用干涉),并且CPA为来自于目标处理器的一个响应设置它的需求寄存器。如果数据是可用的而且已经处于恰当的所有权状态,则返回该数据。在C2周期,CPA设置它的待决锁定,以使在SC中有效的其它请求在CPA获得它的数据同时,查看到一个针对CPA的比较(COMPARE)。
继CPA之后是CPB、CPC和CPD。当CPA处于C2时,CPB处于C1。当CPA处于C3时,CPB处于C2,且CPC处于C1。当CPA处于C4时,CPB处于C3、CPC处于C2且CPD处于C1。这就是流水线概念。当CPB处于它的C2周期时,它将查看到一个针对现在已经打开待决锁定的CPA的比较(COMPARE),从而CPB为CPA设置它的需求寄存器。当CPC处于C2时,它为CPA设置它的需求寄存器。当CPD处于C2时,它为CPA设置它的需求寄存器。
CPA最终获得它的数据,然后它的请求者完成操作,并且重新设置它的有效锁定和待决锁定。所有为CPA设置需求寄存器的请求者查看到CPA的有效锁定撤消,并且再次为优先级竞争。在这个实例中,CPB、CPC和CPD向优先机构提出一个请求(即为CPB、CPC和CPD的第二个请求)。
假定优先级次序是相同的,则CPB将获得授权GRANT、在流水线中移动,而且在C2中不会看到任何地址比较(COMPARE)。C2将设置它的待决锁定并完成读取(FETCH)操作。
CPC紧随CPB之后,并且当它处于C2时,它将查看一个针对CPB的比较(COMPARE)并为CPB设置它的需求寄存器。CPD将紧随CPC之后,并且当它处于C2时,它将查看一个针对CPB的比较COMPARE并为CPB设置它的需求寄存器。当CPB完成时,CPC和CPD将为CPB重新设置它们的需求寄存器,并且再次为优先级竞争(即为CPC和CPD的第三次)。假定优先级次序是相同的,则CPC将进入流水线,并且当它处于C2时,将不会查看任何比较(COMPARE)并将设置它的待决寄存器。CPD将紧随CPC之后,并且将查看一个针对CPC的比较COMPARE,然后为CPC设置它的需求寄存器。当CPC完成时,CPD将重新设置它的需求寄存器并且将请求优先(即第四次)。当CPD到达C2时它不会查看任何比较(COMPARE)并且将完成它的操作。
回到本发明的环境,通常是在一个共享存储器的多处理器系统中,多个处理器、I/O(输入/输出)模块及其他系统组件连接到一个共享存储器控制器。这个控制器提供对一个共享、交叉存取高速缓存的访问。它处理与该高速缓存有关的相干性管理,并提供对一个交叉存取的主存储器的访问。为了容易管理资源并利用存储器的交叉存取特性,使用了一个流水线结构,其在每一时钟周期内能够初始化一个新的存储访问。在描述的本发明中,存储控制器提供一个优先机构用于这个流水线的入口,包含该优先机构以确保各个请求者的公平、平等的访问并且防止任一请求的阻塞。本发明还包含一个处理过程,它能够解决由多个请求者试图同时更新同一地址单元而引起的一个地址争用。
参考这样一个一般实例:四个处理器(P0、P1、P2和P3)试图访问一个公用地址,向共享存储器控制器同时提出它们的请求。这四个处理器以它们名称次序:P0、P1、P2、然后P3进入流水线。当P0进入流水线时,由于它不会遇到任何地址争用因此它将设置它的锁定。P1将会查看到P0,象现有技术中的情况那样,为P0设置一个资源需求。P2将进入流水线,而且不是为P0设置它的资源需求,而是它将会为P1设置资源请求。同样地,P3将为P2设置它的需求。当处理器P0完成时,只有P1将请求优先级:P2和P3将分别会有一个为P1和P2的资源请求。同样地,当P1完成时,P2将做出一个优先级请求且P3将等待。如果P0具有一个对同一地址的第二个请求,并在P3已经完成之前回来,则P0将为P3设置它的资源需求。然而,如果P0请求一个不同的地址,它能够不受现有有序列表的阻碍而完成。
现在将会结合附图中的特定详细说明,对这个最佳实施例的整个系统结构进行讨论,如下所述。
图1显示了本发明最佳实施例的多处理器系统的一个概观。在一个完全配置的系统中,最多有十二个CP(12、13、14、15、16、17、18、19、20、21、22、23)、四个I/O适配器(24、25、26、27)、和四个存储器卡(44、45、46、47)可以连接到两个存储控制器(SC10和SC11)。有可能有一个单节点、仅仅包含一个SC的系统。这样一种系统支持最多六个CP、两个I/O适配器、以及两个存储器卡。每一个CP包含一个贯穿存储一级(L1)高速缓存,而每一SC包含一个二级(L2)高速缓存。
一个CP或I/O适配器仅仅直接连接到一个SC。一个给定的SC可直接访问两个存储器卡,SC0(10)经由一个总线(48)直接访问存储器卡0(44),且经由一个单独总线(49)直接访问存储器卡2(45)。类似地,SC1(11)可以借助于一个总线(50)访问存储卡1(46),并使用一个独立的总线(51)访问存储卡3(47)。
然而,所有CP和I/O适配器能访问主存储器的任何部分。对其它二个存储卡的存储访问是由一个SC到SC的操作(52)来处理的,它对CP或I/O适配器是透明的。每个CP或I/O适配器有两条数据总线连到附属的SC,称为数据总线A和数据总线B。来自于存储器卡0和1(44,46)的存储数据在总线A上返回,而来自于存储器卡2和3(45,47)的数据在总线B上返回。
所有对存储控制器SC的请求是通过从一个CP、I/O适配器、或其它(远程)SC向这个SC发送地址和指令来启动的。当该SC已经完成这个请求时,一个响应、以及可能是数据被退回到该请求的始发者。
从一个CP到与它相连的SC的读取和存储请求利用一组单向和双向总线(28、29、30、31、32、33、34、35、36、37、38、39)来传送指令、地址、数据和响应。经由一个单向总线发送CP读取和存储请求的地址和指令部分,以及经由二个双向总线发送该请求的数据部分。该请求的数据部分可以是从该CP向该SC发送的储存数据,或是从该SC向该CP发送的读取数据。这些双向总线就是先前提及的数据总线A和数据总线B。它们每个都是四字节宽。还有一条从该SC到每个CP的单向总线用来发送响应,以指示什么时侯一个读取或存储请求已经完成以及该请求的所有状态是什么,例如正常完成或是无效地址。
I/O适配器接口同样是由双向和单向总线(40、41、42、43)构成的。在这种情况下,在该SC和该I/O适配器之间经由一条双向总线发送指令地址、和响应读取和存储数据在两条双向总线、数据总线A和数据总线B上发送,每条总线都是双字节宽的。单向总线被用于其它控制信号。
远程SC接口使用单向总线(52)用于指令、地址、响应、和数据。因此,在一个完全配置的系统中有两组这样的总线,一组从SC0到SC1,一组从SC1到SC0。数据在四个四字节宽的单向总线上进行传送,总线A和总线B从SC0到SC1,而总线A和总线B从SC1到SC0。在如上所述的单节点系统情况下,没有远程SC,因此没有起源于该远程SC的请求。
参考图2作出对高级地址流程的一个更详细的理解,其中图2显示了图1所示的一个存储控制器(SC0)的高级地址流程。有二条独立的流水线,称为流水线A(119)和流水线B(120),其每一条有它自己的目录(121、122),而且每个都有一个经由存储控制器逻辑(131、132)到一个存储卡的接口(133、134)。在该SC中的二条处理流水线对应于先前提到的二条数据总线。流水线A处理总线A上(存储卡0)的存储请求,而流水线B处理总线B上(存储卡2)的存储请求。流水线信息被发送到数据流逻辑(136、137),在那儿它被用来访问L2高速缓存。有可能有一个其中每个SC仅包含一条个流水线的系统。在这种情况下,该SC仅仅能访问一个存储器卡。
在一个操作流水线通过的第一个周期上访问与一条给定流水线有关的目录。如果找到了一个目录,则从L2高速缓存处返回数据。如果错过了一个目录,则由流水线读取地址寄存器(LFAR)逻辑(123、124)来处理该请求的进一步处理过程。该请求的地址和控制信息将会被输入到每个流水线都可用的四个LFAR寄存器的某一个中。一个请求经由远程SC接口寄存器(135)发送到远程SC。如果在该远程SC高速缓存中没有数据取决于目标地址,该请求将会被发送到与该当地SC连接的存储器卡中的一个、或是与该远程SC相连接的存储器卡中的一个。
如果一个高速缓存输入项必须被移出,从而为L2高速缓存的一个新输入项留出空间,它由流水线存储地址寄存器(LSAR)逻辑(125、126)来处理。使用一个LRU算法将用于替换的地址,输入到每个流水线可用的四个LSAR寄存器的某一个中。LSAR逻辑控制将数据存储到主存储器中并且使该高速缓存中的输入项无效。
在该SC以外产生的请求,可以是读取或者存储请求,经由远程SC接口(52)、这六个CP接口(28、29、30、31、32、3 3)、以及两个I/O适配器接口(40、41)进行接收。在每种情况下,一个接口寄存器(103、104、105)用来锁存一个请求信息持续一个周期。在这之后,该信息被发送给相关的控制器。
在该SC内部的每个功能区域都有一个独立的控制器,当请求经过流水线时由它来处理来自于该接口的输入、优先级请求、以及对该请求的控制。有两个I/O适配器控制器(109)、六个CP读取控制器(107)、六个CP存储控制器(108)、以及一个远程SC控制器(106)。在每个控制器内部,都有保持寄存器以记录与一个给定请求有关的信息。这些寄存器将保持有效直到该请求被SC完成为止。在大多数情况下,必须对该请求进行某些解码来引导它到正确的保持寄存器中。
在远程SC控制器(106)内部,有分开的寄存器用来读取和存储来自于远程SC的请求,每条流水线中有二个寄存器专用于保持读取以及二个寄存器专用于保持存储。接口信息包含一个流水线选择,用来选择一组四个寄存器,并将指令进行解码以确定它是读取还是存储指令,以选择那对读取或存储寄存器。
单个接口寄存器用于每个CP(104)的读取和存储请求。必须对进来的指令进行解码以确定它是一个读取还是存储指令。从这个接口寄存器到,包含一个读取请求寄存器的相关的CP读取控制器(107)、或是到包含两个大小为八个输入项的堆栈的CP存储控制器(108),对请求进行分段,其中这两个堆栈的每一个分别用于一条流水线,并包含存储请求的地址和控制位。
从I/O适配器发送的指令也可以是读取或存储指令。I/O控制器(109)每条流水线每个I/O处理器有两个请求寄存器,这样每条流水线总共有四个寄存器,其中每一个都可以保持一个读取或存储指令。I/O适配器记录在该I/O控制器内,哪几个寄存器是可用的,而且它指示当该指令发送时的目标寄存器。
在每个控制器内部,这些用以指示一个有效请求的信号以及其它控制信息被用来确定该请求在一个给定的周期内是否享有优先级。在一个给定范畴内的所有合格请求被发送给相关的预优先级逻辑站。
对于远程SC请求来说,有单个预优先级站(110)用于所有两条流水线。为流水线A或者流水线B对单个请求选择预优先级。在接口寄存器中的一个请求能够获得直接的优先级,并且有最高优先级。如果在接口寄存器中没有请求,在用于每条流水线的四个寄存器当中使用一个伪LRU算法(最近完成的请求具有最低优先级)进行预优先级逻辑判优。在这两个流水线之间优先级是交替的。
同样也有单个预优先级站(112)用于两条流水线的CP读取请求。用一种伪LRU算法从至多六个合格请求中选出一个。这个判优不用考虑CP读取请求的目标流水线。
CP存储必须以它们被接收的顺序来进行处理。用来缓存存储请求的这些堆栈以FIF0(先入先出)的次序进行管理。对于来自一个给定CP的每条流水线,只有最早的存储请求有资格获得优先级。有二个分开的预优先级站用于CP存储,每条流水线一个(113、114),因此有可能在一个周期内有二个不同的存储请求被授予预优先级。用于CP存储的这些预优先级站使用一种修改的循环算法为每条流水线从至多六个的合格请求当中选出一个存储请求。
I/O控制器也有用于流水线A和B(115、116)的独立的预优先级站。一种伪LRU算法被用来确定每条流水线的这四个可能请求当中的预优先级,而不考虑它们是读取还是存储操作。
有一个共享的预优先级机制用于LFAR和LSAR(127、130)的请求。如果有多个LFAR请求,则按首先是LFAR 0、然后是LFAR 1、2和3的顺序对它们进行选择。类似地,如果有多个LSAR请求,则按从LSAR0开始、然后是LSAR 1、2和3顺序对它们进行选择。一个触发锁存器在LFAR和LSAR之间变换优先级。
用于一条流水线(117、118)的总优先级判优逻辑通过使用一个排序的优先次序来选择一个请求。基于请求的频率确定了该次序,最不频繁的请求具有最高优先级,而最频繁的请求具有最低优先级。该优先次序从最高到最低是:远程SC请求、LFAR/LSAR请求、I/O适配器请求、CP读取请求、以及CP存储请求。该选定请求的地址和控制信息被发送给流水线的第一阶段。
每个控制器从两条流水线接收输入(128、129),并追踪它的请求通过流水线的进展,用以监视那些在具体的流水线周期中有效的输入信号。这些信号中的某些被用来确定该请求是否处于该流水线的某一阶段。其它的流水线输入的例子是目录查找结果,以及同其它地址寄存器的比较。这些输入被用来确定该请求需要的所有资源是否有效,或者是是否必须中断它的处理过程以等待某些条件得到满足。当一个请求的处理过程被中断时,信号被发送给流水线逻辑。控制被重新设置以便使这个请求在该流水线的以后阶段中不再显示为一个有效的输入项。信号也被发送给在控制器内部的各种逻辑站。在控制器内部采取的动作包含重新设置用来指示该请求当前正在执行的控制位。
参考图4,多个中央处理器(未显示)向存储控制器(10)产生对同一地址的读取(FETCH)请求。存储控制器(10)接收这些请求,并将每个请求放入到一个专用于一个具体处理器的读取控制器(107a、107b、107c)中,即每个中央处理器都有一个读取控制器。如图4所示,只有三个读取控制器(107a、107b、107c)用来从相应的中央处理器接收读取请求(28、29、33),但是这将会被认为是表示多个和这些中央处理器通信的读取控制器。例如,四个中央处理器CP1、CP2、CP3和CP4可以产生读取(FETCH)请求。每个请求的指令和地址被发送给存储控制器(10)。立刻接收所有请求,而且当这四个请求正在被处理时没有发送新的请求。由一个控制器预优先级站(112)和中心优先级(117、118)选择一个请求(140)进入流水线A(119)或流水线B(120)中。这样选择的请求处于第一周期(C1)。
如图6所示,在第二个流水线周期(C2)内,与CP1有关的地址在(424)中与所有“待决的”请求者进行比较。C2流水线地址(425)输入被分发给所有请求者,这样每个请求者在图6的(424)中针对它们的地址执行一个比较。如果地址匹配的话,就激活那个请求者的待决锁存器(426),且输出一个比较(COMPARE)信号(432)。在C2中的该请求查看到一个针对另一个请求者的比较(COMPARE)。只有一个请求能够为一个给定地址设置它的待决锁存器(426)。所有COMPARE比较地址线(150、152、154)被聚集在图4中的200上,并产生一个对应于该请求者的流水线标识符的一个比较标识符(COMPARE IDENTIFIER)(202)。这标识了与在流水线C2中的请求者有同一地址的待决请求者。当CP1在流水线中移动(有其它三个有效请求)时,在存储控制器中没有其它请求是待决的。在它的C2流水线周期CP1没有查看到一个比较(COMPARE),而没有设置它用于地址比较的需求寄存器(204)(图8)。当在一个请求流水线通道的C2中遇到一个地址比较时,需求寄存器(204)将会载入一个与那个请求者的唯一标识符相等的值。
同样在C2中可用的是该目录结果(170)(图4)。这将指示是否在该高速缓存目录(121)中的检索数据是有效的,以及该所有权状态是否适合于该读取请求类型。如果该数据没有在该高速缓存(121)中的话,就装载高速缓存溢出控制(182)和高速缓存填充控制(180)(图3),并且CP1为来自主存储器的数据设置它的需求寄存器(204)。如果所有权状态指示一个专用无效(INVALIDATE)必须被发送给另一个处理器,则发送该INVALIDATE(专用干涉),并且CP1为来自于目标处理器的一个响应设置它的需求记录。如果数据是有效的而且已经处于恰当的所有权状态,则返回该数据。在C2周期中,CP 1设置它的未决锁定,这样在存储控制器中有效的其它请求,在CP1获取它的数据同时,将查看到一个对于CP1的比较(COMPARE)。
继CP1之后,是CP2,CP3和CP4。当CP 1处于C2周期时,CP2处于C1周期。当CP1处于C3周期时,CP2处于C2周期且CP3处于C1周期。当CP1处于C4周期时,CP2处于C3周期,CP3处于C2周期且CP4处于C1周期。当CP2处于它的C2周期时,它将会查看到对于现在已经设置了待决锁存器的CP1的一个比较(COMPARE)。C2将为CP1设置它的需求寄存器(204)。CP2设置它的待决锁存(426),而且CP1,其在查看到CP2在对CP1进行比较时,重新设置它的待决锁存(426)。CP1,其在它的C3周期中,设置它的块待决锁存(422)。当CP3处于周期C2时,CP3设置它的待决锁存(426)且CP2重新设置它的待决锁存(426)。CP3为CP2设置它的需求寄存器(204)。CP2设置它的块待决锁存(422)。
当CP4处于周期C2时,CP4设置它的待决锁存(426)且CP3重新设置它的待决锁存(426)。CP4为CP3设置它的需求寄存器(204)。CP3设置它的块待决锁存(422)。在这一点上,就存在一个基于地址的队列,其中CP1为头,继之以CP2(为CP1设置需求寄存器),CP3(为CP2设置需求寄存器)以及CP4(为CP3设置需求寄存器)。当CP4处于C3周期中,它设置它的块待决锁存(422)。
CP1最终接收它的数据,然后它在SC中的请求者完成操作,并且重新设置它的有效锁存(450)。CP2为CP1设置它的需求寄存器(204),然后重新设置它的需求寄存器(204),以允许CP2对该流水线(119,120)做出一个新的请求。一旦重新设置了该需求寄存器,该请求者能够自由地请求流水线优先级并且完成它的操作。没有别的已经设置了它的需求寄存器的请求会做出一个流水线请求。由于它们已经设置了需求寄存器(204),因此它们被阻止了。
当CP2处于C2时,它将会查看到针对CP4的一个比较(COMPARE),但是不会为CP4设置它的需求寄存器(204),也不会设置它的待决锁存(426),这是由于它在它通过该流水线的第一步时已经设置了它的块待决锁存(422),而且该锁存是仍然设置的。在与CP1的所有权冲突解决之后,CP2会最终完成操作,并且CP2进入后续的流水线阶段,来访问数据,更新目录,重新设置它的有效锁存(450)和块待决锁存(422)。
CP3将会查看到CP2的有效锁存撤消,并且重新设置为CP2的需求寄存器。它将请求优先级112,并且当它处于它的C2周期时,将会查看到一个针对CP4的比较(COMPARE)。CP3将忽视这个比较(COMPARE),由于它的块待决锁存(426)是设置的。CP3将解决与CP2的所有权冲突,然后完成重新设置它的有效锁存(450)和块待决锁存(422)。
CP4将会查看到CP3的有效锁存(450)撤消,并且将重新设置为CP3的需求寄存器(204)。CP4将请求优先级112,并且当CP3处于它的C2周期时,将会查看到一个针对CP4的比较(COMPARE)。CP4将忽视这个比较(COMPARE)因为CP4的块待决锁存(426)是设置的。CP4将解决与CP3的所有权冲突,然后完成操作,重新设置它的有效锁存(450)和块待决锁存(422)。在现有技术中,CP4需要四个步骤,而现在CP4只需要两个步骤。
尽管已经显示和描述了最佳实施例,但是可以做出各种修改和替换而没有背离本发明的精神和范围。因此,要理解:本发明已经用实例的方法进行了描述,而不是加以限制。
Claims (4)
1.一种用于在一个共享存储器系统之内解决地址争用和对资源进行访问的优先次序的方法,所述共享存储器系统具有多个连接到一个共用存储器子系统的处理器,所述共用存储器子系统具有一个用来处理存储器请求的共享存储器控制器,所述共享存储器系统能使多个处理器充当争取所述存储器子系统中的同一地址空间的请求者,所述方法包含以下步骤:
使多个请求者能继续进行平等地访问所述子系统存储器,而对于所述子系统存储器不用等待任何其它的请求者;
由所述的共享存储器控制器来处理对存储器的请求,并且对于每个请求允许平等地访问所述子系统存储器,直到对存储器中的同一存储单元由不止一个竞争请求者来请求进行访问为止,以及
一旦识别出一个请求者和另一个竞争请求者一样请求访问存储器中的同一存储单元时,所述共享存储器控制器就通过建立一个对同一存储单元的访问请求的有序列表,来排列出对同一存储单元进行访问的次序,但是当一个请求者在请求一个不同的地址时,所述共享存储器控制器允许所述请求者完成它的请求而不受所述现有有序列表的阻碍。
2.如权利要求1所述的方法,进一步包含:
当一个另外的请求者和对于相同共享存储器地址的现有有序列表的请求者一样来请求访问那个同一共享存储器地址时,所述请求被添加到用于那个同一共享存储器地址的现有有序列表中,并且所述请求由将产生一个对应于上一个遇到同一地址争用的请求者的资源需求的硬件来加以处理。
3.如权利要求1所述的方法,其特征在于:对同一存储单元的后续请求为上一个看见相同冲突的请求者而不是为所述有序列表的第一请求者设置它们的需求,当所述有序列表中的一个请求者完成时,所述有序列表中只有一个请求者重新设置它的需求并且被处理。
4.如权利要求1所述的方法,包含动态地创建对每个受到竞争的资源的请求的有序列表,并且只有在一个冲突被识别为争取一个新的且不同的地址以后,才在争用的有序列表中添加一个新的请求。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/676185 | 2000-09-29 | ||
US09/676,185 US6516393B1 (en) | 2000-09-29 | 2000-09-29 | Dynamic serialization of memory access in a multi-processor system |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1347041A CN1347041A (zh) | 2002-05-01 |
CN1222890C true CN1222890C (zh) | 2005-10-12 |
Family
ID=24713555
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN01141121.XA Expired - Fee Related CN1222890C (zh) | 2000-09-29 | 2001-09-28 | 多处理器系统中存储器访问的动态串行化 |
Country Status (3)
Country | Link |
---|---|
US (1) | US6516393B1 (zh) |
JP (1) | JP3871305B2 (zh) |
CN (1) | CN1222890C (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101520749B (zh) * | 2008-02-29 | 2012-08-29 | 瑞昱半导体股份有限公司 | 管理存储器的方法 |
Families Citing this family (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6751711B1 (en) * | 2000-10-27 | 2004-06-15 | Nortel Networks Limited | Methods and systems for process rollback in a shared memory parallel processor computing environment |
US6785779B2 (en) * | 2002-01-09 | 2004-08-31 | International Business Machines Company | Multi-level classification method for transaction address conflicts for ensuring efficient ordering in a two-level snoopy cache architecture |
US8185602B2 (en) | 2002-11-05 | 2012-05-22 | Newisys, Inc. | Transaction processing using multiple protocol engines in systems having multiple multi-processor clusters |
US6832268B2 (en) * | 2002-12-19 | 2004-12-14 | Intel Corporation | Mechanism to guarantee forward progress for incoming coherent input/output (I/O) transactions for caching I/O agent on address conflict with processor transactions |
JP2005004350A (ja) * | 2003-06-10 | 2005-01-06 | Sony Ericsson Mobilecommunications Japan Inc | リソース管理方法及び装置、リソース管理プログラム、記憶媒体 |
US7343432B1 (en) * | 2003-09-19 | 2008-03-11 | Emc Corporation | Message based global distributed locks with automatic expiration for indicating that said locks is expired |
TWI256555B (en) | 2003-12-12 | 2006-06-11 | Via Tech Inc | An apparatus and a method of request priority queue arbitration |
CN100392627C (zh) * | 2003-12-22 | 2008-06-04 | 威盛电子股份有限公司 | 存储器存取要求优先序列仲裁装置及方法 |
US8533716B2 (en) | 2004-03-31 | 2013-09-10 | Synopsys, Inc. | Resource management in a multicore architecture |
GB0407384D0 (en) * | 2004-03-31 | 2004-05-05 | Ignios Ltd | Resource management in a multicore processor |
KR20050120341A (ko) * | 2004-06-18 | 2005-12-22 | 엘지전자 주식회사 | 다중 씨피유에서의 메모리 카드 공유 장치 |
US9727468B2 (en) * | 2004-09-09 | 2017-08-08 | Intel Corporation | Resolving multi-core shared cache access conflicts |
WO2008018969A1 (en) * | 2006-08-04 | 2008-02-14 | Parallel Computers Technology, Inc. | Apparatus and method of optimizing database clustering with zero transaction loss |
US9483405B2 (en) * | 2007-09-20 | 2016-11-01 | Sony Interactive Entertainment Inc. | Simplified run-time program translation for emulating complex processor pipelines |
US7779189B2 (en) * | 2008-02-21 | 2010-08-17 | International Business Machines Corporation | Method, system, and computer program product for pipeline arbitration |
US7886205B2 (en) * | 2008-06-24 | 2011-02-08 | Unisys Corporation | Verification of a data processing system using overlapping address ranges |
US9170844B2 (en) * | 2009-01-02 | 2015-10-27 | International Business Machines Corporation | Prioritization for conflict arbitration in transactional memory management |
US20110029985A1 (en) * | 2009-07-31 | 2011-02-03 | Nokia Corporation | Method and apparatus for coordinating resource access |
JP5482145B2 (ja) * | 2009-11-25 | 2014-04-23 | 富士通株式会社 | 演算処理装置および演算処理装置の制御方法 |
US8688880B2 (en) | 2010-06-23 | 2014-04-01 | International Business Machines Corporation | Centralized serialization of requests in a multiprocessor system |
US20120159084A1 (en) * | 2010-12-21 | 2012-06-21 | Pohlack Martin T | Method and apparatus for reducing livelock in a shared memory system |
WO2012119430A2 (zh) * | 2011-08-31 | 2012-09-13 | 华为技术有限公司 | 地址访问方法、装置及系统 |
US9378023B2 (en) * | 2012-06-13 | 2016-06-28 | International Business Machines Corporation | Cross-pipe serialization for multi-pipeline processor |
US20150248443A1 (en) * | 2014-03-02 | 2015-09-03 | Plexistor Ltd. | Hierarchical host-based storage |
US9569362B2 (en) | 2014-11-13 | 2017-02-14 | Cavium, Inc. | Programmable ordering and prefetch |
US10013385B2 (en) | 2014-11-13 | 2018-07-03 | Cavium, Inc. | Programmable validation of transaction requests |
US20160139806A1 (en) * | 2014-11-13 | 2016-05-19 | Cavium, Inc. | Independent Ordering Of Independent Transactions |
US10146690B2 (en) | 2016-06-13 | 2018-12-04 | Intel Corporation | Synchronization logic for memory requests |
CN109087682B (zh) * | 2017-06-14 | 2020-09-01 | 展讯通信(上海)有限公司 | 全局存储器顺序检测系统及方法 |
US10585800B2 (en) | 2017-06-16 | 2020-03-10 | International Business Machines Corporation | Reducing cache transfer overhead in a system |
US10769068B2 (en) * | 2017-11-10 | 2020-09-08 | International Business Machines Corporation | Concurrent modification of shared cache line by multiple processors |
US11169953B2 (en) * | 2018-02-28 | 2021-11-09 | SK Hynix Inc. | Data processing system accessing shared memory by using mailbox |
US11010210B2 (en) * | 2019-07-31 | 2021-05-18 | International Business Machines Corporation | Controller address contention assumption |
US12026540B2 (en) | 2022-01-13 | 2024-07-02 | Kyndryl, Inc. | Working memory management |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4493036A (en) | 1982-12-14 | 1985-01-08 | Honeywell Information Systems Inc. | Priority resolver having dynamically adjustable priority levels |
US4627018A (en) | 1983-09-08 | 1986-12-02 | Sperry Corporation | Priority requestor accelerator |
US5339442A (en) | 1992-09-30 | 1994-08-16 | Intel Corporation | Improved system of resolving conflicting data processing memory access requests |
US5519837A (en) | 1994-07-29 | 1996-05-21 | International Business Machines Corporation | Pseudo-round-robin arbitration for a shared resource system providing fairness and high throughput |
US5832304A (en) * | 1995-03-15 | 1998-11-03 | Unisys Corporation | Memory queue with adjustable priority and conflict detection |
US5761445A (en) | 1996-04-26 | 1998-06-02 | Unisys Corporation | Dual domain data processing network with cross-linking data queues and selective priority arbitration logic |
DE69632634T2 (de) | 1996-12-13 | 2005-06-09 | Bull S.A. | Arbitrierungseinheit zum Multiprozessorsystembuszugriff mit Wiederholungsfähigkeit |
US5875472A (en) * | 1997-01-29 | 1999-02-23 | Unisys Corporation | Address conflict detection system employing address indirection for use in a high-speed multi-processor system |
US6073182A (en) | 1998-04-30 | 2000-06-06 | International Business Machines Corporation | Method of resolving deadlocks between competing requests in a multiprocessor using global hang pulse logic |
-
2000
- 2000-09-29 US US09/676,185 patent/US6516393B1/en not_active Expired - Fee Related
-
2001
- 2001-09-28 CN CN01141121.XA patent/CN1222890C/zh not_active Expired - Fee Related
- 2001-09-28 JP JP2001301135A patent/JP3871305B2/ja not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101520749B (zh) * | 2008-02-29 | 2012-08-29 | 瑞昱半导体股份有限公司 | 管理存储器的方法 |
Also Published As
Publication number | Publication date |
---|---|
US6516393B1 (en) | 2003-02-04 |
CN1347041A (zh) | 2002-05-01 |
JP2002182976A (ja) | 2002-06-28 |
JP3871305B2 (ja) | 2007-01-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1222890C (zh) | 多处理器系统中存储器访问的动态串行化 | |
CA1324837C (en) | Synchronizing and processing of memory access operations in multiprocessor systems | |
US6601089B1 (en) | System and method for allocating buffers for message passing in a shared-memory computer system | |
EP0911731B1 (en) | Order supporting mechanisms for use in a switch-based multi-processor system | |
US6108752A (en) | Method and apparatus for delaying victim writes in a switch-based multi-processor system to maintain data coherency | |
US6014690A (en) | Employing multiple channels for deadlock avoidance in a cache coherency protocol | |
US5678026A (en) | Multi-processor data processing system with control for granting multiple storage locks in parallel and parallel lock priority and second level cache priority queues | |
US5060144A (en) | Locking control with validity status indication for a multi-host processor system that utilizes a record lock processor and a cache memory for each host processor | |
CN101183338B (zh) | 本地片载系统和在本地片载系统中维持存储一致性的方法 | |
CN100590611C (zh) | 支持分级存储设置中多个一次性表访问操作的方法和装置 | |
US7159220B2 (en) | Flexible acceleration of java thread synchronization on multiprocessor computers | |
US5155854A (en) | System for arbitrating communication requests using multi-pass control unit based on availability of system resources | |
CN100375067C (zh) | 异构多核微处理器局部空间共享存储方法 | |
EP0911736A1 (en) | Low occupancy protocol for managing concurrent transactions with dependencies | |
EP0351955B1 (en) | Multiprocessor systems with cross-interrogated store-in-caches | |
US20030061395A1 (en) | Message passing using shared memory of a computer | |
CN1236136A (zh) | 高速远程存储簇接口控制器 | |
CN1716186A (zh) | 使用睡眠-唤醒机制的比较和交换操作 | |
EP0475873A2 (en) | Duplicated logic and interconnection system for arbitration among multiple information processors | |
WO1989008883A1 (en) | Record lock processor for multiprocessing data system | |
CN102298539A (zh) | 一种用于分布式并行处理的共享资源调度方法及系统 | |
US10338965B2 (en) | Managing a set of resources | |
JPH07311741A (ja) | 並列計算機システム | |
US8566532B2 (en) | Management of multipurpose command queues in a multilevel cache hierarchy | |
US5655102A (en) | System and method for piggybacking of read responses on a shared memory multiprocessor bus |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C06 | Publication | ||
PB01 | Publication | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20051012 Termination date: 20200928 |
|
CF01 | Termination of patent right due to non-payment of annual fee |