상술한 것과 같은 본 발명의 양상들과 많은 의도된 이점은 첨부된 도면과 관련하여, 다음의 상세한 설명을 참조함으로써 보다 잘 이해될 수 있을 것이다.
본 발명의 다양한 실시예는 동적 분산 컴퓨팅 환경 내의 컴퓨팅 엔티티를 다루며, 이러한 컴퓨팅 엔티티는 더이상의 매치가 불가능할 때까지 노드를 매치시키기 위해 에지에 의해 링크되는 그래프 내의 노드들이었다. 새로운 노드는 분산 컴퓨팅 환경에 동적으로 도입될 수 있으며, 본 발명의 다양한 실시예는 분산 컴퓨팅 환경에서 데드락을 억제하면서 노드들을 계속 매치시킨다. 본 발명의 다양한 실시예는 이웃 노드를 조사하기 위해 각각의 노드에 의해 사용되는 프로토콜을 제공하여 잠재적 매치가 가능한지의 여부를 판정한다. 본 발명의 다양한 실시예에서는, 각각의 노드가 자신이 매치할 수 있는 노드를 찾아내는 잠재능력을 자체적으로 갖고 있기 때문에, 종래의 집중화된 컴퓨팅 아키텍처가 사용될 필요가 없으며, 따라서 대표적으로 인터넷을 예로 들수있는 분산 컴퓨팅 아키텍처의 발전을 촉진한다.
도 2에 동적 분산 컴퓨팅 환경(200)이 도시된다. 동적 분산 컴퓨팅 환경(200)은 다수의 노드(200A-200I)를 포함한다. 각각의 노드는 클라이언트 컴퓨터, 서버, 공유 프린터, 또는 다른 노드들과 통신할 수 있는 기타 컴퓨팅 디바이스 등의 디바이스이다. 노드(200A)는 양 말단에 화살표 머리를 가진 선으로 도시된 에지에 의해 노드(200D)에 링크된다. 노드(200A)는 노드(200A)를 가리키는 선의 한쪽 말단의 화살표 머리와 노드(200B)를 가리키는 다른쪽 말단의 또다른 화살표 머리로 도시된 또다른 에지에 의해 노드(200B)에 링크된다. 다른 에지는 노드(200B)와 노드(200C)를 링크시키고, 여기서 선 말단의 화살표 머리는 양 노드(200B, 200C)를 가리킨다. 노드(200C)가 동적 분산 컴퓨팅 환경(200)에 도입된 새로운 노드임을 강조하기 위하여, 노드(200C)는 점선을 사용해 시각적으로 표시되었다. "동적"이란 용어는, 하나의 노드를, 아주 가까운 시점의 과거에는 그 노드를 포함하지 않았던 동적 분산 컴퓨팅 환경에 도입하는 것을 의미한다. 노드(200D)는 선 상의 화살표 머리가 노드(200D, 200E)를 가리키는 에지에 의해 노드(200E)에 링크된다. 노드(200E)는 노드(200E)를 가리키는 한쪽 말단의 하나의 화살표 머리와 노드(200F)를 가리키는 나머지 말단에의 다른 화살표 머리를 갖는 또다른 에지에 의해 노드(200F)에 링크된다. 노드(200F, 200H)를 가리키는 선 상의 화살표 머리로 시각적으로 도시된 에지는 노드(200F, 200H)에 링크된다. 노드(200E)는 말단에 화살 표 머리는 갖는 선으로 나타내진 또다른 에지에 의해 노드(200G)를 링크한다. 노드(200G, 200I)는 에지를 정의하는 말단에 화살표 머리를 갖는 선에 의해 링크된다.
노드(200A-200H) 및 그들의 에지는 0개 이상의 노드(200A-200I)와, 노드 쌍을 접속시키는 0개 이상의 에지로 이루어진 그래프를 형성한다. 2개의 자유로운 노드를 접속시키는 에지가 있고, 그 2개의 자유로운 노드가 서로를 커미트하고자 하면, 매치가 일어난다. 동적 분산 컴퓨팅 환경(200)에서 데드락을 억제하는 것을 확실히 하기 위해, 2개의 자유로운 노드를 서로 링크시킬 수 있는 에지가 더이상 없을 때까지 통신을 원하는 각각의 자유로운 노드를 매치시킨다. 노드(200C) 및 다른 노드들이 동적 분산 컴퓨팅 환경(200) 내에 동적으로 나타날 수 있기 때문에, 매치 프로세스는 끝이 없게 된다. 노드(200C)와 같은 새롭게 도입된 노드가 이미 노드(200A)에 매치된 노드(200B)와 같은 또다른 노드에 링크되면, 노드(200C)에 대한 다른 매치가 불가능할 수 있다. 그러나, 노드(200C)와 같은 새롭게 도입된 노드가 노드(200C)와 통신하길 원하는 자유로운 노드에게 이웃으로서 나타나면, 새로운 매치가 가능할 수 있다.
동적 분산 컴퓨팅 환경(200) 내의 노드들을 매치시키는데 대한 하나의 해결과제는, 각각의 노드가 에지에 의해 자신에게 링크되는 바로 옆의 이웃들에 대한 지식을 갖는 것이다. 예를 들어, 노드(200A)는 노드(200D) 및 노드(200B)에 대해서는 알고 있지만, 노드(200E)에 대해서는 모른다. 노드(200B, 200D)는 노드(200A)에 대해 잠재적 매치이다. 노드(200D)가 노드(200E)에 매치되어 있을 수 있 고, 노드(200B)가 노드(200C)에 매치되어 있을 수 있다는 것을 모르므로, 노드(200B, 200D)는 노드(200A)와 통신을 위해 매치될 수 없게 된다. 본 발명의 다양한 실시예는 동적 분산 컴퓨팅 환경(200) 내에서 데드락을 방지하거나 줄이면서, 노드가 다른 노드에 접속할 수 있고 정보를 교환할 수 있도록 설계된 규칙 또는 표준의 세트를 제공한다. 각각의 노드(200A-200I)는 잠재적으로 동시에 실행되며 같은 프로토콜을 작동시킨다. 매치 방법은 이웃과 결합하기 위한 노드에 의한 결정으로 시작한다. 본 발명의 다양한 실시예는 노드가 매치 가능성이 있는지를 조사하기 위해 이웃 노드와 대화를 시작할 수 있게 한다.
노드(200A)는 노드(200D)와 매치하기 위해 커미트하지만, 노드(200D)는 이미 노드(200E)와 매치됐기 때문에 노드(200A)에 커미트할 수 없는 상황을 고려해보자. 동시에, 노드(200B)는 노드(200C)와 매치하기 위해 커미트하지만, 노드(200C)는 이미 또다른 노드(도시되지 않음)와 매치됐다. 즉, 이는 노드(200A)와 노드(200B)가 에지에 의해 서로 인접한 2개의 노드이지만 두 노드(200A, 200B)에 의한 조기의 커미트 때문에 매치될 수 없는 상황이다. 따라서, 최대 매치는 불가능하다. 본 발명의 다양한 실시예는 이러한 상황을 억제한다. 본 발명의 다양한 실시예는 노드들을 매치하기 위해 그래프를 잠글 필요가 없다. 이는 노드(200C)와 같은 새로운 노드가 동적 분산 컴퓨팅 환경(200)으로 도입되도록 한다.
본 발명의 다양한 실시예에 의해 사용되어 노드들이 매치를 형성하기 위해 협상할 수 있게 하는 프로토콜의 설명을 단순화하기 위해, 단지 3개의 노드(302-306)만을 네트워크(300a)에 도시한다. 노드(302-306)중 2개가 통신을 위해 서로 커미트할 때 매치가 발생한다. 노드(302)는 2개의 포트(302Z, 302X)를 포함하며, 그중 하나만을 통신에 이용할 수 있다. 수학적으로, 포트(302Z)는 문자 Z로 표시되고, 포트(302X)는 문자 X로 표시된다. 식 "Z+X"는 포트(Z, X) 중 오직 하나의 포트만이 노드(302)에서 통신할 수 있음을 표시한다. 노드(304)는 포트(304
) 및 포트(304
)를 포함한다. 노드(304)는 포트(304
, 304
) 중 오직 하나를 통해서만 다른 노드와 매치할 수 있다. 수학적으로, 포트(304
)는 문자
로 표시되고, 포트(304
)는 문자
로 표시된다. 수학식 "
+
"는 포트(
,
) 중 오직 하나의 포트만이 노드(304)로부터의 통신 및 매치가 가능함을 표시한다. 노드(306)는 포트(306Y, 306
)를 포함한다. 수학적으로, 포트(306Y)는 문자 Y로 표시되고, 포트(306
)는 문자
로 표시된다. 식 "Y+
"는 포트(Y,
)중 오직 하나의 포트만이 노드(306)에서 통신 및 매치에 이용할 수 있음을 표시한다.
각각의 노드(302-306)가 자신의 이웃들 중 어느 것이 매치에 이용될 수 있는지를 결정해야 한다면, 문제점은 해결불가능하게 보인다. 노드(302)의 포트(302Z)와 노드(306)의 포트(306
)를 접속시키는 에지(말단에 화살표 머리를 갖는 선으로 도시됨)가 있다. 노드(302)의 포트(302X)와 노드(304)의 포트(304
)를 링크하기 위한 또다른 에지가 존재한다(에지는 포트(302X, 304
)를 가리키는 화살표 머리를 가진 선임). 노드(304)의 포트(304
)와 노드(306)의 포트(306Y)를 링크하기 위한 또다른 에지(말단에 화살표 머리를 가진 또다른 선)가 존재한다. 엄밀하게, 노드(302)가 포트(302Z)를 통해 정보를 입력할 수 있고, 노드(306)가 포트(306
)를 통 해 정보를 송신할 수 있으므로, 이러한 에지는 포트(302Z)와 포트(306
) 간의 잠재적 리액션이 있음을 나타낸다. 유사하게, 포트(302X, 304
)를 통한 노드(302)와 노드(304) 간의 잠재적 리액션이 있다. 포트(302X)는 포트(304
)에 의해 송신될 수 있는 정보를 입력할 수 있다. 포트(304
)와 포트(306Y)를 통한 노드(304)와 노드(306) 간의 또다른 잠재적 리액션이 있다. 정보는 포트(306Y)를 통해 입력되고, 포트(304
)에 의해 출력될 수 있다.
여기에서, 항
는 노드(304)의 포트(304
)를 나타내고; 마침표 "."는 포트(304
)가 자신의 동작을 완료했을 때 프로세스 P가 계속됨을 나타내며; 수직 바 "|"는 병렬로 실행하는 동작을 나타내고; 항 X는 포트(302X)를 나타내며; 항 R은 포트(302X)에서 작동중인 프로세스의 종료로부터 계속 실행하는 프로세스를 나타낸다. π연산식 "
.P|X.R"을 고려해보자. 이 π연산식은 제1 프로세스가 정보를 포트 X 상에 출력하고 후에 프로세스 P에 의해 계속됨을 표시한다. 제1 프로세스 "
.P"는 제2 프로세스 "X.R"와 병렬로 실행되는데, 여기서 제2 프로세스는 채널 X 상의 정보를 수신한 후 프로세스 R을 실행하는 것이다. 교착상태 또는 데드락을 방지하기 위해, 상기 π 연산식은 제2 π 연산식 "P|R"으로 변환되어야 한다. 변환되지 않으면, 교착상태 또는 데드락이 발생할 수 있다. 즉, 제1 π 연산식에서 수직바의 양쪽에 있는 2개의 식은, 제1 π 연산식은 제2 π 연산식으로 계속되도록 반응할 수 있어야 한다. 그들이 반응할 수 없으면, 시스템이 정상적으로 작동하지 않아서, 상술한 바와 같이, 원하지 않는 데드락이 일어난다.
본 발명의 다양한 실시예는 매치가 일어나게 하기 위해 해결법이 노드들(302-306)간에서 수렴되게 한다. 본 발명의 다양한 실시예는 식 "Z+X", "
+
" 및 "Y+
"에 의해 수학적으로 표시된 상호 배타적인 액션과 그들의 통신이 상호 배타적으로 유지되도록 한다. 본 발명의 다양한 실시예는 한 노드 상의 포트가 다른 노드 상의 호환적 포트에 커미트하려고 할 때까지 한 노드가 또다른 노드에 커미트하는 것을 억제한다. 이러한 커미트가 불가능하면, 본 발명의 다양한 실시예는 매치가 발생하지 못하게 한다. 즉, 본 발명의 다양한 실시예는 통신이 노드 상의 또다른 배타적 통신에 의해 선취되지 않는 한 노드들 간의 통신이 발생하도록 한다. 본 발명의 각각의 실시예는 각각의 노드 상에서 균형적으로 작동된다. 추가적으로, 노드들 간의 통신은 노드의 이웃과 비동기적으로 발생한다. "비동기적"이란 용어는 노드가 통신을 출력하고, 노드가 이러한 통신이 성공적이란 응답을 수신할 때까지 차단 및 대기할 필요 없는 상황을 의미한다. 본 발명의 다양한 실시예에서 각각의 노드는 계속 통신한다. 설계의 단순함은 병행성을 강화시키고, 각각의 노드가 입력 통신을 조정하기 위한 독립적 능력을 가지도록 한다.
동적 분산 컴퓨팅 환경 내에서 통신가능 노드들을 매치하기 위한 프로토콜(300B)이 도 3b에 도시된다. 2개의 노드 간의 매치를 발견하기 위해 초청자(inviter)(308) 및 노드(302-306)는 프로트콜(300B)을 사용한다. 초청자(308)는 노드(302-306)가 다른 노드들과 통신할 수 있음을 밝히고, 노드(302-306)중 2개의 노드 간에 매치가 있는지를 조사하기 위해 노드(302-306)를 초청한다. 초청자(308)는 초청(308A)및 초청(308B)을 포함하는 초청(308-1)의 제1 세트를 송신한다. 초청(308A)은 노드(302)로 송신되고, 초청(308B)는 노드(304)로 송신된다. 초청(308A, 308B)은 노드(302, 304)의 어드레스를 포함하여, 노드(302, 304)가 서로 통신할 수 있도록 한다. 초청(308C, 308D)을 포함하는 또다른 초청(308-2) 세트는 노드(302, 306)로 각각 송신된다. 초청(308C, 308D)은 노드(302, 306)의 어드레스를 포함하여, 노드(302, 306)가 서로 통신할 수 있도록 한다. 다른 초청(308-3) 세트는 노드(304)로 송신되는 초청(308E) 및 노드(306)로 송신되는 초청(308F)을 포함한다. 초청(308E, 308F)은 노드(304, 306)가 서로 통신하여 잠재적 매치를 판정하도록 한다. 초청(308E, 308F)은 노드(304, 306)의 어드레스를 포함하여 노드(304, 306)가 서로를 발견하고 통신하여 잠재적 매치를 판정하도록 한다. 이러한 초청(308-1, 308-2, 308-3)은 프로토콜(300B)의 한 부분(310)을 형성하고, 이에 의하여 잠재적 통신가능 노드들은 잠재적 매치를 발견하기 위해 서로 통신하도록 초정된다.
프로토콜(300B)의 또다른 부분(312)은 노드(302-306)가 매치가능한 노드를 조사하도록 한다. 노드(302)는 노드(304)의 어드레스를 가진 이용가능성 메시지(302A)를 노드(304)에 송신하여, 노드(304)의 매치 가능성을 조사한다. 노드(304)도 또한 이용가능성 메시지(304A)를 노드(306)에 송신한다. 유사하게, 노드(302)의 어드레스를 알고 있는 노드(306)는 노드(302)에 이용가능성 메시지(306A)를 송신하여 노드(302)의 매치 가능성을 조사한다. 이용가능성 메시지(302A)에 응답하여, 노드(304)는 불확실 긍정(maybe) 메시지(304B)로 노드(302)에 응답하여, 자신이 잠재적으로 통신 가능함을 노드(302)가 알게한다. 노드(306)가 잠재적인 매치 로서 이용가능함을 확인시키기 위해, 불확실 긍정 메시지(304B)가 노드(306)에 의해 노드(304)에 보내진다. 유사하게, 노드(302)는 불확실 긍정 메시지(302B)를 노드(306)에 송신하여, 노드(302)가 잠재적 매치로서 이용가능함을 알린다. 따라서, 결론적으로, 프로트콜(300B)의 부분(312)은 노드가 이웃 노드들의 통신 가능성을 밝히도록 한다.
프로토콜(300B)의 또다른 부분(314)은 매치된 노드를 완성하고, 다른 노드를 거절한다. 또다시, 노드(302)는 노드(304)에 이용가능성 메시지(302C)를 송신하여, 노드(304)에게 노드(302)가 여전히 매치 가능함을 알린다. 노드(304)는 또한 노드(306)에 이용가능성 메시지(304C)를 송신한다. 동시에, 노드(306)는 또한 매치가능한 노드(304)에 이용가능성 메시지(306C)를 송신한다 (즉, 메시지(304C, 306C)는 에지의 양 말단에 화살표 머리를 가진 에지로 도시된 바와 같이 서로 교차함). 노드(304)는 노드(306)로부터의 이용가능성 메시지(306C)를 수신하여, 노드(306)가 불확실 긍정 메시지를 송신하지 않았음에도 불구하고 매치가 발생했음을 인식한다. 따라서, 노드(304)는 매치를 위한 잠재적 노드로서의 노드(302)를 거절하는 부정 메시지(no message; 304D)로 노드(302)에 응답한다. 따라서, 프로토콜(300B)의 부분(314)은 가능성 노드를 찾은 후, 2개의 노드가 매치를 형성하기 위해 서로에게 커미트하도록 한다 (노드(302)는 미래의 매치에 이용가능한 다수의 노드 내에 남아있는 것이 바람직함).
도 4a-4m은 동적 분산 컴퓨팅 환경 내의 통신가능 노드들을 매치시키기 위한 방법(400)을 나타낸다. 명료하게 설명하기 위해, 다음의 방법(400)에 대한 설명은 동적 분산 컴퓨팅 환경(200)(도 2), 네트워크(300A)(도 3a), 동적 분산 컴퓨팅 환경 내의 통신가능 노드들을 매치시키기 위한 프로토콜(300B)(도 3b)과 관련해 나타난 다양한 구성요소를 참조한다. 시작 블럭에서부터, 방법(400)은 연속 터미널("터미널 A")과 종료 터미널("터미널 B") 간에 정의된 방법 단계의 세트(402)로 진행된다. 방법 단계의 세트(402)는 초청자가 서로 통신할 수 있는 노드를 식별하고, 이 노드들 간의 통신을 초청함을 설명한다.
터미널 A(도 4b)에서부터, 방법(400)은 초청자(308)가 서로 통신할 수 있는 2개의 노드(302-306)를 식별하는 블럭(408)으로 진행한다(즉, 이는 노드의 그래프 내의 에지임). 블럭(408)으로부터의 방법(400)은 자신의 실행을 3개의 프로그램 경로, 즉 블럭(410, 416, 420)으로 동시에 분할할 수 있다. 블럭(410)에서, 각각의 노드는 어드레스를 가지며 초청자(308)에 의해 밝혀진다 (2개 노드의 2개 어드레스는 그래프 내의 2개 노드 간의 에지를 형성함). 초청자(308)는 제1 노드를 제2 노드와의 통신에 초청하여, 매치의 가능성을 검사한다. 블럭(412)을 보자. 방법(400)은 그후 초청이 2개 노드의 어드레스를 포함하는 에지를 포함하는 블럭(414)으로 진행한다. 방법(400)은 그후 종료 터미널 B로 진행한다. 동시에, 블럭(416)에서, 초청자(308)는 제2 노드를 제1 노드와의 통신에 초청하고, 매치 가능성을 검사한다. 초청은 2개 노드의 2개 어드레스를 포함하는 에지를 포함한다. 블럭(418)을 보자. 방법(400)은 그후 종료 터미널 B로 진행한다. 동시에, 블럭(420)에서, 식별될 수 있는 노드가 더 있는지를 판정하기 위한 테스트가 행해진다. 결정 블럭(420)에서 테스트의 답이 예이면, 방법(400)은 상술된 처리 단계가 반복 되는 블럭(408)으로 루프백(loop back)한다. 한편, 결정 블럭(402)에서 테스트의 답이 아니오이면, 방법(400)은 식별될 수 있는 노드가 더 있을 때까지 루프한다. 종료 터미널 B에서부터, 방법(400)은 연속 터미널("터미널 C")과 종료 터미널("터미널 D") 간에 정의된 방법 단계(404)의 세트로 진행한다. 방법 단계의 세트(404)는 초청자(308)에 의해 식별된 노드들이 매치를 찾기 위해 서로 통신하는 프로세스를 설명한다.
터미널 C에서부터(도 4c), 방법(400)은 제1 노드가 초청자(308)가 송신한 에지(2개 노드의 2개 어드레스로 형성됨)를 포함하는 초청을 수신하는 블럭(422)으로 진행한다. 다음으로, 결정 블럭(424)에서, 제1 노드가 이미 또다른 노드와 매치했는지를 판정하기 위한 테스트가 행해진다. 결정 블럭(424)에서 테스트의 답이 예이면, 방법(400)은 실행을 종료하는 또다른 연속 터미널("터미널 F")로 진행한다. 결정 블럭(424)에서 테스트의 답이 아니오이면, 방법(400)은 제1 노드가 이미 에지를 알고 있는지를 판정하기 위한 테스트가 행해지는 또다른 결정 블럭(426)으로 들어간다. 결정 블럭(426)에서 테스트의 답이 예이면, 방법(400)은 실행을 종료하는 터미널 F로 진행한다. 한편, 결정 블럭(426)에서 테스트의 답이 아니오이면, 방법(400)은 또다른 연속 터미널("터미널 C1")로 진행한다.
터미널 C1에서부터(도 4d), 방법(400)은 방법(400)이 제1 노드의 이웃 어레이(neighbor's array)의 길이(다수의 에지 포함)를 획득하는 블럭(428)으로 진행한다. 어레이의 사용은 여기에 오직 예시적인 목적으로만 설명된다. 임의의 적절한 데이터 구조가 사용될 수 있으며, 본 발명은 어레이의 사용에 한정을 두지 않는다. 다음으로, 블럭(430)에서, 그 길이는 가변 색인에 할당된다. 에지(2개 노드의 2개 어드레스로 형성됨)는 이웃 어레이(가변 색인으로 어드레싱됨) 내의 한 위치에 저장된다. 블럭(432)을 보자. 방법(400)은 그후 그 에지가 이웃 어레이 내의 단 하나의 에지인지를 판정하기 위한 테스트가 행해지는 결정 블럭(434)으로 진행한다. 결정 블럭(434)에서 테스트의 답이 아니오이면, 방법(400)은 실행이 종료되는 터미널 F로 계속된다. 반면, 결정 블럭(434)에서 테스트의 답이 예이면, 방법(400)은 제1 노드가 제2 노드에 이용가능성 메시지를 송신하여 제2 노드의 통신 가능성을 판정하도록하는 블럭(436)으로 진행한다. 방법(400)은 그후 종료 터미널 D로 진행한다.
터미널 D에서부터(도 4A), 방법(400)은 연속 터미널("터미널 E")과 종료 터미널인 터미널 F 간에 정의된 방법 단계의 세트(406)로 진행한다. 방법 단계의 세트(406)는 매치된 노드가 서로간의 통신은 확실하게 하고 다른 노드는 거절하는 프로세스를 설명한다.
터미널 E에서부터(도 4E), 방법(400)은 제2 노드가 제1 노드가 송신한 이용가능성 메시지를 수신 및 처리하는 블럭(438)으로 진행한다. 다음으로, 결정 블럭(440)에서, 제2 노드가 이미 또다른 노드와 매치되어 있는 지를 판정하기 위한 테스트가 행해진다. 결정 블럭(440)에서 테스트의 답이 아니오이면, 방법(400)은 또다른 연속 블럭("터미널 E2")으로 들어간다. 반면, 결정 블럭(440)에서 테스트의 답이 예이면, 제2 노드는 제1 노드에게 아니오라고 답한다. 블럭(442)을 보자. 방법(400)은, 그후 제1 노드가 제2 노드가 초청 또는 이용가능성 메시지가 송신되 었던 노드인지가 확실한지를 체크하는 블럭(444)으로 진행한다. 방법(400)은 그후 또다른 연속 터미널("터미널 E1")로 들어간다.
터미널 E1에서부터(도 4F), 방법(400)은 이웃 어레이로부터 에지(2개 노드의 2개 주소로 형성됨)를 제거하는 블럭(446)으로 진행한다. 다음으로, 블럭(448)에서, 제1 노드는 또다른 노드에 이용가능성 메시지를 발행할 준비를 한다. 이웃 어레이 내에 에지가 있는지 판정하기 위한 테스트가 행해진다. 결정 블럭(450)을 보자. 결정 블럭(450)에서 테스트의 답이 아니오이면, 방법(400)은 종료 터미널 F로 진행하여 실행을 종료시킨다. 반면, 결정 블럭(450)에서 테스트의 답이 예이면, 방법(400)은 제1 노드가 매치를 찾기 위해 통신할 새로운 노드를 고르는 블럭(452)으로 진행한다. 방법(400)은 그후 상술된 처리 단계가 반복되는 터미널 E로 계속된다.
터미널 E2에서부터(도 4g), 방법(400)은 제2 노드의 이웃 어레이에 에지가 있는지를 판정하기 위한 테스트가 행해지는 결정 블럭(454)으로 진행한다. 결정 블럭(454)에서 테스트의 답이 아니오이면, 방법(400)은 또다른 연속 터미널("터미널 E3")로 진행한다. 한편, 결정 블럭(454)에서 테스트의 답이 예이면, 방법(400)은 이것이 이용가능성 메시지가 송신된 에지인지를 판정하기 위한 또다른 테스트가 행해지는 또다른 결정 블럭(456)으로 진행한다. 결정 블럭(456)에서 테스트의 답이 아니오이면, 방법(400)은 터미널 E3로 진행한다. 반면, 결정 블럭(456)에서 테스트의 답이 예이면, 방법(400)은 제2 노드가 제1 노드가 초청 또는 이용가능성 메시지가 송신된 노드임이 확실한지를 체크하는 블럭(458)으로 진행한다. 방법(400) 은 또다른 연속 터미널("터미널 E4")로 계속된다.
터미널 E4에서부터(도 4h), 방법(400)은 제2 노드가 나타내는 상태가 참으로 설정되어, 제2 노드가 제1 노드에 매치됨을 나타내는 블럭(460)으로 진행한다. 다음으로, 블럭(462)에서, 제2 노드의 이웃 어레이의 컨텐츠는 제2 노드가 매치된 때에, 클리어된다. 방법(400)은 그후 실행이 종료되는 터미널 F로 진행한다.
터미널 E3에서부터, 방법(400)은 제2 노드가 이미 에지를 알고 있는지를 판정하기 위한 테스트가 행해지는 결정 블럭(464)로 진행된다. 결정 블럭(464)에서 테스트의 답이 아니오이면, 방법(400)은 또다른 연속 터미널("터미널 E6")로 진행한다. 반면, 결정 블럭(464)에서 테스트의 답이 예이면, 방법(400)은 제2 노드의 이웃 어레이의 길이(다수의 에지를 포함)를 획득한다. 블럭(466)을 보자. 다음으로, 블럭(468)에서, 그 길이는 가변 색인에 할당된다. 방법(400)은 그후 또다른 연속 터미널("터미널 E5")로 계속된다.
터미널 E5에서부터(도 4j), 방법(400)은 에지(2개 노드의 2개 어드레스로 형성됨)가 이웃 어레이(가변 색인으로 어드레싱됨) 내의 위치에 저장되는 블럭(470)으로 진행한다. 다음으로, 결정 블럭(472)에서, 이웃 어레이에 오직 이 에지만이 있는지를 판정하기 위한 테스트가 행해진다. 결정 블럭(472)에서 테스트의 답이 아니오이면, 방법(400)은 터미널 E6로 진행한다. 반면, 결정 블럭(472)에서 테스트의 답이 예이면, 제2 노드는 제1 노드에 예라고 응답한다. 블럭(474)을 보자. 방법(400)은 그 후 제1 노드가 제2 노드가 초청 또는 가능성 메시지를 수신하는 노드임이 확실한 지를 체크하는 블럭(476)으로 계속된다. 다음으로, 블럭(478)에서, 제1 노드가 나타내는 상태는 참으로 설정되어, 제1 노드가 제2 노드에 매치됨을 나타내게 된다. 방법(400)은 그후 또다른 연속 터미널("터미널 E7")로 진행한다.
터미널 E7에서부터(도 4k), 방법(400)은 제1 노드가 매치된 때에 제1 노드의 이웃 어레이의 컨텐츠가 클리어되는 블럭(480)으로 진행한다. 다음으로, 블럭(482)에서, 제2 노드는 제1 노드가 초청 또는 이용가능성 메시지를 수신한 노드임이 확실한지를 체크한다. 제2 노드가 나타내는 상태는 제2 노드가 제1 노드가 매치함을 나타내는 참으로 설정된다. 블럭(484)을 보자. 제2 노드가 매치될 때에 제2 노드의 이웃 어레이의 컨텐츠가 클리어된다. 블럭(486)을 보자. 방법(400)은 그후 실행을 종료하는 종료 터미널("터미널 F")로 계속된다.
터미널 E6에서부터(도 4l), 방법(400)은 제2 노드가 제1 노드에 불확실 긍정을 답하는 블럭(488)으로 진행한다. 다음으로, 블럭(490)에서, 제1 노드는 제2 노드가 초청 또는 이용가능성 메시지를 수신한 노드가 확실한지를 체크한다. 방법(400)은 그후 또다른 연속 터미널("터미널 E8")로 계속된다.
터미널 E8에서부터(도 4m), 방법(400)은 제1 노드가 이용가능성 메시지를 또다른 노드에 발행할 준비를 하는 블럭(492)으로 진행한다. 다음으로, 결정 블럭(494)에서, 이웃 어레이 내에 에지가 있는지를 판정하기 위한 테스트가 행해진다. 결정 블럭(494)에서 테스트의 답이 아니오이면, 방법(400)은 종료 터미널 F로 진행하여, 실행을 종료한다. 반면, 결정 블럭(494)에서 테스트의 답이 예이면, 제1 노드는 매치를 찾기 위해 통신할 새로운 노드를 고른다. 블럭(496)을 보자. 방법(400)은 그후 상술된 처리 단계를 반복하는 터미널 E로 계속된다.
본 발명의 바람직한 실시예가 도시되고 설명됐지만, 본 발명의 취지 및 영역을 벋어나지 않는 다양한 변형들이 만들어질 수 있음을 인식해야 한다.