KR100281465B1 - 분산된공유메모리구조의다중프로세서장치 - Google Patents

분산된공유메모리구조의다중프로세서장치 Download PDF

Info

Publication number
KR100281465B1
KR100281465B1 KR1019980014513A KR19980014513A KR100281465B1 KR 100281465 B1 KR100281465 B1 KR 100281465B1 KR 1019980014513 A KR1019980014513 A KR 1019980014513A KR 19980014513 A KR19980014513 A KR 19980014513A KR 100281465 B1 KR100281465 B1 KR 100281465B1
Authority
KR
South Korea
Prior art keywords
processor
data block
request signal
memory
data
Prior art date
Application number
KR1019980014513A
Other languages
English (en)
Other versions
KR19990023119A (ko
Inventor
전주식
장성태
김형호
Original Assignee
전주식
장성태
김형호
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by 전주식, 장성태, 김형호 filed Critical 전주식
Priority to US09/120,850 priority Critical patent/US6253292B1/en
Priority to JP10224423A priority patent/JPH11134312A/ja
Publication of KR19990023119A publication Critical patent/KR19990023119A/ko
Application granted granted Critical
Publication of KR100281465B1 publication Critical patent/KR100281465B1/ko

Links

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)

Abstract

본 발명은 스누핑(snooping) 방식의 링 버스를 포함하는 분산된 공유 메모리 구조의 다중 프로세서 장치에 관한 것이다. 본 발명은 분산된 공유 메모리 구조를 갖는 다수개의 프로세서 노드들로서, 각기 데이터 블럭을 요청하는 요청신호를 발생하고, 상기 다수개의 프로세서 노드들 중의 어느 하나의 프로세서 노드에서 발생된 상기 요청 신호를 수신한 다른 나머지 프로세서 노드에서는 내부를 스누핑하여 상기 요청 신호에 대응하는 데이터 블럭을 출력하는 상기 다수의 프로세서 노드와, 상기 다수개의 프로세서 노드들을 링형으로 연결하여, 상기 요청 신호 및 상기 요청 신호에 대응하는 데이터 블럭이 상기 각 프로세서 노드들을 순회하여 상기 요청 신호를 발생한 프로세서 노드에 전달되도록 하는 경로를 제공하는 링 버스를 포함한다.

Description

