KR0138585B1 - Shared memory multiprocessor using spilt transaction bus - Google Patents
Shared memory multiprocessor using spilt transaction busInfo
- Publication number
- KR0138585B1 KR0138585B1 KR1019940001080A KR19940001080A KR0138585B1 KR 0138585 B1 KR0138585 B1 KR 0138585B1 KR 1019940001080 A KR1019940001080 A KR 1019940001080A KR 19940001080 A KR19940001080 A KR 19940001080A KR 0138585 B1 KR0138585 B1 KR 0138585B1
- Authority
- KR
- South Korea
- Prior art keywords
- block
- processor
- cache
- module
- processor module
- 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 - Lifetime
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/0831—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
- G06F12/0833—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means in combination with broadcast means (e.g. for invalidation or updating)
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
분리형 트랜잭션 버스를 사용한 다중프로세서 시스템에 사용하기 위한 쓰기-무효화 캐쉬 시스템이 제시되었다.A write-invalidate cache system for a multiprocessor system using a separate transaction bus has been presented.
본 다중프로세서 시스템은 적어도 하나 이상의 메모리 모듈; 분리형 트랜잭션 프로토콜하에서 동작하는 시스템 버스; 및 각각 프로세서, 캐쉬 및 상태 정보 저장 장치를 구비하는 다수의 프로세서 모듈을 포함한다. 상태 정보 저장 장치는 자신의 프로세서 모듈에 저장된 각 블럭에 대해, 그 블럭이 다른 프로세서 모듈에 의해 무효화되었을 때, 그 블럭의 갱신된 사본이 메모리 모듈에 존재하는지 여부에 관한 정보를 제공한다.The multiprocessor system includes at least one memory module; A system bus operating under a separate transaction protocol; And a plurality of processor modules each having a processor, a cache, and a state information storage device. The state information storage device provides for each block stored in its processor module as to whether or not an updated copy of that block exists in the memory module when that block is invalidated by another processor module.
이에 따라 프로세서 모듈은 프로세서로 부터의 어떤 블럭에 대한 접근 요청을 수신시, 그 블럭이 다른 프로세서 모듈에 의해 무효화되었으며, 그 블럭의 가장 최근에 갱신된 사본이 메모리 모듈에 존재하지 않는 경우, 그 블럭의 가장 최근에 갱신된 사본을 프로세서 모듈들과의 통신에 의해 접근하므로써 불필요한 메모리 접근을 줄이고, 따라서 실질적인 메모리 접근 시간을 줄인다.Accordingly, when a processor module receives an access request for a block from a processor, the block is invalidated by another processor module, and if the most recently updated copy of the block does not exist in the memory module, By accessing the most recently updated copy of s by communicating with the processor modules, unnecessary memory access is reduced, thus reducing the actual memory access time.
Description
제1도는 전형적인 공유 메모리 다중 프로세서를 도시한 도면Figure 1 illustrates a typical shared memory multiprocessor.
제2도는 각 프로세서 모듈에 캐쉬가 포함된 형태의 전형적인 공유 메모리 다중 프로세서를 도시한 도면Figure 2 illustrates a typical shared memory multiprocessor with a cache included in each processor module.
제3도는 종래의 공유 메모리 다중 프로세서를 도시한 것으로, 분리형 트랜잭션 버스를 이용한 다중 프로세서 환경하에서 기존의 쓰기 무효화 캐쉬 일관성 유지 방식이 사용될 때 문제점을 예시하는 도면3 is a diagram of a conventional shared memory multiprocessor, illustrating a problem when a conventional write invalidation cache coherency maintaining scheme is used under a multiprocessor environment using a separate transaction bus.
제4도는 본 발명의 개선된 쓰기-모효화 캐쉬 시스템을 포함하는 공유 메모리 다중 프로세서를 예시하는 도면Figure 4 illustrates a shared memory multiprocessor including an improved write-validating cache system of the present invention.
제5도는 본 발명의 개선된 쓰기-무효화 캐쉬 시스템을 블럭도 형태로 예시하는 도면5 is a block diagram illustrating an improved write-invalidate cache system of the present invention.
*도면의 주요 부분에 대한 부호의 설명* Explanation of symbols for the main parts of the drawings
100:메모리 모듈200,200':프로세서 모듈100: memory module 200, 200 ': processor module
300:분리형 트랜잭션 버스400,400':프로세서300: Detachable transaction bus 400,400 ': Processor
500,500':캐쉬510:프로세서 태그 캐쉬500,500 ': cache 510: processor tag cache
511:비교기520:버스 모니터 태그 캐쉬511: comparator 520: bus monitor tag cache
521:비교기530:상태 정보 캐쉬521: Comparator 530: status information cache
540:데이타 캐쉬550:캐쉬 제어기540: data cache 550: cache controller
560:버스 인터페이스560: bus interface
본 발명은 다중 프로세서(multiprocessor)에 관한 것으로, 특히, 분리형 트랜잭션 버스(split transaction bus)를 이용한 공유 메모리(shared memory) 다중 프로세서를 위한 개선된 쓰기-무효화 캐쉬 시스템(write-invalidate cache system)에 관한 것이다.The present invention relates to a multiprocessor, and more particularly, to an improved write-invalidate cache system for a shared memory multiprocessor using a split transaction bus. will be.
다중 프로세싱(multiprocessing)은 현존 단일 프로세서 기술의 한계를 극복하여 시스템 컴퓨팅 파워를 증진시키는 보편적인 방법이다. 다중 프로세서에서는 다수의 명령어 스트림(instruction stream )이 병렬로 수행되며, 프로세서 모듈(processor module)간의 통신(communication) 및 동기화(synchronization)는 메시지 전달이나 메모리 모듈(memory module)을 공유하여 성취된다.Multiprocessing is a common way to increase system computing power by overcoming the limitations of existing single processor technology. In multiple processors, a plurality of instruction streams are performed in parallel, and communication and synchronization between processor modules is accomplished by sharing messages or sharing memory modules.
공유 메모리 다중 프로세서는 시스템 컴퓨팅 파워 및 속도를 증진시키는 매우 경제적인 방법으로, 이는 저가의 고성능 마이크로 프로세서들이 공유 메모리 모듈과 공통 버스(common bus)를 통해 경제적으로 상호결합될 수 있다는 사실에 주로 기인한다. 제1도는 공통 버스에 의해 다수의 프로세서 모듈이 다수의 공유 메모리 모듈과 결합된 전형적인 공유 메모리 다중 프로세서 구조를 예시한다.Shared memory multiprocessors are a very economical way to increase system computing power and speed, largely due to the fact that low-cost, high-performance microprocessors can be economically interconnected via shared memory modules and a common bus. . Figure 1 illustrates a typical shared memory multiprocessor architecture in which multiple processor modules are coupled with multiple shared memory modules by a common bus.
그러나 이러한 시스템 구성에서는 다음과 같은 두가지의 근본적인 문제점들이 내재되어 있다: 즉, 다수의 프로세서 모듈이 동시에 공통 버스에 접근(access)하려할 때 발생하는 버스 충돌(bus contention)과 다수의 프로세서 모듈이 하나의 메모리 모듈에 동시에 접근하려할 때 발생하는 메모리 충돌(memory contention)이 그것이다. 이러한 문제들은 메모리 접근 시간(memory access time)을 증가시켜서, 결국 다중 프로세서의 수행 속도(execution speed)를 감소시킨다.However, there are two fundamental problems in this system configuration: bus contention and multiple processor modules that occur when multiple processor modules try to access a common bus at the same time. Memory contention occurs when trying to access memory modules at the same time. These problems increase memory access time, which in turn reduces the execution speed of multiple processors.
공통 버스에서의 접근 충돌 횟수를 줄이기 위한 하나의 방법은 공통 버스가 불필요하게 쉬는 일이 없이 가급적 많은 정보들을 전송하게 하는 것이다. 예를들면 프로세서 모듈이 메모리 모듈에 대한 접근 요청(request)을 공통 버스를 통해 전송할 때부터 응답(response)을 수신할 때까지 공통 버스를 점유하는 비분리형 트랜잭션 버스(non-split transaction bus)를 사용하기 보다는 메모리 모듈에 대한 접근 요청 전송 과정과 응답 전송 과정을 분리시켜서, 메모리 모듈의 접근 요청 전송 과정과 응답 과정 사이의 공통 버스를 사용하지 않는 동안에 다른 프로세서 모듈이나 메모리 모듈이 그 공통 버스를 사용할 수 있게 하는 분리형 트랜잭션 버스(split transaction bus)의 사용이 공통 버스에서의 접근 충돌의 횟수를 줄이는데 이바지할 수 있다. 분리형 트랜잭션 버스에 대한 보다 상세한 설명은, 예를들어, D. J. Schanin 등에 허여된 미합중국 특허 제5,067,071호에 기술되어 있다.One way to reduce the number of access collisions on a common bus is to have the common bus transmit as much information as possible without unnecessary rest. For example, use a non-split transaction bus that occupies the common bus from when the processor module sends an access request to the memory module over the common bus until it receives a response. Rather, it separates the access request transfer process and the response transfer process from the memory module so that another processor module or memory module can use the common bus while not using the common bus between the access request transfer process and the response process of the memory module. The use of split transaction buses can help reduce the number of access conflicts on the common bus. A more detailed description of the separate transaction bus is described, for example, in US Pat. No. 5,067,071 to D. J. Schanin et al.
공통 버스의 대역폭이 증가하더라도, 하나의 메모리 모듈은 한번에 하나의 메모리 접근 요청(memory access request)을 처리할 수 있으므로, 동시에 다수의 프로세서 모듈이 하나의 메모리 모듈에 접근하려할 때 발생하는 메모리 충돌로 인한 시스템 성능 저하는 여전히 존재한다. 따라서 가능한한 프로세서 모듈과 메모리 모듈 사이의 트래픽(traffic)을 감소시키는 것이 중요하다,.Even if the bandwidth of the common bus increases, one memory module can handle one memory access request at a time, resulting in memory conflicts that occur when multiple processor modules attempt to access one memory module at the same time. System degradation due to the present still exists. Therefore, it is important to reduce the traffic between the processor module and the memory module as much as possible.
프로세서 모듈은 프로세서가 자주 사용하리라고 예측되는 메모리 모듈의 블럭(block )들을 메모리 모듈보다 용량은 작으나 더 빠른 접근 시간을 제공하는 자체 캐쉬에 저장함으로써 공통 버스와 메모리 모듈들에 대한 접근 요청의 횟수를 줄일 수 있다. 제2도에는 모든 프로세서 모듈에 캐쉬가 포함된 다중 프로세서 구성을 도시하였다.Processor modules reduce the number of access requests to common buses and memory modules by storing blocks of memory modules that the processor is expected to use frequently in its own cache, which provides less access than memory modules but provides faster access times. Can be. FIG. 2 illustrates a multiprocessor configuration in which all processor modules have caches.
그러나, 다중 프로세서의 경우, 각 프로세서 모듈은 자체 캐쉬를 사용하므로, 하나의 프로세서 모듈이 자체 캐쉬에 저장된 어떤 블럭에 대한 쓰기 작업을 수행하게 되면, 그 쓰기 작업의 결과가 다른 모든 프로세서 모듈들내의 자체 캐쉬에 저장되어 있는 해당 블럭들에 반영되어야 하는 소위 캐쉬 일관성 유지 문제(cache coherence problem)가 발생한다. 이러한 캐쉬 일관성 문제를 해결함과 동시에 프로세서 모듈의 버스 및 메모리 접근 요청 횟수를 줄이기 위해 여러 다양한 캐쉬 일관성 유지 방식이 제안되어 왔다. 이러한 방식 가운데, 가장 널리 사용되는 방식중의 하나는 쓰기-무효화 캐쉬 일관성 유지 방식(write-invalidate cache coherence scheme)이다,.However, in the case of multiple processors, each processor module uses its own cache, so if one processor module writes to a block stored in its own cache, the result of that write is itself in all other processor modules. There is a so-called cache coherence problem that must be reflected in the corresponding blocks stored in the cache. In order to solve this cache coherence problem, various cache coherency methods have been proposed to reduce the number of bus and memory access requests of the processor module. Among these schemes, one of the most widely used is the write-invalidate cache coherence scheme.
이러한 쓰기-무효화 캐쉬 일관성 유지 방식에 있어, 프로세서 모듈내의 캐쉬는 내부에 저장된 각 블럭에 대해 상태 정보를 유지하며, 이 상태 정보는 적어도 세개의 가능한 캐쉬 블럭 상태(즉, MODIFIED, INVALID 및 SHARED)중의 하나를 표현한다. MODIFIED상태는 해당 블럭이 해당 캐쉬내에서 가장 최근에 변경되었으나, 해당 메모리 모듈은 아직 갱신되지 않았음을 의미한다. MODIFIED상태의 블럭이 차후에 설명될 블럭 대체(block replacement)에 따라 새로운 블럭으로 대체될 경우, 그 블럭은 해당 메모리 모듈로 축출(copied-back)되어야 한다. INVALID 상태는 해당 블럭이 다른 프로세서 모듈에 의해 무효화되었음을 의미한다. SHARED 상태는 해당 블럭이 해당 캐쉬내에서 변경되지 않았으며, 다른 프로세서 모듈에 의해 무효화되지도 않았고, 또한 해당 메모리 모듈내에 저장된 해당 블럭과 그 내용상 일치한다는 것을 의미한다. 상기 캐쉬 일관성 유지 방식은, 프로세서 모듈내의 프로세서로 부터의 블럭 접근 요청에 대해, 일반적으로 다음과 같이 동작한다.In this write-invalidate cache coherence scheme, the cache in the processor module maintains state information for each block stored therein, which state information is stored in at least three possible cache block states (i.e., MODIFIED, INVALID, and SHARED). Express one. The MODIFIED state means that the block has been changed most recently in the cache, but the memory module has not yet been updated. If a block in the MODIFIED state is replaced by a new block according to block replacement, which will be described later, the block must be copied-back to the corresponding memory module. The INVALID state means that the block has been invalidated by another processor module. The SHARED state means that the block has not been modified in the cache, invalidated by another processor module, and is consistent in content with the block stored in the memory module. The cache coherence scheme generally operates as follows for a block access request from a processor in a processor module.
읽기 적중(read hit)-상기 프로세서 모듈내의 캐쉬가 읽기 요청된 블럭을 SHARED나 MODIFIED 상태로 보유하고 있는 경우로서, 상기 프로세서 모듈은 그 블럭에 대한 읽기 작업을 수행한다.Read hit—a case in which the cache in the processor module holds a block that has been requested to be read in a SHARED or MODIFIED state, wherein the processor module performs a read operation on the block.
읽기 실패(read miss)-상기 프로세서 모듈내의 캐쉬가 읽기 요청된 블럭을 보유하고 있지 않거나(캐쉬 실패), 읽기 요청된 블럭을 INVALID 상태로 보유하고 있는 경우(무효화 실패)로서, 상기 프로세서 모듈은 메모리 모듈과 다른 프로세서 모듈에 그 블럭에 대한 브로드캐스트 읽기 요청(broadcast read request)을 전송한다. 다른 프로세서 모듈중 어느 하나가 요청된 블럭을 MODIFIED 상태로 보유하고 있을 경우, 그 프로세서 모듈은 상기 브로드캐스트 읽기 요청에 대해 그 블럭을 제공한다. 다른 프로세서 모듈이 요청된 블럭을 MODIFIED 상태로 보유하고 있지 않을 경우, 요청된 블럭을 보유하고 있는 메모리 모듈이 상기 브로드캐스트 읽기 요청에 대해 그 블럭을 제공한다. 이에 따라, 상기 프로세서 모듈은 요청한 블럭을 수신하여 읽기 작업을 수행하며 그 블럭의 상태를 SHARED 상태로 유지한다.Read miss—if the cache in the processor module does not hold a block that has been requested to read (cache failed) or if the block that has been read is held in an INVALID state (invalid invalidation), the processor module Sends a broadcast read request for the block to the module and another processor module. If any one of the other processor modules holds the requested block in the MODIFIED state, the processor module provides the block for the broadcast read request. If another processor module does not hold the requested block in the MODIFIED state, the memory module holding the requested block provides that block for the broadcast read request. Accordingly, the processor module receives the requested block, performs a read operation, and maintains the state of the block in the SHARED state.
쓰기 적중(write-hit)-상기 프로세서 모듈내의 캐쉬가 쓰기 요청된 블럭을 SHARED나 MODIFIED 상태로 보유하고 있는 경우로서, MODIFIED 상태로 보유하고 있으면, 상기 프로세서 모듈은 그 블럭에 대한 쓰기 작업을 수행한다. 상기 프로세서 모듈내의 캐쉬가 요청된 블럭을 SHARED 상태로 보유하고 있을 경우, 상기 프로세서 모듈은 다른 프로세서 모듈에 그 블럭에 대한 무효화 요청(invalidation request)을 전송하여 다른 모든 프로세서 모듈이 그들의 캐쉬내에 저장된 요청된 블럭의 사본(copy)을 무효화시키도록 하고, 자체 캐쉬에 저장된 요청된 블럭에 대한 쓰기 작업을 수행하며 그 블럭의 상태를 MODIFIED 상태로 변경한다.Write-hit—a cache in the processor module holds a block that has been requested to be written in the SHARED or MODIFIED state. If the cache is held in the MODIFIED state, the processor module performs a write operation on the block. . If the cache in the processor module holds the requested block in the SHARED state, the processor module sends an invalidation request for that block to another processor module so that all other processor modules are stored in their cache. Invalidate a copy of a block, perform a write operation on the requested block stored in its own cache, and change the state of the block to MODIFIED.
쓰기 실패(write miss)-상기 프로세서 모듈내의 캐쉬가 쓰기 요청된 블럭을 보유하고 있지 않거나(캐쉬 실패), 쓰기 요청된 블럭을 INVALID 상태로 보유하고 있을 경우(무효화 실패)로서, 상기 프로세서 모듈은 그 블럭에 대한 무효화 요청을 내포한 브로드캐스트 읽기 요청(broadcast read with invalidation request)을 메모리 모듈 및 다른 프로세서 모듈로 전송하여, 다른 모든 프로세서 모듈이 그들의 캐쉬내에 저장된 요청된 블럭의 사본을 무효화시킴과 동시에, 다른 프로세서 모듈중의 하나가 요청된 블럭을 MODIFIED 상태로 보유하고 있을 경우, 그 프로세서 모듈이 상기 무효화 요청을 내포한 브로드캐스트 읽기 요청에 따라 그 블럭을 제공하도록 한다. 이와 달리, 어느 프로세서 모듈도 요청된 블럭을 MODIFIED 상태로 보유하고 있지 않은 경우, 요청된 블럭을 보유하고 있는 메모리 모듈이 상기 무효화 요청을 내포한 브로드캐스트 읽기 요청에 따라 그 블럭을 제공한다. 이에 따라, 상기 프로세서 모듈은 요청한 블럭을 수신하여 그의 상태를 MODIFIED 상태로 변경하며, 쓰기 작업을 수행한다.Write miss—when the cache in the processor module does not hold a block that has been requested to write (cache failed), or has a block that has been requested to write in an INVALID state (invalidation failure), the processor module may Send a broadcast read with invalidation request to the memory module and other processor modules, including the invalidation request for the block, at the same time that all other processor modules invalidate copies of the requested block stored in their cache, If one of the other processor modules holds the requested block in the MODIFIED state, the processor module causes the block to be provided in accordance with the broadcast read request containing the invalidation request. Alternatively, if no processor module holds the requested block in the MODIFIED state, the memory module holding the requested block provides the block in response to the broadcast read request containing the invalidation request. Accordingly, the processor module receives the requested block, changes its state to MODIFIED state, and performs a write operation.
상술한 쓰기-무효화 캐쉬 일관성 유지 방안의 다양한 변형이, 예를들어, Per stensterom의 A Survey of Cache Coherence Schemes for Multiprocessors(IEEE Computer, June 1990, pp. 12-24); Paramarcos, M. 및 Patel, J. 의 A Low Overhead Coherence Solution for Multiprocessors with Private Cache Memories(11th ISCA, 1984, pp. 348-354); R. H. Katz 등의 Implementing A Cache Consistency Protocol(12th ISCA, 1985, pp. 276-283); 및 Tom Lovett과 Shreekant Thakkar의 The Symmetry Multiprocessor System(1988 ICPP, Vol. I, August 1988, pp. 303-310)등에 기술되어 있다.Various variations of the write-invalidate cache coherence scheme described above are described, for example, in Per Stensterom's A Survey of Cache Coherence Schemes for Multiprocessors (IEEE Computer, June 1990, pp. 12-24); A Low Overhead Coherence Solution for Multiprocessors with Private Cache Memories (11th ISCA, 1984, pp. 348-354) from Paramarcos, M. and Patel, J .; R. H. Katz et al. Implementing A Cache Consistency Protocol (12th ISCA, 1985, pp. 276-283); And The Symmetry Multiprocessor System (1988 ICPP, Vol. I, August 1988, pp. 303-310) by Tom Lovett and Shreekant Thakkar.
이러한 종래의 쓰기-무효화 캐쉬 일관성 유지 방식들은 비분리형 트랜잭션 버스를 이용한 다중 프로세서 환경하에서와는 달리 분리형 트랜잭션 버스를 이용한 다중 프로세서 환경하에서는 하기하는 바와 같은 비효율성이 발생한다.Such conventional write-invalidate cache coherency maintaining schemes generate inefficiencies as described below in a multiprocessor environment using a separate transaction bus, unlike in a multiprocessor environment using a non-separable transaction bus.
상술한 바와 같이, 기존의 쓰기-무효화 캐쉬 일관성 유지 방식에 있어서는, 프로세서 모듈은 무효화 실패가 발생할 때마다(무효화 요청을 내포한) 브로드캐스트 읽기 요청을 메모리 모듈과 다른 프로세서 모듈로 전송한다. 또한, 분리형 트랜잭션 버스는 메모리 접근 요청 및 그에 상응하는 응답사이에 버스를 양도(release)하여, 그 기간동안 버스가 다른 모듈에 의해 사용될 수 있도록 허용한다.As described above, in the conventional write-invalidate cache coherence maintaining scheme, the processor module sends a broadcast read request (including an invalidation request) to a memory module and another processor module whenever an invalidation failure occurs. In addition, the detached transaction bus releases the bus between the memory access request and the corresponding response, allowing the bus to be used by another module during that period.
이러한 상황하에서, 제3도의 예에서 도시된 바와 같이, 프로세서 모듈 1에서 블럭 X에 대한 무효화 실패가 발생하고, 이어서 프로세서 모듈 2에서 다른 블럭 Y에 대한 캐쉬 실패가 발생하면, (메모리 모듈이 하나이고, 이 메모리 모듈에 하나의 요청 버퍼(request buffer) 가 있다고 가정할 때 프로세서 모듈 1은 블럭 X에 대한 (무효화 요청을 내포한) 브로드캐스트 읽기 요청을, 프로세서 모듈 2는 블럭 Y에 대한 (무효화 요청을 내포한) 브로드캐스트 읽기 요청을 메모리 모듈 및 다른 프로세서 모듈로 전송한다. 이에 따라, 메모리 모듈은 블럭 X에 대한 (무효화 요청을 내포한) 브로드캐스트 읽기 요청에 대해 블럭 X에 대한 메모리 읽기 동작을 시작하나, 메모리 모듈은 한번에 하나의 메모리 접근 요청을 처리할 수 있기 때문에, 블럭 Y에 대한 (무효화 요청을 내포한) 브로드캐스트 읽기 요청은 요청 버퍼에 저장한다. 따라서, 프로세서 모듈 2로 부터의 요청에 대한 처리는 메모리 모듈이 프로세서 모듈 1로 부터의 요청에 대한 응답을 완료하거나, 블럭 X를 MODIFIED 상태로 보유하고 있는 (즉, 블럭 X의 갱신된 사본을 보유하고 있는) 다른 프로세서 모듈이 메모리 모듈을 대신하여 블럭 X를 제공할 것이라는 정보를 메모리 모듈로 전송할 때까지 지연된다.Under this situation, as shown in the example of FIG. 3, if an invalidation failure occurs for block X in processor module 1, and then a cache failure for another block Y occurs in processor module 2, (memory module is one and Assuming that this memory module has one request buffer, processor module 1 sends a broadcast read request for block X (including an invalidation request), and processor module 2 sends an invalidation request for block Y. Sends a broadcast read request to the memory module and another processor module, thereby causing the memory module to perform a memory read operation on block X for a broadcast read request (including an invalidation request) to block X. But, since the memory module can handle one memory access request at a time, it implies an invalidation request for block Y 1) The broadcast read request is stored in the request buffer, so that processing of a request from processor module 2 completes a response to a request from processor module 1, or holds block X in MODIFIED state. It is delayed until another processor module that is doing (i.e., holding an updated copy of block X) sends information to the memory module that it will provide block X on behalf of the memory module.
그러나, 다른 프로세서 모듈중의 하나가 블럭 X를 MODIFIED 상태로 보유하고 있음을 미리 알 수 있다면, 프로세서 모듈 1은 블럭 X에 대한 (무효화 요청을 내포한) 브로드캐스트 읽기 요청을 다른 프로세서 모듈들로만 전송하여 불필요한 메모리 접근을 줄일 수 있으며, 따라서 메모리 모듈은 블럭 Y에 대한 (무효화 요청을 내포한) 브로드캐스트 읽기 요청에 대한 응답을 지연없이 처리하여 실질적인 메모리 접근 시간을 감소시킬 수 있다.However, if one of the other processor modules can know in advance that it has block X in MODIFIED state, processor module 1 sends a broadcast read request for block X (including an invalidation request) only to the other processor modules. Unnecessary memory access can be reduced, and thus the memory module can process the response to broadcast read requests (including invalidation requests) for block Y without delay, thereby reducing the actual memory access time.
따라서, 본 발명의 주된 목적은 분리형 트랜잭션 버스를 이용한 다중 프로세서 시스템을 위한 개선된 쓰기-무효화 캐쉬 시스템을 제공하여, 캐쉬 일관성 유지 문제를 해결함과 동시에 실질적인 메모리 접근 시간을 줄이는 것이다.It is therefore a primary object of the present invention to provide an improved write-invalidate cache system for a multiprocessor system using a separate transaction bus, thereby solving the problem of maintaining cache coherency and reducing the actual memory access time.
본 발명의 상기 목적 및 특히 명시하지 않은 다른 목적을 달성하기 위하여, 본 발명은 분리형 트랜잭션 프로토콜(split transaction protocol)하에 동작하는 시스템 버스(system bus), 상기 시스템 버스에 결합된 적어도 하나 이상의 메모리 모듈(momory module)과, 각각 상기 시스템 버스에 결합된 다수의 프로세서 모듈(processor module)을 갖는 공유 메모리 다중 프로세서(shared memory multiprocessor)에 있어서, 각각의 상기 프로세서 모듈은: 프로세서(processor); 상기 프로세서 및 상기 시스템 버스 사이에 결합되어 블럭들을 저장하는 캐쉬(cache); 및 상기 캐쉬와 연관되며, 각각의 상기 블럭들에 대하여 상기 각 블럭이 무효화된 상태인 경우 상기 적어도 하나 이상의 메모리 모듈이 상기 각 블럭의 갱신된 사본을 보유하는지 여부를 나타내는 상태 정보를 구비하는 상태 정보 저장 장치를 포함하므로써, 상기 각 프로세서 모듈은 상기 프로세서로 부터 상기 각 블럭에 대한 접근(access) 요청을 수신하였을 때, 상기 상태 정보가 상기 적어도 하나 이상의 메모리 모듈중 어느 메모리 모듈도 상기 갱신된 사본을 보유하고 있지 않음을 나타낼 경우, 상기 시스템 버스를 통해 단지 상기 다수의 프로세서 모듈과 통신하므로써 상기 갱신된 사본에 접근하는 공유 메모리 다중 프로세서 shared momory multiprocessor)를 제공한다.In order to achieve the above object of the present invention and other objects not specifically stated, the present invention is directed to a system bus operating under a split transaction protocol, at least one memory module coupled to the system bus ( A shared memory multiprocessor having a momory module and a plurality of processor modules each coupled to the system bus, each shared processor multiprocessor comprising: a processor; A cache coupled between the processor and the system bus to store blocks; And status information associated with the cache, the status information indicating whether the at least one memory module holds an updated copy of each block when the respective blocks are invalidated for each of the blocks. Including a storage device, when each processor module receives an access request for each block from the processor, the status information indicates that any memory module of the at least one or more memory modules receives the updated copy. If not, it provides a shared momory multiprocessor that accesses the updated copy only by communicating with the plurality of processor modules via the system bus.
이하, 본 발명의 실시예들을 첨부된 도면을 참조하여 상세히 설명한다.Hereinafter, embodiments of the present invention will be described in detail with reference to the accompanying drawings.
먼저, 제4도를 참조하면, 본 발명의 개선된 쓰기-무효화 캐쉬 시스템을 사용한 공유 메모리 다중 프로세서의 예시적인 블럭도가 도시되어 있다. 도시된 바와 같이, 공유 메모리 다중 프로세서에는 적어도 하나 이상의 메모리 모듈(100)과 적어도 두개 이상의 프로세서 모듈 (200, 200')이 분리형 트랜잭션 버스(300)에 의해 결합되어 있다. 각 프로세서 모듈 (200 혹은 200')은 프로세서(400 혹은 400') 및 캐쉬(500 혹은 500')를 포함한다.Referring first to FIG. 4, an exemplary block diagram of a shared memory multiprocessor using the improved write-invalidate cache system of the present invention is shown. As shown, at least one or more memory modules 100 and at least two or more processor modules 200 and 200 ′ are coupled to a shared memory multiprocessor by a separate transaction bus 300. Each processor module 200 or 200 'includes a processor 400 or 400' and a cache 500 or 500 '.
메모리 모듈(100)과 캐쉬(500 혹은 500')에서 데이타는 동일한 크기의 블럭으로 분리되어 저장된다. 캐쉬(500 혹은 500')에 저장되어 있는 하나의 블럭에 대한 접근은 프로세서(400 혹은 400')로 부터 그 블럭에 대한 접근 요청과 함께 그 블럭의 물리적 주소(physical address)가 전달됨으로써 개시된다. (캐쉬(500,500')는 모두 동일한 구조 및 기능을 갖고 있으므로, 이하 캐쉬(500)에 대하여만 상세히 기술한다. 또한, 이하 본 발명의 실시예를 설명함에 있어, 캐쉬(500)가 하기하는 바와같은 직접 매핑(direct mapping)방식을 사용하는 경우에 대해 설명할 것이나, 본 발명은 캐쉬(500)가 다른 매핑 방식, 예를 들면, 2-way set-associative maping(Mano, M. M., Computer Engineering, Prentice Hall, 1988 참조)등을 사용한 경우에도 동일하게 적용될 수 있음을 이해하여야만 한다.)In the memory module 100 and the cache 500 or 500 ', data is divided into blocks of the same size and stored. Access to a block stored in cache 500 or 500 'is initiated by passing the block's physical address along with a request for access to the block from processor 400 or 400'. (Caches 500, 500 'all have the same structure and function, and therefore, only cache 500 will be described in detail below. In addition, in the following description of embodiments of the present invention, the cache 500 will be described as follows. A case of using a direct mapping method will be described. However, the present invention provides a method in which the cache 500 has another mapping method, for example, 2-way set-associative maping (Mano, MM, Computer Engineering, Prentice Hall). It should be understood that the same applies to the case of using the same method.
블럭의 물리적 어드레스가 n 비트로 주어졌을 때, 이중 예를들어, 하위 k 비트는 캐쉬(500)내의 블럭에 접근하기 위해 사용되며, n 비트 주소는 메모리 모듈(100)내의 블럭에 접근하기 위해 사용된다. 이러한 하위 k 비트 부분은블럭 어드레스라고 하며, 나머지 상위 n-k 비트 부분은 태그 어드레스라고 한다. 캐쉬(500)내의 각 블럭은 데이타와 이에 연관된 태그 어드레스로 구성된다. 따라서, 하나의 블럭이 캐쉬(500)내에 새로이 저장되는 경우, 데이타와 태그 어드레스가 함께 저장된다. 이 경우, 프로세서(400 혹은 400')로 부터, 하나의 블럭에 대한 접근 요청과 함께 그 블럭의 물리적 어드레스가 캐쉬(500)에 도착하면, 그 블럭의 물리적 어드레스의 블럭 어드레스 부분은 캐쉬(500)내의 블럭에 접근하기 위해 사용되고, 그 블럭의 물리적 어드레스의 태그 어드레스 부분은 캐쉬(500)에 저장된 블럭 어드레스 부분에 의해 접근된 블럭내의 태그 어드레스 비트와 비교하기 위해 사용된다. 상기 태그 어드레스 부분과 상기 캐쉬로 부터의 태그 어드레서 비트가 일치하면, 캐쉬(500)는 그 블럭을 보유하고 있음을 의미한다.Given the physical address of a block is n bits, for example, the lower k bits are used to access a block in cache 500, and the n bit address is used to access a block in memory module 100. . This lower k bit portion is called a block address, and the remaining upper n-k bit portions are called a tag address. Each block in cache 500 consists of data and tag addresses associated with it. Therefore, when one block is newly stored in the cache 500, the data and the tag address are stored together. In this case, when the physical address of the block arrives at the cache 500 together with an access request for one block from the processor 400 or 400 ', the block address portion of the physical address of the block is cached. The tag address portion of the block's physical address is used to access the block in the block and the tag address portion in the block accessed by the block address portion stored in the cache 500. If the tag address portion and the tag addresser bits from the cache match, it means that the cache 500 holds the block.
또한, 본 발명에 따른 캐쉬(500)는 저장된 각 블럭에 대해, 그 블럭의 현재 상태를 나타내는 캐시 블럭 상태 정보(cache block state information)를 유지한다.In addition, the cache 500 according to the present invention maintains cache block state information indicating the current state of the block for each stored block.
상술한 바와 같이, 종래의 쓰기-무효화 캐쉬 일관성 유지 방식에 의하면, 프로세서 모듈에서 하나의 블럭에 대한 무효화 실패가 발생하면, (무효화 요청을 내포한) 읽기 요청이 메모리 모듈과 다른 프로세서 모듈에 전송되며, 이로 인해 공유 메모리 다중 프로세서의 성능에 나쁜 영향을 미친다. 그러나, 본 발명에서와 같이, 다른 프로세서 모듈이 그 블럭을 MODIFIED 상태로, 즉, 그 블럭의 갱신된 사본을 저장하고 있음을 알 수 있다면, 상기 (무효화 요청을 내포한) 읽기 요청은 다른 프로세서 모듈로만 전송되고 메모리 모듈은 상기 (무효화 요청을 내포한) 읽기 요청에 대한 트랜잭션에서 제외되어, 불필요한 메모리 접근이 제거되며, 따라서 실질적인 메모리 접근 시간을 줄일 수 있다,.As described above, according to the conventional write-invalidate cache coherence maintaining scheme, when an invalidation failure for one block occurs in a processor module, a read request (including an invalidation request) is transmitted to a memory module and another processor module. This can adversely affect the performance of shared memory multiprocessors. However, as in the present invention, if another processor module knows that the block is in the MODIFIED state, i.e., stores an updated copy of the block, then the read request (which contains an invalidation request) may be executed. Is sent only to the memory module and is excluded from the transaction for the read request (including the invalidation request), thereby eliminating unnecessary memory accesses, thus reducing the actual memory access time.
그러나, 이러한 개선을 성취하기 위하여, 본 발명의 캐쉬 시스템(500)은 INVALID 상태를 최소한 두가지 캐쉬 블럭 상태 예를 들면, NON-COPYBACK-INVALID 상태와 COPYBACK-INVALID 상태로 구별하여 유지하여야 한다.However, to achieve this improvement, the cache system 500 of the present invention must maintain the INVALID state in at least two cache block states, for example, the NON-COPYBACK-INVALID state and the COPYBACK-INVALID state.
NON-COPYBACK-INVALID 상태와 COPYBACK-INVALID 상태는 모두 상기 공유 메모리 다중 프로세서내의 다른 프로세서 모듈에 의해 해당 블럭이 무효화되었음을 의미한다. 그러나 NON-COPY BACK-INVALID 상태는 해당 블럭을 가장 최근에 무효화시킨 프로세서 모듈이 자신이 보유하고 있는 해당 블럭의 갱신된 사본을 메모리 모듈(100)로 축출(copyback)하지 않았음을 나타냄에 반해, COPYBACK-INVALID 상태는 해당 블럭을 가장 최근에 무효화시킨 프로세서 모듈이 자신이 보유하고 있는 해당 블럭의 갱신된 사본을 차후에 보다 상세히 기술될 블럭 대체에 따라 메모리 모듈(100)로 축출시켰음을 의미한다.Both the NON-COPYBACK-INVALID state and the COPYBACK-INVALID state mean that the block has been invalidated by another processor module in the shared memory multiprocessor. However, the NON-COPY BACK-INVALID status indicates that the processor module that most recently invalidated the block did not copy back an updated copy of the block it owns to memory module 100, The COPYBACK-INVALID state means that the processor module that most recently invalidated the block has evicted the updated copy of the block it holds to the memory module 100 in accordance with block replacement, which will be described in more detail later.
또한, 본 발명의 일실시예에 따라, 본 발명의 캐쉬(500)는 다음과 같은 5개의 추가적인 캐쉬 블럭 상태를 포함할 수 있다. 즉, MODIFIED-SHARED, MODIFIED, EXCLUSIVE, SHARED-SOURCE, SHARED의 5가지 캐쉬 블럭 상태가 그들이며, 이들 상태는 모두 유효한(즉, 상기 공유 메모리 다중 프로세서내의 다른 프로세서 모듈에 의해 무효화 되지 않은) 캐쉬 블럭 상태를 의미한다.In addition, according to an embodiment of the present invention, the cache 500 of the present invention may include five additional cache block states as follows. That is, there are five cache block states, MODIFIED-SHARED, MODIFIED, EXCLUSIVE, SHARED-SOURCE, and SHARED, all of which are valid (i.e. not invalidated by other processor modules in the shared memory multiprocessor). Means status.
MODIFIED-SHARED 및 MODIFIED 상태는 해당 블럭이 캐쉬(500)내에서 가장 최근에 갱신되었음(즉, 캐쉬(500)가 해당 블럭의 갱신된 사본을 보유하고 있음)과, 메모리 모듈(100)내의 것과 일치하지 않음을 의미한다. MODIFIED 상태는 또한 다른 캐쉬(500')에는 해당 블럭이 유효한 상태로 존재하지 않음을 의미한다.The MODIFIED-SHARED and MODIFIED states are consistent with those in memory module 100, where the block was most recently updated in cache 500 (that is, cache 500 holds an updated copy of that block). It means not to. The MODIFIED state also means that the block does not exist in a valid state in the other cache 500 '.
EXCLUSIVE 상태는 해당 블럭이 메모리 모듈(100)내의 것과 일치하며, 다른 캐쉬(500')에는 해당 블럭이 유효한 상태로 존재하지 않음을 나타낸다.The EXCLUSIVE state indicates that the block matches that in the memory module 100, and that the block does not exist in a valid state in the other cache 500 '.
SHARED-SOURCE 상태는 해당 블럭이 메모리 모듈(100)의 것과 일치하고, 해당 블럭에 대한 가장 최근의 읽기 실패가 캐쉬(500)내에서 발생하였으며, 다른 캐쉬(500')에는 해당 블럭이 MODIFIED-SHARED 혹은 MODIFIED 상태로는 존재하지 않음을 나타낸다. 또한 SHARED 상태는 해당 블럭의 상태가 상기한 어느 상태에도 속하지 않고 단지 유효함만을 나타낸다.The SHARED-SOURCE state indicates that the block matches that of memory module 100, the most recent read failure for that block occurred in cache 500, and the other cache 500 'indicates that the block is MODIFIED-SHARED. Or it does not exist in the MODIFIED state. Also, the SHARED state indicates that the state of the block does not belong to any of the above states but is only valid.
본 발명의 실시예에 따르면, MODIFIED-SHARED 나 MODIFIED, EXCLUSIVE, SHARED-SOURCE의 상태로 해당 블럭을 보유한 프로세서 모듈이 해당 블럭의 소유자가 되며, 따라서, 다른 프로세서 모듈로 부터 해당 블럭에 대한 접근 요청 수신시 그에 대한 응답을 할 책임이 있다.According to an embodiment of the present invention, a processor module holding a block in a state of MODIFIED-SHARED, MODIFIED, EXCLUSIVE, SHARED-SOURCE becomes the owner of the block, and thus receives an access request for the block from another processor module. It is your responsibility to respond.
이제 제5도를 살펴보면, 본 발명의 일실시예에 따른 캐쉬(500)의 구현예가 블럭도 형태로 도시되었다. 도시된 바와 같이, 캐쉬(500)는 각각 캐쉬(500)내에 저장된 블럭의 태그 어드레스를 보유한 프로세서 태그 캐쉬 (processor tag cache)(510) 및 버스 모니터 태그 캐쉬(bus monitor tag chche)(520); 각각 프로세서 태그 캐쉬(510) 및 버스 모니터 태그 캐쉬(520)에 결합된 두개의 비교기(511)(521); 저장된 각각의 캐쉬 블럭에 대해, 상술한 바와 같은 7개의 캐쉬 블럭 상태중에서 하나의 상태를 나타내는 캐쉬 블럭 상태 정보를 저장하기 위한 상태 정보 캐쉬(530); 캐쉬 블럭을 저장하는 데이타 캐쉬(540); 캐쉬 제어기(550); 및 캐쉬 제어기(550)의 제어하에 프로세서(400 및 캐쉬(500)를 시스템 버스(100)에 접속하는 버스 인터페이스(560)를 포함한다.Referring now to FIG. 5, an embodiment of a cache 500 in accordance with one embodiment of the present invention is shown in block diagram form. As shown, the cache 500 includes a processor tag cache 510 and a bus monitor tag chche 520 each holding a tag address of a block stored in the cache 500; Two comparators 511, 521 coupled to the processor tag cache 510 and the bus monitor tag cache 520, respectively; A state information cache 530 for storing cache block state information indicating one of the seven cache block states as described above, for each cache block stored; A data cache 540 for storing cache blocks; Cache controller 550; And a bus interface 560 that connects the processor 400 and the cache 500 to the system bus 100 under the control of the cache controller 550.
프로세서(400)가 하나의 블럭에 대한 접근 요청과 그 블럭의 물리적 어드레스를 캐쉬(500)에 전송하면, 블럭 어드레스 라고 표현된 상기 물리적 어드레스의 부분이 프로세서 태그 캐쉬(510), 상태 정보 캐쉬(530) 및 데이타 캐쉬(540)를 접근하는데 사용된다. 비교기(511)은 프로세서 태그 캐쉬(510)로 부터의 태그 어드레스와, 태그 어드레스라고 표현된 상기 물리적 어드레스의 또다른 부분을 입력으로 제공받아 비교동작을 수행한다. 비교기(511)내에서 이들 두개의 입력이 일치하면 캐쉬(500)는 요청된 블럭을 보유하고 있음을 의미한다.When the processor 400 transmits an access request for one block and the physical address of the block to the cache 500, the portion of the physical address represented by the block address is the processor tag cache 510 and the status information cache 530. ) And data cache 540. The comparator 511 receives a tag address from the processor tag cache 510 and another part of the physical address expressed as a tag address as input and performs a comparison operation. If these two inputs in the comparator 511 match, it means that the cache 500 holds the requested block.
버스 감시(bus watching) 작업은 버스 모니터 태그 캐쉬(520)를 이용하여 처리되며, 따라서 버스 감시 작업은 프로세서 (400)가 캐쉬에 접근하는 작업과 병행하여 수행될 수 있다. 즉, 캐쉬(500)에서 버스(300)로 부터 어떤 명령어(bus-oriented command)가 원하는 블럭의 물리적 어드레스와 함께 수신되면, 상기 물리적 어드레스의 블럭 어드레스 부분은 버스 모니터 태크 캐쉬(520), 상태 정보 캐쉬(530) 및 데이타 캐쉬(540)를 접근하는데 사용된다. 비교기(521)는 버스 모니터 태그 캐쉬(520)로 부터의 태그 어드레스와, 상기 물리적 어드레스의 태그 어드레스 부분을 입력으로 제공받아 비교작업을 수행한다. 비교기(521)내에서 이들 두개의 입력이 일치하면 캐쉬(500)는 원하는 블럭을 보유하고 있음을 의미한다.Bus watching operations are handled using the bus monitor tag cache 520, so bus monitoring operations may be performed in parallel with the operation of the processor 400 accessing the cache. That is, if a bus-oriented command is received from the bus 300 in the cache 500 with the physical address of the desired block, the block address portion of the physical address is the bus monitor tag cache 520, status information. Used to access cache 530 and data cache 540. The comparator 521 receives a tag address from the bus monitor tag cache 520 and a tag address portion of the physical address as an input to perform a comparison operation. If these two inputs in the comparator 521 match, it means that the cache 500 holds the desired block.
캐쉬 제어기(550)는, 상기한 입력들의 일치여부에 관한 정보를 제공받고, 프로세서(400)로 부터의 요청 및/또는 시스템 버스(300)으로 부터의 명령어에 응답하여, 그 블럭에 대한 상태 정보를 검사/변경하고, 하기하는 바와같은 COMMAND, VALID, DIRTY, MEMORY-INHIBIT 및 SOURCE-ID 및 DESTINATION-ID 라인등을 검사/변경하고, 캐쉬(500)의 전반적인 동작을 제어 및 동기화시킨다.The cache controller 550 is provided with information regarding whether the above inputs match, and in response to a request from the processor 400 and / or an instruction from the system bus 300, status information for the block. Check / change, check / change COMMAND, VALID, DIRTY, MEMORY-INHIBIT and SOURCE-ID and DESTINATION-ID lines as described below, and control and synchronize the overall operation of cache 500.
이제 제4도를 다시 살펴보면, 상기 공유 메모리 다중 프로세서의 주요 요소간의 통신은 시스템 버스(300)상에서 이루어진다. 시스템 버스(300)는 3개의 버스, 즉, 어드레서 버스, 데이타 버스 및 제어 버스를 포함하고, 상술한 바와 같은 분리형 트랜잭션 프로토콜을 사용한다. 제어버스는 또한 COMMAND, VALID, DIRTY, MEMORY-INHIBIT, SOURCE-ID 및 DSESTINATION-ID 라인을 포함할 수 있다.Referring back to FIG. 4, communication between major elements of the shared memory multiprocessor is on system bus 300. As shown in FIG. The system bus 300 includes three buses, an addresser bus, a data bus and a control bus, and uses a separate transaction protocol as described above. The control bus may also include COMMAND, VALID, DIRTY, MEMORY-INHIBIT, SOURCE-ID and DSESTINATION-ID lines.
COMMAND 라인은 메모리 모듈(100) 및 프로세서 모듈(200, 200')사이에 차후에 보다 상세히 설명될 브로드캐스트 읽기 요청(broadcast read request), 캐쉬-캐쉬들 읽기 요청(cache-to-caches read request), 무효화 요청(invalidation request) 무효화 요청을 내포한 브로드캐스트 읽기요청(broadcast read with invalidation request), 무효화 요청을 내포한 캐쉬-캐쉬들 읽기 요청(cache-to-caches read with invalidation request)을 포함하는 명령어들을 전송한다.The COMMAND line includes a broadcast read request, cache-to-caches read request, which will be described in more detail later between the memory module 100 and the processor module 200, 200 '. Invalidation request commands that include a broadcast read with invalidation request that contains an invalidation request, and a cache-to-caches read with invalidation request that contains an invalidation request. send.
VALID, DIRTY 및 MEMORY-INHIBIT 라인은 (무효화 요청을 내포한) 브로드캐스트 읽기 요청에 사용된다. 예를들어, 프로세서 모듈(200)이 어떤 블럭에 대한 캐쉬 실패로 인해, 메모리 모듈(100)과 다른 프로세서 모듈(200')로 브로드캐스트 읽기 요청을 전송하면, 다른 프로세서 모듈(200')은 그들이 보유한 해당 블럭의 상태 정보에 따라 VALID, DIRTY 및 MEMORY-INHIBIT 라인상에 해당 신호를 인가(assert)한다. 그후, 프로세서 모듈(200)은 VALID 라인을 검사하여 다른 프로세서 모듈에 해당 블럭이 EXCLUSIVE, SHARED-SOURCE 또는 SHARED 상태중의 어느 한 상태로 존재하는지를 판단할 수 있고, DIRTY 라인을 검사하여 해당 블럭이 MODIFIED-SHARED 혹은 MODIFIED 상태로 존재하는지를 판단할 수 있다. 또한, 메모리 모듈(100)은 MEMORY-INHIBIT 라인을 검사하여 MEMORY-INHIBIT 신호가 인가되었을 경우 상기 (무효화 요청을 내포한) 브로드캐스트 읽기 요청에 대한 처리를 중단할 수 있다.The VALID, DIRTY, and MEMORY-INHIBIT lines are used for broadcast read requests (including invalidation requests). For example, if processor module 200 sends a broadcast read request to memory module 100 and another processor module 200 'due to a cache failure for a block, the other processor module 200' The signal is asserted on the VALID, DIRTY, and MEMORY-INHIBIT lines according to the state information of the corresponding block. Thereafter, the processor module 200 may examine the VALID line to determine whether the block exists in another state of the EXCLUSIVE, SHARED-SOURCE, or SHARED state in another processor module, and the block may be MODIFIED by examining the DIRTY line. You can determine whether it exists in SHARED or MODIFIED state. In addition, the memory module 100 may stop the processing of the broadcast read request (including the invalidation request) when the MEMORY-INHIBIT signal is applied by checking the MEMORY-INHIBIT line.
SOURCE-ID 라인은 (무효화 요청을 내포한) 브로드캐스트 읽기 요청, (무효화 요청을 내포한) 캐쉬-캐쉬들 읽기 요청 또는 무효화 요청 등의 명령어를 발신한 소오스 프로세서 모듈(source processor module)을 식별하기 위해 사용되며, DESTINATION-ID 라인은 상기 명령어를 수신하거나 요청된 블럭을 수신할 프로세서 모듈을 식별하기 위해 사용될 수 있다.The SOURCE-ID line identifies the source processor module that sent the instruction, such as a broadcast read request (including an invalidation request), a cache-caches read request (including an invalidation request), or an invalidation request. The DESTINATION-ID line may be used to identify the processor module that will receive the instruction or receive the requested block.
이하, 본 발명의 일실시예에 따라 캐쉬(500 및 500')를 포함하는 프로세서 모듈(200 및 200')의 예시적인 동작이 읽기 적중, 읽기 실패, 쓰기 적중 및 쓰기 실패의 각 경우에 대하여 기술될 것이다. 각 경우에 있어 제4도의 프로세서 모듈(200)내의 프로세서(400)가 캐쉬(500)로 어떤 블럭에 접근하기 위한 요청을 생성하였다고 가정한다. 또한, 하기의 프로세서 모듈(200 및 200')의 예시적인 동작을 설명함에 있어, 블럭 대체라 함은 캐쉬 실패가 발생하였을 때, 해당 캐쉬 내에서 대체될 블럭이 MODIFIED-SHARED 이거나 MODIFIED 상태로 존재하였다면 그 블럭(즉, 그 블럭의 갱신된 사본)을 해당 메모리 모듈로 축출하며, 그 블럭을 자신의 캐쉬내에서 NON-COPYBACK-INVALID 상태로 보유하고 있는 다른 모든 프로세서 모듈에, 예를들어, COMMAND 라인을 통해 신호를 전송하여 그들이 보유한 그 블럭의 사본의 상태를 COPYBACK-INVALID 상태로 변경하도록 하는 작업이다.Hereinafter, exemplary operations of processor modules 200 and 200 'including caches 500 and 500' in accordance with one embodiment of the present invention are described for each case of read hits, read failures, write hits and write failures. Will be. In each case it is assumed that processor 400 in processor module 200 of FIG. 4 generated a request to access a block with cache 500. In addition, in describing exemplary operations of the processor modules 200 and 200 ′, block replacement refers to a block to be replaced in the cache when the cache failure occurs in the MODIFIED-SHARED or MODIFIED state. Eject the block (i.e., an updated copy of that block) to that memory module and, for example, a COMMAND line to all other processor modules that hold the block in its cache in the NON-COPYBACK-INVALID state. The task is to send a signal through to change the state of the copy of the block they hold to the COPYBACK-INVALID state.
읽기 적중-프로세서 모듈(200)내의 캐쉬(500)가 읽기 요청된 블럭을 MODIFIED-SHARED, MODIFIED, EXCLUSIVE, SHARED-SOURCE 혹은 SHARED 상태의 어느 한 상태로 보유하고 있는 경우로서, 캐쉬(500)는 그 블럭을 크로세서(400)에게 전달한다.If the cache 500 in the read hit-processor module 200 holds a block that has been requested for reading in any of the following states: MODIFIED-SHARED, MODIFIED, EXCLUSIVE, SHARED-SOURCE, or SHARED, the cache 500 Deliver the block to the processor 400.
읽기 실패-프로세서 모듈(200)내의 캐쉬(500)가 읽기 요청된 블럭을 보유하고 있지 않거나 COPYBACK-INVALID 나 NON-COPYBACK-INVALID 상태로 보유하고 있는 경우로서, 그 블럭을 캐쉬(500)에 보유하고 있지 않다면, 프로세서 모듈(200)은 블럭 대체를 수행하고, 메모리 모듈(100) 및 다른 프로세서 모듈(200')로 그 블럭에 대한 브로드캐스트 읽기 요청을 전송한다. 한편, 캐쉬(500)가 요청된 블럭을 COPYBACK-INVALID 상태로 보유하고 있다면, 프로세서 모듈(200)은 블럭 대체없이 메모리 모듈(100) 및 다른 프로세서 모듈(200')로 그 블럭에 대한 브로드캐스트 읽기 요청을 전송한다.Read failure—the cache 500 in the processor module 200 does not hold a block that has been requested to read, or holds in a cache 500 in a COPYBACK-INVALID or NON-COPYBACK-INVALID state. If not, processor module 200 performs block replacement and sends a broadcast read request for the block to memory module 100 and other processor module 200 ′. On the other hand, if the cache 500 holds the requested block in the COPYBACK-INVALID state, the processor module 200 reads the broadcast for the block to the memory module 100 and the other processor module 200 'without replacing the block. Send the request.
다른 프로세서 모듈(200')중 어느 하나가 요청된 블럭을 EXCLUSIVE 나 SHARED-SOURCE 상태로 보유하고 있는 경우, 그 프로세서 모듈(200')은 VALID 및 MEMORY-INHIBIT 신호를 해당 라인에 인가하고, 상기 읽기 요청에 대해 자체 캐취(500')에 저장된 그 블럭의 사본을 제공함으로써 응답하고, 자체 캐쉬(500')에 저장된 그 블럭의 상태를 SHARED 상태로 변경한다. 다른 프로세서 모듈(200')중 어느 하나가 요청된 블럭을 MODIFIED -SHARED 나 MODIFIED 상태로 보유하고 있는 경우, 그 프로세서 모듈(200')은 DIRTY 및 MEMORY-INHIBIT 신호를 해당 라인에 인가하고, 상기 읽기 요청에 대해 지체 캐쉬(500')에 저장된 그 블럭의 사본을 제공함으로써 응답하고, 자체 캐쉬(500')에 저장된 그 블럭의 상태를 MODIFIED-SHARED 상태로 유지/변경한다. 다른 프로세서 모듈(200')이 요청된 블럭을 SHARED 상태로 보유하고 있는 경우, 그 프로세서 모듈(200')은 VALID 신호를 VALID라인에 인가한다.If any one of the other processor modules 200 'holds the requested block in the EXCLUSIVE or SHARED-SOURCE state, the processor module 200' applies the VALID and MEMORY-INHIBIT signals to the corresponding line and reads the read line. Respond to the request by providing a copy of the block stored in its own cache 500 'and change the state of the block stored in its own cache 500' to the SHARED state. If any one of the other processor modules 200 'holds the requested block in the MODIFIED -SHARED or MODIFIED state, the processor module 200' applies the DIRTY and MEMORY-INHIBIT signals to the corresponding line and reads the read line. It responds to the request by providing a copy of the block stored in the stall cache 500 'and maintains / changes the state of the block stored in its cache 500' to the MODIFIED-SHARED state. If another processor module 200 'holds the requested block in the SHARED state, the processor module 200' applies a VALID signal to the VALID line.
메모리 모듈(100)은 이러한 트랜잭션 동안 MEMORY-INHIBIT 라인을 조사하여, MEMORY-INHIBIT 신호가 인가되어 있지 않은 경우, 상기 읽기 요청에 대해 해당 블럭의 사본을 제공한다.The memory module 100 examines the MEMORY-INHIBIT line during this transaction and provides a copy of the block for the read request if the MEMORY-INHIBIT signal is not applied.
상술한 과정을 통해 프로세서 모듈(200)이 메모리 모듈(100) 혹은 다른 프로세서 모듈(200')중 어느 하나로 부터 요청된 블럭의 유효한 사본을 수신하면, VALID 라인 및 DIRTY 라인을 검사하여 수신한 블럭을 다음과 같은 상태로 자체 캐쉬(500)에 저장하고, 해당 읽기 작업을 수행한다. DIRTY 신호가 인가된 경우, 프로세서 모듈(200)은 수신한 블럭을 SHARED 상태로 캐쉬(500)에 저장한다; VALID 신호가 인가되었으나 DIRTY 신호가 인가되지 않은 경우, 프로세서 모듈(200)은 수신한 블럭을 SHARED-SOURCE 상태로 캐쉬(500)에 저장한다; VALID 신호도 DIRTY 신호도 인가되지 않은 경우, 프로세서 모듈(200)은 수신한 블럭을 EXCLUSIVE 상태로 캐쉬(500)에 저장한다.When the processor module 200 receives a valid copy of the requested block from any one of the memory module 100 or the other processor module 200 'through the above-described process, the VALID line and the DIRTY line are examined to check the received block. It stores in its own cache 500 in the following state, and performs the read operation. When the DIRTY signal is applied, the processor module 200 stores the received block in the cache 500 in the SHARED state; When the VALID signal is applied but the DIRTY signal is not applied, the processor module 200 stores the received block in the cache 500 in the SHARED-SOURCE state; When neither the VALID signal nor the DIRTY signal is applied, the processor module 200 stores the received block in the cache 500 in an EXCLUSIVE state.
그러나, 프로세서 모듈(200)내의 캐쉬(500)가 요청된 블럭을 NON-COPYBACK-INVALID 상태로 보유하고 있는 경우, 프로세서 모듈(200)은 (종래의 캐쉬 일관성 유지 방식에 있어 브로드캐스트 읽기 요청을 메모리 모듈(100) 및 다른 프로세서 모듈(200')로 전송하는 대신) 그 블럭에 대한 캐쉬-캐쉬들 읽기 요청을 다른 프로세서 모듈(200')로만 전송한다.However, when the cache 500 in the processor module 200 holds the requested block in the NON-COPYBACK-INVALID state, the processor module 200 (in the conventional cache coherence scheme, memory broadcast read request is memory). Instead of sending to module 100 and another processor module 200 '), a cache-caches read request for that block is sent only to the other processor module 200'.
이에 따라, 요청된 블럭을 가장 최근에 무효화시켰으며, 따라서 그의 캐쉬(500')내에 그 블럭을 MODIFIED 나 MODIFIED-SHARED 상태로 보유하고 있는 프로세서 모듈(200')은 자체 캐쉬(500')에 저장된 그 블럭의 사본을 프로세서 모듈(200)로 전송하여 상기 캐쉬-캐쉬들 읽기 요청에 응답하며, 자체 캐쉬(500')에 저장된 그 블럭의 상태를 MODIFIED-SHARED 상태로 유지/변경한다.Accordingly, the processor module 200 ', which has recently invalidated the requested block, and therefore holds the block in its cache 500' in the MODIFIED or MODIFIED-SHARED state, is stored in its own cache 500 '. A copy of the block is sent to the processor module 200 to respond to the cache-cache read request and maintain / change the state of the block in its cache 500 'to the MODIFIED-SHARED state.
프로세서 모듈(200)은 요청된 블럭의 유효한 사본을 수신하며, 그 수신한 블럭을 SHARD 상태로 캐쉬(500)에 저장하고, 해당 읽기 작업을 수행한다.The processor module 200 receives a valid copy of the requested block, stores the received block in the cache 500 in the SHARD state, and performs a corresponding read operation.
쓰기 적중-프로세서 모듈(200)내의 캐쉬(500)가 쓰기 요청된 블럭을 MODIFIED-SHARED 상태나 MODIFIED, EXCLUSIVE, SHARED-SOURCE, SHARED 상태로 보유한 경우로서, 프로세서 모듈(200)내의 캐쉬(500)가 요청된 블럭을 MODIFIED 상태로 보유하는 경우, 프로세서 모듈(200)은 쓰기 작업을 수행한다.When the cache 500 in the write hit-processor module 200 holds the block in which the write request is made in the MODIFIED-SHARED state, or the MODIFIED, EXCLUSIVE, SHARED-SOURCE, SHARED state, the cache 500 in the processor module 200 is When the requested block is held in the MODIFIED state, the processor module 200 performs a write operation.
캐쉬(500)가 요청된 블럭을 EXCLUSIVE 상태로 보유하고 있는 경우, 프로세서 모듈(200)은 그 블럭에 대한 쓰기 작업을 수행하고 그 블럭의 상태를 MODIFIED 상태로 변경한다.When the cache 500 holds the requested block in the EXCLUSIVE state, the processor module 200 performs a write operation on the block and changes the state of the block to the MODIFIED state.
캐쉬(500)가 요청된 블럭을 MODIFIED-SHARED, SHARED-SOURCE 혹은 SHARED 중 어느 하나의 상태로 보유하고 있는 경우, 프로세서 모듈(200)은 다른 프로세서 모듈(200')에 그 블럭에 대한 무효화 요청을 전송하여, 다른 모든 프로세서 모듈(200')이 그들이 보유한 요청된 블럭의 사본을 상태를 NON-COPYBACK-INVALID 상태로 변경하도록 하고 그들의 사본의 DESTINATION-ID 영역을 갱신하여 프로세서 모듈(200)을 명시하도록 한다. 이들 사본이 모두 무효화 된 후, 프로세서 모듈(200)은 요청된 블럭에 대한 쓰기 작업을 수행하고 그 블럭의 상태를 MODIFIED 상태로 변경한다.If the cache 500 holds the requested block in one of MODIFIED-SHARED, SHARED-SOURCE, or SHARED, the processor module 200 sends an invalidation request for the block to the other processor module 200 '. Transmit, causing all other processor modules 200 'to change their state to a NON-COPYBACK-INVALID state and copy the requested blocks they have and update their DESTINATION-ID area to specify processor module 200. do. After all of these copies are invalidated, the processor module 200 performs a write operation on the requested block and changes the state of the block to the MODIFIED state.
쓰기 실패-프로세서 모듈(200)내의 캐쉬(500)가 쓰기 요청된 블럭을 보유하고 있지 않거나 COPYBACK-INVALID, NON-COPYBACK-INVALID 상태로 보유하고 있는 경우로서, 프로세서 모듈(200)내의 캐쉬(500)가 요청된 블럭을 보유하고 있지 않다면, 프로세서 모듈(200)은 블럭 대체를 수행하며, 메모리 모듈(100) 및 다른 모든 프로세서 모듈(200')에 그 블럭에 대한 무효화 요청을 내포한 브로드캐스트 읽기 요청을 전송한다. 한편, 캐쉬(500)가 요청된 블럭을 COPYBACK-INVALID 상태로 보유하고 있다면, 프로세서 모듈(200)은 블럭 대체 없이 메모리 모듈(100) 및 다른 프로세서 모듈(200')로 그 블럭에 대한 무효화 요청을 내포한 브로드캐스트 읽기 요청을 전송한다.Write Fail—Cache 500 in processor module 200 when cache 500 in processor module 200 does not hold a block that has been requested to write or holds in COPYBACK-INVALID, NON-COPYBACK-INVALID states. Does not hold the requested block, the processor module 200 performs a block replacement, and a broadcast read request containing an invalidation request for the block to the memory module 100 and all other processor modules 200 '. Send it. On the other hand, if the cache 500 holds the requested block in the COPYBACK-INVALID state, the processor module 200 sends an invalidation request for the block to the memory module 100 and the other processor module 200 'without replacing the block. Send a nested broadcast read request.
다른 프로세서 모듈(200')중 어느 하나가 요청된 블럭을 MODIFIED, MODIFIED-SHARED, EXCLUSIVE 혹은 SHARED-SOURCE중 어느 하나의 상태로 보유하고 있는 경우, 그 프로세서 모듈(200')은 MEMORY-INHIBIT 신호를 MEMORY-INHIBIT 라인에 인가하고, 자체 캐쉬(500')에 저장된 그 블럭의 사본을 제공하므로써 상기 요청에 응답하고, 자체 캐쉬(500')에 저장된 그 블럭의 상태를 NON-COPYBACK-INVALID 상태로 변경한다. 다른 프로세서 모듈(200')이 요청된 블럭을 SHARED, COPYBACK-INVALID, NON-COPYBACK-INVALID 상태로 보유하고 있는 경우, 프로세서 모듈(200')은 자체 캐쉬(500')에 저장된 그 블럭의 상태를 NON-COPYBACK-INVALID 상태로 유지/변경한다.If any of the other processor modules 200 'holds the requested block in any of the following states: MODIFIED, MODIFIED-SHARED, EXCLUSIVE, or SHARED-SOURCE, the processor module 200' will send a MEMORY-INHIBIT signal. Respond to the request by applying a MEMORY-INHIBIT line, providing a copy of the block stored in its own cache 500 ', and changing the state of the block stored in its own cache 500' to the NON-COPYBACK-INVALID state. do. If another processor module 200 'holds the requested block in the SHARED, COPYBACK-INVALID, NON-COPYBACK-INVALID state, the processor module 200' maintains the state of the block stored in its cache 500 '. Keep / change to NON-COPYBACK-INVALID state.
메모리 모듈(100)은 이러한 트랜잭션 동안, MEMORY-INHIBIT 라인을 조사하여, MEMORY-INHIBIT 신호가 인가되지 않은 경우 상기 요청에 대해 해당 블럭의 사본을 제공한다.During this transaction, memory module 100 examines the MEMORY-INHIBIT line and provides a copy of the block for the request if the MEMORY-INHIBIT signal is not applied.
프로세서 모듈(200)이 메모리 모듈(100) 혹은 다른 프로세서 모듈(200')중 어느 하나로 부터 요청된 블럭의 유효한 사본을 수신하면, 수신한 블럭을 자체 캐쉬(500)에 MODIFIED 상태로 저장하고, 해당 쓰기 작업을 수행한다.When the processor module 200 receives a valid copy of the requested block from any one of the memory module 100 or the other processor module 200 ', the processor module 200 stores the received block in its cache 500 in the MODIFIED state, and Perform a write operation.
그러나, 프로세서 모듈(200)내의 캐쉬(500)가 요청된 블럭을 NON-COPYBACK-INVALID 상태로 보유하고 있는 경우, 프로세서 모듈(200)은 (종래의 캐쉬 일관성 유지 방식에 있어 무효화 요청을 내포한 브로드캐스트 읽기 요청을 메모리 모듈(100) 및 다른 프로세서 모듈(200')로 전송하는 대신) 무효화 요청을 내포한 캐쉬-캐쉬들 읽기 요청을 다른 프로세서 모듈(200')로만 전송한다.However, when the cache 500 in the processor module 200 holds the requested block in the NON-COPYBACK-INVALID state, the processor module 200 (the conventional cache coherence maintaining scheme includes a broadcast containing an invalidation request). Instead of sending a cast read request to the memory module 100 and the other processor module 200 '), the cache-caches read request containing the invalidation request is sent only to the other processor module 200'.
이에 따라, 요청된 블럭을 가장 최근에 무효화시켰으며, 따라서 그의 캐쉬(500')내에 요청된 블럭을 MODIFIED 나 MODIFIED-SHARED 상태로 보유하고 있는 프로세서 모듈(200')은 자체 캐쉬(500')에 저장된 그 블럭의 갱신된 사본을 프로세서 모듈(200)로 전송하여 상기 무효화 요청을 내포한 캐쉬-캐쉬들 읽기 요청에 응답하며, 자체 캐쉬(500')내에 저장된 그 블럭의 상태를 NON-COPYBACK-INVALID 상태로 변경한다. 다른 프로세서 모듈(200')이 요청된 블럭을 그 이외의 상태로 보유하고 있는 경우, 그 프로세서 모듈(200')은 상기 무효화 요청을 내포한 캐시-캐쉬들 읽기 요청에 대해 자체 캐쉬(500')내에 저장된 블럭의 사본의 상태를 NON-COPYBACK-INVALID 상태로 변경한다.Accordingly, the processor module 200 'that has invalidated the requested block most recently, and thus holds the requested block in its cache 500' in the MODIFIED or MODIFIED-SHARED state, has its own cache 500 '. Sends an updated copy of the stored block to the processor module 200 in response to a cache-caches read request containing the invalidation request, and NON-COPYBACK-INVALID displays the state of the block stored in its cache 500 '. Change to the state. If another processor module 200 'holds the requested block in a state other than that, the processor module 200' itself caches 500 'for a cache-cache read request containing the invalidation request. Change the state of the copy of the block stored in the state to NON-COPYBACK-INVALID.
프로세서 모듈(200)은 요청된 블럭의 유효한 사본을 수신하면, 수신한 블럭의 상태를 MODIFIED 상태로 자체 캐쉬(500)에 저장하고, 원하는 쓰기 작업을 수행한다.When the processor module 200 receives a valid copy of the requested block, the processor module 200 stores the state of the received block in its cache 500 as a MODIFIED state and performs a desired write operation.
상술한 프로세서 모듈의 동작에 있어, 프로세서 모듈(200)이 요청된 블럭을 가장 최근에 무효화사킨(즉, 요청된 블럭의 갱신된 사본을 보유하고 있는) 프로세서 모듈을 식별할 수 있다면, 상기 캐쉬-캐쉬들 읽기 요청은 캐쉬-캐쉬 읽기 요청(cache-to-cache read request)으로 대체될 수 있다.In operation of the processor module described above, if the processor module 200 is able to identify the processor module that most recently invalidated the requested block (i.e., holds an updated copy of the requested block), the cache- Cache read requests can be replaced with cache-to-cache read requests.
이를 위하여, 본 발명의 캐쉬(500, 500')는 본 발명의 또다른 실시예에 따라 그들의 상태 정보 캐쉬내에 캐쉬(500, 500')에 저장된 각 캐쉬 블럭에 대한 하나의 부가적인 영역, 즉, 해당 블럭을 가장 최근에 무효화시킨 프로세서 모듈을 식별하는 목적지 식별 영역(DESTINATION-ID)을 유지할 수 있다.To this end, the caches 500, 500 'of the present invention are one additional area, i.e., for each cache block stored in the caches 500, 500' in their state information cache, according to another embodiment of the present invention. The destination identification area DESTINATION-ID identifying the processor module which invalidated the block most recently may be maintained.
이하, 상술한 바와 같은 본 발명의 또다른 실시예에 따라 캐쉬(500, 500')를 포함하는 프로세서 모듈(200, 200')의 예시적인 동작이 읽기 적중, 읽기 실패, 쓰기 적중, 쓰기 실패의 각 경우에 대해 설명된다.Hereinafter, exemplary operations of processor modules 200, 200 'including caches 500, 500' in accordance with another embodiment of the present invention as described above may be used for read, read, write, and write failures. Each case is explained.
읽기 적중-프로세서 모듈(200)내의 캐쉬(500)가 읽기 요청된 블럭을 MODIFIED-SHARED , MODIFIED, EXCLUSIVE, SHARED-SOURCE 혹은 SHARED 상태의 어느 한 상태로 보유하고 있는 경우로서, 캐쉬(500)는 그 블럭을 프로세서(400)에게 전달한다.If the cache 500 in the read hit-processor module 200 holds a block that has been requested to be read in any of the following states: MODIFIED-SHARED, MODIFIED, EXCLUSIVE, SHARED-SOURCE, or SHARED, the cache 500 Deliver the block to the processor 400.
읽기 실패-프로세서 모듈(200)내의 캐쉬(500)가 읽기 요청된 블럭을 보유하고 있지 않거나 COPYBACK-INVALID, NON-COPYBACK-INVALID 상태로 보유하고 있는 경우로서, 프로세서 모듈(200)내의 캐쉬(500)가 요청된 블럭을 보유하고 있지 않다면, 프로세서 모듈(200)은 블럭 대체를 수행하고, 메모리 모듈(100) 및 다른 프로세서 모듈(200')로 그 블럭에 대한 브로드캐스트 읽기 요청을 전송한다. 한편, 캐쉬(500)가 요청된 블럭을 COPYBACK-INVALID 상태로 보유하고 있다면, 프로세서 모듈(200)은 블럭 대체없이 메모리 모듈(100) 및 다른 프로세서 모듈(200')로 그 블럭에 대한 브로드캐스트 읽기 요청을 전송한다.Read Fail—Cache 500 in processor module 200 when cache 500 in processor module 200 does not hold a block that has been requested to read or holds in COPYBACK-INVALID, NON-COPYBACK-INVALID states. Does not hold the requested block, processor module 200 performs block replacement and sends a broadcast read request for the block to memory module 100 and other processor module 200 '. On the other hand, if the cache 500 holds the requested block in the COPYBACK-INVALID state, the processor module 200 reads the broadcast for the block to the memory module 100 and the other processor module 200 'without replacing the block. Send the request.
다른 프로세서 모듈(200')중 어느 하나가 요청된 블럭을 EXCLUSIVE 나 SHARED-SOURCE 상태로 보유하고 있는 경우, 그 프로세서 모듈(200')은 VALID 및 MEMORY-INHIBIT 신호를 해당 라인에 인가하고, 상기 읽기 요청에 대해 자체 캐취(500')에 저장된 그 블럭의 사본을 제공함으로써 응답하고, 자체 캐쉬(500')에 저장된 그 블럭의 상태를 SHARED 상태로 변경한다. 다른 프로세서 모듈(200')중 어느 하나가 요청된 블럭을 MODIFIED -SHARED 나 MODIFIED 상태로 보유하고 있는 경우, 그 프로세서 모듈(200')은 DIRTY 및 MEMORY-INHIBIT 신호를 해당 라인에 인가하고, 상기 읽기 요청에 대해 지체 캐쉬(500')에 저장된 그 블럭의 사본을 제공함으로써 응답하고, 자체 캐쉬(500')에 저장된 그 블럭의 상태를 MODIFIED-SHARED 상태로 유지/변경한다. 다른 프로세서 모듈(200')이 요청된 블럭을 SHARED 상태로 보유하고 있는 경우, 그 프로세서 모듈(200')은 VALID 신호를 VALID라인에 인가한다.If any one of the other processor modules 200 'holds the requested block in the EXCLUSIVE or SHARED-SOURCE state, the processor module 200' applies the VALID and MEMORY-INHIBIT signals to the corresponding line and reads the read line. Respond to the request by providing a copy of the block stored in its own cache 500 'and change the state of the block stored in its own cache 500' to the SHARED state. If any one of the other processor modules 200 'holds the requested block in the MODIFIED -SHARED or MODIFIED state, the processor module 200' applies the DIRTY and MEMORY-INHIBIT signals to the corresponding line and reads the read line. It responds to the request by providing a copy of the block stored in the stall cache 500 'and maintains / changes the state of the block stored in its cache 500' to the MODIFIED-SHARED state. If another processor module 200 'holds the requested block in the SHARED state, the processor module 200' applies a VALID signal to the VALID line.
메모리 모듈(100)은 이러한 트랜잭션 동안 MEMORY-INHIBIT 라인을 조사하여, MEMORY-INHIBIT 신호가 인가되어 있지 않은 경우, 상기 읽기 요청에 대해 해당 블럭의 사본을 제공한다.The memory module 100 examines the MEMORY-INHIBIT line during this transaction and provides a copy of the block for the read request if the MEMORY-INHIBIT signal is not applied.
상술한 과정을 통해 프로세서 모듈(200)이 메모리 모듈(100) 혹은 다른 프로세서 모듈(200')중 어느 하나로 부터 요청된 블럭의 유효한 사본을 수신하면, VALID 라인 및 DIRTY 라인을 검사하여 수신한 블럭을 다음과 같이 자체 캐쉬(500)에 저장하고, 해당 읽기 작업을 수행한다. DIRTY 신호가 인가된 경우, 프로세서 모듈(200)은 수신한 블럭을 SHARED 상태로 캐쉬(500)에 저장한다; VALID 신호가 인가되었으나 DIRTY 신호가 인가되지 않은 경우, 프로세서 모듈(200)은 수신한 블럭을 SHARED-SOURCE 상태로 캐쉬(500)에 저장한다; VALID 신호도 DIRTY 신호도 인가되지 않은 경우, 프로세서 모듈(200)은 수신한 블럭을 EXCLUSIVE 상태로 캐쉬(500)에 저장한다.When the processor module 200 receives a valid copy of the requested block from any one of the memory module 100 or the other processor module 200 'through the above-described process, the VALID line and the DIRTY line are examined to check the received block. It stores in its own cache 500 as follows, and performs the read operation. When the DIRTY signal is applied, the processor module 200 stores the received block in the cache 500 in the SHARED state; When the VALID signal is applied but the DIRTY signal is not applied, the processor module 200 stores the received block in the cache 500 in the SHARED-SOURCE state; When neither the VALID signal nor the DIRTY signal is applied, the processor module 200 stores the received block in the cache 500 in an EXCLUSIVE state.
그러나, 프로세서 모듈(200)내의 캐쉬(500)가 요청된 블럭을 NON-COPYBACK-INVALID 상태로 보유하고 있는 경우, 프로세서 모듈(200)은 그 블럭에 대한 캐쉬-캐쉬 읽기 요청을 요청된 블럭의 DESTINATION-ID 영역이 명시하는 다른 프로세서 모듈(200')로 전송한다(DESTINATION-ID 영역은 그 블럭을 가장 최근에 무효화시켰으며, 따라서 그의 캐쉬(500')내에 그 블럭을 MODIFIED 나 MODIFIED-SHARED 상태로 보유하고 있는 프로세서 모듈(200')을 명시하는 정보를 저장함을 상기할 것).However, if the cache 500 in the processor module 200 holds the requested block in the NON-COPYBACK-INVALID state, the processor module 200 requests a cache-cache read request for that block, and the DESTINATION of the requested block. The ID-ID field is sent to another processor module 200 '(the DESTINATION-ID field has most recently invalidated the block, thus putting the block in its cache 500' in the MODIFIED or MODIFIED-SHARED state). Recall that it stores information specifying the processor module 200 'that it holds.
그 프로세서 모듈(200')은 그가 보유한 요청된 블럭의 갱신된 사본을 프로세서 모듈(200)로 전송하여 상기 캐쉬-캐쉬 읽기 요청에 응답하며, 자체 캐쉬(500')내에 저장된 그 블럭의 상태를 MODIFIED-SHARED 상태로 유지/변경한다.The processor module 200 'sends an updated copy of the requested block he holds to the processor module 200 in response to the cache-cache read request, and MODIFIED the state of the block stored in its cache 500'. -Keep / change to SHARED state.
프로세서 모듈(200)은 요청된 블럭의 유효한 사본을 수신하며, 수신한 블럭을 SHARD 상태로 캐쉬(500)에 저장하고, 해당 읽기 작업을 수행한다.The processor module 200 receives a valid copy of the requested block, stores the received block in the cache 500 in the SHARD state, and performs a corresponding read operation.
쓰기 적중-프로세서 모듈(200)내의 캐쉬(500)가 쓰기 요청된 블럭을 MODIFIED-SHARED 상태나 MODIFIED, EXCLUSIVE, SHARED-SOURCE, SHARED 상태로 보유한 경우로서, 프로세서 모듈(200)내의 캐쉬(500)가 요청된 블럭을 MODIFIED 상태로 보유하는 경우, 프로세서 모듈(200)은 쓰기 작업을 수행한다.When the cache 500 in the write hit-processor module 200 holds the block in which the write request is made in the MODIFIED-SHARED state, or the MODIFIED, EXCLUSIVE, SHARED-SOURCE, SHARED state, the cache 500 in the processor module 200 is When the requested block is held in the MODIFIED state, the processor module 200 performs a write operation.
캐쉬(500)가 요청된 블럭을 EXCLUSIVE 상태로 보유하고 있는 경우, 프로세서 모듈(200)은 그 블럭에 대한 쓰기 작업을 수행하고 그 블럭의 상태를 MODIFIED 상태로 변경한다.When the cache 500 holds the requested block in the EXCLUSIVE state, the processor module 200 performs a write operation on the block and changes the state of the block to the MODIFIED state.
캐쉬(500)가 요청된 블럭을 MODIFIED-SHARED, SHARED-SOURCE 혹은 SHARED 중 어느 하나의 상태로 보유하고 있는 경우, 프로세서 모듈(200)은 다른 프로세서 모듈(200')에 그 블럭에 대한 무효화 요청을 전송하여, 다른 모든 프로세서 모듈(200')이 그들이 보유한 요청된 블럭의 사본을 상태를 NON-COPYBACK-INVALID 상태로 변경하도록 하고 그들의 사본의 DESTINATION-ID 영역을 갱신하여 프로세서 모듈(200)을 명시하도록 한다. 이들 사본이 모두 묘효화 된 후, 프로세서 모듈(200)은 요청된 블럭에 대한 쓰기 작업을 수행하고 그 블럭의 상태를 MODIFIED 상태로 변경한다.If the cache 500 holds the requested block in one of MODIFIED-SHARED, SHARED-SOURCE, or SHARED, the processor module 200 sends an invalidation request for the block to the other processor module 200 '. Transmit, causing all other processor modules 200 'to change their state to a NON-COPYBACK-INVALID state and copy the requested blocks they have and update their DESTINATION-ID area to specify processor module 200. do. After all these copies have been rendered, the processor module 200 performs a write operation on the requested block and changes the state of the block to the MODIFIED state.
쓰기 실패-프로세서 모듈(200)내의 캐쉬(500)가 쓰기 요청된 블럭을 보유하고 있지 않거나 COPYBACK-INVALID, NON-COPYBACK-INVALID 상태로 보유하고 있는 경우로서, 프로세서 모듈(200)내의 캐쉬(500)가 요청된 블럭을 보유하고 있지 않다면, 프로세서 모듈(200)은 블럭 대체를 수행하며, 메모리 모듈(100) 및 다른 모든 프로세서 모듈(200')에 그 블럭에 대한 무효화 요청을 내포한 브로드캐스트 읽기 요청을 전송한다. 한편, 캐쉬(500)가 요청된 블럭을 COPYBACK-INVALID 상태로 보유하고 있다면, 프로세서 모듈(200)은 블럭 대체 없이 메모리 모듈(100) 및 다른 프로세서 모듈(200')로 그 블럭에 대한 무효화 요청을 내포한 브로드캐스트 읽기 요청을 전송한다.Write Fail—Cache 500 in processor module 200 when cache 500 in processor module 200 does not hold a block that has been requested to write or holds in COPYBACK-INVALID, NON-COPYBACK-INVALID states. Does not hold the requested block, the processor module 200 performs a block replacement, and a broadcast read request containing an invalidation request for the block to the memory module 100 and all other processor modules 200 '. Send it. On the other hand, if the cache 500 holds the requested block in the COPYBACK-INVALID state, the processor module 200 sends an invalidation request for the block to the memory module 100 and the other processor module 200 'without replacing the block. Send a nested broadcast read request.
다른 프로세서 모듈(200')중 어느 하나가 요청된 블럭을 MODIFIED, MODIFIED-SHARED, EXCLUSIVE 혹은 SHARED-SOURCE 중 어느 하나의 상태로 보유하고 있는 경우, 그 프로세서 모듈(200')은 MEMORY-INHIBIT 신호를 MEMORY-INHIBIT 라인에 인가하고, 자체 캐쉬(500')에 저장된 그 블럭의 사본을 제공하므로써 상기 요청에 응답하고, 자체 캐쉬(500')에 저장된 그 블럭의 상태를 NON-COPYBACK-INVALID 상태로 변경하며, 그 블럭의 DESTINATION-ID 영역을 변경하여 프로세서 모듈(200')을 명시하도록 한다. 다른 프로세서 모듈(200')이 요청된 블럭을 SHARED, NON-COPYBACK-INVALID 혹은 COPYBACK-INVALID 상태로 보유하고 있는 경우, 프로세서 모듈(200')은 자체 캐쉬(500')에 저장된 그 블럭의 상태를 NON-COPYBACK-INVALID 상태로 유지/변경하고, 자체 캐쉬(500')에 저장된 그 블럭의 DESTINATION-ID 영역을 변경하여 프로세서 모듈(200)을 명시하도록 한다.If any of the other processor modules 200 'holds the requested block in any of the following states: MODIFIED, MODIFIED-SHARED, EXCLUSIVE, or SHARED-SOURCE, the processor module 200' will send a MEMORY-INHIBIT signal. Respond to the request by applying a MEMORY-INHIBIT line, providing a copy of the block stored in its own cache 500 ', and changing the state of the block stored in its own cache 500' to the NON-COPYBACK-INVALID state. The processor module 200 'is specified by changing the DESTINATION-ID region of the block. If another processor module 200 'holds the requested block in the SHARED, NON-COPYBACK-INVALID or COPYBACK-INVALID state, the processor module 200' maintains the state of the block stored in its cache 500 '. The processor module 200 is specified by maintaining / changing the NON-COPYBACK-INVALID state and changing the DESTINATION-ID region of the block stored in its own cache 500 '.
메모리 모듈(100)은 이러한 트랜잭션 동안, MEMORY-INHIBIT 라인을 조사하여, MEMORY-INHIBIT 신호가 인가되지 않은 경우 상기 요청에 대해 해당 블럭의 사본을 제공한다.During this transaction, memory module 100 examines the MEMORY-INHIBIT line and provides a copy of the block for the request if the MEMORY-INHIBIT signal is not applied.
프로세서 모듈(200)이 메모리 모듈(100) 혹은 다른 프로세서 모듈(200')중 어느 하나로 부터 요청된 블럭의 유효한 사본을 수신하면, 수신한 블럭을 자체 캐쉬(500)에 MODIFIED 상태로 저장하고, 해당 쓰기 작업을 수행한다.When the processor module 200 receives a valid copy of the requested block from any one of the memory module 100 or the other processor module 200 ', the processor module 200 stores the received block in its cache 500 in the MODIFIED state, and Perform a write operation.
그러나, 프로세서 모듈(200)내의 캐쉬(500)가 요청된 블럭을 NON-COPYBACK-INVALID 상태로 보유하고 있는 경우, 프로세서 모듈(200)은 그 블럭에 대한 무효화 요청을 내포한 캐쉬-캐쉬들 읽기 요청을 다른 프로세서 모듈(200')로 전송한다.However, if the cache 500 in the processor module 200 holds the requested block in the NON-COPYBACK-INVALID state, the processor module 200 requests a cache-cache read request containing an invalidation request for that block. Is transmitted to the other processor module 200 '.
이에 따라, 요청된 블럭의 DESTINATION-ID 영역에 의해 명시된 프로세서 모듈(200')은 자체 캐쉬(500')에 저장된 그 블럭의 갱신된 사본을 프로세서 모듈(200)로 전송하여 상기 무효화 요청을 내포한 캐쉬-캐쉬들 읽기 요청에 응답하며, 자체 캐쉬(500')내에 저장된 그 블럭의 상태를 NON-COPYBACK-INVALID 상태로 변경하고, 그 블럭의 DESTINATION-ID 영역이 프로세서 모듈(200)을 명시하도록 동작한다. 다른 프로세서 모듈(200')내의 또다른 캐쉬(500')가 요청된 블럭을 그 이외의 상태로 보유하고 있는 경우, 그 프로세서 모듈(200')은 상기 무효화 요청을 내포한 캐시-캐쉬들 읽기 요청에 대해 자체 캐쉬(500')내에 저장된 블럭의 상태를 NON-COPYBACK-INVALID 상태로 변경하고, 그 블럭의 DESTINATION-ID 영역이 프로세서 모듈(200)을 명시하도록 동작한다.Accordingly, the processor module 200 'specified by the DESTINATION-ID region of the requested block transmits an updated copy of the block stored in its cache 500' to the processor module 200 to contain the invalidation request. In response to the cache-caches read request, changing the state of the block stored in its cache 500 'to the NON-COPYBACK-INVALID state, and the DESTINATION-ID region of the block specifying the processor module 200 do. If another cache 500 'in another processor module 200' holds the requested block elsewhere, the processor module 200 'requests a cache-caches read request containing the invalidation request. Then change the state of the block stored in its cache 500 'to the NON-COPYBACK-INVALID state, and the DESTINATION-ID region of that block operates to specify the processor module 200.
프로세서 모듈(200)은 요청된 블럭의 유효한 사본을 수신하면, 수신한 블럭의 상태를 MODIFIED 상태로 자체 캐쉬(500)에 저장하고, 원하는 쓰기 작업을 수행한다.When the processor module 200 receives a valid copy of the requested block, the processor module 200 stores the state of the received block in its cache 500 as a MODIFIED state and performs a desired write operation.
이상에서 살펴본 바와 같이, 본 발명의 새로은 쓰기-무효화 캐쉬 시스템은 분리형 트랜잭션 버스를 사용한 공유 메모리 다중 프로세서에서 불필요한 메모리 접근을 줄이므로써, 실질적인 메모리 접근 시간을 줄이며, 보다 우수한 다중 프로세서 성능을 얻을 수 있다.As described above, the novel write-invalidate cache system of the present invention reduces unnecessary memory accesses in the shared memory multiprocessor using a separate transaction bus, thereby reducing the actual memory access time and achieving better multiprocessor performance. .
Claims (30)
Priority Applications (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| KR1019940001080A KR0138585B1 (en) | 1993-01-30 | 1994-01-21 | Shared memory multiprocessor using spilt transaction bus |
| JP6009374A JP2746530B2 (en) | 1993-01-30 | 1994-01-31 | Shared memory multiprocessor |
| US08/768,592 US5761724A (en) | 1993-01-30 | 1996-12-18 | Write-invalidate cache system for a split transaction bus based shared memory multiprocessor |
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| KR930001201 | 1993-01-30 | ||
| KR93-1201 | 1993-01-30 | ||
| KR1019940001080A KR0138585B1 (en) | 1993-01-30 | 1994-01-21 | Shared memory multiprocessor using spilt transaction bus |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| KR940018764A KR940018764A (en) | 1994-08-18 |
| KR0138585B1 true KR0138585B1 (en) | 1998-06-15 |
Family
ID=66690150
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| KR1019940001080A Expired - Lifetime KR0138585B1 (en) | 1993-01-30 | 1994-01-21 | Shared memory multiprocessor using spilt transaction bus |
Country Status (1)
| Country | Link |
|---|---|
| KR (1) | KR0138585B1 (en) |
-
1994
- 1994-01-21 KR KR1019940001080A patent/KR0138585B1/en not_active Expired - Lifetime
Also Published As
| Publication number | Publication date |
|---|---|
| KR940018764A (en) | 1994-08-18 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US5652859A (en) | Method and apparatus for handling snoops in multiprocessor caches having internal buffer queues | |
| US5740400A (en) | Reducing cache snooping overhead in a multilevel cache system with multiple bus masters and a shared level two cache by using an inclusion field | |
| EP0062165B1 (en) | Multiprocessors including private and shared caches | |
| US6625698B2 (en) | Method and apparatus for controlling memory storage locks based on cache line ownership | |
| US5119485A (en) | Method for data bus snooping in a data processing system by selective concurrent read and invalidate cache operation | |
| US6049851A (en) | Method and apparatus for checking cache coherency in a computer architecture | |
| US4394731A (en) | Cache storage line shareability control for a multiprocessor system | |
| US5802582A (en) | Explicit coherence using split-phase controls | |
| US20020053004A1 (en) | Asynchronous cache coherence architecture in a shared memory multiprocessor with point-to-point links | |
| JPH09223118A (en) | Snoop cache memory control system | |
| JPH04227552A (en) | Store-through-cache control system | |
| US20090193232A1 (en) | Apparatus, processor and method of cache coherency control | |
| US6922755B1 (en) | Directory tree multinode computer system | |
| US5263144A (en) | Method and apparatus for sharing data between processors in a computer system | |
| US5987544A (en) | System interface protocol with optional module cache | |
| US6918009B1 (en) | Cache device and control method for controlling cache memories in a multiprocessor system | |
| US5761724A (en) | Write-invalidate cache system for a split transaction bus based shared memory multiprocessor | |
| JPWO2000038077A1 (en) | Cache device and control method | |
| EP0051745B1 (en) | Cache storage hierarchy for a multiprocessor system | |
| US6526480B1 (en) | Cache apparatus and control method allowing speculative processing of data | |
| WO1997004392A1 (en) | Shared cache memory device | |
| US7797495B1 (en) | Distributed directory cache | |
| KR0138585B1 (en) | Shared memory multiprocessor using spilt transaction bus | |
| JPS63253448A (en) | multi computer equipment | |
| KR0145454B1 (en) | Multiple processors with distributed shared memory |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| PA0109 | Patent application |
Patent event code: PA01091R01D Comment text: Patent Application Patent event date: 19940121 |
|
| A201 | Request for examination | ||
| PA0201 | Request for examination |
Patent event code: PA02012R01D Patent event date: 19940608 Comment text: Request for Examination of Application Patent event code: PA02011R01I Patent event date: 19940121 Comment text: Patent Application |
|
| PG1501 | Laying open of application | ||
| E701 | Decision to grant or registration of patent right | ||
| PE0701 | Decision of registration |
Patent event code: PE07011S01D Comment text: Decision to Grant Registration Patent event date: 19971128 |
|
| GRNT | Written decision to grant | ||
| PR0701 | Registration of establishment |
Comment text: Registration of Establishment Patent event date: 19980219 Patent event code: PR07011E01D |
|
| PR1002 | Payment of registration fee |
Payment date: 19980219 End annual number: 3 Start annual number: 1 |
|
| PG1601 | Publication of registration | ||
| PR1001 | Payment of annual fee |
Payment date: 20010129 Start annual number: 4 End annual number: 4 |
|
| PR1001 | Payment of annual fee |
Payment date: 20020125 Start annual number: 5 End annual number: 5 |
|
| PR1001 | Payment of annual fee |
Payment date: 20030124 Start annual number: 6 End annual number: 6 |
|
| PR1001 | Payment of annual fee |
Payment date: 20040119 Start annual number: 7 End annual number: 7 |
|
| PR1001 | Payment of annual fee |
Payment date: 20050124 Start annual number: 8 End annual number: 8 |
|
| PR1001 | Payment of annual fee |
Payment date: 20060119 Start annual number: 9 End annual number: 9 |
|
| PR1001 | Payment of annual fee |
Payment date: 20070115 Start annual number: 10 End annual number: 10 |
|
| PR1001 | Payment of annual fee |
Payment date: 20080108 Start annual number: 11 End annual number: 11 |
|
| PR1001 | Payment of annual fee |
Payment date: 20090121 Start annual number: 12 End annual number: 12 |
|
| PR1001 | Payment of annual fee |
Payment date: 20100128 Start annual number: 13 End annual number: 13 |
|
| PR1001 | Payment of annual fee |
Payment date: 20110128 Start annual number: 14 End annual number: 14 |
|
| FPAY | Annual fee payment |
Payment date: 20120130 Year of fee payment: 15 |
|
| PR1001 | Payment of annual fee |
Payment date: 20120130 Start annual number: 15 End annual number: 15 |
|
| FPAY | Annual fee payment |
Payment date: 20130130 Year of fee payment: 16 |
|
| PR1001 | Payment of annual fee |
Payment date: 20130130 Start annual number: 16 End annual number: 16 |
|
| EXPY | Expiration of term | ||
| PC1801 | Expiration of term |
Termination date: 20140721 Termination category: Expiration of duration |