KR100911796B1 - 하드웨어 지원을 갖는 다중 프로세서 및 다중 스레드 안전메시지 큐 - Google Patents

하드웨어 지원을 갖는 다중 프로세서 및 다중 스레드 안전메시지 큐 Download PDF

Info

Publication number
KR100911796B1
KR100911796B1 KR1020070050527A KR20070050527A KR100911796B1 KR 100911796 B1 KR100911796 B1 KR 100911796B1 KR 1020070050527 A KR1020070050527 A KR 1020070050527A KR 20070050527 A KR20070050527 A KR 20070050527A KR 100911796 B1 KR100911796 B1 KR 100911796B1
Authority
KR
South Korea
Prior art keywords
message
software component
message queue
read
write
Prior art date
Application number
KR1020070050527A
Other languages
English (en)
Other versions
KR20070114020A (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 엔비디아 코포레이션
Publication of KR20070114020A publication Critical patent/KR20070114020A/ko
Application granted granted Critical
Publication of KR100911796B1 publication Critical patent/KR100911796B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations 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
    • G06F15/163Interprocessor communication
    • G06F15/167Interprocessor communication using a common memory, e.g. mailbox
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations 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
    • G06F15/163Interprocessor communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Multi Processors (AREA)

Abstract

상이한 프로세서들에서의 소프트웨어 컴포넌트들을 위한 메시지 교환 시스템이다 기입 레지스터를 메시지 포인터(또는 메시지 자체)에 의해 로드하기 위한 제1 컴포넌트의 시도는 공유 메모리 큐에 공간이 존재하는지의 여부에 대한 판정을 트리거한다. 그렇다면, 큐는, 메시지 카운터를 증가시키고, 메시지/포인터를 기입 포인터에 의해 지정되는 위치에서 큐에 기입하며, 기입 포인터를 다음 큐 위치로 변경하는 것에 의해 업데이트된다. 판독 레지스터로부터 메시지/포인터를 로드하기 위한 제2 컴포넌트의 시도는 큐에 하나 이상의 새로운 메시지가 존재하는지의 여부에 대한 판정을 트리거한다. 그렇다면, 큐는, 메시지 카운터를 감소시키고, 판독 포인터에 의해 지정되는 위치에서 큐로부터 메시지/포인터를 판독하며, 판독 포인터를 다음 큐 위치를 포인팅하도록 변경하는 것에 의해 업데이트된다. 판정들 및 큐 업데이트들은 소프트웨어 컴포넌트들과 관련하여 자동적으로 수행된다.
메시지 교환 시스템, 메시지 포인터, 공유 메모리, 메시지 큐, 메시지 카운터

Description

하드웨어 지원을 갖는 다중 프로세서 및 다중 스레드 안전 메시지 큐{MULTI PROCESSOR AND MULTI THREAD SAFE MESSAGE QUEUE WITH HARDWARE ASSISTANCE}
도 1a 내지 도 1c는 개략적인 블록도들이며, 도 1a(배경 기술)는 관심있는 범용 하드웨어(HW) 환경을 문체로 묘사하고, 도 1b 및 도 1c(종래 기술)는 종래 기술 방식들에서 필요한 통상적인 소프트웨어(SW) 연산들을 묘사한다.
도 2는 본 발명에 따른 하드웨어 지원 시스템의 실시예가 현대의 컴퓨터 시스템과 관련되는 방법을 묘사하는 개략적인 블록도.
도 3a 및 도 3b는 도 2의 발명의 하드웨어 지원 시스템의 실시예에 의해 사용되는 예시적 데이터 구조들을 설명하는 첨부표들.
도 4a 내지 도 4c는 도 2의 HW 태양의 초기화들을 묘사하는 흐름도들이며, 도 4a는 재설정 서브-루틴을 나타내고, 도 4b는 부트 서브-루틴을 나타내며, 도 4c는 초기화 서브-루틴을 나타낸다.
도 5a 내지 도 5c는 메시지를 도 2의 메시지 큐에 기입하기 위한 메시지 기입 서브-프로세스를 묘사하는 흐름도들.
도 6a 내지 도 6c는 도 2의 메시지 큐로부터 메시지를 판독하기 위한 메시지 판독 서브-프로세스를 묘사하는 흐름도들.
도 7은 메시지 큐가 채워진 이후에 판독에 의해 인터럽트가 야기되는 경우에 실행되는 RAF(read-after-full) ISR(interrupt service routine)을 묘사하는 흐름도.
도 8은 메시지 큐(18)가 공백인 동안 기입에 의해 인터럽트가 야기되는 경우에 실행되는 WAE(write-after-empty) ISR을 묘사하는 흐름도.
<도면의 주요 부분에 대한 부호의 설명>
10 : 하드웨어 지원 시스템
12 : 컴퓨터 시스템
14a : CPU
14b : COP
16 : 공유 메모리
18 : 메시지 큐
20 : 큐 관리 유닛
22 : SW 태양
24 : HW 태양
본 명세서는 일반적으로 전기적 컴퓨터들 및 디지털 프로세싱 시스템들에서의 프로그램간 또는 프로세스간 통신에 관한 것으로서, 좀더 구체적으로는, 공유 메모리를 사용하는 그러한 통신에 관한 것이다.
공유 메모리는 통상 다중 프로세서들이 메시지들을 교환할 때 이용된다. 다시 말해, (여기에서 "CPU"라고 하는) 제1 프로세서가 공유 메모리에 메시지를 기입함으로써, (여기에서 "COP"라고 하는) 제2 프로세서가 공유 메모리로부터 메시지를 판독할 수 있을 때에 이용된다. 이와 같이 교환되는 메시지들의 무결성(integrity)을 유지하는 것은, 메시지의 컨텐트에 대한 모든 업데이팅이 실행의 소프트웨어 스레드들과 관련하여 "자동적으로" 수행될 것을 요구한다.
다중 프로세서 안전 메시지 큐들은 통상적으로, 락들(locks) 및 비동기 시그널링에 의해서뿐만 아니라 그러한 공유 메모리를 사용하여 구현된다. 메시지들은 공유 메모리에 입력된 다음, 소정의 사전 대책들이 취해진 이후에만 판독 및 기입된다. 예를 들어, 메시지를 생성하는 판독기 또는 기입기 소프트웨어 스레드는 (일반적으로 "스핀락(spin lock)"을 사용해 구현되는) 다중 프로세서 안전 락을 획득할 것이다. 그리고, 필요하다면, (일반적으로 상호 배제 락(mutual exclusion lock) 또는 "뮤텍스(mutex)"라고 하는) 단일 프로세서 다중 스레드 안적 락도 획득할 것이다.
도 1a 내지 도 1c는 개략적인 블록도들이며, 도 1a는 관심있는 범용 하드웨어(HW) 환경을 문체로(stylistically) 묘사하고, 도 1b 및 도 1c는 종래 기술 방식들에서 필요한 통상적인 소프트웨어(SW) 연산들을 묘사한다.
일반적으로, 고려되어야 하는 몇가지 "코너 조건들(corner conditions)"도 존재한다. 예를 들어, 판독이 시도되지만 메시지 큐가 비어 있는 특수한 경우를 다루어야 하고, 기입이 시도되지만 메시지 큐가 가득 차 있는 특수한 경우도 다루 어야 한다. 비동기 시그널링(예를 들어, 비어 있는 메시지 큐로의 제1 기입 이후에 대기중인 판독기 스레드를 깨우기 위한 시그널링)이 통상적으로, 이러한 조건들을 다루는데 사용된다. 그러한 비동기 시그널링은 일반적으로, 다른 프로세서를 인터럽트한 다음, ISR(interrupt service routine)내에서, 차단된 스레드를 깨우기 위해 세마포어(semaphore)로써 시그널링하는 일 프로세서에 의해 구현된다.
불행스럽게도, 이러한 로킹(locking) 및 시그널링 메커니즘들 모두는 상당한 소프트웨어 설계 및 구현 노력과 상당한 런타임 오버헤드를 요구한다.
스핀락에 기초한 일례를 고려하기로 한다. CPU(제1 프로세서)에서 실행중인 제1 스레드가 스핀락을 획득하였고 CPU(제1 프로세서)상의 다른 스레드에 의해 선점된다면, COP(제2 프로세서)상의 제3 스레드는, 제1 스레드들이 다시 활성화된 다음 스핀락을 해제할 때까지 오랫동안 차단될 스핀락을 취하려 한다. 스핀락들은 일반적으로, 조건이 충족될 때까지 영원히 실행되는 루프내에서 폴링하는 것으로서 구현된다. 알 수 있는 바와 같이, 이 방식은 일시적인 우선 순위 반전을 초래할 수도 있는데, 이 경우, CPU상의 낮은 우선 순위 스레드가 CPU상의 무관한 더 높은 우선 순위 스레드에 의해 선점되는 소유권을 갖기 때문에, COP상의 매우 높은 우선 순위 태스크는 지연된다. 또한, 이 방식은 손쉽게, 상당한 대기 시간을 초래할 수도 있는데, 이 경우, COP는, 선호하는 폴링 결과를 대기하고 있는 동안, 사실상 쓸모가 없어진다.
소유권을 가진 것이 CPU상의 무관한 더 높은 우선 순위 스레드에 의해 선점 된다.
마찬가지로, 뮤텍스의 사용은 다른 오버헤드를 부여한다. 일부 오퍼레이팅 시스템들(OS들) 및 실시간 OS들(RTOS들)은, 그것이 보호중인 리소스가 이용가능한 경우라 하더라도, 뮤텍스를 획득하는데 상당한 시간이 걸린다.
따라서, 다중 프로세서들이 메시지들을 교환하기에 보다 효율적인 시스템이 여전히 필요하다. 이 시스템은 바람직스럽게도, 스핀락 및 상호 배제 락(뮤텍스)과 같은, 소프트웨어-기반 메카니즘들을 이용해야 하는 필요성을 제거할 것이다.
따라서, 여기에서는, 다중 프로세서들이 메시지들을 교환하기 위한 향상된 시스템을 제공하고자 한다.
간략하게, 본 발명의 바람직한 일 실시예는 제1 컴퓨터화된 프로세서에서 실행중인 제1 소프트웨어 컴포넌트가 제2 컴퓨터화된 프로세서에서 실행중인 제2 소프트웨어 컴포넌트에 의해 액세스가능한 공유 메모리에 메시지를 기입하는 방법이다. 제1 소프트웨어 컴포넌트에 의해 메시지로의 포인터(또는 메시지 그 자체)인 메시지 토큰에 의해 메시지 큐 기입 레지스터를 로드(load)하기 위한 시도가 이루어진다. 이에 의해 트리거되어, 공유 메모리의 메시지 큐에 메시지 토큰을 위한 공간이 존재하는지의 여부에 대한 판정이 이루어진다. 이 판정은 소프트웨어 컴포넌트들과 관련하여 자동적으로 수행된다. 공간이 이용가능하다면, 메시지 큐는, 메시지 카운터를 증가시키고, 상기 메시지 토큰을 기입 포인터에 의해 지정되는 위치에서 상기 메시지 큐로 기입하며, 상기 기입 포인터를 상기 메시지 큐에서의 다 음 위치를 포인팅하도록 변경하는 것에 의해, 소프트웨어 컴포넌트들과 관련하여 또한 자동적으로 업데이트된다.
간략하게, 본 발명의 바람직한 다른 실시예는 제2 컴퓨터화된 프로세서에서 실행중인 제2 소프트웨어 컴포넌트가 제1 컴퓨터화된 프로세서에서 실행중인 제1 소프트웨어 컴포넌트에 의해 액세스가능한 공유 메모리로부터 메시지를 판독하는 방법이다. 제2 소프트웨어 컴포넌트에 의해 메시지 큐 판독 레지스터로부터 메시지 토큰을 로드하기 위한 시도가 이루어지며, 상기 메시지 토큰은 공유 메모리의 메시지 큐에 저장되는 메시지에의 포인터(또는 메시지 자체)이다. 이에 의해 트리거되어, 상기 메시지 토큰이 새로운 것인지에 대한 판정이 이루어지며, 그것에 의해 공유 메모리의 메시지 큐에 하나 이상의 새로운 메시지가 존재하는지의 여부를 지시한다. 이 판정은 소프트웨어 컴포넌트들과 관련하여 자동적으로 수행된다. 새로운 메시지가 존재하면, 메시지 큐는, 메시지 카운터를 감소시키고, 판독 포인터에 의해 지정되는 위치에서 상기 메시지 큐로부터 상기 메시지 토큰을 판독하며, 상기 판독 포인터를 상기 메시지 큐의 다음 위치를 포인팅하도록 변경하는 것에 의해, 소프트웨어 컴포넌트들과 관련하여 또한 자동적으로 업데이트된다.
본 발명의 이점은, 소프트웨어 스핀락 및 상호 배제 락들을 전체적으로 제거하는, 하드웨어-기반으로 보호되는 자동 업데이트 메카니즘을 제공한다는 것이다.
본 발명의 다른 이점은, 본 발명을 이용하는 소프트웨어에서 다중 프로세서 메시지 교환의 구현을 상당히 용이하게 한다는 것이다.
본 발명의 또 다른 이점은, 다중 프로세서 메시지 교환과 연관된 런타임 오 버헤드를 상당히 낮춘다는 것이다.
본 발명의 특징들을 위한 이들 및 다른 이점들은, 본 명세서에서 설명되고 도면들에서 예시되는, 본 발명을 수행하는 현재 공지된 최선 모드에 대한 설명 및 바람직한 실시예들의 산업상 이용가능성의 관점에서 당업자들에게 명백할 것이다.
본 발명의 목적들 및 이점들은 첨부된 도면들과 관련한 다음의 상세한 설명으로부터 명백할 것이다.
다양한 도면들에서, 유사한 참조 번호들은 동등하거나 유사한 요소들 또는 단계들을 지시하는데 사용된다.
<실시예>
본 발명의 바람직한 실시예는 하드웨어 지원(hardware assistance)을 갖는 다중 프로세서 및 다중 스레드 안전 메시지 큐이다. 여기에서의 다양한 도면들에서 그리고, 특히, 도 2의 도면에서 예시되는 바와 같이, 발명의 바람직한 실시예들은 일반적인 참조 문자 10으로써 표현된다.
간단히 말해서, 본 발명자는, 다중-프로세서 메시징에 대한 종래 기술 접근 방법에서의 결함들이 프로세서들 및, 특히, 프로세서들이 메시지 교환에 사용하는 실제 하드웨어 리소스들, 즉, 공유 메모리 및 그것의 메시지 큐에 느슨하게 속박될 뿐인 프로세서들의 오퍼레이팅 시스템(OS) 또는 OS들에 기인한다는 것을 알 수 있었다. 반대로, 이로 인해, 발명자는, 전체 시스템의 좀더 최적화된 사용을 획득하기 위한 방법은 하드웨어 리소스들이 지원을 제공하게 하는 것이라는 것을 알 수 있었다.
도 1a를 간략하게 다시 참조하고 이제 도 2의 개략적인 블록도 또한 참조하면, 발명에 따른 하드웨어 지원 시스템(10)이 현대의 컴퓨터 시스템(12)과 관련되는 방법을 알 수 있다. 간략화를 위해, 여기에서의 예시적 컴퓨터 시스템(12)은 2개의 프로세서들(CPU(14a) 및 COP(14b)), 메시지 큐(18)를 포함하는 한 세트의 공유 메모리(16), 및 큐 관리 유닛(20)만을 포함한다. 일반적으로 그리고, 특히, 다음의 설명을 위해, 컴퓨터 시스템(12)은 소프트웨어 태양(일반적인 SW 태양(22)과 구체적으로, CPU(14a)를 위한 소프트웨어 컴포넌트(22a) 및 COP(14b)를 위한 소프트웨어 컴포넌트(22b)) 및 하드웨어 태양(HW 태양(24))을 갖는 것으로 볼 수 있다. SW 태양(22)은 OS들 및 실행의 소프트웨어 스레드들(SW 컴포넌트(22a) 및 SW 컴포넌트(22b))을 수반하는 프로세서들(14;CPU(14a) 및 COP(14b))을 포함한다. 범용 컴퓨팅 맥락에서는 다소 주의를 요하지만, 명백해질 여기에서의 이유들에 따라, 프로세서들(14;CPU(14a) 및 COP(14b))은 SW 태양(22)에 포함된다. 그에 비해, HW 태양(24)은 SW 태양(22)에 의해 프로세서들(14;CPU(14a) 및 COP(14b)) 사이에서 메시지들을 교환하는데 사용되는 하드웨어 리소스들(공유 메모리(16), 메시지 큐(18), 및 큐 관리 유닛(20))을 포함한다.
발명에 따른 하드웨어 지원 시스템(10)이 스핀락들, 뮤텍스들, 및 소프트웨어-기반 락 메카니즘들을 공유하는 다른 다중-프로세서 리소스의 사용을 제거할 수 있는 방법을 예시하기 위해, 이하에서는, 소프트웨어(SW)가 가상의 하드웨어(HW) 프로그래밍 레지스터들과 함께 동작하여 프로세서간 메시지 큐를 구현하는 이용 시나리오가 제시된다. 여기에서는 5가지의 주요 케이스들:
케이스 1: HW 태양(24)의 설정으로서, 특히,
(재설정시에만 1회가 수행되는) HW 태양(24)을 초기화하는 단계,
(부팅시에만 1회가 수행되는) SW 태양(22)이 HW 태양(24)을 컴퓨터 시스템(12)에 의해 사용될 수 있게 하는 단계, 및
(임의의 2개 재설정들 사이에서 여러번 수행되었을 수도 있는) SW 태양(22)이 런타임 동안의 사용을 위해 HW 태양(24)을 초기화하는 단계를 포함하는, HW 태양(24)의 설정;
케이스 2: 메시지 큐(18)에 메시지를 기입하는 SW 태양(22);
케이스 3: 메시지 큐(18)로부터 메시지를 판독하는 SW 태양(22);
케이스 4: (다음에서 설명되는) 소정 조건들이 충족될 때 실행되는 RAF(read-after-full) ISR(interrupt service routine); 및
케이스 5: (다음에서 설명되는) 소정 조건들이 충족될 때 실행되는 WAE(write-after-empty) ISR이 고려된다.
도 3a 내지 도 3c는 이제 논의될 발명에 따른 하드웨어 지원 시스템(10)의 실시예에 의해 사용되는 예시적 데이터 구조들을 설명하는 첨부표들이다. 이들 데이터 구조들은 일반적으로 양자의 프로세서들(14;CPU(14a) 및 COP(14b))에 의해 액세스 가능해야 하므로, 이들 데이터 구조들은 공유 메모리(16)로 구현될 수 있다. 여기에서의 많은 것은 자명하므로, 다수 요소들은 여기에서 부수적으로 논의될 것이다. 그러나, 여기에서의 일부 요소들은 다음에서 소개할 만한 가치가 있기도 하다.
모든 문맥 전환(context switch)시에 스케줄러에 의해 업데이트되는 프로세서 특정의 스레드 식별 레지스터들(CPU.ThreadID)이 존재해야 한다.
예외적 케이스들이 핸들링될 때의 시작점으로 SW 태양(22)이 복귀할 수 있도록 프로그램 카운터(IPMG.PC)를 일시적으로 보유하기 위한 레지스터가 존재해야 한다.
메시지 큐("IPMQ")를 위한 저장 공간의 시작 어드레스를 프로그램하기 위한 베이스 어드레스 레지스터(IPMQ.ADDR)가 존재해야 한다.
메시지 큐의 사이즈를 프로그램하기 위한 레지스터(IPMQ.SIZE)가 존재해야 한다.
메시지를 판독하는데 사용되는 레지스터(IPMQ.ACCESS.RD)가 존재해야 한다. 통상적으로, 이것은, 실제 메시지가 저장되는 위치로의 포인터를 포함하도록 구현될 것인데, 대부분의 경우, 메시지 사이즈는 포인터 사이즈보다 클 것이므로, 이 접근 방법이 좀더 효율적일 것이다.
메시지를 기입하는데 사용되는 레지스터(IPMQ.ACCESS.WR)가 존재해야 한다. 마찬가지로, 효율성을 위해, 이 또한 대개는, 실제 메시지가 아니라 포인터를 포함하도록 구현될 것이다.
일반적으로 양자의 프로세서들(14;CPU(14a) 및 COP(14b))에 의해 액세스가능한 공유 메모리(16)에, 메시지들 및/또는 메시지 포인터들이 저장되는 소정 공간이 존재해야 한다.
HW 태양(24)을 제어하기 위한 제어 레지스터(IPMQ.CONTROL)가 존재해야 한 다.
가득 찬 메시지 큐로의 기입을 시도할 때 점프가 발생하는 명령어 어드레스(즉, RAF ISR)를 보유하기 위한 레지스터(IPMQ.FULL.JMP)가 존재해야 한다.
공백인 메시지 큐로부터 판독을 시도할 때 점프가 발생하는 명령어 어드레스(즉, WAE ISR)을 보유하기 위한 레지스터(IPMQ.EMPTY.JMP)가 존재해야 한다.
메시지 큐(18)는 다수 방법들로 구현될 수 있지만, 여기에서는, 그것이 환형 버퍼(circular buffer)로서 구현된다고 가정한다. 또한, 여기에서는, HW 태양(24)이 메시지 카운터(IPMQ.NMSGS), 판독 포인터(IPMQ.RDPTR), 및 기입 포인터(IPMQ.WRPTR)를 내부적으로 관리한다고 가정한다. 더 나아가, 판독 및 기입 세마포어들을 위한 대기 리스트 또는 리스트들은 HW 태양(24)에 의해 제공되어야 한다.
도 4a 내지 도 4c는 HW 태양(24)의 초기화들(케이스 1)을 묘사하는 흐름도들이며, 도 4a는 재설정 서브-루틴(100;케이스 1.A)을 나타내고, 도 4b는 부트 서브-루틴(130;케이스 1.B)을 나타내며, 도 4c는 초기화 서브-루틴(160;케이스 1.C)을 나타낸다.
도 4a로 시작하면, 단계 102에서 재설정 서브-루틴(100)으로 진입된다(HW 태양(24)이 초기에 재설정되거나 시동되고 난 후에 메시지 큐(18)의 이러한 재설정이 발생한다는 것에 주의한다). 그 다음, 단계 104에서, HW 태양(24)은 내부 메시지 카운터(IPMQ.NMSGS)를 0으로 초기화한다. 그리고, 단계 106에서, 재설정 서브-루틴(100)은 종료된다. 이제, HW 태양(24)은 재설정된다.
다음으로 도 4b를 참조하면, 단계 132에서 부트 서브-루틴(130)으로 진입된다. 그 다음, 단계 134에서, SW 태양(22)은 제1 점프를 풀 핸들러 방법(FullHandler method)을 포인팅하는 명령어 레지스터(IPMQ.FULL.JMP)로 초기화한다. 마찬가지로, 단계 136에서, SW 태양(22)은 제2 점프를 엠티 핸들러 방법(EmptyHandler method)을 포인팅하는 명령어 레지스터(IPMQ.EMPTY.JMP)로 초기화한다. 그리고, 단계 138에서, 부트 서브-루틴(130)은 종료된다. 이제, HW 태양(24)은 초기화를 위해 준비된다.
그리고 도 4c를 참조하면, 단계 162에서 초기화 서브-루틴(160)으로 진입된다. 그 다음, 단계 164에서, SW 태양(22)은 공유 메모리(16)의 메시지 큐(18)에 대한 베이스 어드레스(IPMQ.ADDR)를 프로그램하고, 단계 166에서, SW 태양(22)은 메시지 큐(18)의 사이즈(IPMQ.SIZE)를 프로그램한다. 단계 168에서, SW 태양(22)은 판독 인터럽트들을 제어하기에 적합한 모드를 특정하고, 단계 170에서, SW 태양(22)은 기입 인터럽트들을 제어하기에 적합한 모드를 특정한다. 공백 메시지 큐(18)로부터의 제1 판독 이후에 판독을 위한 요청이 있었거나(즉, IPMQ.CONTROL.MCQ.1 = 1), 큐 공백 조건에 도달되고 판독을 위한 요청이 있은 후에 메시지 큐(18)의 절반이 처음으로 가득 찼을 때(즉, IPMQ.CONTROL.MCQ.1 = 0), "판독 준비(ready for read)" 인터럽트가 발생될 수 있다. 공백 메시지 큐(18)로의 제1 기입 이후에 기입을 위한 요청이 있었거나(즉, IPMQ.CONTROL.MCQ.0 = 1), 큐 충만 조건에 도달되고 기입을 위한 요청이 있은 후에 메시지 큐(18)의 절반이 처음으로 비워졌을 때(즉, IPMQ.CONTROL.MCQ.0 = 0), "기입 준비(ready for write)" 인 터럽트가 발생될 수 있다. 단계 172에서, SW 태양(22)은 제어 레지스터의 인에이블 비트(IPMQ.CONTROL.MCQ.31)를 설정한다. 이것이 설정되기 전에 HW 태양(24)이 사용된다면, 그것은 예외(예를 들어, 데이터 중단 예외)를 발생시킨다. 한편, SW 태양(22)이 베이스 어드레스를 프로그램한 결과로서(단계 164), 단계 174에서, HW 태양(24)은 메시지 큐(18)의 다음 판독 위치(IPMQ.RDPTR) 및 다음 기입 위치(IPMQ.WRPTR)을 계속해서 추적하는 그것의 내부 레지스터들을 초기화한다.
HW 태양(24)의 설정을 위한 케이스 1은 이제 완료된다.
도 5a 내지 도 5c는 메시지 큐(18)에 메시지를 기입하기 위한 메시지 기입 서브-프로세스(200;케이스 2)를 묘사하는 흐름도들이다. 간략하게, 메시지로의 포인터(또는 메시지 자체)를 메시지 큐 기입 레지스터로 로드하고자 하는 SW 태양(22)은, 메시지가 메시지 큐(18)로 기입되거나 SW 태양(22)에서의 실행 스레드가 차단 대기 조건(block wait condition)으로 되는 연산들의 체인을 시작한다.
단계 202에서, 메시지 기입 서브-프로세스(200)로 진입된다. 단계 204에서, SW 태양(22)은 메시지 포인터로써 메시지 큐 기입 레지스터(IPMQ.ACCESS.WR)를 로드하고자 한다. 단계 206에서, HW 태양(24)은, (다른 기술들이 사용될 수도 있지만, 여기에서는, IPMQ.NMSGS를 IPMQ.SIZE와 비교하여) 메시지 큐(18)에 공간이 존재하는지를 판정한다.
공간이 존재한다면, (도 5b에 상세하게 도시된) 섹션 208에서, HW 태양(24)은 메시지 큐(18)를 내부적으로 업데이트한다(단계 206 및 섹션 208 모두가 단일 프로세서(14;CPU(14a) 또는 COP(14b))를 제외한 SW 태양(22)과 관련하여 자동적이 다). 단계 210에서, HW 태양(24)은 메시지 카운터(IPMQ.NMSGS)를 증가시킨다. 단계 212에서, HW 태양(24)은 IPMQ.ACCESS.WR 레지스터에 기입된 값을 IPMQ.WRPTR 레지스터에 의해 포인팅되는 메모리로 복사한다. 단계 214에서, HW 태양(24)은 IPMQ.WRPTR을 한 단위만큼(예를 들어, 그것이 보통의 포인터 사이즈라면, 4 바이트만큼) 증가시킨다. 단계 216에서, HW 태양(24)은, IPMQ.WRPTR 값이 환형 버퍼의 메시지 큐(18)에서의 마지막 공간 이후의 한 단위를 포인팅하고 있는지를 판정한다. 그렇다면, 단계 218에서, HW 태양(24)은 포인터를 환형 버퍼의 시작(IPMQ.ADDR)으로 재설정한다. 그 다음, 그렇지 않다면, 단계 220에서, HW 태양(24)은 복귀한다(즉, 메시지를 기입하기 위한 메시지 기입 서브-프로세스(200)는 종료한다).
(단계 206에서 판정되는 바에 따라) 공간이 존재하지 않으면(메시지 카운터가 큐의 사이즈와 동일하면), 메시지 큐(18)는 가득 찬 상태이고, (도 5c에 상세하게 도시되어 있는) 섹션 222에서, HW 태양(24)은 이것을 핸들링할 것을 준비한다(단계 206 및 섹션 222 모두 역시 단일 프로세서(14;CPU(14a) 또는 COP(14b))를 제외한 SW 태양(22)과 관련하여 자동적이다). 단계 224에서, HW 태양(24)은 프로그램 카운터를 임시 공간(temporary space;IPMQ.PC)으로 복사하고, 단계 226에서, HW 태양(24)은 인터럽트들을 디스에이블하며, 단계 228에서, HW 태양(24)은 프로그램 카운터를 (IPMQ.FULL.JMP를 통해) 풀 핸들러 방법으로 설정한다.
집합적으로, 메시지 기입 서브-프로세스(200)내에서, 단계들(230-242)이 풀 핸들러 방법(244)을 구성한다.
단계 230에서, SW 태양(22)은 (현재의) 스레드 ID를 판독하고 임시 프로그램 카운터 레지스터(IPMQ.PC)의 로컬 사본(tempPC)을 형성한다. 단계 232에서, SW 태양(22)은 이 스레드와 연관된 기입 세마포어를 찾아내고, 단계 234에서, SW 태양(22)은 그 세마포어를 대기 리스트에 배치한다. [일부 OS들에서는, 단일 세마포어에 다수 대기자들이 존재할 수도 있다는 것에 주의한다. 그러한 경우를 위해, SW 구현자는, OS 자체가 대기 스레드 리스트를 내부적으로 유지할 것이므로, 모든 스레드들을 위해 동일한 세마포어를 사용할 것과 대기 스레드 리스트를 사용하지 않을 것을 선택할 수도 있다.]
단계 236에서, SW 태양(22)은 인터럽트들을 인에이블하고, 단계 238에서, SW 태양(22)은 세마포어를 통해 대기하는 것이 차단된다. 소정 시점에서, 다른 프로세서가 메시지 큐(18)로부터 메시지를 판독하는 경우(또는 큐의 메시지들 중 절반이 제어 레지스터 설정들에 의존하는 경우), 그것은 인터럽트를 발생시킬 것이고 그 인터럽트는 이 세마포어를 시그널링할 것이다(도 7 및 다음에서 제공되는 논의를 참고한다). 따라서, 단계 240에서, 세마포어가 시그널링되고 SW 태양(22)은 차단 해제된다. 단계 242에서, SW 태양(22)은 프로그램 카운터를 (IPMQ.PC에서의) 프로그램 카운터의 임시 보존된 사본으로 설정한다. 이것의 최종적인 결과는, SW 태양(22)이, 기입 메시지 레지스터에 메시지를 기입하면서, 그것이 시작된 위치에서 끝난다는 것이다. 그런데, 메시지 큐(18)가 공간을 가지고 있으므로, 이 시도는 성공적이어야 하다.
요약하자면, (1) SW 태양(22)은, (공간이 존재하고 메시지가 메시지 큐(18) 에 기입된다면) 단계 206 및 섹션 208이 SW 태양(22)과 관련하여 자동적이므로, 단계 204를 단계 220에 수반되는 것으로 "본다". 또는, (2) SW 태양(22)은, (공간이 존재하지 않았다면) 단계 206 및 섹션 222이 SW 태양(22)과 관련하여 자동적이므로, 단계 204를 단계들(230-242)에 수반되는 것으로 "본다". 메시지 큐(18)에 메시지를 기입하기 위한 케이스 2는 이제 완료된다.
도 6a 내지 도 6c는 메시지 큐(18)로부터 메시지를 판독하기 위한 메시지 판독 서브-프로세스(300;케이스 3)를 묘사하는 흐름도들이다. 간략하게, 메시지 큐 판독 레지스터로부터 메시지로의 포인터(또는 메시지 자체)를 로드할 것을 시도중인 SW 태양(22)은, 메시지가 메시지 큐(18)로부터 판독되거나 SW 태양(22)의 실행 스레드가 차단 대기 조건화되는 연산 체인을 시작한다.
단계 302에서, 메시지 판독 서브-프로세스(300)에 진입된다. 단계 304에서, SW 태양(22)은 메시지 큐 판독 레지스터(IPMQ.ACCESS.RD)로부터 메시지 포인터를 로드하려 한다. 단계 306에서, HW 태양(24)은, (여기에서는, IPMQ.NMSGS를 조사하는 것에 의해) 메시지 큐(18)에 미판독 메시지가 존재하는지를 판정한다.
메시지 큐(18)에 하나 이상의 메시지가 존재하면, (도 6b에 상세하게 도시되어 있는) 섹션 308에서, HW 태양(24)은 메시지 큐(18)를 내부적으로 업데이트한다(단계 306 및 섹션 308 모두가 단일 프로세서를 제외한 SW 태양(22)과 관련하여 자동적이다). 단계 310에서, HW 태양(24)은 메시지 카운터(IPMQ.NMSGS)를 감소시킨다. 단계 312에서, HW 태양(24)은 IPMQ.RDPTR 레지스터에 의해 포인팅되는 메모리의 값을 판독 명령어에 의해 특정되는 범용 레지스터로 복사한다. 단계 314에서, HW 태양(24)은 IPMQ.RDPTR을 1 단위만큼(그것이 보통의 포인터 사이즈라면, 4 바이트만큼) 증가시킨다. 단계 316에서, HW 태양(24)은, IPMQ.RDPTR 값이 환형 버퍼의 메시지 큐(18)에서의 마지막 공간 이후의 1 단위를 포인팅중인지의 여부를 판정한다. 그렇다면, 단계 318에서, HW 태양(24)은 포인터를 환형 버퍼의 시작으로 재설정한다. 다음으로, 그렇지 않다면, 단계 320에서, HW 태양(24)은 복귀한다(즉, 메시지를 판독하기 위한 메시지 판독 서브-프로세스(300)는 종료한다).
메시지 카운터가 0이면(단계 306), 메시지 큐(18)는 공백이고, (도 6c에 상세하게 도시되어 있는) 섹션 322에서, HW 태양(24)은 이것을 핸들링할 것을 준비한다(단계 306 및 섹션 322 모두 역시, 단일 프로세서(14)를 제외한 SW 태양(22)과 관련하여 자동적이다). 단계 324에서, HW 태양(24)은 프로그램 카운터를 임시 공간(IPMQ.PC)으로 복사하고, 단계 326에서, HW 태양(24)은 인터럽트들을 디스에이블하며, 단계 328에서, HW 태양(24)은 프로그램 카운터를 (IPMQ.EMPTY.JMP를 통해) 엠티 핸들러 방법으로 설정한다.
집합적으로, 메시지 판독 서브-프로세스(300)내에서, 단계들(330-342)이 엠티 핸들러 방법(344)을 구성한다.
단계 330에서, SW 태양(22)은 (현재의) 스레드 ID를 판독하고 임시 프로그램 카운터 레지스터(IPMQ.PC)의 로컬 사본(tempPC)을 형성한다. 단계 332에서, SW 태양(22)은 이 스레드와 연관된 판독 세마포어를 찾아내고, 단계 334에서, SW 태양(22)은 그 세마포어를 대기 리스트에 배치한다. [일부 OS들에서는, 단일 세마포어에 다수 대기자들이 존재할 수도 있다는 것에 주의한다. 그러한 경우를 위해, SW 구현자는, OS 자체가 대기 스레드 리스트를 내부적으로 유지할 것이므로, 모든 스레드들을 위해 동일한 세마포어를 사용할 것과 대기 스레드 리스트를 사용하지 않을 것을 선택할 수도 있다.]
단계 336에서, SW 태양(22)은 인터럽트들을 인에이블하고, 단계 338에서, SW 태양(22)은 세마포어를 통해 대기하는 것이 차단된다. 소정 시점에서, 다른 프로세서가 메시지 큐(18)에 메시지를 기입하면(또는, 제어 레지스터 설정들에 따라, 메시지 큐(18)의 절반을 채우면), 그것은 인터럽트를 발생시킬 것이고 그 인터럽트는 이 세마포어를 시그널링할 것이다(도 8 및 다음에서 제공되는 논의를 참고한다). 따라서, 단계 340에서, 세마포어가 시그널링되고 SW 태양(22)은 차단 해제된다. 단계 342에서, SW 태양(22)은 프로그램 카운터를 (IPMQ.PC에서의) 프로그램 카운터의 임시 보존된 사본으로 설정한다. 이것의 최종적인 결과는, SW 태양(22)이, 판독 메시지 레지스터로부터 메시지를 판독하면서, 그것이 시작된 위치에서 끝난다는 것이다. 그런데, 메시지 큐(18)는 메시지를 가지고 있으므로, 이 시도는 성공적일 것이다.
요약하자면, (1) SW 태양(22)은, (메시지 큐(18)에 하나 이상의 메시지가 존재한다면) 단계 306 및 섹션 308이 SW 태양(22)과 관련하여 자동적이므로, 단계 304를 단계 320에 수반되는 것으로 "본다". 또는, (2) SW 태양(22)은, (메시지들이 존재하지 않았다면) 단계 306 및 섹션 322이 SW 태양(22)과 관련하여 자동적이므로, 단계 304를 단계들(330-342)에 수반되는 것으로 "본다". 메시지 큐(18)로부터 메시지를 판독하기 위한 케이스 3은 이제 완료된다.
도 7은, 메시지 큐(18)가 가득 찬 후 판독에 의해 인터럽트가 발생되는 경우에 실행되는 RAF(read-after-full) ISR(400)을 묘사하는 흐름도이다. 간략하게, 하나의 프로세서(예를 들어, COP(14b))가 메시지 큐(18)로부터 판독할 때, 다른 프로세서(CPU(14a))에 대해 기입 연산이 발생하는 것을 가능하게 하기 위해, 그 프로세서(CPU(14a))에 대한 인터럽트가 발생한다. 이것이 발생하기 위해서, 메시지 큐(18)는 가득 차야 하고, 메시지 큐(18)에 메시지를 기입하기 위한 요청이 존재해야 한다. (이 실시예의 프로그램 가능한) 제어 레지스터에서의 설정에 따라, 이것은 상기 조건들이 충족된 이후의 제1 판독 이후나 메시지 큐(18)의 공간 절반이 공백일 정도로 충분한 메시지들이 판독된 이후에 발생할 수 있다. [다른 방법으로, 얼마나 많은 판독들 이후에 이러한 인터럽트가 발생해야 하는지를 특정하는 다른 레지스터가 존재할 수도 있다. 발명에 따른 하드웨어 지원 시스템(10)의 실시예들이 단일 판독 또는 절반이 채워진 조건으로 제한되어야 할 이유는 없다. 절반이 채워진 조건은 단지 일례일 뿐이고, 다른 레지스터의 정확한 다른 수를 사용할 수도 있다.]
단계 402에서 RAF ISR(400)에 진입되고, SW 태양(22)은 다음의 단계들을 수행한다. 단계 404에서, SW 태양(22)은, (다른 기술들이 사용될 수도 있지만, 여기에서는, IPMQ.CONTROL.MCQ.0 비트를 점검하여) 제1 판독 이후에 또는 메시지 큐(18)의 절반이 비워진 이후에 인터럽트가 발생했는지의 여부를 판정한다.
하나의 메시지 이후라면, 단계 406에서, SW 태양(22)은 대기 스레드 리스트의 상단에서의 세마포어를 시그널링하고, 단계 408에서, SW 태양(22)은 대기 스레 드 리스트로부터 상단 요소를 파핑(popping)(제거)한다. [모든 스레드들이 동일한 세마포어를 사용한다면, OS 구현에 따라, 대기 스레드 리스트는 존재하지 않을 것이고 단 하나의 스레드만이 차단 해제될 것이다.] 그리고, 단계 410에서, SW 태양(22)은 복귀한다(즉, RAF ISR(400)은 완료된다).
(단계 404에서 판정되는 바에 따라) 메시지 큐(18)의 절반이 비워진 이후에 인터럽트가 발생했다면, 단계 412에서, SW 태양(22)은 대기 스레드 리스트의 세마포어들 모두를 시그널링하고, 단계 414에서, SW 태양(22)은 대기 스레드 리스트를 소거한다. [모든 스레드들이 동일한 세마포어를 사용한다면, 대기 리스트는 존재하지 않을 것이다. 그 다음, SW 태양(22)은 세마포어에 대해 상이한 방법을 사용해 모든 대기자들에게 통지해야 하거나, 다른 방법으로, SW 태양(22)은 대기자들의 수를 계속해서 추적할 수 있고, 동일한 세마포어를 그 수만큼 시그널링할 수 있으며 그 값을 재설정할 수 있다.] 여기에서도, 단계 410에서, SW 태양(22)은 복귀한다.
이제, RAF ISR(400)을 위한 케이스 4는 완료된다.
도 8은, 메시지 큐(18)가 공백인 동안 기입에 의해 인터럽트가 발생되는 경우에 실행되는 WAE(write-after-empty) ISR(500)을 묘사하는 흐름도이다. 간략하게, 하나의 프로세서(예를 들어, COP(14b))가 메시지 큐(18)에 기입할 때, 다른 프로세서(CPU(14a))에 대해 판독 연산이 발생하는 것을 가능하게 하기 위해, 그 프로세서(CPU(14a))에 대한 인터럽트가 발생한다. 이것이 발생하기 위해서, 메시지 큐(18)는 공백이어야 하고, 메시지 큐(18)로부터 메시지를 판독하기 위한 요청이 존재해야 한다. (이 실시예의 프로그램 가능한) 제어 레지스터에서의 설정에 따라, 이것은 상기 조건들이 충족된 이후의 제1 기입 이후나 메시지 큐(18)의 공간 절반이 가득 찰 정도로 충분한 메시지들이 기입된 이후에 발생할 수 있다. [여기에서도, 다른 방법으로, 얼마나 많은 기입들 이후에 이러한 인터럽트가 발생해야 하는지를 특정하는 다른 레지스터가 존재할 수도 있다. 발명에 따른 하드웨어 지원 시스템(10)의 실시예들이 단일 기입 또는 절반이 채워진 조건으로 제한되어야 할 이유는 없다. 절반이 채워진 조건은 단지 일례일 뿐이고, 다른 레지스터의 정확한 다른 수를 사용할 수도 있다.]
단계 502에서 WAE ISR(500)에 진입되고, SW 태양(22)은 다음의 단계들을 수행한다. 단계 504에서, SW 태양(22)은, (다른 기술들이 사용될 수도 있지만, 여기에서는, IPMQ.CONTROL.MCQ.1 비트를 점검하여) 제1 기입 이후에 아니면 메시지 큐(18)의 절반이 채워진 이후에 인터럽트가 발생했는지의 여부를 판정한다.
하나의 메시지 이후라면, 단계 506에서, SW 태양(22)은 대기 스레드 리스트의 상단에서의 세마포어를 시그널링하고, 단계 508에서, SW 태양(22)은 대기 스레드 리스트로부터 상단 요소를 파핑(제거)한다. [모든 스레드들이 동일한 세마포어를 사용한다면, OS 구현에 따라, 대기 스레드 리스트는 존재하지 않을 것이고 단 하나의 스레드만이 차단 해제될 것이다.] 그리고, 단계 510에서, SW 태양(22)은 복귀한다(즉, WAE ISR(500)은 완료된다).
(단계 504에서 판정되는 바에 따라) 메시지 큐(18)의 절반이 채워진 이후에 인터럽트가 발생했다면, 단계 512에서, SW 태양(22)은 대기 스레드 리스트의 세마 포어들 모두를 시그널링하고, 단계 514에서, SW 태양(22)은 대기 스레드 리스트를 소거한다. [모든 스레드들이 동일한 세마포어를 사용한다면, 대기 리스트는 존재하지 않을 것이다. 그 다음, SW 태양(22)은 세마포어에 대해 상이한 방법을 사용해 모든 대기자들에게 통지해야 하거나, 다른 방법으로, SW 태양(22)은 대기자들의 수를 계속해서 추적할 수 있고, 동일한 세마포어를 그 수만큼 시그널링할 수 있으며 그 값을 재설정할 수 있다.] 여기에서도, 단계 510에서, SW 태양(22)은 복귀한다.
이제, WAE ISR(500)을 위한 케이스 5는 완료된다.
간단한 요약들로서, 이 기재는 다음을 개시하였다.
개념 1. 제1 컴퓨터화된 프로세서에서 실행중인 제1 소프트웨어 컴포넌트가 제2 컴퓨터화된 프로세서에서 실행중인 제2 소프트웨어 컴포넌트에 의해 액세스가능한 공유 메모리에 메시지를 기입하기 위한 방법으로서,
제1 소프트웨어 컴포넌트에 의해, 메시지로의 포인터이거나 메시지 자체인 메시지 토큰을 메시지 큐 기입 레지스터로 로드하고자 시도하는 단계;
공유 메모리의 메시지 큐에 메시지 토큰을 위한 공간이 존재하는지의 여부를 판정하는 단계로서, 상기 판정하는 단계는 상기 시도하는 단계가 일어난 것에 의해 트리거되고 소프트웨어 컴포넌트들과 관련하여 자동적으로 수행되는, 단계; 및
상기 판정하는 단계가 상기 공간이 이용가능하다고 지시하면, 상기 메시지 큐를 업데이트하는 단계로서, 상기 업데이트하는 단계 또한 소프트웨어 컴포넌트들과 관련하여 자동적으로 수행되고,
메시지 카운터를 증가시키는 단계;
상기 메시지 토큰을 기입 포인터에 의해 지정되는 위치에서 상기 메시지 큐로 기입하는 단계; 및
상기 기입 포인터를 상기 메시지 큐의 다음 위치를 포인팅하도록 변경하는 단계를 포함하는, 단계를 포함하는 방법.
개념 2. 제1 개념에 있어서,
그렇지 않고, 상기 판정하는 단계가 상기 공간이 이용 불가능하다고 지시하면,
상기 메시지 큐에서의 변경을 보류하며 제1 소프트웨어 컴포넌트를 대기시키는 단계; 및
상기 시도하는 단계로 루핑(looping)하는 단계를 더 포함하는 방법.
개념 3. 제2 개념에 있어서,
제1 컴퓨터화된 프로세서는 프로그램 카운터를 갖고,
이 방법은, 상기 대기시키는 단계 이전에,
프로그램 카운터의 임시 사본을 보존하는 단계;
제1 컴퓨터화된 프로세서의 인터럽트들을 디스에이블하는 단계; 및
프로그램 카운터를 풀 핸들러 서브-방법으로 설정하는 단계에 의해, 제1 소프트웨어 컴포넌트가 자동적으로 대기 조건으로 되도록 준비하는 단계를 더 포함하며,
상기 판정하는 단계는 상기 풀 핸들러 서브-방법을 포함하고,
상기 임시 사본의 로컬 사본을 보존하는 단계;
제1 소프트웨어 컴포넌트와 연관된 기입 세마포어를 대기 리스트에 배치하는 단계;
제1 컴퓨터화된 프로세서의 인터럽트들을 인에이블하는 단계;
상기 기입 세마포어가 시그널링될 때까지, 제1 소프트웨어 컴포넌트를 차단하는 단계; 및
제1 컴퓨터화된 프로세서의 프로그램 카운터를 다시 상기 로컬 사본으로 설정하는 것에 의해, 상기 시도하는 단계로 복귀하는 단계를 포함하는 방법.
개념 4. 제1 개념에 있어서,
상기 업데이트하는 단계 이후에, 상기 제2 컴퓨터화된 프로세서에서의 판독 연산을 가능하게 하기 위해, 상기 제2 컴퓨터화된 프로세서에서 실행중인 상기 제2 소프트웨어 컴포넌트를 인터럽트하는 단계를 더 포함하는 방법.
개념 5. 제4 개념에 있어서, 상기 인터럽트하는 단계는,
대기 리스트의 최상단에 위치하는 판독 세마포어를 시그널링하는 단계;
상기 대기 리스트로부터, 최상단에 위치하는 상기 판독 세마포어를 제거하는 단계; 및
상기 제2 컴퓨터화된 프로세서의 제어를 상기 제2 소프트웨어 컴포넌트로 복귀시키는 단계를 포함하는 방법.
개념 6. 제4 개념에 있어서, 상기 인터럽트하는 단계는,
판독 세마포어들의 미리 설정된 양이 대기 리스트에 존재하는지의 여부를 판 정하는 단계로서, 그렇다면,
상기 대기 리스트의 상기 판독 세마포어들 모두를 시그널링하고,
상기 대기 리스트로부터 상기 판독 세마포어들 모두를 제거하는, 단계; 및
상기 제2 컴퓨터화된 프로세서의 제어를 상기 제2 소프트웨어 컴포넌트로 복귀시키는 단계를 포함하는 방법.
개념 7. 제2 컴퓨터화된 프로세서에서 실행중인 제2 소프트웨어 컴포넌트가 제1 컴퓨터화된 프로세서에서 실행중인 제1 소프트웨어 컴포넌트에 의해 액세스가능한 공유 메모리로부터 메시지를 판독하기 위한 방법으로서,
제2 소프트웨어 컴포넌트로써 메시지 큐 판독 레지스터로부터 메시지 토큰을 로드하고자 시도하는 단계로서, 상기 메시지 토큰은 상기 공유 메모리의 메시지 큐에 저장되는 메시지로의 포인터이거나 메시지 자체인, 단계;
그것에 의해 메시지 큐에 하나 이상의 새로운 메시지가 존재하는지의 여부를 지시하는, 상기 메시지 토큰이 새로운 것인지의 여부를 판정하는 단계로서, 상기 판정하는 단계는 상기 시도하는 단계가 일어난 것에 의해 트리거되고 소프트웨어 컴포넌트들과 관련하여 자동적으로 수행되는, 단계; 및
상기 판정하는 단계가 메시지가 새로운 것이라고 지시하면, 상기 메시지 큐를 업데이트하는 단계로서, 상기 업데이트하는 단계 또한 소프트웨어 컴포넌트들과 관련하여 자동적으로 수행되고,
메시지 카운터를 감소시키는 단계;
상기 메시지 큐로부터, 판독 포인터에 의해 지정되는 위치에서 상기 메시지 토큰을 판독하는 단계; 및
상기 판독 포인터를 상기 메시지 큐의 다음 위치를 포인팅하도록 변경하는 단계를 포함하는, 단계를 포함하는 방법.
개념 8. 제7 개념에 있어서,
그렇지 않고, 상기 판정하는 단계가 상기 새로운 메시지가 존재하지 않는다고 지시하면,
상기 메시지 큐에서의 변경을 보류하며 제2 소프트웨어 컴포넌트를 대기시키는 단계; 및
상기 시도하는 단계로 루핑하는 단계를 더 포함하는 방법.
개념 9. 제8 개념에 있어서,
제2 컴퓨터화된 프로세서는 프로그램 카운터를 갖고,
이 방법은, 상기 대기시키는 단계 이전에,
프로그램 카운터의 임시 사본을 보존하는 단계;
제2 컴퓨터화된 프로세서의 인터럽트들을 디스에이블하는 단계; 및
프로그램 카운터를 엠티 핸들러 서브-방법으로 설정하는 단계에 의해, 제2 소프트웨어 컴포넌트가 자동적으로 대기 조건으로 되도록 준비하는 단계를 더 포함하며,
상기 그렇지 않고, 상기 판정하는 단계가 상기 새로운 메시지가 존재하지 않는다고 지시하면, 상기 판정하는 단계는 상기 엠티 핸들러 서브-방법을 포함하고,
상기 임시 사본의 로컬 사본을 보존하는 단계;
제2 소프트웨어 컴포넌트와 연관된 판독 세마포어를 대기 리스트에 배치하는 단계;
제2 컴퓨터화된 프로세서의 인터럽트들을 인에이블하는 단계;
상기 판독 세마포어가 시그널링될 때까지, 제2 소프트웨어 컴포넌트를 차단하는 단계; 및
제2 컴퓨터화된 프로세서의 프로그램 카운터를 다시 상기 로컬 사본으로 설정하는 것에 의해, 상기 시도하는 단계로 복귀하는 단계를 포함하는 방법.
개념 10. 제7 개념에 있어서,
상기 업데이트하는 단계 이후에, 상기 제1 컴퓨터화된 프로세서에서의 기입 연산을 가능하게 하기 위해, 상기 제1 컴퓨터화된 프로세서에서 실행중인 상기 제1 소프트웨어 컴포넌트를 인터럽트하는 단계를 더 포함하는 방법.
개념 11. 제10 개념에 있어서, 상기 인터럽트하는 단계는,
대기 리스트의 최상단에 위치하는 기입 세마포어를 시그널링하는 단계;
상기 대기 리스트로부터, 최상단에 위치하는 상기 기입 세마포어를 제거하는 단계; 및
상기 제1 컴퓨터화된 프로세서의 제어를 상기 제1 소프트웨어 컴포넌트로 복귀시키는 단계를 포함하는 방법.
개념 12. 제10 개념에 있어서, 상기 인터럽트하는 단계는,
상기 기입 세마포어들의 미리 설정된 양이 대기 리스트에 존재하는지의 여부 를 판정하는 단계로서, 그렇다면,
상기 대기 리스트의 상기 기입 세마포어들 모두를 시그널링하고,
상기 대기 리스트로부터 상기 기입 세마포어들 모두를 제거하는, 단계; 및
상기 제1 컴퓨터화된 프로세서의 제어를 상기 제1 소프트웨어 컴포넌트로 복귀시키는 단계를 포함하는 방법.
개념 13. 공유 메모리로의 액세스를 가진 제1 컴퓨터화된 프로세서에서 실행중인 제1 소프트웨어 컴포넌트와 공유 메모리로의 액세스를 가진 제2 컴퓨터화된 프로세서에서 실행중인 제2 소프트웨어 컴포넌트 사이에서 메시지들을 교환하기 위한 방법으로서,
제1 소프트웨어 컴포넌트로써, 메시지로의 포인터이거나 메시지 자체인 메시지 토큰을 메시지 큐 기입 레지스터로 로드하고자 시도하는 단계;
공유 메모리의 메시지 큐에 메시지 토큰을 위한 공간이 존재하는지의 여부를 판정하는 단계로서, 상기 판정하는 단계는 상기 시도하는 단계가 일어난 것에 의해 트리거되고 소프트웨어 컴포넌트들과 관련하여 자동적으로 수행되는, 단계; 및
상기 판정하는 단계가 상기 공간이 이용가능하다고 지시하면, 상기 메시지 큐를 업데이트하는 단계로서, 상기 업데이트하는 단계 또한 소프트웨어 컴포넌트들과 관련하여 자동적으로 수행되고,
메시지 카운터를 증가시키는 단계;
상기 메시지 토큰을 기입 포인터에 의해 지정되는 위치에서 상기 메시 지 큐로 기입하는 단계; 및
상기 기입 포인터를 상기 메시지 큐의 다음 위치를 포인팅하도록 변경하는 단계를 포함하는, 단계;
제2 소프트웨어 컴포넌트로써 메시지 큐 판독 레지스터로부터 상기 메시지 토큰을 로드하고자 시도하는 단계;
그것에 의해 메시지 큐에 하나 이상의 새로운 메시지가 존재하는지의 여부를 지시하는, 상기 메시지 토큰이 새로운 것인지의 여부를 판정하는 단계로서, 상기 판정하는 단계는 상기 시도하는 단계가 일어난 것에 의해 트리거되고 소프트웨어 컴포넌트들과 관련하여 자동적으로 수행되는, 단계; 및
상기 메시지 토큰이 새로운 것인지의 여부를 판정하는 상기 단계가 메시지가 새로운 것이라고 지시하면, 상기 메시지 큐를 업데이트하는 단계로서, 상기 업데이트하는 단계 또한 소프트웨어 컴포넌트들과 관련하여 자동적으로 수행되고,
상기 메시지 카운터를 감소시키는 단계;
상기 메시지 큐로부터, 판독 포인터에 의해 지정되는 위치에서 상기 메시지 토큰을 판독하는 단계; 및
상기 판독 포인터를 상기 메시지 큐의 다음 위치를 포인팅하도록 변경하는 단계를 포함하는, 단계를 포함하는 방법.
개념 14. 제1 컴퓨터화된 프로세서에서 실행중인 제1 소프트웨어 컴포넌트가 제2 컴퓨터화된 프로세서에서 실행중인 제2 소프트웨어 컴포넌트에 의해 액세스가능한 공유 메모리에 메시지를 기입하기 위한 시스템으로서,
제1 소프트웨어 컴포넌트가 메시지로의 포인터이거나 메시지 자체인 메시지 토큰으로써 메시지 큐 기입 레지스터를 로드하고자 시도하기 위한 로드 수단; 및
메시지 큐 관리 유닛으로서,
소프트웨어 컴포넌트들과 관련하여 자동적으로, 공유 메모리의 메시지 큐에 메시지 토큰을 위한 공간이 존재하는지의 여부를 판정하기 위한 판정 수단; 및
상기 소프트웨어 컴포넌트들과 관련하여 자동적으로 상기 메시지 큐를 업데이트를 하기 위한, 상기 판정 수단에 응답하는 업데이팅 수단으로서,
메시지 카운터를 증가시키기 위한 수단;
상기 메시지 토큰을 기입 포인터에 의해 지정되는 위치에서 상기 메시지 큐로 기입하기 위한 수단; 및
상기 기입 포인터를 상기 메시지 큐의 다음 위치를 포인팅하도록 변경하기 위한 수단을 포함하는, 업데이팅 수단을 포함하는, 메시지 큐 관리 유닛을 포함하는 시스템.
개념 15. 제14 개념에 있어서,
상기 판정 수단에 응답하여, 상기 메시지 큐에서의 변경을 보류하며 제1 소프트웨어 컴포넌트를 대기한 다음 제1 소프트웨어 컴포넌트를 상기 로드 수단으로 복귀시키기 위한 비가용성 수단(unavailability means)을 더 포함하는 시스템.
개념 16. 제15 개념에 있어서,
제1 컴퓨터화된 프로세서는 프로그램 카운터를 갖고,
이 시스템은,
풀 핸들러 로직; 및
제1 소프트웨어 컴포넌트가 자동적으로 대기 조건으로 되도록 준비하기 위한 수단을 더 포함하고,
상기 준비하기 위한 수단은,
프로그램 카운터의 임시 사본을 보존하기 위한 수단;
제1 컴퓨터화된 프로세서의 인터럽트들을 디스에이블하기 위한 수단; 및
프로그램 카운터를 상기 풀 핸들러 로직에서 실행되도록 설정하기 위한 수단을 포함하며,
상기 풀 핸들러 로직은,
상기 임시 사본의 로컬 사본을 보존하기 위한 수단;
제1 소프트웨어 컴포넌트와 연관된 기입 세마포어를 대기 리스트에 배치하기 위한 수단;
제1 컴퓨터화된 프로세서의 인터럽트들을 인에이블하기 위한 수단;
상기 기입 세마포어가 시그널링될 때까지, 제1 소프트웨어 컴포넌트를 차단하기 위한 수단; 및
제1 컴퓨터화된 프로세서의 프로그램 카운터를 다시 상기 로컬 사본으로 설정하기 위한 수단을 포함하는 시스템.
개념 17. 제2 컴퓨터화된 프로세서에서 실행중인 제2 소프트웨어 컴포넌트가 제1 컴퓨터화된 프로세서에서 실행중인 제1 소프트웨어 컴포넌트에 의해 액세스가능한 공유 메모리로부터 메시지를 판독하기 위한 시스템으로서,
제2 소프트웨어 컴포넌트가 메시지 큐 판독 레지스터로부터 메시지 토큰을 로드하고자 시도하기 위한 로드 수단으로서, 상기 메시지 토큰은 상기 공유 메모리의 메시지 큐에 저장되는 메시지로의 포인터이거나 메시지 자체인, 수단; 및
메시지 큐 관리 유닛으로서,
소프트웨어 컴포넌트들과 관련하여 자동적으로, 상기 메시지 토큰이 새로운 것인지의 여부를 판정하기 위한 수단; 및
소프트웨어 컴포넌트들과 관련하여 자동적으로 상기 메시지 큐를 업데이트하기 위한, 상기 판정 수단에 응답하는 업데이팅 수단으로서,
메시지 카운터를 감소시키기 위한 수단;
상기 메시지 큐로부터, 판독 포인터에 의해 지정되는 위치에서 상기 메시지 토큰을 판독하기 위한 수단; 및
상기 판독 포인터를 상기 메시지 큐의 다음 위치를 포인팅하도록 변경하기 위한 수단을 포함하는, 업데이팅 수단을 포함하는, 메시지 큐 관리 유닛을 포함하는 시스템.
개념 18. 제17 개념에 있어서,
상기 판정 수단에 응답하여, 상기 메시지 큐에서의 변경을 보류하며 제2 소프트웨어 컴포넌트를 대기한 다음 제1 소프트웨어 컴포넌트를 상기 로드 수단으로 복귀시키기 위한 새로운 메시지 수단을 더 포함하는 시스템.
개념 19. 제18 개념에 있어서,
제2 컴퓨터화된 프로세서는 프로그램 카운터를 갖고,
이 시스템은,
엠티 핸들러 로직; 및
제2 소프트웨어 컴포넌트가 자동적으로 대기 조건으로 되도록 준비하기 위한 수단을 더 포함하고,
상기 준비하기 위한 수단은,
프로그램 카운터의 임시 사본을 보존하기 위한 수단;
제2 컴퓨터화된 프로세서의 인터럽트들을 디스에이블하기 위한 수단; 및
프로그램 카운터를 상기 엠티 핸들러 로직에서 실행되도록 설정하기 위한 수단을 포함하며,
상기 엠티 핸들러 로직은,
상기 임시 사본의 로컬 사본을 보존하기 위한 수단;
제2 소프트웨어 컴포넌트와 연관된 판독 세마포어를 대기 리스트에 배치하기 위한 수단;
제2 컴퓨터화된 프로세서의 인터럽트들을 인에이블하기 위한 수단;
상기 판독 세마포어가 시그널링될 때까지, 제2 소프트웨어 컴포넌트를 차단하기 위한 수단; 및
제2 컴퓨터화된 프로세서의 프로그램 카운터를 다시 상기 로컬 사본으로 설정하기 위한 수단을 포함하는 시스템.
다양한 실시예들이 상술되었지만, 그것들은 단지 일례로서 제시되었다는 것과 발명의 폭과 범위가 상술된 예시적 실시예들 중 어떤 것에 의해 제한되어서는 안되는 대신, 다음의 청구항들 및 청구항들의 등가물들에 따라서만 정의되어야 한다는 것을 이해할 수 있어야 한다.
본 발명에 따르면, 소프트웨어 스핀락 및 상호 배제 락들을 전체적으로 제거하는, 하드웨어-기반으로 보호되는 자동 업데이트 메카니즘을 제공한다는 것이다.
또한, 본 발명을 이용하는 소프트웨어에서 다중 프로세서 메시지 교환의 구현을 상당히 용이하게 한다는 것이다.
또한, 다중 프로세서 메시지 교환과 연관된 런타임 오버헤드를 상당히 낮춘다는 것이다.

Claims (12)

  1. 제1 컴퓨터화된 프로세서에서 실행중인 제1 소프트웨어 컴포넌트가 제2 컴퓨터화된 프로세서에서 실행중인 제2 소프트웨어 컴포넌트에 의해 액세스가능한 공유 메모리에 메시지를 기입하기 위한 방법으로서,
    상기 제1 소프트웨어 컴포넌트에 의해, 상기 메시지에의 포인터이거나 또는 상기 메시지 자체인 메시지 토큰을 메시지 큐 기입 레지스터에 로드하도록 시도하는 단계;
    상기 공유 메모리의 메시지 큐에 상기 메시지 토큰을 위한 공간이 존재하는지의 여부를 판정하는 단계 - 상기 판정하는 단계는 상기 시도하는 단계가 일어난 것에 의해 트리거되고 상기 제1 소프트웨어 컴포넌트 및 상기 제2 소프트웨어 컴포넌트와 관련하여 자동적으로 수행됨 - ; 및
    상기 판정하는 단계가 상기 공간이 이용가능하다고 지시하면, 상기 메시지 큐를 업데이트하는 단계
    를 포함하며,
    상기 업데이트하는 단계는 또한 상기 제1 소프트웨어 컴포넌트 및 상기 제2 소프트웨어 컴포넌트와 관련하여 자동적으로 수행되고,
    상기 업데이트하는 단계는,
    메시지 카운터를 증가시키는 단계;
    상기 메시지 토큰을 기입 포인터에 의해 지정되는 위치에서 상기 메시지 큐에 기입하는 단계; 및
    상기 기입 포인터가 상기 메시지 큐의 다음 위치를 포인팅하도록 변경하는 단계를 포함하는 방법.
  2. 제1항에 있어서,
    상기 판정하는 단계가 상기 공간이 이용불가능하다고 지시하면,
    상기 메시지 큐에서의 변경을 보류하며 상기 제1 소프트웨어 컴포넌트를 대기시키는 단계; 및
    상기 시도하는 단계로 루핑하는 단계를 더 포함하는 방법.
  3. 제2항에 있어서,
    상기 제1 컴퓨터화된 프로세서는 프로그램 카운터를 갖고,
    상기 방법은,
    상기 대기시키는 단계 이전에,
    상기 프로그램 카운터의 임시 사본을 보존하는 단계;
    상기 제1 컴퓨터화된 프로세서에 인터럽트들을 디스에이블하는 단계; 및
    상기 프로그램 카운터를 풀-핸들러 서브-방법(full-handler sub-method)으로 설정하는 단계에 의해 상기 제1 소프트웨어 컴포넌트가 자동적으로 대기 조건으로 되도록 준비하는 단계를 더 포함하고,
    상기 판정하는 단계는 상기 풀-핸들러 서브-방법을 포함하고, 그리고
    상기 임시 사본의 로컬 사본을 보존하는 단계;
    상기 제1 소프트웨어 컴포넌트와 연관된 기입 세마포어(semaphore)를 대기 리스트에 배치하는 단계;
    상기 제1 컴퓨터화된 프로세서에 인터럽트들을 인에이블하는 단계;
    상기 기입 세마포어가 시그널링될 때까지, 상기 제1 소프트웨어 컴포넌트를 차단하는 단계; 및
    상기 제1 컴퓨터화된 프로세서의 상기 프로그램 카운터를 상기 로컬 사본으로 다시 설정함으로써, 상기 시도하는 단계로 복귀시키는 단계를 포함하는 방법.
  4. 제1항에 있어서,
    상기 업데이트하는 단계 이후에, 상기 제2 컴퓨터화된 프로세서에서의 판독 연산을 가능하게 하기 위해, 상기 제2 컴퓨터화된 프로세서에서 실행중인 상기 제2 소프트웨어 컴포넌트를 인터럽트하는 단계를 더 포함하는 방법.
  5. 제4항에 있어서,
    상기 인터럽트하는 단계는,
    대기 리스트의 최상단에 위치하는 판독 세마포어를 시그널링하는 단계;
    상기 대기 리스트로부터, 최상단에 위치하는 상기 판독 세마포어를 제거하는 단계; 및
    상기 제2 컴퓨터화된 프로세서의 제어를 상기 제2 소프트웨어 컴포넌트로 복귀시키는 단계를 포함하는 방법.
  6. 제4항에 있어서,
    상기 인터럽트하는 단계는,
    판독 세마포어들의 미리 설정된 양이 대기 리스트에 존재하는지의 여부를 판정하는 단계 - 판독 세머포어들의 미리 설정된 양이 상기 대기 리스트에 존재한다면,
    상기 대기 리스트의 상기 판독 세마포어들 모두를 시그널링하는 단계, 및
    상기 대기 리스트로부터 상기 판독 세마포어들 모두를 제거하는 단계를 포함함 - ; 및
    상기 제2 컴퓨터화된 프로세서의 제어를 상기 제2 소프트웨어 컴포넌트로 복귀시키는 단계를 포함하는 방법.
  7. 제2 컴퓨터화된 프로세서에서 실행중인 제2 소프트웨어 컴포넌트가 제1 컴퓨터화된 프로세서에서 실행중인 제1 소프트웨어 컴포넌트에 의해 액세스가능한 공유 메모리로부터 메시지를 판독하기 위한 방법으로서,
    상기 제2 소프트웨어 컴포넌트에 의해, 메시지 큐 판독 레지스터로부터 메시지 토큰을 로드하고자 시도하는 단계 - 상기 메시지 토큰은 상기 공유 메모리의 메시지 큐에 저장되는 상기 메시지 자체이거나 또는 상기 메시지에의 포인터임 - ;
    상기 메시지 토큰이 새로운 것인지의 여부를 판정하는 단계 - 상기 판정하는 단계에 의해 상기 메시지 큐에 하나 이상의 새로운 메시지가 존재하는지의 여부를 지시하고, 상기 판정하는 단계는 상기 시도하는 단계가 일어난 것에 의해 트리거되고 상기 제1 소프트웨어 컴포넌트 및 상기 제2 소프트웨어 컴포넌트와 관련하여 자동적으로 수행됨 - ; 및
    상기 판정하는 단계가 상기 메시지가 새로운 것이라고 지시하면, 상기 메시지 큐를 업데이트하는 단계
    를 포함하며,
    상기 업데이트하는 단계는 또한 상기 제1 소프트웨어 컴포넌트 및 상기 제2 소프트웨어 컴포넌트와 관련하여 자동적으로 수행되고,
    상기 업데이트하는 단계는,
    메시지 카운터를 감소시키는 단계;
    판독 포인터에 의해 지정되는 위치에서 상기 메시지 큐로부터 상기 메시지 토큰을 판독하는 단계; 및
    상기 판독 포인터를 상기 메시지 큐에서의 다음 위치를 포인팅하도록 변경하는 단계를 포함하는 방법.
  8. 제7항에 있어서,
    상기 판정하는 단계가 상기 새로운 메시지가 존재하지 않는다고 지시하면,
    상기 메시지 큐에서의 변경을 보류하며 상기 제2 소프트웨어 컴포넌트를 대기시키는 단계; 및
    상기 시도하는 단계로 루핑하는 단계를 더 포함하는 방법.
  9. 제8항에 있어서,
    상기 제2 컴퓨터화된 프로세서는 프로그램 카운터를 갖고,
    상기 방법은,
    상기 대기시키는 단계 이전에,
    상기 프로그램 카운터의 임시 사본을 보존하는 단계;
    상기 제2 컴퓨터화된 프로세서에 인터럽트들을 디스에이블하는 단계; 및
    상기 프로그램 카운터를 엠티-핸들러 서브-방법(empty-handler sub-method)으로 설정하는 단계에 의해 상기 제2 소프트웨어 컴포넌트가 자동적으로 대기 조건으로 되도록 준비하는 단계를 더 포함하고,
    상기 판정하는 단계가 상기 새로운 메시지가 존재하지 않는다고 지시하면,
    상기 판정하는 단계는 상기 엠티-핸들러 서브-방법을 포함하고, 그리고
    상기 임시 사본의 로컬 사본을 보존하는 단계;
    상기 제2 소프트웨어 컴포넌트와 연관된 판독 세마포어를 대기 리스트에 배치하는 단계;
    상기 제2 컴퓨터화된 프로세서에 인터럽트들을 인에이블하는 단계;
    상기 판독 세마포어가 시그널링될 때까지, 상기 제2 소프트웨어 컴포넌트를 차단하는 단계; 및
    상기 제2 컴퓨터화된 프로세서에서의 상기 프로그램 카운터를 상기 로컬 사본으로 다시 설정함으로써, 상기 시도하는 단계로 복귀시키는 단계를 포함하는 방법.
  10. 제7항에 있어서,
    상기 업데이트하는 단계 이후에, 상기 제1 컴퓨터화된 프로세서에서의 기입 연산을 가능하게 하기 위해, 상기 제1 컴퓨터화된 프로세서에서 실행중인 상기 제1 소프트웨어 컴포넌트를 인터럽트하는 단계를 더 포함하는 방법.
  11. 제10항에 있어서,
    상기 인터럽트하는 단계는,
    대기 리스트에서의 최상단에 위치하는 기입 세마포어를 시그널링하는 단계;
    상기 대기 리스트로부터, 최상단에 위치하는 상기 기입 세마포어를 제거하는 단계; 및
    상기 제1 컴퓨터화된 프로세서의 제어를 상기 제1 소프트웨어 컴포넌트로 복귀시키는 단계를 포함하는 방법.
  12. 제10항에 있어서,
    상기 인터럽트하는 단계는,
    기입 세마포어들의 미리 설정된 양이 대기 리스트에 존재하는지의 여부를 판정하는 단계 - 상기 기입 세마포어들의 미리 설정된 양이 상기 대기 리스트에 존재한다면,
    상기 대기 리스트의 상기 기입 세마포어들 모두를 시그널링하는 단계; 및
    상기 대기 리스트로부터 상기 기입 세마포어들 모두를 제거하는 단계를 포함함 - ; 및
    상기 제1 컴퓨터화된 프로세서의 제어를 상기 제1 소프트웨어 컴포넌트로 복귀시키는 단계를 포함하는 방법.
KR1020070050527A 2006-05-25 2007-05-23 하드웨어 지원을 갖는 다중 프로세서 및 다중 스레드 안전메시지 큐 KR100911796B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/420,394 US9274859B2 (en) 2006-05-25 2006-05-25 Multi processor and multi thread safe message queue with hardware assistance
US11/420,394 2006-05-25

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020090009723A Division KR100976280B1 (ko) 2006-05-25 2009-02-06 하드웨어 지원을 갖는 다중 프로세서 및 다중 스레드 안전 메시지 큐

Publications (2)

Publication Number Publication Date
KR20070114020A KR20070114020A (ko) 2007-11-29
KR100911796B1 true KR100911796B1 (ko) 2009-08-12

Family

ID=38823431

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020070050527A KR100911796B1 (ko) 2006-05-25 2007-05-23 하드웨어 지원을 갖는 다중 프로세서 및 다중 스레드 안전메시지 큐
KR1020090009723A KR100976280B1 (ko) 2006-05-25 2009-02-06 하드웨어 지원을 갖는 다중 프로세서 및 다중 스레드 안전 메시지 큐

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020090009723A KR100976280B1 (ko) 2006-05-25 2009-02-06 하드웨어 지원을 갖는 다중 프로세서 및 다중 스레드 안전 메시지 큐

Country Status (4)

Country Link
US (1) US9274859B2 (ko)
KR (2) KR100911796B1 (ko)
CN (1) CN101114235B (ko)
TW (1) TWI366793B (ko)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8726279B2 (en) * 2006-05-06 2014-05-13 Nvidia Corporation System for multi threaded multi processor sharing of asynchronous hardware units
US8458724B2 (en) 2007-06-15 2013-06-04 Microsoft Corporation Automatic mutual exclusion
CN101286947B (zh) * 2008-05-30 2010-12-01 杭州华三通信技术有限公司 数据输出控制方法和装置
US8555292B2 (en) * 2008-06-27 2013-10-08 Microsoft Corporation Synchronizing communication over shared memory
JP5338435B2 (ja) * 2009-03-31 2013-11-13 富士通株式会社 情報処理プログラム、情報処理装置および情報処理方法
US9811385B2 (en) * 2010-04-28 2017-11-07 Wind River Systems, Inc. Optimizing task management
CN101872296B (zh) * 2010-06-18 2014-12-10 中兴通讯股份有限公司 实现大容量群发短信的装置及方法
KR20120061593A (ko) * 2010-12-03 2012-06-13 삼성전자주식회사 스레드 동기화 장치 및 방법
US9195524B1 (en) * 2010-12-20 2015-11-24 Marvell International Ltd. Hardware support for performance analysis
US10216553B2 (en) 2011-06-30 2019-02-26 International Business Machines Corporation Message oriented middleware with integrated rules engine
CN102693159B (zh) * 2012-05-09 2015-07-01 上海晨思电子科技有限公司 基于用户模式多任务下控制硬件设备的方法及其装置
GB2499277B (en) * 2012-08-30 2014-04-02 Imagination Tech Ltd Global register protection in a multi-threaded processor
GB2512086A (en) * 2013-03-20 2014-09-24 Ibm Transaction capable queuing
US8924596B1 (en) * 2013-12-06 2014-12-30 Concurrent Ventures, LLC System and method for dividing and synchronizing a processing task across multiple processing elements/processors in hardware
US20160043982A1 (en) * 2014-08-11 2016-02-11 Facebook, Inc. Techniques for a sequential message reader for message syncing
CN111158936B (zh) * 2017-06-15 2024-04-09 北京忆芯科技有限公司 队列交换信息的方法及系统
GB2567465B (en) * 2017-10-12 2020-09-02 Advanced Risc Mach Ltd Message passing in a data processing system
CN111858095B (zh) * 2020-07-17 2022-06-10 山东云海国创云计算装备产业创新中心有限公司 一种硬件队列多线程共享方法、装置、设备及存储介质
US11782635B2 (en) 2021-11-12 2023-10-10 Western Digital Technologies, Inc. Method to ensure message arrival before a message pointer
CN117407356B (zh) * 2023-12-14 2024-04-16 芯原科技(上海)有限公司 基于共享内存的核间通信方法、装置、存储介质及终端

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR19980070449A (ko) * 1997-01-10 1998-10-26 김영환 입력/출력 서브-프로세서와의 비동기 인터페이스를 통한 입력/출력 성능 개선 방법
KR19990079649A (ko) * 1998-04-08 1999-11-05 김영환 두 프로세서 간 공유 메모리 통신시 데이터 처리방법

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4956771A (en) * 1988-05-24 1990-09-11 Prime Computer, Inc. Method for inter-processor data transfer
DE3850881T2 (de) * 1988-10-28 1995-03-09 Ibm Verfahren und Vorrichtung zur Nachrichtenübertragung zwischen Quellen- und Zielanwender durch einen anteilig genutzten Speicher.
US5925099A (en) * 1995-06-15 1999-07-20 Intel Corporation Method and apparatus for transporting messages between processors in a multiple processor system
US5999969A (en) * 1997-03-26 1999-12-07 Unisys Corporation Interrupt handling system for message transfers in network having mixed hardware and software emulated modules
US6842811B2 (en) * 2000-02-24 2005-01-11 Pts Corporation Methods and apparatus for scalable array processor interrupt detection and response
US6799317B1 (en) * 2000-06-27 2004-09-28 International Business Machines Corporation Interrupt mechanism for shared memory message passing
US6594736B1 (en) * 2000-08-15 2003-07-15 Src Computers, Inc. System and method for semaphore and atomic operation management in a multiprocessor
US20020091826A1 (en) * 2000-10-13 2002-07-11 Guillaume Comeau Method and apparatus for interprocessor communication and peripheral sharing
US7210022B2 (en) * 2001-05-15 2007-04-24 Cloudshield Technologies, Inc. Apparatus and method for interconnecting a processor to co-processors using a shared memory as the communication interface
US6912198B2 (en) * 2003-03-26 2005-06-28 Sony Corporation Performance of data transmission using adaptive technique
US7114042B2 (en) 2003-05-22 2006-09-26 International Business Machines Corporation Method to provide atomic update primitives in an asymmetric heterogeneous multiprocessor environment
US20060143415A1 (en) * 2004-12-29 2006-06-29 Uday Naik Managing shared memory access

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR19980070449A (ko) * 1997-01-10 1998-10-26 김영환 입력/출력 서브-프로세서와의 비동기 인터페이스를 통한 입력/출력 성능 개선 방법
KR19990079649A (ko) * 1998-04-08 1999-11-05 김영환 두 프로세서 간 공유 메모리 통신시 데이터 처리방법

Also Published As

Publication number Publication date
TW200807302A (en) 2008-02-01
US9274859B2 (en) 2016-03-01
KR100976280B1 (ko) 2010-08-16
US20070288931A1 (en) 2007-12-13
TWI366793B (en) 2012-06-21
KR20070114020A (ko) 2007-11-29
CN101114235A (zh) 2008-01-30
CN101114235B (zh) 2011-12-07
KR20090021208A (ko) 2009-02-27

Similar Documents

Publication Publication Date Title
KR100911796B1 (ko) 하드웨어 지원을 갖는 다중 프로세서 및 다중 스레드 안전메시지 큐
US7734881B2 (en) Adapting RCU for real-time operating system usage
US9069605B2 (en) Mechanism to schedule threads on OS-sequestered sequencers without operating system intervention
US7594234B1 (en) Adaptive spin-then-block mutual exclusion in multi-threaded processing
EP1735705B1 (en) Improvements in or relating to an operating system for a computing device
JP5415069B2 (ja) スレッドレベルの投機実行を拡張するためのプリミティブ
US5274823A (en) Interrupt handling serialization for process level programming
EP0887730B1 (en) Method for providing exclusive access to a resource in a multiprocessor computer system
US6687903B1 (en) Inhibiting starvation in a multitasking operating system
EP1693743A2 (en) System, method and medium for using and/or providing operating system information to acquire a hybrid user/operating system lock
US20220035664A1 (en) Reverse restartable sequences for lock polling scalability
Takada et al. A novel approach to multiprogrammed multiprocessor synchronization for real-time kernels
JP3598282B2 (ja) コンピュータ、その制御方法及びその制御方法を記録した記録媒体
US7996848B1 (en) Systems and methods for suspending and resuming threads
EP4300292A1 (en) Synchronizing concurrent tasks using interrupt deferral instructions
US7305508B2 (en) Semaphoring system between system firmware and hardware manipulation subsystem
Slide et al. processes?
Urbanik Processes and Threads What are processes?
Khanna et al. 10.0 Biographies

Legal Events

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

Payment date: 20120727

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20130723

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20140722

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20160801

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20180801

Year of fee payment: 10