분산된 공유 메모리 구조의 다중 프로세서 장치{DISTRIBUTED SHARED MEMORY MULTIPROCESSOR SYSTEM}
본 발명은 분산된 공유 메모리 구조의 다중 프로세서 장치에 관한 것으로, 특히 스누핑(snooping) 방식의 링버스를 포함하는 분산된 공유 메모리 구조의 다중 프로세서 장치에 관한 것이다.
일반적으로, 단일 주소 공간(single address space)과 일관성(coherence)이 유지되는 캐쉬(cache)를 가지는 대규모 공유 메모리 다중 프로세서 시스템(shared memory multiprocessor system)은 유동적이고도 강력한 연산환경을 제공한다. 즉, 단일 주소 공간과 일관성이 유지되는 캐쉬의 두 요소는 데이터 분할(data partitioning) 및 동적 부하 균형(dynamic load balancing) 문제를 쉽게 하고, 병렬 컴파일러 및 표준 운영체제, 멀티프로그래밍을 위한 보다 나은 환경을 제공하여, 보다 유동적이고 효과적인 기계의 사용을 가능하게 하는 것이다.
이러한 공유 메모리 다중 프로세서 시스템은 공유 메모리를 접근하는 방법에 따라 도 1에서와 같은 균등 메모리 접근(UMA : Uniform Memory Access) 다중 프로세서와, 도 2에서와 같은 비균등(NUMA : Non-Uniform Memory Access) 또는 분산된(distributed) 공유 메모리 다중 프로세서로 분류할 수 있다. 도 1을 참조하면, 다중 프로세서에서 지역 캐쉬(12, 12')는 공유 메모리(30, 30')보다 용량은 작으나 훨씬 빠른 접근 시간(access time)을 제공하며, 프로세서(11, 11')가 자주 사용하리라고 예측되는 공유 메모리(30, 30')의 데이터 블록(block)들을 저장함으로써, 공유 버스(32)와 공유 메모리(30, 30')에 대한 접근 요청의 횟수를 줄여 더 빠른 메모리 접근 시간을 제공할 수 있다. 하지만, 캐쉬의 사용은 예를 들어, 하나의 프로세서 모듈(10)내의 프로세서(11)가 자체의 지역 캐쉬(12)에 저장된 어떤 데이터 블록에 대한 쓰기 작업을 수행하게 되면, 그 쓰기 작업의 결과가 다른 프로세서 모듈(10')내의 지역 캐쉬(12')에 저장되어 있는 해당 데이터 블록들에 반영되어야 하는 소위 캐쉬 일관성 유지(cache coherence) 문제가 발생하며, 버스를 기반으로 한 공유 메모리 다중 프로세서에서는 일반적으로 스누핑 방식(snooping scheme)의 캐쉬 일관성 유지 방법이 널리 사용되고 있다.
도 1에 도시된 바와 같이, 균등 메모리 접근 다중 프로세서는 공유 메모리(30, 30')가 시스템의 모든 프로세서(11, 11')에 의해 동일하게 접근(access)되며, 이 공유 메모리(30, 30')가 연결된 시스템 버스(32)의 트래픽(traffic) 증가로 인한 버스 접근 지연 시간의 증가, 공유 메모리의 접근 지연 시간 증가 및 메모리 대역 폭(bandwidth)에 의한 시스템 성능 제한 등이 시스템 확장성(scalability) 및 성능 향상의 장애 요소이다. 이러한 문제를 극복하기 위한 한 형태로서, 널리 사용되는 분산된 공유 메모리 다중 프로세서는 도 2에 도시된 바와 같이 공유 메모리(30, 30')를 각 프로세서(11, 11')들 가까이에 분산시킴으로써 다른 프로세서(11', 11) 가까이에 있는 공유 메모리(30', 30)에 대한 접근에 비해 해당 프로세서 가까이에 있는 공유 메모리(30, 30')의 접근 시간이 짧아져서 접근하려는 명령어나 데이터가 저장된 메모리의 위치에 따라 메모리 접근 시간이 달라지게 된다. 따라서 분산된 공유 메모리 다중 프로세서는 가급적 지역 공유 메모리의 접근 횟수가 증가하도록 유도하여 시스템 버스(32)의 트래픽을 완화시키며, 시스템 전체의 메모리 대역폭을 확장시키고 메모리 접근 지연(memory access delay)을 줄여 시스템 성능을 향상시킬 수 있다.
다중 프로세서 시스템은 여러 개의 프로세서와 메모리 등의 시스템 자원을 상호 연결망(interconnection network)으로 연결하여 구성하게 되는데, 다중 프로세서 시스템에서 프로세서 모듈을 연결하는 상호 연결망의 복잡성과 비용의 문제로 인해 중, 소규모의 상용화된 시스템에서는 도 1 및 도 2에서와 같이 버스를 선호하고 있다. 이러한 버스 구조의 시스템은 버스의 물리적 특성으로 인한 확장성의 문제와 버스 사용량의 증가로 인한 버스 대역폭의 문제점을 갖고 있다. 이러한 한계는 컴퓨터의 계산능력이 높아짐에 따른 대용량의 데이터 전송에 심각한 장애가 되고 있다. 이러한 한계를 극복하고자 버스의 폭을 늘리는 방법은 버스 중재나 주소지정에 필요한 고정된 오버헤드 때문에 실제 대역폭이 그 만큼 향상되는 효과를 보지 못하고 있다. 오버헤드를 줄이기 위해 라인 전송의 크기를 늘리는 방법은 캐쉬라인의 크기를 넘을 때는 그 효과가 거의 없게 된다. 버스의 길이를 짧게 함으로써 신호주기를 빠르게 할 수 있으나 신호잡음의 문제가 있고 복수개의 버스를 두는 방법은 제어가 복잡해지고 캐쉬 일관성을 유지하는데 어려움이 따르게 된다.
버스 구조의 한계를 극복하는 방법으로 고속의 지점간 링크(point-to-point link)로 구성되는 상호 연결망을 생각할 수 있는데, 상호 연결망으로는 Mesh, Torus, Hypercubes, N-cube, MIN, Omega 망, 링(ring)등 여러 구조가 고려 가능하다. 링 구조는 다른 구조에 비해 설계 및 구현이 간단하며, 버스는 각 트랜잭션을 순차적으로 전송하지만 링의 경우 동시에 여러 개의 트랜잭션을 전송할 수 있도록 허용함으로써 대역폭의 증가를 꾀할 수 있다.
도 3를 참조하면, 디렉토리 방식으로 캐쉬 일관성을 유지하는 단 방향 링으로 구성된 분산된 공유 메모리 다중 프로세서 시스템이 도시된다. 도 3에서, 제 1 프로세서 노드(40)에서 캐쉬 읽기 실패(read miss)가 발생할 경우, 제 1 프로세서 노드(40)는 해당 데이터 블록에 대한 요청을 그 데이터 블록의 원래 메모리 영역에 해당하는 홈(home) 프로세서 노드(41)로 단일 전송하며, 만일 그 데이터 블록이 제 2 프로세서 노드(42)의 캐쉬에 갱신된 상태로 저장되어 있을 경우 홈 프로세서 노드(41)는 그 블록에 대한 요청을 다시 제 2 프로세서 노드(42)로 단일 전송하게 된다.
따라서, 제 2 프로세서 노드(42)는 요청된 데이터 블록을 홈 프로세서 노드(41)로 단일 전송하게 되며, 홈 프로세서 노드(41)는 해당 메모리를 갱신한 후 다시 요청된 블록을 제 1 프로세서 노드(40)로 전송한다.
이와 같이 디렉토리 방식으로 캐쉬 일관성을 유지하는 단 방향 링으로 구성된 분산된 공유 메모리 다중 프로세서 시스템은 캐쉬 일관성 유지를 위한 트랜잭션을 생성해야 하기 때문에, 링 이용률이 비교적 높고, 메모리 접근 지연을 증가시키는 문제점이 있었다.
따라서, 본 발명은 스누핑 방식으로 캐쉬 일관성을 유지하도록 하여, 링의 이용률 및 메모리 접근 지연을 감소시킬수 있는 분산된 공유 메모리 구조의 다중 프로세서 시스템을 제공하는 것을 그 목적으로 한다.
상기 목적을 달성하기 위한 본 발명에 따른 분산된 공유 메모리 구조의 다중 프로세서 시스템은: 분산된 공유 메모리 구조를 갖는 다수개의 프로세서 노드들로서, 각기 데이터 블럭을 요청하는 요청신호를 발생하고, 상기 다수개의 프로세서 노드중의 어느 하나의 프로세서 노드에서 발생된 상기 요청 신호를 수신한 다른 나머지 프로세서 노드에서는 내부를 스누핑하여 상기 요청 신호에 대응하는 데이터 블럭을 출력하는 상기 다수의 프로세서 노드; 상기 다수개의 프로세서 노드들을 링형으로 연결하여, 상기 요청 신호 및 상기 요청 신호에 대응하는 데이터 블럭이 상기 각 프로세서 노드들을 순회하여 상기 요청 신호를 발생한 프로세서 노드에 전달되도록 하는 경로를 제공하는 링 버스를 포함하는 것을 특징으로 한다.
또한, 본 발명의 바람직한 실시예에 따르면, 각각의 상기 프로세서 노드는: 다수개의 프로세서 모듈; 상기 다수개의 프로세서 모듈 각각이 공유할 수 있는 데이터 블럭을 저장하는 지역 공유 메모리부; 상기 요청 신호에 대응하는 데이터 블럭이 저장되는 원격 캐쉬; 상기 지역 공유 메모리부 및 상기 원격 캐쉬에 저장된 데이터 블럭을 검색하여 상기 프로세서 모듈에서 원하는 데이터 블럭을 제공하며, 상기 프로세서 모듈에서 원하는 데이터 블럭이 없을 때, 상기 링 버스로 요청 신호를 생성한 후, 상기 요청 신호에 대응하는 데이터 블럭이 입력되면, 상기 데이터 블록을 상기 프로세서 모듈에 제공하고, 상기 링 버스로부터 상기 다른 프로세서 노드에서 요청한 요청 신호가 입력되면 상기 지역 공유 메모리부 및 상기 원격 캐쉬에 저장된 데이터 블럭을 검색하여 상기 검색된 요청 신호에 대응하는 유효 데이터 블럭을 상기 링 버스상에 제공하는 노드 제어기; 상기 노드 제어기와 상기 링버스를 접속해주는 링 인터페이스로 구성된 것을 특징으로 한다.
도 1은 일반적인 버스 구조의 균등 메모리 접근 공유 메모리 다중 프로세서에 대한 개략 구성도,
도 2는 일반적인 버스 구조의 비균등 메모리 접근 공유 메모리 다중 프로세서 시스템에 대한 개략 구성도,
도 3은 종래 기술의 디렉토리 방식을 사용한 링 구조의 분산된 공유 메모리 다중 프로세서 시스템에 대한 구성도,
도 4는 본 발명에 따른 스누핑 방식의 링버스를 포함하는 분산된 공유 메모리 다중 프로세서 장치에 대한 일 실시예를 나타내는 전체 구성도,
도 5는 본 발명의 일 실시예에 대한 동작을 설명하기 위한 도면,
도 6은 도 4에 도시된 각 프로세서 노드의 세부 구조가 변형된 본 발명의 다른 실시예를 나타내는 도면,
도 7은 링버스 구조에서 프로세서 노드가 다른 순서로 스누핑 요청을 관찰하는 동작을 예시하는 도면,
도 8은 본 발명의 스누핑 방식의 링버스를 포함하는 분산된 공유 메모리 다중 프로세서 장치에 대한 또다른 실시예를 나타내는 도면,
도 9, 도 10, 도 11, 도 12는 본 발명의 스누핑 방식의 링버스를 포함하는 분산된 공유 메모리 다중 프로세서 장치의 변형된 구조에 대한 또다른 실시예를 나타낸 도면.
<도면의 주요 부분에 대한 부호의 설명>
100A, 100B : 프로세서 모듈 110A, 110B : 프로세서
120A, 120B : 지역 캐쉬 140 : 지역 시스템 버스
150 : 노드 제어기 151 : 지역 제어부
152 : 네트워크 제어부 160 : 링 인터페이스
170 : 원격 캐쉬 172 : 원격 태그 캐쉬부
176 : 원격 데이터 캐쉬 180 : I/O 브릿지
190 : 펜딩 버퍼 300 : 지역 공유 메모리부
310 : 데이터 메모리 311 : 메모리 제어기
320 : 메모리 디렉토리부 500A 내지 500H : 프로세서 노드
510 : 링 버스 600 : 상호 연결망
이하, 본 발명에 대해 첨부한 도면을 참조하여 상세히 설명한다.
도 4에는 본 발명의 일실시예에 따른 스누핑을 지원하는 단 방향 링(이하, 링 버스라고 함)으로 연결된 분산된 공유 메모리 구조의 다중 프로세서 장치가 도시된다.
도 4에서, 각 프로세서 노드(500A 내지 500H)는 스누핑을 지원하는 단방향 지점간 링 버스(510)로 연결된다. 또한 각각의 프로세서 노드(500A 내지 500H)는, 도 4의 좌측에 상세히 예시된 바와 같이, 프로세서(110)와, 지역 캐쉬(120)로 이루어진 다수개의 동일 구성의 프로세서 모듈(100)과, 지역 공유 메모리부(300), 다수개의 I/O 브릿지(180), 링 인터페이스(160), 노드 제어기(150) 및 원격 캐쉬(remote cache)(170)를 포함하며, 프로세서 모듈(100)과, 지역 공유 메모리부(300), I/O 브릿지(180) 및 노드 제어기(150)는 지역 시스템 버스(140)를 통해 연결된다.
각 프로세서 노드(500A 내지 500H)의 세부 구성 및 작용은 실질적으로 동일하며, 따라서 이하에서는 프로세서 노드(500A)를 중심으로 설명한다.
도 4에 도시된 노드 제어기(150)는 각각의 프로세서 모듈(100)로부터의 데이터 요청 신호에 대응하는 명령어나 데이터를 포함하는 블록(이하, '데이터 블록'이라 명명함)이 원격 캐쉬(170)나, 지역 공유 메모리부(300)에 유효한 상태로 저장되어 있는지를 검색하여, 원격 캐쉬(170)에 유효한 상태로 저장되어 있을 경우, 원격 캐쉬(170)에 저장된 해당 데이터 블록을 프로세서 모듈(100)에 제공하지만, 그 데이터 블록이 지역 공유 메모리부(300)에 유효한 상태로 저장되어 있을 경우에는 지역 공유 메모리부(300)가 그 블록을 제공하게 한다. 만일, 원격 캐쉬(170)나 지역 공유 메모리부(300)에 그 데이터 블록이 유효한 상태로 저장되어 있지 않을 경우, 노드 제어기(150)는 링인터페이스(160)를 통해 다른 프로세서 노드(500B 내지 500H)들로, 그 블록에 대한 요청 신호를 전송하는 작용을 한다. 또한 노드 제어기(150)는 링 버스(510)를 경유하여 링 인터페이스(160)를 통해 다른 프로세서 노드(500B 내지 500H)들로부터 요청 신호가 입력되면, 요청 신호에 대응하는 데이터 블록이 자신의 원격 캐쉬(170)나 지역 공유 메모리부(300)에 유효한 상태로 저장되어 있는지를 검색하여, 원격 캐쉬(170)나 지역 공유 메모리부(300)에 유효한 상태로 저장되어 있을 경우, 링 인터페이스(160)를 통해 요청 신호를 발생한 다른 프로세서 노드(500B 내지 500H)로 해당 데이터 블록이 전송되도록 한다.
링 인터페이스(160)는 프로세서 노드(500A)를 링 버스(510)에 연결하는 데이터 패스(path)로 작용하여, 노드 제어기(150)로부터의 요청 신호나 데이터 블록을 패킷으로 구성하여 링 버스(510)를 통해 다른 프로세서 노드들(500B 내지 500H)로 전송하고 링 버스(510)를 통해 다른 프로세서 노드(500B 내지 500H)에서 전송되어 오는 요청 신호나 데이터 블록을 선별하여 노드 제어기(150)에게 전달할 뿐 아니라, 전송되어 오는 신호가 방송 패킷일 경우 전송받은 패킷을 다른 프로세서 노드(500B)에게 바이패스(bypass)하는 역할과 패킷 전송에 필요한 모든 흐름제어를 책임진다.
프로세서 노드(500A)내의 원격 캐쉬(170)는 다른 프로세서 노드들(500B 내지 500H)내의 지역 공유 메모리부의 영역(이하, '원격 공유 메모리 영역'이라 함)에 해당하는 데이터 블록만 캐슁하는 캐쉬로서, 지역 시스템 버스(140)에 연결된 각각의 프로세서 모듈(100)로부터의 원격 공유 메모리 영역에 해당하는 데이터 블록에 대한 캐쉬 실패(cache miss)의 경우, 그 블록을 원격 캐쉬(170)에 할당하며, 지역 공유 메모리부(300) 영역의 블록은 캐슁하지 않는다. 프로세서 노드(500A)의 원격 캐쉬(170)는 다른 프로세서 노드들(500B 내지 500H)내의 원격 공유 메모리 영역에 해당하는 데이터 블록만을 캐슁함으로써 상대적으로 작고 빨리 동작하도록 구성하는 것이 가능하다.
원격 캐쉬(170)는 프로세서 노드(500A)내의 각각의 지역 캐쉬(120)들과, 다른 프로세서 노드들(500B 내지 500H)내의 원격 공유 메모리 영역에 대해 MLI 성질(Multi-Level Inclusion Property)을 만족시키기 때문에 다른 프로세서 노드(500B 내지 500H)들로부터의 원격 공유 메모리 참조 요청 신호에 대해 스누핑 여과(Snoop filtering)의 기능을 가진다. 여기서 MLI 성질은 하위 계층의 캐쉬에 저장된 데이터 블록은 상위 계층의 캐쉬에도 항상 저장되어 있어야 하는 성질을 의미하며, 이를 위해 상위 계층의 캐쉬 블록이 대체(replacement)될 경우 해당 블록이 어떠한 하위 계층의 캐쉬에도 유효한 상태로 존재하지 않아야 함을 보장해야 한다.
따라서, 원격 캐쉬(170)는 프로세서 노드(500A)의 각각의 지역 캐쉬(120)들에 저장된 원격 데이터 블록들을 저장하게 되며, 다른 프로세서 노드(500B 내지 500H)들로부터의 원격 공유 메모리 참조 요청 신호에 대해 원격 캐쉬(170)에 해당 데이터 블록이 유효한 상태로 저장되어 있지 않으면, 지역 시스템 버스(140)로 해당 데이터 블록에 대한 요청을 전송할 필요가 없는 스누핑 여과 기능을 담당하게 되는 것이다. 다시 말해서, 원격 캐쉬(170)에 해당 데이터 블록이 유효한 상태로 저장되어 있지 않으면, 그 블록이 지역 시스템 버스에 연결되어 있는 지역 캐쉬에도 유효한 상태로 저장되어 있지 않음을 의미하기 때문에 지역 시스템 버스(140)로 해당 데이터 블록에 대한 요청을 전송할 필요가 없게된다.
바람직하기로는 원격 캐쉬(170)를 도 4에 도시된 바와 같이 데이터 블록의 내용을 저장하는 원격 데이터 캐쉬(176)와, 데이터 블록의 상태 및 주소의 일부분을 저장하는 원격 태그 캐쉬부(172)로 구성하여, 원격 데이터 캐쉬(176)에 저장된 데이터 블록의 상태를 갱신하거나, 필요한 경우 해당 데이터 블럭을 제공하기 용이하게 한다.
더욱 바람직하기로는 원격 데이터 블록에 대한 주소와 이러한 상태를 저장하는 원격 태그 캐쉬부(172)를 독립적인 두 개의 원격 태그 캐쉬(172A, 172B)로 구성하여, 지역 시스템 버스(140)를 통해 연결된 프로세서(110)로부터의 원격 캐쉬(170) 접근 요구에 대해서는 원격 태그 캐쉬(172A)를 참조하도록 하고, 링 인터페이스(160)를 통해 이웃 프로세서 노드(500B 내지 500H)로부터의 원격 캐쉬(170) 접근 요구에 대해서는 원격 태그 캐쉬(172B)를 참조하도록 하여, 원격 태쉬(170)에 대한 접근 요구가 병렬적으로 처리될 수 있도록 한다.
원격 캐쉬(170)에 저장된 데이터 블록은 다음과 같은 4가지의 상태, 즉, '갱신(Modified)', '갱신-공유(Modified-Shared)', '공유(Shared)', '무효(Invalid)' 상태로 나타낼 수 있다.
* 갱신 : 데이터 블록이 유효하고 갱신되었으며, 유일하게 유효한 복사본.
* 갱신-공유 : 데이터 블록이 유효하고 갱신되었으며, 다른 원격 캐쉬가 그 데이터 블록을 공유하고 있을 수 있음.
* 공유 : 데이터 블록이 유효하고 다른 원격 캐쉬가 데이터 블록을 공유하고 있을 수 있음.
* 무효 : 데이터 블록이 유효하지 않음.
지역 공유 메모리부(300)는 데이터 메모리(310)와, 메모리 제어기(311), 메모리 디렉토리부(320)를 포함한다. 데이터 메모리(310)에는 데이터 블록의 내용 정보가 저장되고, 메모리 디렉토리부(320)에는 데이터 메모리(310)에 저장된 데이터 블록의 상태 정보가 저장된다.
메모리 제어기(311)는 프로세서 모듈(100)과 노드 제어기(150)로부터의 요청 신호에 응답하여 데이터 메모리(310)를 억세스(access)한후, 요청 신호에 대응하는 데이터 블록을 각각의 프로세서 모듈(100)과 노드 제어기(150)에 전송해주는 작용을 하는 것으로, 메모리 제어기(311)와 노드 제어기(150)는 지역 시스템 버스(140)에 의해 접속된다.
한편, 메모리 디렉토리부(320)는 노드 제어기(150)가 직접 억세스할수 있도록 구성한다. 따라서, 노드 제어기(150)가 각각의 프로세서 모듈(100)로부터 요청된 데이터 블록이 지역 공유 메모리부(300)에 어떠한 상태로 저장되어 있는지를 효과적으로 검색할수 있으며, 다른 프로세서 노드(500B 내지 500H)들로부터 요청된 데이터 블록이 자신의 지역 공유 메모리부(300)에 어떠한 상태로 저장되어 있는지를 효과적으로 검색할수 있게된다.
바람직하기로는 메모리 디렉토리부(320)를 독립적인 두 개의 메모리 디렉토리(320A, 320B)로 구성하여, 지역 시스템 버스(140)를 통해 연결된 각각의 프로세서(110)로부터의 지역 공유 메모리부(300) 접근 요구에 대해서는 메모리 디렉토리(320A)를 참조하도록 하고, 링 인터페이스(160)를 통해 이웃 프로세서 노드(500B 내지 500H)로부터의 지역 공유 메모리부(300) 접근 요구에 대해서는 메모리 디렉토리(320A)를 참조하도록 하여, 지역 공유 메모리부(300)에 대한 접근 요구가 병렬적으로 처리될 수 있도록 한다.
지역 시스템 버스(140)를 통해 전송된 지역 공유 메모리부(300) 접근 요청에 대한 캐쉬 일관성 트래픽을 최소화하고 링 버스로의 불필요한 트랜잭션을 줄이며, 지역 시스템 버스(140)로부터의 요구를 처리하고, 링 버스로부터의 스누핑 요구에 대해 스누핑 결과를 생성하기 위해 메모리 디렉토리(320A)는 CL, SH, GN의 3 가지 상태를 유지한다.
* CL : 해당 데이터 블록이 다른 프로세서 노드의 원격 캐쉬에 유효한 상태로 저장되어 있지 않음
* SH : 해당 데이터 블록이 유효하고 다른 프로세서 노드의 원격 캐쉬에 갱신되지 않은 유효한 상태로 저장되어 있을 수 있음
* GN : 해당 데이터 블록이 유효하지 않으며, 다른 프로세서 노드의 원격 캐쉬에 갱신된 유효한 상태로 저장되어 있음
한편, 각 프로세서 노드(500A 내지 500H)를 연결해주는 단방향 지점간 링 버스(510)상의 모든 통신은 패킷을 통해 이루어지며 패킷들은 요청 신호에 상응하는 요청 패킷, 응답 신호에 상응하는 응답 패킷, 인식 신호에 상응하는 인식 패킷으로 분류될 수 있다. 요청 패킷은 링 버스로의 트랜잭션을 필요로 하는 프로세서 노드에 의해 발송되는 패킷으로 방송 패킷(broadcast packet)과 단일전송 패킷(unicast packet)으로 구분될 수 있으며 방송 패킷만이 다른 프로세서 노드들에 의해 스누핑 된다.
응답 패킷은 요청 패킷을 수신한 응답 프로세서 노드가 요청에 대한 응답으로 생성하는 패킷으로, 언제나 단일 전송된다. 인식 패킷은 단일전송 패킷에 대한 인식으로 수신 프로세서 노드에 의해 생성된후, 발송 프로세서 노드로 단일 전송된다. 단일전송 패킷을 전송한 프로세서 노드는 패킷 전송 후 이 패킷에 대한 인식 패킷이 도착할 때까지 전송 패킷에 대한 정보를 유지하며, 인식 패킷이 도착하기 전에 동일한 블록에 대한 요청을 다른 프로세서 노드로부터 수신하였을 경우 필요에 따라 그 프로세서 노드로 재시도 요구 패킷을 단일 전송한다.
여기에서, 좀더 세부적으로 살펴보면, 요청 패킷중의 방송 패킷으로는 MRFR, MFLSH, MRFW, MINV가 있고, 단일 전송 패킷으로는 MWBE, MWBS, MRPLY가 있다.
① MRFR(Memory Read For Read)
프로세서 노드내의 프로세서로부터의 읽기 요청에 대해 해당 데이터 블록이 원격 메모리 영역에 해당하고 원격 캐쉬에 해당 데이터 블록이 유효한 상태로 저장되어 있지 않을 경우 발송하는 패킷.
② MFLSH(Memory Flush)
프로세서 노드내의 프로세서로부터의 읽기 요청에 대해 해당 블록이 지역 공유 메모리부 영역에 해당하고 그 블록이 그 프로세서 노드에는 유효한 상태로 저장되어 있지 않을 경우 발송하는 패킷.
③ MRFW(Memory Read For Write)
프로세서 노드내의 프로세서로부터의 쓰기 요청에 대해 원격 캐쉬나 지역 공유 메모리부에 해당 유효한 데이터 블록이 저장되어 있지 않을 경우 발송하는 패킷.
④ MINV(Memory Invalidate)
프로세서 노드내의 프로세서로부터의 쓰기 요청에 대해 원격 캐쉬나 지역 공유 메모리부에 유효한 상태로 저장되어 있는 해당 블록을 다른 프로세서 노드의 원격 캐쉬가 공유하고 있는 경우에 발송하는 무효화 요청 패킷.
⑤ MWBE(Memory Writeback Exclusive), MWBS(Memory Writeback Shared)
원격 캐쉬의 블록 대체로 인해 대체될 블록의 메모리 영역에 해당하는 원격 프로세서 노드로의 되쓰기 패킷으로 원격 캐쉬의 상태가 '갱신' 상태일 경우는 MWBE, '갱신-공유' 상태일 경우 MWBS를 발송.
⑥ MRPLY (Memory Reply)
요청 패킷에 대한 데이터 제공 응답 트랜잭션.
도 5는 도 4에서와 같이 구성된 본 발명의 링 버스 구조의 분산된 공유 메모리 다중 프로세서에 대한 동작예가 도시된다.
도 5에서, 프로세서 노드(500A)의 한 프로세서(110)(도 4 참조)로부터의 메모리 읽기 참조 요청에 대해 해당 데이터 블록이 원격 공유 메모리 영역에 해당하고 원격 캐쉬(170)에 유효한 상태로 저장되어 있지 않을 경우에, 프로세서 노드(500A)는 링 버스(510)를 통해 다른 프로세서 노드(500B 내지 500H)들로 MRFR 요청 패킷을 방송한다. 그러나, 해당 데이터 블록이 지역 공유 메모리 영역에 해당하고 프로세서 노드(500A)에 유효한 상태로 저장되어 있지 않을 경우에, 프로세서 노드(500A)는 링 버스(510)를 통해 다른 프로세서 노드(500B 내지 500H)들로 MFLSH 요청 패킷을 방송한다.
이에 따라, 요청 패킷은 링버스(510)를 따라 프로세서 노드(500B)에서부터 프로세서 노드(500H)측으로 순차적으로 순회하게 된다. 요청 패킷이 링 버스(510)를 순회하는 동안, 각 프로세서 노드(500B 내지 500H)는 이 요청 패킷에 대해 내부의 원격 태그 캐쉬부(172)나 메모리 디렉토리부(320)를 조사하여 해당 데이터 블록이 어떠한 상태로 저장되어 있는지 등에 대한 스누핑을 수행하는 동시에 그 요청 패킷을 인접한 이웃 프로세서 노드로 바이패스(bypass)한다.
예를들어, 프로세서 노드(500D)에 요청 패킷이 입력되면, 프로세서 노드(500D)의 노드 제어기(150)는 프로세서 노드(500D)내의 원격 태그 캐쉬부(172)나 메모리 디렉토리부(320)를 스누핑한다. 스누핑한 결과 해당 데이터 블록이 프로세서 노드(500D)내의 원격 데이터 캐쉬(176)에 수정된 상태(예를 들어, '갱신'이나 '갱신-공유' 상태)로 저장되어 있을 경우(이 경우에 그 블록을 지역 공유 메모리부에 유효한 상태로 저장하고 있는 프로세서 노드는 존재하지 않는다), 프로세서 노드(500D)의 노드 제어기(150)는 자신이 그 요청 패킷에 대한 응답의 책임을 가진다고 판단한다. 이후, 프로세서 노드(500D)는 요청한 데이터 블록을 포함하는 응답 패킷을 그 요청 패킷을 생성한 프로세서 노드(500A)로 단일 전송하는 동시에, 해당 데이터 블록에 대한 원격 태그 캐쉬부(172)의 상태를 MRFR 요청에 대해서는 '갱신-공유' 상태로 유지하며, MFLSH 요청에 대해서는 갱신되지 않은 유효한 상태(예를 들어 '공유' 상태)로 변환한다.
한편, 요청 패킷에 대응하는 데이터 블록이 프로세서 노드(500D)의 지역 공유 메모리부(300)에 유효한 상태로 저장되어 있으면, 프로세서 노드(500D)의 노드 제어기(150)는 자신이 그 요청 패킷에 대한 응답의 책임을 가진다고 판단하여, 지역 시스템 버스(140)를 통하여, 메모리 제어기(311)에 요청 신호를 전송한다. 프로세서 노드(500D)의 메모리 제어기(311)는 요청 신호에 응답하여 데이터 메모리(310)을 억세스한후, 요청 신호에 대응하는 데이터 블록을 지역 시스템 버스(140)를 통하여 노드 제어기(150)에 전송한다. 따라서, 프로세서 노드(500D)의 노드 제어기(150)는 요청한 데이터 블록을 포함하는 응답 패킷을 링인터페이스(160)를 통하여 프로세서 노드(500A)로 단일 전송한다.
이 때, 앞선 방송 요청 패킷은 링 버스(510)를 순회한 후 프로세서 노드(500A)에 의해 제거된다. 한편, 프로세서 노드(500A)는 프로세서 노드(500D)로부터 응답 패킷을 받으면, 다시 프로세서 노드(500D)에게 인식 패킷을 단일 전송하는 동시에, 프로세서 노드(500A)의 지역 시스템 버스(140)를 통해 그 요청을 생성한 프로세서(110)로 해당 데이터 블록을 전송한다. 또한, 프로세서 노드(500A)는 요청 신호에 대응하는 데이터 블록이 원격 공유 메모리 영역에 해당하면 원격 데이터 캐쉬(176)에 해당 데이타 블록을 저장하는 동시에, 해당 데이터 블록에 대한 원격 태그 캐쉬부(172)의 상태를 유효 상태로 한다. 반면, 프로세서 노드(500A)는 데이터 블록이 자신의 지역 공유 메모리 영역에 해당하면 지역 공유 메모리부(300)의 데이터 메모리(310)에 그 블록이 저장되도록하는 동시에, 메모리 디렉토리부(320)의 상태를 다른 프로세서 노드가 그 블록을 공유하고 있음을 의미하는 상태(예를 들어, 'SH' 상태)로 갱신한다.
프로세서 노드(500A)의 한 프로세서(110)로부터의 메모리 쓰기 참조 요청에 대해 프로세서 노드(500A)가 해당 데이터 블록을 원격 캐쉬(170)나 지역 공유 메모리부(300)에 유효한 상태로 저장하고 있지 않을 경우에, 이웃 프로세서 노드(500B 내지 500H)들로 링 버스를 통해 MRFW 요청 패킷을 방송한다. 요청 패킷이 링 버스를 순회하는 동안 각 프로세서 노드(500B 내지 500H)는 이 요청 패킷에 대해 내부의 원격 태그 캐쉬나 메모리 디렉토리부를 조사하여 해당 데이터 블록이 어떠한 상태로 저장되어 있는지 등에 대한 스누핑을 수행하는 동시에 그 요청 패킷을 인접한 이웃 프로세서 노드로 바이패스한다.
예를들어, 프로세서 노드(500D)에서 내부를 스누핑한 결과 해당 데이터 블록이 원격 캐쉬(170)에 수정된 상태(예를 들어, '갱신'이나 '갱신-공유' 상태)로 저장되어 있거나(이 경우에 그 블록을 지역 공유 메모리부에 유효한 상태로 저장하고 있는 프로세서 노드는 존재하지 않는다), 그 데이터 블록이 지역 공유 메모리부(300)에 유효한 상태로 저장되어 있으면, 프로세서 노드(500D)는 자신이 요청 패킷에 대한 응답의 책임을 가진다고 판단한다. 그런후, 프로세서 노드(500D)는 요청한 데이터 블록을 포함하는 응답 패킷을 그 요청을 생성한 프로세서 노드(500A)로 단일 전송하는 동시에 해당 데이터 블록을 저장하고 있는 원격 태그 캐쉬(172)의 상태를 무효화된 상태(예를 들어, '무효')로 하거나 메모리 디렉토리부(320)의 상태를 무효화된 상태(예를 들어, GN 상태)로 갱신한다. 이때, 앞선 방송 요청 패킷은 링 버스(510)를 순회한 후 프로세서 노드(500A)에 의해 제거된다. 한편, 프로세서 노드(500D)의 스누핑 결과 해당 데이터 블록이 원격 캐쉬(170)에 수정되지 않은 유효한 상태(예를 들어 '공유' 상태)로 저장되어 있으면, 그 블록의 원격 캐쉬 상태를 무효화된 상태(예를 들어 '무효' 상태)로 변경한다.
프로세서 노드(500A)는 프로세서 노드(500D)로부터 응답 패킷을 받으면 프로세서 노드(500D)에게 인식 패킷을 단일 전송하는 동시에 프로세서 노드(500A)의 지역 시스템 버스(140)를 통해 그 요청 신호를 생성한 프로세서(110)로 해당 데이터 블록을 전송한다. 또한, 요청한 데이터 블록이 원격 공유 메모리 영역에 해당하면 원격 캐쉬(170)에 그 블록을 수정된 유효한 상태(예를 들면 '갱신' 상태)로 저장하며, 자신의 지역 공유 메모리 영역에 해당하면 지역 공유 메모리부(300)의 데이터 메모리(310)에 해당 데이터 블록이 저장되도록 하는 동시에, 메모리 디렉토리부(320)의 상태를 다른 프로세서 노드의 원격 캐쉬가 그 블록을 공유하고 있지 않음을 의미하는 상태(예를 들어, 'CL' 상태)로 갱신한다.
프로세서 노드(500A)의 한 프로세서(110)로부터의 메모리 쓰기 참조 요청이나 무효화 요청에 대해 프로세서 노드(500A)가 해당 블록을 원격 캐쉬(170)나 지역 공유 메모리부(300)에 유효한 상태로 저장하고 있고 다른 프로세서 노드의 지역 공유 메모리부나 원격 캐쉬에도 그 블록이 유효한 상태로 저장되어 있을 경우에, 그 프로세서 노드(500A)는 이웃 프로세서 노드(500B 내지 500H)들로 링 버스(510)를 통해 MINV 요청 패킷을 방송한다. 요청 패킷이 링버스(510)를 순회하는 동안 각 프로세서 노드(500B 내지 500H)는 이 요청 패킷에 대해 내부의 원격 태그 캐쉬부(172)나 메모리 디렉토리부(320)를 조사하여 해당 데이터 블록이 어떠한 상태로 저장되어 있는지 등에 대한 스누핑을 수행하는 동시에 그 요청 패킷을 인접한 이웃 프로세서 노드로 바이패스한다. 예를들어, 프로세서 노드(500D)에서 내부를 스누핑한 결과 해당 데이터 블록이 원격 캐쉬(170)에 '갱신-공유' 상태로 저장되어 있거나(이 경우에 그 블록을 지역 공유 메모리에 유효한 상태로 저장하고 있는 프로세서 노드는 존재하지 않는다), 해당 데이터 블록이 지역 공유 메모리부(300)에 유효한 상태로 저장되어 있으면, 자신이 요청 패킷에 대한 응답의 책임을 가진다고 판단한다. 이후, 프로세서 노드(500D)는 무효화 요청에 대한 응답 패킷을 그 요청 패킷을 생성한 프로세서 노드(500A)로 단일전송하는 동시에 해당 데이터 블록을 저장하고 있는 원격 캐쉬(170)의 상태를 무효화된 상태(예를 들어 '무효')로 하거나 그 데이터 블록을 저장하고 있는 지역 공유 메모리부(300)의 상태를 무효화된 상태(예를 들어 GN 상태)로 갱신한다. 이때, 앞선 방송 요청 패킷은 링 버스(510)를 순회한 후 프로세서 노드(500A)에 의해 제거된다. 또한 프로세서 노드(500D)의 스누핑 결과, 해당 데이터 블록이 원격 캐쉬(170)에 수정되지 않은 유효한 상태(예를 들어 '공유' 상태)로 저장되어 있으면, 그 데이터 블록의 원격 캐쉬 상태를 무효화된 상태(예를 들어 '무효' 상태)로 변경한다.
프로세서 노드(500A)는 프로세서 노드(500D)로부터 응답 패킷을 받으면 프로세서 노드(500D)에게 인식 패킷을 단일 전송하는 동시에, 해당 데이터 블록이 원격 공유 메모리 영역에 해당하면 원격 캐쉬(170)에 저장되어 있는 해당 블록의 상태를 수정된 상태(예를 들어, '갱신' 상태)로 변환하며, 지역 공유 메모리 영역에 해당하면 해당 블록의 메모리 디렉토리부(320)의 상태를 다른 프로세서 노드의 원격 캐쉬가 그 블록을 공유하고 있지 않음을 의미하는 상태(예를 들어, 'CL' 상태)로 갱신한다.
또한, 프로세서 노드(500A)의 원격 캐쉬(170)에서의 데이터 블록 대체로 인해 축출될 데이터 블록의 상태가 수정된 상태(예를 들면, '갱신'이나 '갱신-공유' 상태)일 경우에, 프로세서 노드(500A)는 축출될 데이터 블록이 원래 저장되어 있어야 할 공유 메모리 영역을 구비한 프로세서 노드, 예를들어 프로세서 노드(500D)로 링 버스(510)를 통해 MWBE나 MWBS 요청 패킷을 단일 전송한다.
그러면, 프로세서 노드(500D)는 해당 요청 패킷에 대해 자신의 데이터 메모리(310)와 메모리 디렉토리부(320)를 갱신하며, 데이터 블록 축출 요청에 대한 응답 패킷을 그 요청 패킷을 생성한 프로세서 노드(500A)로 단일 전송한다. 프로세서 노드(500A)는 프로세서 노드(500D)로부터 응답 패킷을 받으면, 프로세서 노드(500D)에게 다시 인식 패킷을 단일 전송한다.
도 6은 도 4의 각 프로세서 노드(500A 내지 500H)에 대한 세부 구성이 변형된 다른 실시예로서, 지역 공유 메모리부(300)의 메모리 제어기(311)가 지역 시스템 버스(140)에 연결된 것이 아니라 노드 제어기(150)에 직접 연결된 경우가 도시된다.
여기에서, 노드 제어기(150)는 프로세서 노드(500A)의 프로세서 모듈(100)로부터의 데이터 요청 신호에 대응하는 명령어나 데이터를 포함하는 블록이 원격 캐쉬(170)나, 프로세서 노드(500A)내의 지역 공유 메모리부(300)에 유효한 상태로 저장되어 있는지를 검색하여, 원격 캐쉬(170)에 유효한 상태로 저장되어 있을 경우, 원격 캐쉬(170)에 저장된 해당 데이터 블록을 각각의 프로세서 모듈(100)에 제공하며, 지역 공유 메모리부(300)에 유효한 상태로 저장되어 있을 경우에는 지역 공유 메모리부(300)에 저장된 해당 데이터 블록을 프로세서 모듈(100)에 제공한다. 만일, 원격 캐쉬(170)나 지역 공유 메모리부(300)에 유효한 상태로 저장되어 있지 않을 경우, 노드 제어기(150)는 링 인터페이스(160)를 통해 다른 프로세서 노드(500B 내지 500H)들로, 그 블록에 대한 요청 신호를 전송하도록 하는 작용을 한다. 또한 노드 제어기(150)는 링 인터페이스(160)를 통해 다른 프로세서 노드(500B 내지 500H)들로부터 요청 신호가 입력되면, 요청 신호에 대응하는 데이터 블록이 자신의 원격 캐쉬(170)나 지역 공유 메모리부(300)에 유효한 상태로 저장되어 있는지를 검색하여, 원격 캐쉬(170)나 지역 공유 메모리부(300)에 유효한 상태로 저장되어 있을 경우, 해당 데이터 블록을 링 인터페이스(160)를 통해 요청 신호를 발생한 다른 프로세서 노드(500B 내지 500H)에게 전송한다.
한편, 본 발명의 일실시예 및 다른 실시예에 따른 링버스로 연결된 분산된 공유 메모리 다중 프로세서 장치에서 각각의 프로세서 노드는 기존의 버스와 달리 각각의 패킷에 대해 서로 다른 순서로 관찰할 수 있게 된다.
예를들어, 도 7을 보면, 프로세서 노드(500A)에서 제 1 요청 패킷(R1)을 발생하고, 프로세서 노드(500C)에서 제 2 요청 패킷(R2)을 발생할 경우, 프로세서 노드(500B)는 제 1 요청 패킷(R1) → 제 2 요청 패킷(R2)의 순으로 스누핑 요청 패킷을 관찰하는 반면, 프로세서 노드(500H)는 제 2 요청 패킷(R2) → 제 1 요청 패킷(R1)의 순으로 스누핑 요청 패킷을 관찰하게 된다. 따라서 스누핑에 참여하는 프로세서 노드의 입장에서 스누핑 순서와 해당 방송 요청이 처리되는 서비스 순서는 무관하게 되며 각 스누핑에 참여하는 프로세서 노드는 자신의 지역정보만을 가지고 상태 전이를 결정하게 된다. 동일 주소에 대한 복수개의 요청 패킷에 대한 서비스 순서는 그 요청에 대한 처리를 담당하는 프로세서 노드(이하 소유권을 가진 프로세서 노드라 칭하며, 반드시 하나만 존재할 수 있다.) 즉, 요청된 데이터 블록을 원격 캐쉬에 수정된 유효한 상태(예를 들면, '갱신' 상태나 '갱신-공유' 상태)로 저장한 프로세서 노드나, 요청된 데이터 블록을 지역 공유 메모리에 유효한 상태로 저장한 프로세서 노드에 요청 패킷이 도착하는 순서로 정의된다. 따라서 링 버스를 통해 요청을 전송한 모든 프로세서 노드는 소유권을 가진 프로세서 노드에 의해 응답 패킷을 받거나 혹은 재시도 패킷을 받게된다. 소유권을 가진 프로세서 노드는 다른 프로세서 노드로부터의 MRFR, MFLSH, MRFW, MINV 요청 패킷등에 대해 그 프로세서 노드로 MRPLY 패킷을 통해 요청된 블록을 전송하거나 무효화 요청에 대한 승인을 전송하며, MRPLY 패킷을 전송받은 프로세서 노드로부터 인식 패킷을 받기 전에 다른 프로세서 노드로부터 동일한 블록에 대한 상기의 요청을 받으면 그 프로세서 노드에게 재시도할 것을 의미하는 패킷을 전송한다.
따라서 본 발명의 또 다른 실시예에서는 도 8에 도시된 바와 같이, 지역 공유 메모리부(300)를 위한 메모리 디렉토리부(320A, 320B)와, 원격 캐쉬(170)를 위한 원격 태그 캐쉬부(172A, 172B) 이외에, MRPLY 패킷을 전송했으나 아직 인식 패킷을 받지 못한 데이터 블록 요청에 대한 정보를 저장하는 펜딩 버퍼(pending buffer)(190)를 더 구비함으로서, 스누핑을 수행할 때, 지역 공유 메모리부(300)를 위한 메모리 디렉토리부(320)와 원격 캐쉬(170)를 위한 원격 태그 캐쉬부(172) 뿐만아니라, 펜딩 버퍼(190)를 참조하여 펜딩 버퍼(190)에 저장된 블록에 대한 요청이 발생했을 경우에 재시도할 것을 의미하는 패킷을 전송한다.
본 발명의 각 실시예를 설명함에 있어서, 블록 축출의 경우 MWBE와 MWBS로 분리된 경우에 대해, 블록 읽기 요청에 대해서는 MRFR와 MFLSH로 분리된 경우에 대해 설명했으나 각각이 합쳐진 하나의 요청으로 처리한 경우에도 동일하게 적용될 수 있음을 이해할수 있을 것이다.
또한, 원격 캐쉬가 '갱신'와 '갱신-공유', '공유', '무효'를 갖는 경우에 대해 설명했으나, 본 발명이 원격 캐쉬가 변형된 다른 상태, 즉 '갱신'과 '공유', '무효'를 갖는 경우나, '갱신', '공유', '배타(exculsive)', '무효'를 갖는 경우를 포함한 다양한 경우와 프로세서로부터의 요청이 블록 단위가 아니라 워드 단위의 요청에도 동일하게 적용될 수 있으며, 독립적으로 접근되는 메모리 디렉토리의 상태가 CL, SH, GN 상태를 유지하는 경우에 대해 설명했으나 본 발명은 메모리 디렉토리가 상기 상태를 포함하여 다양하게 변형된 경우에도 동일하게 적용될 수 있음을 이해할 수 있을 것이다.
본 발명의 각 실시예를 설명함에 있어서 링 버스상의 패킷의 종류를 블록 단위로 처리되는 MRFR, MFLSH, MRFW, MINV, MWBS, MWBE, MPRLY로 구분한 경우에 대해 설명했으나 본 발명은 패킷이 다양하게 변형된 경우와 블록 단위의 처리외에도 워드(word) 단위의 처리 요청을 포함하는 경우등에도 동일하게 적용될 수 있음을 이해할 수 있을 것이다.
또한 본 발명의 각 실시예를 설명함에 있어서, 모든 프로세서 노드가 복수개의 프로세서와 캐쉬 및 I/O 시스템, 지역 공유 메모리부, 단일 시스템 버스를 사용한 경우에 대해 설명했으나, 일부의 프로세서 노드가 도 9에서 도시된 바와 같이 하나 이상의 프로세서 모듈(100)과, 노드 제어기(150)와, 원격 캐쉬(170)와, 링 인터페이스(160) 및 I/O브릿지(180)만을 내포한 경우, 도 10 에서 도시된 바와 같이 노드 제어기(150)와 지역 공유 메모리부(300) 및 링인터페이스(160)만을 포함한 경우, 프로세서 노드가 임의의 단계의 계층 버스를 포함하는 경우, 도 11에 도시된 바와 같이 프로세서 노드내의 프로세서 모듈(100)이 상술한 바와 같은 Mesh, Torus, Hypercubes, N-cube, MIN, Omega 망, 링(ring) 등을 포함하는 임의의 상호 연결망(600)으로 연결된 경우, 도 12에서 도시된 바와 같이 복수개의 링 버스로 연결되어, 양방향으로 전송하는 경우에도 본 발명의 각 실시예가 동일하게 적용될 수 있음을 본 분야에 종사하는 자라면 누구라도 알수 있을 것이다.
이상 설명한 바와 같이 본 발명은 스누핑 방식으로 캐쉬 일관성을 유지하도록 하여 링 버스로 연결된 분산된 공유 메모리 다중 프로세서 장치의 링의 이용률 및 메모리 접근 지연을 감소시키는 효과가 있다.

Claims (15)

  1. 분산된 공유 메모리 구조를 갖는 다수개의 프로세서 노드(500A 내지 500H)들로서, 각기 데이터 블럭을 요청하는 요청신호를 발생하고, 상기 다수개의 프로세서 노드(500A 내지 500H)중의 어느 하나의 프로세서 노드(500A)에서 발생된 상기 요청 신호를 수신한 다른 나머지 프로세서 노드(500B 내지 500H)에서는 내부를 스누핑하여 상기 요청 신호에 대응하는 데이터 블럭을 출력하는 상기 다수의 프로세서 노드(500A 내지 500H);
    상기 다수개의 프로세서 노드(500A 내지 500H)들을 링형으로 연결하여, 상기 요청 신호 및 상기 요청 신호에 대응하는 데이터 블럭이 상기 각 프로세서 노드들을 순회하여 상기 요청 신호를 발생한 프로세서 노드(500A)에 전달되도록 하는 경로를 제공하는 링 버스(510)를 포함하며;
    상기 다수개의 프로세서 노드(500A 내지 500H)들을 링형으로 연결하여, 상기 요청 신호 및 상기 요청 신호에 대응하는 데이터 블럭이 상기 각 프로세서 노드들을 순회하여 상기 요청 신호를 발생한 프로세서 노드(500A)에 전달되도록 하는 경로를 제공하는 링 버스(510)를 포함하며;
    각각의 상기 프로세서 노드(500A 내지 500H)는:
    다수개의 프로세서 모듈(100);
    상기 다수개의 프로세서 모듈(100) 각각이 공유할 수 있는 데이터 블럭을 저장하는 지역 공유 메모리부(300);
    상기 요청 신호에 대응하는 데이터 블럭이 저장되는 원격 캐쉬(170);
    상기 지역 공유 메모리부(300) 및 상기 원격 캐쉬(170)에 저장된 데이터 블럭을 검색하여 상기 프로세서 모듈(100)에서 원하는 데이터 블럭을 제공하며, 상기 프로세서 모듈(100)에서 원하는 데이터 블럭이 없을 때, 상기 링 버스(510)로 요청 신호를 생성한 후, 상기 요청 신호에 대응하는 데이터 블럭이 입력되면, 상기 데이터 블록을 상기 프로세서 모듈(100)에 제공하고, 상기 링 버스(510)로부터 상기 다른 프로세서 노드에서 요청한 요청 신호가 입력되면 상기 지역 공유 메모리부(300) 및 상기 원격 캐쉬(170)에 저장된 데이터 블럭을 검색하여 상기 검색된 요청 신호에 대응하는 유효 데이터 블럭을 상기 링버스(150)상에 제공하는 노드 제어기(150);
    상기 노드 제어기(150)와 상기 링버스(510)를 접속해주는 링 인터페이스(160)로 구성된 것을 특징으로 하는 분산된 공유 메모리 구조의 다중 프로세서 장치.
  2. 제 1 항에 있어서, 상기 요청 신호는 방송 패킷으로 구성된 것을 특징으로 하는 분산된 공유 메모리 구조의 다중 프로세서 장치.
  3. 제 1 항에 있어서, 상기 요청 신호는 단일 전송 패킷으로 구성된 것을 특징으로 하는 분산된 공유 메모리 구조의 다중 프로세서 장치.
  4. 제 1 항에 있어서, 상기 요청 신호에 대응하는 데이터 블럭은 단일 전송 패킷으로 구성된 것을 특징으로 하는 분산된 공유 메모리 구조의 다중 프로세서 장치.
  5. 제 1 항에 있어서, 상기 링버스(510)는 상기 다수개의 프로세서 노드를 단방향으로 연결하는 단방향 링 버스인 것을 특징으로 하는 분산된 공유 메모리 구조의 다중 프로세서 장치.
  6. 제 1 항에 있어서, 상기 링버스(510)는 상기 다수개의 프로세서 노드를 양방향으로 연결하는 양방향 링 버스인 것을 특징으로 하는 분산된 공유 메모리 구조의 다중 프로세서 장치.
  7. 제 1 항에 있어서, 상기 다른 프로세서 노드로부터 제공된 요청 신호에 대응하는 데이터 블럭을 상기 링 버스를 통해 전송할 때, 상기 요청 신호를 발생한 다른 프로세서 노드가 상기 요청 신호에 대응하는 데이터 블럭을 수신했는지의 여부를 나타내는 정보를 저장하기 위한 펜딩 버퍼(190)를 더 포함하는 것을 특징으로 하는 분산된 공유 메모리 구조의 다중 프로세서 장치.
  8. 제 1 항 또는 제 7 항에 있어서, 상기 원격 캐쉬(170)는:
    상기 데이터 블록의 내용을 저장하는 원격 데이터 캐쉬(176);
    상기 원격 데이터 캐쉬(176)에 저장된 데이터 블록에 대한 태그 주소와, 상기 데이터 블록의 상태를 저장하기 위한 원격 태크 캐쉬부(172)로 구성된 분산된 공유 메모리 구조의 다중 프로세서 장치.
  9. 제 8 항에 있어서, 상기 원격 태그 캐쉬부(172)는 :
    상기 원격 캐쉬(170)에 대한 접근 요구가 병렬적으로 처리되도록 하기 위하여 독립된 두 개의 원격 태그 캐쉬(172A, 172B)를 구비하며,
    상기 원격 태그 캐쉬(172A)는 자신을 포함하는 상기 프로세서 노드(500A)내 프로세서(110)로부터의 상기 원격 캐쉬(170) 접근 요구가 있을 때 참조되며, 상기 원격 태그 캐쉬(172A)는 상기 링 인터페이스(160)를 통한 다른 프로세서 노드(500B 내지 500H)로부터의 상기 원격 캐쉬(170) 접근 요구가 있을 때 참조되는 것을 특징으로 하는 분산된 공유 메모리 구조의 다중 프로세서 장치.
  10. 제 1 항 또는 제 7 항에 있어서, 상기 지역 공유 메모리부(300)는:
    상기 데이터 블럭의 내용을 저장하는 데이터 메모리(310);
    상기 노드 제어기(150)에 접속되어 상기 노드 제어기(150)으로부터 요청 신호가 입력되면, 상기 요청 신호에 대응하는 데이터 블록을 상기 데이터 메모리(310)로부터 검출하여 상기 노드 제어기(150)에 제공하는 메모리 제어기(311);
    상기 노드 제어기(150)에 접속되어 데이터 메모리(310)에 저장된 데이터에 대한 상태를 나타내는 데이터를 저장하기 위한 메모리 디렉토리부(320)로 구성된 것을 특징으로 하는 분산된 공유 메모리 구조의 다중 프로세서 장치.
  11. 제 10 항에 있어서, 상기 메모리 디렉토리부(320)는:
    상기 지역 공유 메모리부(300)에 대한 접근 요구가 병렬적으로 처리될 수 있도록 독립적인 두 개의 메모리 디렉토리(320A, 320B)를 구비하며;
    상기 메모리 디렉토리(320A)는 자신을 포함하는 프로세서 노드(500A)의 프로세서(110)로부터의 상기 지역 공유 메모리부(300) 접근 요구가 있을 때, 참조되며, 상기 메모리 디렉토리(320B)는 상기 링 인터페이스(160)를 통한 나머지 프로세서 노드(500B 내지 500H)로부터의 상기 지역 공유 메모리부(300) 접근 요구가 있을 때 참조되는 것을 특징으로 하는 분산된 공유 메모리 구조의 다중 프로세서 장치.
  12. 제 1 항 또는 제 7 항에 있어서, 상기 다수개의 프로세서 모듈(100)과 상기 노드 제어기(160)는 지역 시스템 버스(140)로 연결된 것을 특징으로 하는 분산된 공유 메모리 구조의 다중 프로세서 장치.
  13. 제 12 항에 있어서, 상기 지역공유 메모리부(300)는:
    상기 데이터 블럭의 내용을 저장하는 데이터 메모리(310);
    상기 지역 시스템 버스(140)에 접속되어, 상기 지역 시스템 버스(140)로부터 요청 신호가 입력되면, 상기 요청 신호에 대응하는 데이터 블록을 상기 데이터 메모리(310)로부터 검출하여 상기 지역 시스템 버스상에 제공하는 메모리 제어기(311);
    상기 노드 제어기(150)에 접속되어 데이터 메모리(310)에 저장된 데이터에 대한 상태를 나타내는 데이터를 저장하기 위한 메모리 디렉토리부(320)로 구성된 분산된 공유 메모리 구조의 다중 프로세서 장치.
  14. 제 1 항 또는 제 7 항에 있어서,
    상기 다수개의 프로세서 모듈(100)과 상기 노드 제어기(150)는 상호 연결망(600)으로 연결된 것을 특징으로 하는 분산된 공유 메모리 구조의 다중 프로세서 장치.
  15. 제 14 항에 있어서, 상기 지역공유 메모리부(300)는:
    상기 데이터 블럭의 내용을 저장하는 데이터 메모리(310);
    상기 상호 연결망(600)에 접속되어, 상기 상호 연결망(600)으로부터 요청 신호가 입력되면, 상기 요청 신호에 대응하는 데이터 블록을 상기 데이터 메모리(310)로부터 검출하여 상기 상호 연결망(600)상에 제공하는 메모리 제어기(311);
    상기 노드 제어기(150)에 접속되어 데이터 메모리(310)에 저장된 데이터에 대한 상태를 나타내는 데이터를 저장하기 위한 메모리 디렉토리부(320)로 구성된 것을 특징으로 하는 분산된 공유 메모리 구조의 다중 프로세서 장치.
KR1019980014513A 1997-08-22 1998-04-23 분산된공유메모리구조의다중프로세서장치 KR100281465B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
US09/120,850 US6253292B1 (en) 1997-08-22 1998-07-22 Distributed shared memory multiprocessor system based on a unidirectional ring bus using a snooping scheme
JP10224423A JPH11134312A (ja) 1997-08-22 1998-08-07 分散共有メモリ多重プロセッサシステム

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
KR97-40083 1997-08-22
KR1019970040083 1997-08-22
KR1019970040083A KR19990024309A (ko) 1997-08-22 1997-08-22 분산된 공유 메모리 구조의 다중 프로세서 장치

Publications (2)

Publication Number Publication Date
KR19990023119A KR19990023119A (ko) 1999-03-25
KR100281465B1 true KR100281465B1 (ko) 2001-03-02

Family

ID=65890150

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1019970040083A KR19990024309A (ko) 1997-08-22 1997-08-22 분산된 공유 메모리 구조의 다중 프로세서 장치
KR1019980014513A KR100281465B1 (ko) 1997-08-22 1998-04-23 분산된공유메모리구조의다중프로세서장치

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1019970040083A KR19990024309A (ko) 1997-08-22 1997-08-22 분산된 공유 메모리 구조의 다중 프로세서 장치

Country Status (1)

Country Link
KR (2) KR19990024309A (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20020017926A (ko) * 2000-08-29 2002-03-07 오명철 주변 네트워크 인식 인터넷 컨텐츠 분산 배포 시스템 및그 제어 방법
KR100477641B1 (ko) * 2002-01-15 2005-03-23 삼성전자주식회사 버스 시스템 및 그 데이터 전송경로 결정방법
KR20030073891A (ko) * 2002-03-13 2003-09-19 주식회사 신텔정보통신 소비자 참여 방식의 콘텐츠 전송 네트워크 운영시스템 및그 운영방법

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH036768A (ja) * 1989-06-05 1991-01-14 Sharp Corp リング状階層化マルチプロセッサ
US5191652A (en) * 1989-11-10 1993-03-02 International Business Machines Corporation Method and apparatus for exploiting communications bandwidth as for providing shared memory

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH036768A (ja) * 1989-06-05 1991-01-14 Sharp Corp リング状階層化マルチプロセッサ
US5191652A (en) * 1989-11-10 1993-03-02 International Business Machines Corporation Method and apparatus for exploiting communications bandwidth as for providing shared memory

Also Published As

Publication number Publication date
KR19990024309A (ko) 1999-04-06
KR19990023119A (ko) 1999-03-25

Similar Documents

Publication Publication Date Title
US6253292B1 (en) Distributed shared memory multiprocessor system based on a unidirectional ring bus using a snooping scheme
US6631448B2 (en) Cache coherence unit for interconnecting multiprocessor nodes having pipelined snoopy protocol
US5734922A (en) Multiprocessing system configured to detect and efficiently provide for migratory data access patterns
US6141692A (en) Directory-based, shared-memory, scaleable multiprocessor computer system having deadlock-free transaction flow sans flow control protocol
US7457924B2 (en) Hierarchical directories for cache coherency in a multiprocessor system
JP3644587B2 (ja) 共用介入サポートを有する不均等メモリ・アクセス(numa)・データ処理システム
KR100634932B1 (ko) 멀티프로세서 시스템 내에서의 캐시 일관성에서 사용하기위한 전송 상태
US7032078B2 (en) Shared memory multiprocessing system employing mixed broadcast snooping and directory based coherency protocols
KR100548908B1 (ko) 중앙 집중형 스누프 필터링 방법 및 장치
JP3470951B2 (ja) 非一様メモリ・アクセス・コンピュータ・システム及びその操作方法
EP0818733B1 (en) A multiprocessing system configured to perform software initiated prefetch operations
US7856535B2 (en) Adaptive snoop-and-forward mechanisms for multiprocessor systems
US8806147B2 (en) System and method for creating ordering points
US6266743B1 (en) Method and system for providing an eviction protocol within a non-uniform memory access system
JPH10149342A (ja) プリフェッチ動作を実行するマルチプロセス・システム
US6269428B1 (en) Method and system for avoiding livelocks due to colliding invalidating transactions within a non-uniform memory access system
US5802563A (en) Efficient storage of data in computer system with multiple cache levels
KR19990085485A (ko) 분산 공유 메모리 시스템에서 미세 통신과 대단위 통신의 병합을 위한 적응형 입도 방법
US7725660B2 (en) Directory for multi-node coherent bus
US7669013B2 (en) Directory for multi-node coherent bus
KR100281465B1 (ko) 분산된공유메모리구조의다중프로세서장치
US6944721B2 (en) Asynchronous non-blocking snoop invalidation
KR100319708B1 (ko) 방향 분리 이중 링 구조의 분산된 공유 메모리 다중프로세서 시스템
KR100253201B1 (ko) 분산공유 메모리구조를 갖는 시스템의 캐시 동일성 유지 제어기
Bruner et al. Cache coherency on the S-1 AAP

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20121119

Year of fee payment: 13

FPAY Annual fee payment

Payment date: 20131106

Year of fee payment: 14

LAPS Lapse due to unpaid annual fee