KR20120062768A - 멀티-코어 아키텍처들을 위한 사용자-레벨 인터럽트 메커니즘 - Google Patents

멀티-코어 아키텍처들을 위한 사용자-레벨 인터럽트 메커니즘 Download PDF

Info

Publication number
KR20120062768A
KR20120062768A KR1020127006465A KR20127006465A KR20120062768A KR 20120062768 A KR20120062768 A KR 20120062768A KR 1020127006465 A KR1020127006465 A KR 1020127006465A KR 20127006465 A KR20127006465 A KR 20127006465A KR 20120062768 A KR20120062768 A KR 20120062768A
Authority
KR
South Korea
Prior art keywords
interrupt
user
level
mailbox
level interrupt
Prior art date
Application number
KR1020127006465A
Other languages
English (en)
Other versions
KR101651246B1 (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 KR20120062768A publication Critical patent/KR20120062768A/ko
Application granted granted Critical
Publication of KR101651246B1 publication Critical patent/KR101651246B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt
    • G06F13/26Handling requests for interconnection or transfer for access to input/output bus using interrupt with priority control
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4022Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • G06F9/4818Priority circuits therefor
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/02Details
    • H04L12/16Arrangements for providing special services to substations
    • H04L12/18Arrangements for providing special services to substations for broadcast or conference, e.g. multicast
    • H04L12/1881Arrangements for providing special services to substations for broadcast or conference, e.g. multicast with schedule organisation, e.g. priority, sequence management

Landscapes

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

Abstract

본 발명의 방법은, 멀티-코어 시스템 내의 복수의 프로세서 코어들 중 제 1 프로세서 코어에 대해, 상기 제 1 프로세서 코어 상에서 실행되고 있는 어플리케이션 스레드(application thread)의 인터럽트 도메인(interrupt domain) 및 상기 제 1 프로세서 코어 상에서 실행되고 있는 상기 어플리케이션 스레드의 수신자 식별자(recipient identifier)가 사용자-레벨 인터럽트 메시지(user-level interrupt message) 내의 해당하는 필드들과 일치할 때, 상기 사용자-레벨 인터럽트 메시지에 의해 지시되는 사용자-레벨 인터럽트를 수락(accept)하는 것을 포함한다.

Description

멀티-코어 아키텍처들을 위한 사용자-레벨 인터럽트 메커니즘{USER-LEVEL INTERRUPT MECHANISM FOR MULTI-CORE ARCHITECTURES}
본 발명은 멀티-프로세서 시스템들에 관한 것으로서, 특히 멀티-프로세서 시스템들에서의 인터럽트 처리에 관한 것이다.
일반적으로, 인터럽트(예를 들어, 예외)는 현재 실행중인 명령어 흐름으로부터 다른 명령어 흐름으로 명령어 실행을 변경하는 이벤트이다. 인터럽트는 일반적으로 프로세서나, 또는 프로세서에 연결된 디바이스에 의해 생성된다. 전형적인 인터럽트 처리 메커니즘은 인터럽트된 프로세서의 프로그램 제어 흐름을 인터럽트 핸들러(예를 들어, 인터럽트 서비스 루틴)로 변경하는 것이다. 도 1을 참조하면, 예시적인 멀티-프로세서 시스템(예를 들어, 시스템 (100))은 다수의 어플리케이션 스레드들(application threads)을 동시에 실행시키도록 구성된 적어도 2개의 프로세서 코어들(즉, 중앙 처리 장치들, 코어들, 또는 하드웨어 가속기들)을 포함한다. 예시적인 인터럽트 전달 메커니즘(예를 들어, x86 아키텍처의 인터럽트 전달 메커니즘)은 시스템 내의 각 코어에 대한 인터럽트 컨트롤러(예를 들어, 로컬 APIC(Advanced Programmable Interrupt Controller))를 포함한다. 또한, 시스템 내의 각 주변장치 버스에 대한 인터럽트 컨트롤러(예를 들어, I/O APIC)도 여기에 포함될 수 있다. APIC 간의 통신에는 전용 버스나 시스템 버스(예를 들어, 크로스바(crossbar)(116))가 사용되기도 한다.
일반적으로, 로컬 APIC는 해당하는 코어나 CPU에 대한 외부 인터럽트를 관리한다. 로컬 APIC는 프로세서간 인터럽트(IPI: Inter-Processor Interrupt) 메시지를 수용하고 생성할 수 있다. 전형적인 IPI들은, 멀티-프로세서 시스템의 첫 번째 코어가 다른 코어에 병렬 태스크를 오프로드(offload)할 때에 일어난다. 전형적인 로컬 APIC는 인터럽트 우선순위 및 각각의 인터럽트 서비스 루틴들에 해당하는 최대 224개의 사용가능한 인터럽트 벡터들을 지원한다. 관련된 코어나 CPU에 의한 인터럽트 처리를 위해, 예비로 32개의 또 다른 벡터를 가지고 있다.
도 1 및 2를 참조하면, 프로세서간 인터럽트가, 해당하는 로컬 APIC(예를 들어, 로컬 APIC(106))에서 코어(예를 들어, 코어(102))에 의해 생성되어, 인터럽트 제어 레지스터(ICR: Interrupt Control Register)에 기록된다(202). ICR은 목적지 식별자, 전달 모드, 인터럽트 벡터, 및 기타 적합한 정보를 위한 필드들을 포함한다. 로컬 APIC(106)는 인터럽트 메시지를 생성하고, 크로스바(116)를 이용하여 온칩 네트워크를 통해 메시지를 전달한다(204). 인터럽트 메시지를 전달받은 로컬 APIC(예를 들어, 로컬 APIC(108))는, 관련된 코어(예를 들어, 코어(104))의 상태 및 수신하는 로컬 APIC 자신의 상태(예를 들어, 전달 모드 및 목적지 식별자)에 기초하여, 인터럽트를 받아들일 것인지를 결정한다. 예를 들어, 만약 로컬 APIC(108)가 전달 모드에 따라 목적지 ID와 일치하는 식별자, 물리 ID, 또는 논리 ID를 가지고 있다면, 로컬 APIC(108)는 인터럽트 메시지를 받아들이고, 인터럽트 메시지로부터 인터럽트 벡터 번호를 읽고, 그에 해당하는 비트를 인터럽트 요청 레지스터(IRR: Interrupt Request Register)에 설정한다. 로컬 APIC(108)는 인터럽트 메시지를 발생시켰던 로컬 APIC(106)에게 ACK(승인) 메시지를 전송하여, 로컬 APIC 108에 의한 인터럽트 메시지의 수락을 확인한다(206).
인터럽트 메시지로부터 로컬 APIC(108)에 의해 읽혀진 인터럽트 벡터 번호는 인터럽트의 우선순위를 나타내며, 보류 중인(pending) 다른 인터럽트의 우선순위 및 현재 실행되고 있는 1개 이상의 스레드의 우선순위와 비교된다. 인터럽트의 우선순위가 가장 높다면, 그에 해당하는 비트가 ISR(In-Service Register)에 설정되고, 인터럽트가 코어(104)로 전달된다. 로컬 APIC(108)의 논리는 코어(104)로 메시지를 전송한다(208). 메시지를 수신하면, 코어(104)는 인터럽트를 검출하고, 현재 실행 중인 어플리케이션 스레드의 명령어 경계에서, 코어가 인터럽트 서비스 루틴을 실행시킨다. 인터럽트 서비스 루틴은 인터럽트 디스크립터 테이블 레지스터(IDTR: Interrupt Descriptor Table Register)의 콘텐츠를 바탕으로 인터럽트 디스크립터 테이블(IDT: Interrupt Descriptor Table)에 액세스하여, 인터럽트 벡터에 해당하는 인터럽트 핸들러의 코드 세그먼트 셀렉터(code segment selector)와 오프셋, 및 특권 모드를 획득한다. 인터럽트 핸들러의 엔트리 포인트가 세그먼트 셀렉터를 바탕으로 결정되고, 오프셋 프로그램 제어가 인터럽트 핸들러로 이전(transfer)되면, 코어(104)는 인터럽트 핸들러에 지정된 동작들을 실행시킴으로써 인터럽트를 처리한다(212). 제어는 인터럽트 핸들러에 지정된 동작들의 결과들에 따라, 인터럽트 핸들러로부터, 기존에 수행되던 어플리케이션 스레드로 돌아갈 수도 있다(214).
도 1 및 2를 계속해서 참조하면, 멀티-프로세서 시스템(예를 들어, 시스템(100))의 주변장치 버스(예를 들어, 주변장치 버스(114))에 연결된 디바이스(예를 들어, 디바이스(112))로부터의 인터럽트는 상기 설명한 IPI들과 유사하게 처리된다. 예를 들어, 네트워크 패킷 처리 시스템에서, 장치(112)는 네트워크 인터페이스 카드(NIC: Network Interface Card)이다. 패킷들이 도착하면, NIC는 인터럽트를 프로세서들로 전송하여, 이러한 프로세서들에게 패킷들이 도착했음을 알린다. 디바이스(112)는 인터럽트 신호를 어서트(assert)함으로써 인터럽트를 생성하고(202), I/O APIC(예를 들어, I/O APIC(110))는 인터럽트 재지정 테이블(IRT: Interrupt Redirection Table)(116)에서 그에 해당하는 엔트리를 읽는다. I/O APIC(110)는 엔트리로부터의 정보(예를 들어, 목적지 식별자, 전달 모드, 인터럽트 벡터, 또는 기타 적합한 정보)를 이용하여 인터럽트 메시지를 생성한다. 이후, 인터럽트는 로컬 APIC들(예를 들어, 로컬 APIC(106) 및 로컬 APIC(108))로 브로드캐스트(broadcast)된다(204). 목적지의 로컬 APIC(예를 들어, 로컬 APIC(108))는 I/O APIC에게 승인을 전송한다(206). 이후, 인터럽트는 목적지의 로컬 APIC에 해당하는 코어(예를 들어, 코어(104))에게 전달된다. 코어(108)는, 이 코어(108)가 IPI들을 처리하는 방법과 동일하게 인터럽트를 처리한다(210, 212, 214, 216).
ICR은 커널 모드(kernel-mode)에서만 작성(write)될 수 있으므로, 하나의 코어를 실행시키고 있는 어플리케이션으로부터 다른 코어로 인터럽트를 전송하려면 원래(original) 코어로부터 운영 체제로 제어를 이전해야 한다. 다른 코어에 인터럽트를 생성한 어플리케이션은 커널 모드로 전환되어, ICR을 기록한 후, 다시 사용자 모드로 복귀되므로, 두 번의 제어 전환이 필요하다. 운영 체제에 대한 전형적인 제어 전환은 많은 사이클들(예를 들어, 수천에서 수만 회, 또는 운영 체제 구현의 복잡성에 따라 더 많을 수도 있다)을 이용한다. 또한, 어플리케이션 스레드에 정보를 전달할 때 인터럽트가 사용되는 경우에는, 프로그램 제어를 어플리케이션 스레드로 복귀시키기 위한 추가적인 제어 전환이 필요하다. 사용자-레벨 인터럽트들의 처리를 위해 운영 체제에 관계되어 인터럽트 메커니즘을 이용할 때 나타나는 높은 오버헤드는 시스템 성능을 느리게 할 수 있다.
본 발명의 적어도 하나의 실시예에서, 본 발명의 방법은 멀티-코어 시스템 내의 복수의 프로세서 코어들 중 제 1 프로세서 코어에 대해, 제 1 프로세서 코어 상에서 실행되고 있는 어플리케이션 스레드의 인터럽트 도메인 및 제 1 프로세서 코어 상에서 실행되고 있는 어플리케이션 스레드의 수신자 식별자(recipient identifier)가 사용자-레벨 인터럽트 메시지 내의 해당하는 필드들과 일치할 때, 사용자-레벨 인터럽트 메시지에 의해 지시되는 사용자-레벨 인터럽트를 수락(accept)하는 것을 포함한다. 적어도 하나의 실시예에서, 본 발명의 방법은 사용자-레벨 인터럽트가 수락된 다른 인터럽트들 보다 높은 우선순위를 갖고, 프로세서 코어 상에서 실행되고 있는 어플리케이션 스레드 보다 높은 우선순위를 가질 때, 사용자-레벨 인터럽트를 처리하는 것을 포함한다. 본 방법의 적어도 하나의 실시예에서, 사용자-레벨 인터럽트는 운영 체제의 인터럽트를 유발하지 않으면서 처리된다. 본 방법의 적어도 하나의 실시예에서, 이러한 처리는 사용자-레벨 ISR의 상태를 변경시키고 사용자-레벨 인터럽트 루틴을 실행시키는 것을 포함하며, 사용자-레벨 인터럽트 루틴을 실행시키는 것은 사용자-레벨 인터럽트 메시지의 벡터 번호 및 사용자-레벨 IDTR의 콘텐츠를 바탕으로 사용자-레벨 인터럽트 핸들러를 발동(invoke)시키는 것을 포함한다. 적어도 하나의 실시예에서, 본 방법은 인터럽트로부터 사용자-레벨로 복귀하라는 명령어에 기초하여 사용자-레벨 인터럽트 핸들러로부터 프로그램 흐름을 복귀시키는 것을 포함한다. 적어도 하나의 실시예에서, 본 방법은 사용자-레벨 인터럽트의 처리가 완료되면, 사용자-레벨 ISR의 상태를 재설정(reset)하는 것을 포함한다. 본 방법의 적어도 하나의 실시예에서, 제 1 프로세서 코어와 관련된 로컬 인터럽트 컨트롤러는 I/O 인터럽트 컨트롤러와 복수의 프로세서 코어들 중 제 2 프로세서 코어와 관련된 개별적인 로컬 인터럽트 컨트롤러 중 적어도 하나로부터 사용자-레벨 인터럽트 메시지를 수신한다. 본 방법의 적어도 하나의 실시예에서, 사용자-레벨 인터럽트들은 운영 체제의 인터럽트들 보다 낮은 우선순위를 갖는다.
본 발명의 적어도 하나의 실시예에서, 본 발명의 방법은 사용자-레벨 인터럽트를 나타내는 사용자-레벨 인터럽트 메시지를 멀티-코어 시스템의 복수의 프로세서 코어들 중 1개 이상의 프로세서 코어들에게 전송하는 것을 포함한다. 사용자-레벨 인터럽트 메시지는 사용자-레벨 인터럽트와 관련된 인터럽트 도메인 식별자 및 사용자-레벨 인터럽트와 관련된 수신자 식별자를 포함한다. 적어도 하나의 실시예에서, 본 방법은 복수의 프로세서 코어들 중 하나의 프로세서 코어에 해당하는 사용자-레벨 인터럽트 제어 레지스터에 기록함으로써, 사용자-레벨 인터럽트를 생성하는 것을 포함한다. 본 방법의 적어도 하나의 실시예에서, 사용자-레벨 인터럽트 제어 레지스터에 기록하는 것은 사용자-레벨 인터럽트 제어 레지스터의 목적지 필드를 구성(configure)하고, 사용자-레벨 인터럽트 제어 레지스터의 전달 모드 필드를 구성하는 것을 포함한다. 본 방법의 적어도 하나의 실시예에서, 사용자-레벨 인터럽트는 복수의 프로세서 코어들 중 제 1 프로세서 코어 상에서 실행되고 있는 어플리케이션 스레드에 의해 발행(issue)되며, 본 방법은 사용자-레벨 인터럽트의 전달 불가 상태(undeliverable status)를 검출하고, 이에 기초하여 제 1 프로세서 코어에 인터럽트를 트리거(trigger)하는 것을 포함한다.
본 발명의 적어도 하나의 실시예에서, 본 발명의 장치는 멀티-코어 시스템의 복수의 프로세서 코어들 중 제 1 프로세서 코어에 해당하는 로컬 인터럽트 컨트롤러를 포함한다. 로컬 인터럽트 컨트롤러는 제 1 프로세서 코어 상에서 실행되고 있는 어플리케이션 스레드의 인터럽트 도메인 인디케이터(indicator)를 저장하도록 동작가능한 인터럽트 도메인 식별자 상태 요소(interrupt domain identifier state element)를 포함한다. 로컬 인터럽트 컨트롤러는 제 1 프로세서 코어 상에서 실행되고 있는 어플리케이션 스레드의 인디케이터를 저장하도록 동작가능한 수신자 식별자 상태 요소를 포함한다. 로컬 인터럽트 컨트롤러는 인터럽트 도메인 식별자와 수신자 식별자의 상태 요소의 콘텐츠에 기초하여 사용자-레벨 인터럽트를 적어도 부분적으로 처리할 수 있다. 본 장치의 적어도 하나의 실시예에서, 로컬 인터럽트 컨트롤러는 로컬 인터럽트 컨트롤러의 사용자-레벨 인터럽트의 구성을 나타내는 사용자-레벨 인터럽트 제어 상태 요소, 승인된 사용자-레벨 인터럽트들을 나타내는 사용자-레벨 인-서비스 상태 요소, 및 승인 보류 중인 사용자-레벨 인터럽트들을 나타내는 사용자-레벨 인터럽트 요청 상태 요소를 포함한다. 본 장치의 적어도 하나의 실시예에서, 로컬 인터럽트 컨트롤러는 인터럽트 도메인 식별자 상태 요소 및 수신자 식별자 상태 요소의 콘텐츠에 기초하여 인터럽트 메시지들을 생성할 수 있다. 적어도 하나의 실시예에서, 본 장치는 적어도 하나의 사용자-레벨 인터럽트 핸들러, 사용자-레벨 IDT 및 사용자-레벨 IDTR을 포함하며, 적어도 하나의 사용자-레벨 인터럽트 핸들러는 사용자-레벨 IDTR의 콘텐츠에 따라 사용자-레벨 IDT로부터 액세스가능하다. 본 장치의 적어도 하나의 실시예에서, 로컬 인터럽트 컨트롤러는 인터럽트 재지정 테이블을 포함하는 다른 개별적인 로컬 인터럽트 컨트롤러와 I/O 인터럽트 컨트롤러 중 적어도 하나로부터 사용자-레벨 인터럽트를 수신할 수 있으며, 상기 인터럽트 재지정 테이블은 인터럽트 도메인 식별자들을 갖는다. 본 장치의 적어도 하나의 실시예에서, 로컬 인터럽트 컨트롤러는 개별적인 로컬 인터럽트 컨트롤러가 사용자-레벨 인터럽트의 소스로부터 수신한 인터럽트 메시지를 수락했는 지를 나타내는 인디케이터를 사용자-레벨 인터럽트의 소스에 제공할 수 있다. 본 장치의 적어도 하나의 실시예에서, 로컬 인터럽트 컨트롤러는, 수신된 인터럽트 메시지 내의 전달 모드 필드가 사용자-레벨 인터럽트 코드를 나타내는 경우, 수신된 인터럽트 메시지 내의 목적지 인디케이터를 수신자 식별자 저장 위치의 콘텐츠와 비교하고, 수신된 인터럽트 메시지 내의 인터럽트 도메인 식별자를 인터럽트 도메인 식별자 저장 위치의 콘텐츠와 비교한다. 본 장치의 적어도 하나의 실시예에서, 사용자-레벨 인터럽트 핸들러는 사용자-레벨 인터럽트 벡터들을 포함한다. 적어도 하나의 실시예에서, 본 장치는, 디바이스로부터 이벤트들을 수신하고, 인터럽트들로서 수신된 이벤트들을 로컬 인터럽트 컨트롤러에게 라우팅할 수 있는 I/O 인터럽트 컨트롤러를 포함한다. 본 장치의 적어도 하나의 실시예에서, 로컬 인터럽트 컨트롤러는 복수의 프로세서 코어들 중에서 인터럽트가 발행된 제 2 프로세서 코어에 해당하는 다른 로컬 인터럽트 컨트롤러로부터 승인 인디케이터(acknowledgment indicator)를 수신하도록 구성될 수 있다. 적어도 하나의 실시예에서, 본 장치는 로컬 인터럽트 컨트롤러의 운영 체제 레벨 인터럽트 구성을 나타내는 운영 체제 레벨 인터럽트 제어 상태 요소(operating system-level interrupt control state element), 승인된 운영 체제 레벨 인터럽트들을 나타내는 운영 체제 레벨 인-서비스 상태 요소, 및 승인 보류 중인 운영 체제 레벨 인터럽트를 나타내는 운영 체제 레벨 인터럽트 요청 상태 요소를 포함한다.
본 발명의 적어도 하나의 실시예에서, 사용자-레벨 인터럽트와 관련된 사용자-레벨 인터럽트 메시지에 포함된 인터럽트 도메인 식별자 및 인터럽트 수신자 식별자에 적어도 부분적으로 기초하여, 메일박스에 사용자-레벨 인터럽트를 전달 불가능한 것(undeliverable)으로서 기록하는 것을 포함한다. 이러한 기록은 멀티-코어 시스템 내의 복수의 프로세서 코어들 중 한 개의 프로세서 코어 상에서 실행되고 있는 수신자 어플리케이션 스레드에 사용자-레벨 인터럽트를 전달할 수 없다는 표시를 적어도 부분적으로 기초한다. 적어도 하나의 실시예에서, 본 방법은 사용자-레벨 인터럽트가 그 사용자-레벨 인터럽트의 의도된 수신자에 의해 수락되지 않았음을 나타내는 적어도 하나의 메시지를 수신하는 것을 포함하며, 사용자-레벨 인터럽트가 전달 불가능하다는 표시는 이러한 적어도 하나의 메시지에 적어도 부분적으로 기초한다. 본 방법의 적어도 하나의 실시예에서, 사용자-레벨 인터럽트가 전달 불가능하다는 표시는 사용자-레벨 인터럽트 메시지에 대해 승인 메시지가 수신되지 않았다는 결정에 기초한다. 적어도 하나의 실시예에서, 본 방법은 수신자 어플리케이션 스레드 상태가 프로세서 코어에 복구(restore)된 후에, 그리고 수신자 어플리케이션 스레드를 실행시키기 전에, 메일박스의 엔트리들을 처리하는 단계를 포함한다. 적어도 하나의 실시예에서, 본 방법은 메일박스가 가득 찼을 때 부가적인 사용자-레벨 인터럽트를 전달 불가능으로 기록하려는 시도에 응답하여, 메일박스의 오버플로우(overflow)를 운영 체제에 통지하는 단계를 포함한다. 적어도 하나의 실시예에서, 본 방법은 메일박스 오버플로우의 통지에 응답하여, 메일박스 저장 공간을 증가시키는 것을 포함한다. 적어도 하나의 실시예에서, 본 방법은 메일박스의 오버플로우에 응답하여, 부가적인 사용자-레벨 인터럽트를 무시하는 것을 포함한다. 적어도 하나의 실시예에서, 본 방법은 메일박스 내에 전달 불가능으로 기록된 사용자-레벨 인터럽트를 부가적인 사용자-레벨 인터럽트로 오버라이트(overwrite)함으로써, 사용자-레벨 인터럽트를 무시하는 것을 포함한다. 적어도 하나의 실시예에서, 본 방법은 어플리케이션 스레드가 도메인에 조인(join)하고, 1개 이상의 프로세서 코어들 상에서 실행되고 있는 운영 체제로부터 수신자 식별자를 수신할 때, 메일박스 테이블 엔트리 및 메일박스 버퍼를 생성하는 것을 포함한다.
본 발명의 적어도 하나의 실시예에서, 본 발명의 장치는 멀티-코어 시스템 내의 복수의 프로세서 코어들 중 제 1 프로세서 코어를 포함한다. 본 장치는 전달 불가능한 사용자-레벨 인터럽트 메시지들을 저장할 수 있는 메일박스 저장 구조를 포함한다. 메일박스 저장 구조는 메일박스 저장 구조 루트 저장 요소(root storage element), 인터럽트 도메인 식별자 및 인터럽트 수신자 식별자의 콘텐츠에 따라 제 1 프로세서 코어에 의해 액세스가 가능하다. 적어도 하나의 실시예에서, 본 장치는 제 1 프로세서 코어에 해당하는 메일박스 루트 저장 요소를 포함하며, 제 1 프로세서 코어는 메일박스 루트 저장 요소에 따라 액세스할 수 있는 메일박스 테이블에 저장된 해당하는 메일박스 디스크립터에 기초하여, 전달불가능한 사용자-레벨 인터럽트 메시지를 메일박스 저장 구조에 저장할 수 있다. 적어도 하나의 실시예에서, 메일박스 루트 저장 요소의 콘텐츠에 따라 액세스할 수 있는 메일박스 테이블을 포함하며, 이러한 메일박스 테이블은 복수의 프로세서 코어들에 의해 공유되는 메모리 공간에 존재한다. 본 장치의 적어도 하나의 실시예에서, 메일박스 테이블은 루트 테이블 및 적어도 하나의 수신자 메일박스 포인터 테이블을 포함하는 테이블들의 계층적인 세트(hierarchical set)를 포함하며, 이러한 루트 테이블은 인터럽트 도메인 식별자를 수신자 메일박스 포인터 테이블들과 관련시킨다. 본 장치의 적어도 하나의 실시예에서, 메일박스 테이블은 인터럽트 도메인 식별자 및 인터럽트 수신자 식별자에 따라 액세스할 수 있는 메일박스 디스크립터들의 엔트리들을 포함한다. 본 장치의 적어도 하나의 실시예에서, 메일박스 저장 구조는 전달불가능한 사용자-레벨 인터럽트 타입에 해당하는 개별적인 엔트리들의 큐(queue)를 포함한다. 본 장치의 적어도 하나의 실시예에서, 메일박스 저장 구조는, 특정한 수신자 어플리케이션 스레드에 대해 1개 이상의 사용자-레벨 인터럽트 타입들이 보류 중인지를 나타내는 비트 벡터(bit vector)를 포함한다. 적어도 하나의 실시예에서, 본 장치는 제 1 프로세서 코어에 해당하는 로컬 인터럽트 컨트롤러를 포함하며, 이러한 로컬 인터럽트 컨트롤러는 제 1 프로세서 코어 상에서 실행되고 있는 어플리케이션 스레드의 인터럽트 도메인의 인디케이터를 저장할 수 있는 인터럽트 도메인 식별자 상태 요소, 및 제 1 프로세서 코어 상에서 실행되고 있는 어플리케이션 스레드의 인디케이터를 저장할 수 있는 수신자 식별자 상태 요소를 포함하며, 그리고 이러한 로컬 인터럽트 컨트롤러는 인터럽트 도메인 식별자 및 수신자 식별자 상태 요소의 콘텐츠에 기초하여, 사용자-레벨 인터럽트를 적어도 부분적으로 처리할 수 있다.
본 발명의 적어도 하나의 실시예에서, 본 발명의 방법은 복수의 프로세서 코어들 중 제 1 프로세서 코어 상에서 실행되고 있는 어플리케이션 스레드에서 적어도 하나의 인터럽트 도메인, 제 1 프로세서 코어 상에서 실행되고 있는 어플리케이션 스레드의 수신자 식별자, 및 사용자-레벨 인터럽트 메시지 내의 해당하는 필드들 중 적어도 하나가 일치하지 않을 때, 사용자-레벨 인터럽트 메시지의 수신자에 의해 수락되지 않은 사용자-레벨 인터럽트의 인디케이터를 전송하고, 그렇지 않으면, 수락되는 사용자-레벨 인터럽트의 인디케이터를 전송하는 것을 포함한다. 적어도 하나의 실시예에서, 본 방법은 사용자-레벨 인터럽트가 수락되지 않는 다는 인디케이터의 수신에 기초하여, 사용자-레벨 인터럽트가 의도된 수신자 어플리케이션 스레드에게 전달불가능하다는 인디케이터를 생성하는 것을 포함한다. 적어도 하나의 실시예에서, 본 방법은 사용자-레벨 인터럽트의 전달불가능한 상태를 검출하고, 이에 기초하여 제 1 프로세서 코어에게 인터럽트를 트리거하는 것을 포함한다.
본 발명의 적어도 하나의 실시예에서, 본 방법은 복수의 사용자-레벨 인터럽트 전달 구성들로부터 선택되는 하나의 사용자-레벨 인터럽트 전달 구성에 따라 하나 이상의 수신자들에게 사용자-레벨 인터럽트를 나타내는 사용자-레벨 인터럽트 메시지를 전달하는 것을 포함한다. 하나 이상의 수신자들은 멀티-코어 시스템 내의 복수의 프로세서 코어들 중 1개 이상의 프로세서 코어 상에서 실행되고 있는 어플리케이션 스레드들에 해당한다. 적어도 하나의 실시예에서, 본 방법은 복수의 사용자-레벨 인터럽트 전달 구성들로부터 사용자-레벨 인터럽트 전달 구성을 선택하는 것을 포함한다. 본 방법의 적어도 하나의 실시예에서, 복수의 사용자-레벨 인터럽트 전달 구성들은 유니캐스트 전달, 멀티캐스트 전달, 및 브로드캐스트 전달을 포함한다. 적어도 하나의 실시예에서, 본 방법은 하나 이상의 수신자들로부터 적어도 하나의 응답을 수집하고, 하나 이상의 수신자들로부터 수집되는 적어도 하나의 응답에 따라 인터럽트 동작을 성공적으로 완료하는 것을 포함한다. 적어도 하나의 실시예에서, 본 방법은 하나 이상의 수신자들로부터 적어도 하나의 응답을 수집하고, 통지 모드 구성 및 하나 이상의 수신자들로부터 수집한 적어도 하나의 응답에 따라 전달불가능한 인터럽트를 트리거하는 것을 포함한다. 적어도 하나의 실시예에서, 본 방법은 선택가능한 전달 실패 통지 모드 구성에 따라 전달불가능한 사용자-레벨 인터럽트에 대해 전달 실패 통지(failed delivery notification)를 전달하는 것을 포함한다. 본 방법의 적어도 하나의 실시예에서, 사용자-레벨 인터럽트 전달 구성은 사용자-레벨 인터럽트 메시지를 복수의 프로세서 코어들 중 다중의 프로세서 코어들에 해당하는 다중의 수신자들에게 멀티캐스트하는 것을 포함한다. 본 방법의 적어도 하나의 실시예에서, 사용자-레벨 인터럽트 전달 구성은 복수의 프로세서 코어들 중 다른 프로세서 코어들에게 사용자-레벨 인터럽트 메시지를 브로드캐스트하는 것을 포함한다. 본 방법의 적어도 하나의 실시예에서, 사용자-레벨 인터럽트는 복수의 프로세서 코어들 중 제 1 프로세서 코어 상에서 실행되고 있는 어플리케이션 스레드에 의해 발행되며, 그리고 본 방법은 사용자-레벨 인터럽트의 전달불가능한 상태를 검출하고, 이에 기초하여 제 1 프로세서 코어 상에서 실행되고 있는 어플리케이션 스레들에 사용자-레벨 인터럽트를 트리거하는 것을 포함한다. 본 방법의 적어도 하나의 실시예에서, 사용자-레벨 인터럽트 메시지는 1개 이상의 수신자 어플리케이션 스레드들의 인터럽트 도메인 및 이러한 1개 이상의 수신자 어플리케이션 스레드들을 나타내는 수신자 그룹 필드를 포함한다.
본 발명의 적어도 하나의 실시예에서, 전달 실패 통지 모드 구성에 따라 사용자-레벨 인터럽트가 사용자-레벨 인터럽트 메시지의 하나 이상의 의도된 수신자에게 전달될 수 없음을 나타내는 인디케이터를 생성하는 것을 포함한다. 사용자-레벨 인터럽트는 멀티-코어 시스템 내의 복수의 프로세서 코어들 중 제 1 프로세서 코어 상에서 실행되고 있는 어플리케이션 스레드에 의해 발행될 수 있다. 본 방법의 적어도 하나의 실시예에서, 인디케이터는 의도된 사용자-레벨 인터럽트 수신자들 중 사용자-레벨 인터럽트가 전달될 수 없는 수신자의 수에 적어도 부분적으로 기초한다. 본 방법의 적어도 하나의 실시예에서, 사용자-레벨 인터럽트는 멀티-코어 시스템 내의 복수의 프로세서 코어들 중 제 1 프로세서 코어 상에서 실행되고 있는 어플리케이션 스레드에 의해 발행된다. 적어도 하나의 실시예에서, 본 방법은 사용자-레벨 인터럽트의 전달 불가능한 상태를 검출하고, 이에 기초하여 제 1 프로세서 코어에게 인터럽트를 트리거하는 것을 포함한다. 적어도 하나의 실시예에서, 본 방법은, 사용자-레벨 인터럽트와 관련된 사용자-레벨 인터럽트 메시지 내에 포함되어 있는 인터럽트 도메인 식별자 및 인터럽트 수신자 식별자, 및 사용자-레벨 인터럽트가 전달 불가능함을 나타내는 적어도 하나의 표시에 적어도 부분적으로 기초하여, 수신자 식별자와 관련된 메일박스에 사용자-레벨 인터럽트를 전달 불가능한 것으로서 기록하는 것을 포함한다.
본 발명의 적어도 하나의 실시예에서, 본 발명의 장치는 멀티-코어 시스템의 복수의 프로세서 코어들 중 제 1 프로세서 코어에 해당하는 로컬 인터럽트 컨트롤러를 포함한다. 로컬 인터럽트 컨트롤러는 수신자 그룹 상태 요소와 전달 실패 통지 모드 상태 요소 중 적어도 하나를 포함한다. 로컬 인터럽트 컨트롤러는 수신자 그룹 상태 요소와 전달 실패 통지 모드 상태 요소 중 적어도 하나의 콘텐츠에 기초하여 사용자-레벨 인터럽트를 처리할 수 있다. 본 장치의 적어도 하나의 실시예에서, 로컬 인터럽트 컨트롤러는 수신자 그룹 상태 요소를 포함하며, 이러한 로컬 인터럽트 컨트롤러는 수신자 그룹 상태 요소의 콘텐츠에 따라 하나 이상의 수신자들에게 사용자-레벨 인터럽트 메시지를 전송할 수 있다. 본 장치의 적어도 하나의 실시예에서, 로컬 인터럽트 컨트롤러는 전달 실패 통지 모드 상태 요소를 포함하며, 이러한 로컬 인터럽트 컨트롤러는 전달 실패 통지 모드 상태 요소의 콘텐츠의 인디케이터를 포함하는 사용자-레벨 인터럽트 메시지를 생성할 수 있다. 본 장치의 적어도 하나의 실시예에서, 로컬 인터럽트 컨트롤러는 전달 실패 통지 모드 상태 요소를 포함하며, 이러한 로컬 인터럽트 컨트롤러는 전달 실패 통지 모드 상태 요소의 콘텐츠에 따라 전달불가능한 사용자-레벨 인터럽트에 대한 전달 실패 통지를 생성할 수 있다. 본 장치의 적어도 하나의 실시예에서, 로컬 인터럽트 컨트롤러는 하나 이상의 수신자들로부터 모든 응답을 수집하고, 이러한 하나 이상의 수신자들로부터 수집된 응답들에 따라 인터럽트 동작을 성공적으로 완료할 수 있다. 본 장치의 적어도 하나의 실시예에서, 로컬 인터럽트 컨트롤러는 하나 이상의 수신자들로부터 임의의 응답들을 수집하고, 전달 실패 통지 모드 상태 요소의 콘텐츠 및 하나 이상의 수신자들로부터 수집된 응답들에 따라 전달불가능한 인터럽트를 트리거할 수 있다. 본 장치의 적어도 하나의 실시예에서, 로컬 인터럽트 컨트롤러는 제 1 프로세서 코어 상에서 실행되고 있는 어플리케이션 스레드의 인터럽트 도메인의 인디케이터를 저장할 수 있는 인터럽트 도메인 식별자 상태 요소, 및 제 1 프로세서 코어 상에서 실행되고 있는 어플리케이션 스레드의 인디케이터를 저장할 수 있는 수신자 식별자 상태 요소를 더 포함하며, 이러한 로컬 인터럽트 컨트롤러는 인터럽트 도메인 식별자 상태 요소 및 수신자 식별자 상태 요소의 콘텐츠에 기초하여 사용자-레벨 인터럽트를 처리할 수 있다.
본 발명은 첨부 도면들을 참조함으로써 당업자에게 더 잘 이해될 것이며, 본 발명의 다양한 목적들, 특징들 및 장점들이 당업자에게 명백해질 것이다.
도 1은 예시적인 인터럽트 전달 메커니즘의 블록도이다.
도 2는 도 1의 인터럽트 전달 메커니즘을 이용하는 인터럽트트들에 대한 예시적인 정보 및 제어 흐름을 도시한다.
도 3은 본 발명의 일 실시예에 따른 예시적인 인터럽트 전달 메커니즘의 블록도이다.
도 4는 본 발명의 일 실시예에 따른 도 3의 예시적인 인터럽트 전달 메커니즘에 대한 예시적인 정보 및 제어 흐름을 도시한다.
다른 도면들에서 동일한 참조 부호들을 이용하여 유사하거나 동일한 항목을 나타낸다.
본 발명의 하나 이상의 실시예들에 예시적인 사용자-레벨 인터럽트 기법은,
사용자-레벨 인터럽트들을 사용자-레벨 어플리케이션 스레드에 직접 전달함으로써 사용자-레벨 인터럽트들(예를 들어, 어플리케이션 스레드에 의해 생성되는 인터럽트, 또는 시스템의 주변장치 버스와 연결된 디바이스에 의해 생성되는 인터럽트들)을 처리할 때에 이용되는 제어 전환들의 수를 감소시킨다. 도 3 및 4를 참조하면, 예시적인 멀티-프로세서 시스템(예를 들어, 시스템(300))은 다수의 어플리케이션 스레드들을 동시에 실행시키도록 구성되는 적어도 2개의 프로세서 코어들(즉, 중앙 처리 장치들, 코어들, 또는 하드웨어 가속기들)을 포함한다. 각 로컬 APIC는 인터럽트 도메인 식별자 레지스터(즉, IDIR) 및 수신자 식별자 레지스터(즉, RIR)를 포함한다. IDIR은 관련 코어에서 현재 실행되고 있는 어플리케이션 스레드의 인터럽트 도메인 식별자를 저장하는 상태 요소이다. 인터럽트 도메인은 사용자-레벨 인터럽트들을 교환할 수 있게 하는 디바이스들과 어플리케이션 스레드들의 세트이다. 각 도메인은 인터럽트 도메인 식별자라고 불리는 고유한 식별자를 갖는다. 이 식별자는 운영 체제 인스턴스(instance)에서 고유하다. 도메인의 각 멤버에게는 도메인 내에서만 고유한 수신자 식별자가 주어진다. RIR은 코어 상에서 현재 실행하는 어플리케이션 스레드의 수신자 식별자를 저장하는 상태 요소이다. 시스템(300)에서, 인터럽트 도메인 식별자와 수신자 식별자의 결합에 의해, 사용자-레벨 인터럽트의 목적지 어플리케이션 스레드가 식별된다.
비록 도 3이 시스템(300)의 IDIR 및 RIR이 로컬 APIC 내에 포함된 것으로 도시하고 있지만, 이러한 식별자들은 다른 코어당 모듈(per-core module) 내에도 저장될 수 있다. 비록 로컬 APIC(306) 및 로컬 APIC(308)가 코어들(302 및 304)로부터 각각 분리되어 있는 것 도시되어 있지만, 로컬 APIC(306) 및 로컬 APIC(308)의 기능은 상응하는 코어 회로 또는 다른 코어당 모듈에 통합될 수 있다는 것에 유의한다. IDIR과 RIR 레지스터들의 상태는 콘텍스트를 전환하는 동안 저장되고 복원될 수 있는데, 왜냐하면 두 개의 식별자들이 어플리케이션 스레드 콘텍스트의 일부분이기 때문이다. IDIR 및 RIR은 머신 상태 레지스터들(Machine State Register)(MSR)을 통한 매핑, 메모리 맵핑된 I/O(MMIO)를 통한 액세스, 명령어 집합 아키텍처 확장(instruction set architecture extension) 또는 기타 적절한 기술들에 의해 저장 및 복원될 수 있다.
인터럽트 메시지들은 코어 커맨드나 디바이스 커맨드에 응답하여 APIC(예를 들어, 로컬 APIC(306), 로컬 APIC(308), 혹은 I/O APIC(310))에 의해 생성된다. 적어도 하나의 실시예에서, 시스템(300)은 사용자-레벨 인터럽트들를 지원하기 위해 알려져 있는 인터럽트 메시지들을 수정한다. 예를 들어, x86 인터럽트 메시지는 사용자-레벨 인터럽트들에 대해 특정한 코드로 설정된 전달 모드(즉, DM) 필드, 및/또는 인터럽트의 수신자 어플리케이션 스레드를 식별하도록 구성된 목적지(DESTINATION)를 포함하도록 구성될 수 있다. 시스템(300)의 적어도 하나의 실시예에서, x86 인터럽트 메시지 페이로드 내에는 인터럽트 도메인 식별자가 포함될 수 있다. 시스템(300)의 적어도 하나의 실시예에서는, 확장하는 기존의 인터럽트 메시지가 아닌, 별개의(distinct) 사용자-레벨 인터럽트 메시지가 이용된다. 예를 들어, 사용자-레벨 인터럽트 메시지는 인터럽트 도메인 식별자, 수신자 식별자, 사용자-레벨 인터럽트 타입, 및/또는 다른 적절한 정보를 포함할 수 있다.
도 3 및 4를 여전히 참조하면, 시스템(300)의 코어(예를 들어, 코어(302)) 상에서 실행되는 어플리케이션 스레드는 상응하는 로컬 APIC(예를 들어, 로컬 APIC(306))(402)의 사용자-레벨 인터럽트 제어 레지스터(즉 UICR)에 기록함으로써 사용자-레벨 인터럽트를 생성한다. UICR은 각 로컬 APIC에 포함되는 인터럽트 제어 레지스터(즉, ICR)의 사용자-레벨 복제물(replica)이다. UICR은 사용자 모드에서 액세스 가능하며, UICR에의 기록은 운영 체제 지원이나 제어의 전환을 필요로 하지 않는다. 적어도 하나의 실시예에서, 어플리케이션 스레드는 인터럽트 수신자를 식별하기 위해 UICR의 목적지 필드를 구성하고, UICR의 DM 필드를 사용자-레벨의 인터럽트를 나타내는 특수한 코드를 포함하도록 구성한다. 로컬 APIC(306)는, ICR의 콘텐츠에 기초하여 운영 체제 레벨 인터럽트들(즉, 운영 체제 인터럽트 핸들러를 포함하고 있는 기존의 인터럽트 메커니즘에 의해 발행되는 인터럽트들)의 생성하는 것과 유사하게, UICR의 값들에 기초하여 사용자-레벨 인터럽트 메시지를 생성한다(404). IDIR에 포함되는 인터럽트 도메인 식별자는 로컬 APIC(306)에 의해 사용자-레벨 인터럽트 메시지에 포함된다. IDIR의 인터럽트 도메인 식별자는, 의도된 목적지 어플리케이션 스레드가 아니라, 인터럽트 개시(interrupt-initiating) 어플리케이션 스레드의 아이덴티티에 해당한다는 점에 유의한다. 따라서, 사용자-레벨 인터럽트는 개시 어플리케이션 스레드와 동일한 인터럽트 도메인 내의 수신 어플리케이션 스레드에 의해 수신되도록 구성된다.
시스템(300)의 적어도 하나의 실시예에서, 로컬 APIC(306)는, 운영 체제 레벨 인터럽트들의 라우팅과 유사하게, 모든 코어들에게 사용자-레벨 인터럽트 메시지를 브로드캐스트한다. 상호접속 네트워크(예를 들어, 크로스바(316) 또는 기타 적당한 버스 구조)는 운영 체제 레벨 인터럽트 메시지들을 브로드캐스트하는 데에 이용되는 것과 동일한 기법들을 이용하여 사용자-레벨 인터럽트 메시지들을 브로드캐스트한다. 따라서, 네트워크는 사용자-레벨 인터럽트들과 운영 체제 레벨 인터럽트들을 구별할 필요가 없다. 시스템(300)의 적어도 하나의 실시예에서, 사용자-레벨 인터럽트들은 멀티캐스트되거나, 또는 목적지 코어에 직접 전송될 수 있다.
적어도 하나의 실시예에서, 인터럽트 메시지를 수신하는 것에 응답하여, 로컬 APIC(예를 들어, 로컬 APIC(308))는 그 인터럽트가 사용자-레벨 인터럽트인지를 결정하기 위해, 인터럽트 메시지의 DM 필드의 콘텐츠를 소정의 사용자-레벨 인터럽트 코드와 비교한다. 인터럽트가 사용자-레벨 인터럽트일 경우, 로컬 APIC(308)는 인터럽트 메시지의 목적지 필드의 콘텐츠(즉, 인터럽트 메시지의 수신자 식별자, RIIM)를 로컬 APIC(308)의 RIR의 콘텐츠와 비교하여, 인터럽트 메시지에 포함된 인터럽트 도메인 식별자(즉, IDIM)를 로컬 APIC(308)의 IDIR의 콘텐츠와 비교한다(406). 값들이 일치하는 경우, 인터럽트는 로컬 APIC(308) 및 상응하는 코어(예를 들어, 코어(304))와 관련된 어플리케이션 스레드에 대해 예정된다. 로컬 APIC(308)는 인터럽트 메시지에 기초하여 인터럽트 벡터 번호를 결정하고, UIRR에서 개별적인 로컬 APIC에 상응하는 IRR의 사용자-레벨 복제물인 상응하는 비트의 상태를 변경한다. 이후, 로컬 APIC(308)는 원래의 로컬 APIC(예를 들어, 로컬 APIC(306))에게 인터럽트 메시지가 수락되었음을 나타내는 승인 메시지(즉, ACK)를 전송한다(408). 시스템(300)의 적어도 하나의 실시예에서, 값들이 일치하지 않는 경우, 로컬 APIC(308)는 인터럽트가 로컬 APIC(308)에 의해 수락되지 않았음을 나타내는 NACK 메시지를 로컬 APIC(306)에게 전송한다(416).
로컬 APIC(308)가 사용자-레벨 인터럽트를 수신하면, 로컬 APIC(308)는 이러한 인터럽트를 처리를 위해 코어(304)에 라우팅한다(410). 일반적으로, 코어(304)는 사용자-레벨 인터럽트들이 수신된 다른 인터럽트들 및 코어 상에서 현재 실행중인 스레드 보다 우선순위가 높을 경우 사용자-레벨 인터럽트를 처리할 것이다. 예를 들어, 사용자-레벨 인터럽트는 모든 운영 체제 레벨 인터럽트 보다 우선순위가 낮다. 코어가 사용자-레벨 인터럽트를 처리할 때, 사용자-레벨 ISR(UISR), 즉 각 로컬 APIC 마다 추가된 ISR의 사용자-레벨 복제물에 상응하는 비트를 설정한다. 이후, 코어(304)는 사용자-레벨 인터럽트들을 위한 프로그램 코드를 호출하고, 사용자-레벨 IDT(UIDR)(412)를 지정하는 사용자-레벨 IDRT(UIDRT)를 읽는다(412). UIDT는 IDT의 사용자-레벨 복제물이며, 사용자-레벨 인터럽트 핸들러들에 대한 포인터(pointer)들을 포함한다. 시스템(300)의 적어도 하나의 실시예에서, UIDT 및 IDT 엔트리들은 동일한 데이터 구조를 가지며, 하나의 병합된 IDT 내에 함께 병합된다. 이러한 병합된 IDT는 운영 체제 레벨 핸들러 및 사용자-레벨 핸들러를 포함한다. 이에 따라, 별도의 UIDTR은 포함되지 않는다.
코어(304)는 코드 세그먼트 선택기, 오프셋 및/또는 사용자-레벨 인터럽트의 벡터 수에 해당하는 사용자-레벨 핸들러의 기타 적절한 정보를 액세스한다. 코어(304)는 이러한 정보를 이용하여, 후 사용자-레벨 핸들러에 상응하는 메모리 내로의 엔트리 포인트를 계산한다. 마지막으로, 프로그램 제어 흐름은 사용자-레벨 인터럽트 핸들러 엔트리 포인트의 메모리에 있는 위치로 점핑함으로써, 사용자-레벨 인터럽트 핸들러로 전송된다(412).
사용자-레벨 인터럽트 핸들러가 종료되면, UISR 내의 해당 비트는 소프트웨어, 마이크로코드 또는 하드웨어에 의해 재설정된다. 로컬 APIC(308)는 UISR 내의 이러한 비트들을 재설정을 검출하고, 현재의 어플리케이션 스레드 및 미처리된 나머지 인터럽트들에 대한 우선순위를 체크한다. 이후, 로컬 APIC(308)는 임의의 나머지의 미처리된 인터럽트들을 현재 어플리케이션 스레드에 대한 이들의 우선순위에 따라 전달할 지의 여부를 결정한다. 로컬 APIC(308)가 다른 미처리된 인터럽트를 전송할 것을 결정한다면, 이 APIC(308)는 그 인터럽트를 처리하기 위해 코어(304)에 라우팅한다(410). 그렇지 않으면, 사용자-레벨 인터럽트 루틴(414)으로부터 코어 실행이 리턴된다. 시스템(300)의 적어도 하나의 실시예에서, 이러한 절차는 인터럽트 명령어의 리턴에 의해 트리거되는데, 이러한 명령어는, 예를 들어, IRET 명령어의 사용자-레벨 버전인, UIRET와 같은 사용자-레벨의 특정 명령어일 수 있다. 시스템(100)에서 인터럽트 처리를 위해 2개의 콘텍스트 변경들(즉, 214 및 216)이 이용되는 것과 비교하여, 시스템(300)에서는 단지 하나의 콘텍스트 변경 만이 이용되는 것을 유념한다.
시스템(300)의 적어도 하나의 실시예에서, 시스템(300)은, 사용자-레벨 인터럽트가 전달되기 전에 사용자-레벨 인터럽트를 위한 목적지 어플리케이션 스레드가 선점(preempt)되는 상황을 검출한다. 적어도 하나의 실시예에서, 시스템(300)은 전송자(예를 들어, 로컬 APIC(306))로 하여금 브로드캐스트된 사용자-레벨 인터럽트 메시지에 대해 ACK 메시지가 수신되었는 지의 여부를 결정하게 함으로써, 사용자-레벨 인터럽트가 전송될 수 없음(즉, 사용자-레벨 인터럽트가 전송불가능함)을 결정한다. 사용자-레벨 인터럽트가 전송불가능하다면, 적어도 하나의 일 실시예에서, 로컬 APIC(306)는 미리 결정된 인터럽트 벡터 수를 갖는, 코어(302)에 대한 인터럽트(예를 들어, 사용자-레벨 인터럽트 또는 운영 체제 레벨 인터럽트)를 트리거하는데, 이는 전달불가된(즉, 지연된) 인터럽트들의 지연된 전달을 처리하는 지연된 인터럽트 전달 핸들러에 대해 예정된다. 코어(302)는 사용자-레벨 인터럽트 서브루틴들을 호출하고, UIDT에 의해 표시되는 상응하는 사용자-레벨 인터럽트 핸들러에 매핑된 핸들러로 점프한다. 이 핸들러는 사용자-레벨 핸들러 또는 운영 체제 레벨 핸들러일 수 있다. 관리되는 환경에서, 운영 체제의 상단에서 실행되는 시스템 레벨 소프트웨어는 사용자-레벨 어플리케이션을 직접 관리한다. 시스템 레벨 소프트웨어는 운영 체제를 대신하여, 지연된 사용자-레벨 인터럽트를 기억하며, 목적지 어플리케이션이 재조정(reschedule)될 때 인터럽트를 전달한다. 예를 들어, 사용자-레벨 인터럽트가 관리되는 환경에서 사용될 경우, 사용자-레벨 인터럽트 핸들러는 연기된 사용자-레벨 인터럽트를 처리하기 위해 사용될 수 있다. 그렇지 않을 경우, 운영 체제 레벨 핸들러가 사용된다. 시스템(300)의 적어도 하나의 실시예에서, 사용자-레벨 인터럽트와 운영 체제 레벨 인터럽트 간의 선택은 소프트웨어 시스템에 의해 이루어지지만, 시스템(300)은 하드웨어 및/또는 마이크로코드에서 처리 지연된 사용자-레벨 인터럽트를 지원할 수 있다.
시스템(300)의 적어도 하나의 실시예에서, 로컬 APIC(306)가 사용자-레벨 인터럽트가 전달될 수 없음을 검출할 때 운영 체제 레벨 또는 사용자-레벨 인터럽트 핸들러를 호출하는 것이 아니라, 로컬 APIC(306)는 인터럽트 메일박스 기법을 호출한다. 이러한 하드웨어 메커니즘은 마이크로코드로, 또는 하드웨어 유한 상태 머신으로서 직접적으로 구현될 수 있다. 운영 체제는 UIDT의 미리 지정된 엔트리에 등록되어있는 운영 체제 레벨 메일박스 핸들러를 이용하여, 임의의 연기된 인터럽트를 처리한다. 운영 체제는 또한 인터럽트 도메인 식별자 및 수신자 식별자에 의해 식별되는, 각 수신자에 대해 인터럽트 큐로 구성되는 인터럽트 메일박스를 유지한다. 운영 체제 레벨 메일박스 핸들러는, 호출될 경우, 연기된 인터럽트를 인터럽트 메일박스 내의 해당 큐 내에 삽입한다. 이후, 수신자 어플리케이션 스레드가 코어 상에서 실행될 예정일 경우, 운영 체제는 연기된 인터럽트가 해당하는 메일박스에 있는 지를 결정한다. 연기된 인터럽트가 있을 경우, 운영 체제는 수신자 어플리케이션 스레드가 그 시점에서 인터럽트를 수신한 것처럼 시스템 스택을 구성하고, 수신자 어플리케이션 스레드는 상응하는 사용자-레벨 인터럽트 핸들러로 점프한다.
적어도 하나의 실시예에서, 인터럽트 메일박스 기법은 각 코어에 대해 메일박스 루트 레지스터(MRR: Mailbox Root Register)를 포함한다. MRR은 운영 체제에 의해 관리되며, 메일박스 테이블(예를 들어, 메일박스 테이블(520) 또는 메일박스 테이블(522))의 관리에 따라 인(in)과 아웃(out)으로 전환될 필요가 있을 수 있다. MRR은 사용자 모드에서 실행되는 정규 명령들에 의해 액세스할 수 없다. 시스템(300)의 적어도 하나의 실시예에서, 메일박스 테이블(520)은 모든 스레드들에 대한 광역 구성(global structure)이기 때문에, MRR은 인과 아웃으로 전환될 필요가 없다. 적어도 하나의 실시예에서, 메일박스 테이블(520)은 공유 메모리 공간에 저장된다. 메일박스 테이블(520)은 특정 수신자들의 메일박스들의 위치를 결정하는 방법을 나타내는 상태 정보를 포함하고 있다. 메일박스 테이블의 적어도 하나의 실시예에서, 엔트리들은 도메인 ID와 수신자 ID를 메일박스 디스크립터에 연계시킨다. 시스템(300)의 적어도 하나의 실시예에서, 메일박스 테이블들 및 메일박스는 사용자 모드 명령들로 직접 액세스할 수 없는 어드레스 공간에 할당되는 바, 오로지 권한이 있는 명령들, 마이크로코드 또는 하드웨어 만이 메일박스 테이블 및 메일박스들을 직접 액세스할 수 있다.
시스템(300)의 적어도 하나의 실시예에서, 메일박스 테이블(520)은 테이블들의 계층적인 세트로서 편성된다. 그 상태는 다른 보조 테이블인 수신자 메일박스 포인터 테이블 (Recipient Mailbox Pointer Tables: RMPT)을 가리키는 필드들에 도메인 식별자들을 연계시키는 하나의 메인 루트 테이블(DMPT: Domain Mailbox Pointer Table)로서 편성된다. 수신자 메일박스 포인터 테이블은 수신자 식별자들을 수신자의 메일박스의 위치를 결정하는 데에 이용되는 정보인 메일박스 디스크립터에 연계시킨다. 예시적인 메일박스 디스크립터들은 계류중인 다음 사용자-레벨 인터럽트가 기록되어야 하는 메일박스 내에 하나 이상의 메일박스 지시자, 할당된 크기 및 위치를 포함하고 있다. 시스템(300)의 적어도 하나의 실시예에서, 메일박스 테이블은 상태 정보의 균일한(flat) 테이블로서 편성된다. 엔트리는 도메인 ID와 수신자 ID에 의해 색인되며, 메일박스 디스크립터를 포함한다.
전달 불가능한 인터럽트가 코어에 의해 수신되면, 하드웨어(또는 마이크로코드)는 운영 체제에 트래핑(trapping)하지 않으면서, 메일박스 테이블에 대한 지시자를 판독하기 위해 상응하는 메일박스 루트 레지스터에 액세스한다. 이후, 하드웨어는 예정된 수신자의 도메인 ID와 수신자 ID에 기초하여 메일박스 테이블로부터 메일박스 디스크립터에 액세스한다. 이후, 메일박스 디스크립터는 수신자의 메일박스 내에 전달 불가능한 사용자-레벨 인터럽트를 기록하는 데에 이용된다.
시스템(300)의 적어도 하나의 실시예에서, 운영 체제는 메일박스 테이블과 메일박스 루트 레지스터를 구성한다. 메일박스 테이블이 계층적일 경우, 도메인 메일박스 포인터 테이블은 운영 체제 초기화시에 할당되고 초기화된다. 도메인 메일박스 포인터 테이블은, 추가적인 도메인이 요구되는 경우, 이후에 크기를 변경할 수 있다. 수신자 메일박스 포인터 테이블은 새로운 도메인이 생성될 때 마다 할당되고 초기화된다. 수신자 메일박스 포인터가 단조로우면, 운영 체제 초기화시에 할당되고 초기화된다. 수신자 메일박스 포인터 테이블은 추가적인 도메인-수신자 쌍들이 필요하면 나중에 크기를 변경할 수 있다. 시스템(300)의 적어도 하나의 실시예에서, 어플리케이션 스레드가 도메인에 조인(join)하고, 운영 체제로부터 수신자 ID를 수신할 경우, 운영 체제도 메일박스 버퍼와 메일박스 테이블을 생성한다. 운영 체제는 수신자 어플리케이션 스레드에 상응하는 메일박스 버퍼를 위해 수신자의 메모리 공간에 메모리를 할당하고, 메일박스 버퍼 다음에 하드웨어를 배치할 수 있도록 메일박스 테이블에 엔트리를 추가한다.
예시적인 메일박스는 비트 벡터 또는 큐로서 실행되지만, 다른 적당한 구조가 사용될 수도 있다. 비트 벡터로 실행될 경우, 메일박스 비트 벡터의 개별 비트는 특정 수신자 어플리케이션 스레드를 위해 계류중인 특정 타입의 사용자-레벨 인터럽트가 있는지를 나타낸다. 메일박스는 얼마나 많은 각 수신자 타입의 사용자-레벨 인터럽트가 계류중인지를 부호화(encoding)하지 않는다. 비트 벡터 부호화는 간결하며, 엔트리에서 직접 메일박스 테이블의 메일박스 디스크립터 필드에 기록될 수 있고, 로컬 APIC UIRR과 유사할 수 있다. 메일박스가 큐로서 실행될 경우, 메일박스의 개별 엔트리들은 전달이 불가능한 사용자-레벨 인터럽트 타입의 특정 사례를 서술한다. 큐 실행은 비트 벡터 실행 보다 더 많은 공간을 사용할 수 있지만, 사용자-레벨 인터럽트들이 기록된 순서와 각 타입이 얼마나 많이 발생했는지를 기록할 수 있다. 메일박스 디스크립터는 메일박스 버퍼와 메일박스 버퍼 사이즈에 대한 지시자를 포함하고 있다. 적어도 하나의 실시예에서, 메일박스 디스크립터는 메일박스 버퍼에 다음 순위의 빈(free) 엔트리에 대한 지시자를 포함하고 있다.
시스템(300)의 적어도 하나의 실시예에서, 사용자-레벨 인터럽트가 전달될 수 없는 경우, 전달 불가능한 인터럽트의 목적지 어플리케이션 스레드에 대해 메일박스 엔트리에 색인을 붙이기 위해, 시스템(300)은 도메인 ID와 수신자 ID를 사용한다. 비트 벡터 포맷 메일박스가 사용되는 경우, 인터럽트 벡터 번호에 상응하는 비트가 비트 벡터로 설정된다. 큐 포맷 메일박스가 이용되는 경우, 인터럽트는 FIFO 방식으로 큐잉된다. 시스템(300)의 적어도 하나의 실시예에서, 전달 불가능한 인터럽트들은 다른 적당한 기법들, 예를 들어 연기된 인터럽트들의 큐를 우선 순위로 형성하는 방식을 사용하여, 큐에 포함될 수도 있다.
메일박스에 대해 큐 포맷을 사용할 경우, 메일박스는 시스템이 (예를 들어, 하드웨어 또는 마이크로코드에 의해) 전달 불가능한 사용자-레벨 인터럽트 엔트리를 가득 찬 메일박스에 추가하려고 하면 오버플로우할 수도 있다. 오버플로우를 처리하기 위한 전형적인 기법은 운영 체제에 트래핑하고, 오버플로우가 발생했음을 운영 체제에 통지하는 것을 포함한다. 응답하여, 운영 체제는 더 많은 공간을 메일박스에 할당할 수도 있다. 전형적인 예시적인 기법은 새로운 전달 불가능 인터럽트를 무시하는 것을 포함한다. 적어도 하나의 실시예에서, 시스템(300)은 오버라이트하는 방식으로 메일박스에 이미 기록된 인터럽트를 무시한다. 메일박스 오버플로우를 처리하기 위한 다른 적당한 기법들이 사용될 수도 있다. 시스템(300)의 적어도 하나의 실시예에서, 시스템(300)에 사용되는 메일박스 오버플로우 기법은 운영 체제에 의해 예를 들어, 가능한 메일박스 오버플로우 기법들 중에서 선택하기 위해 제어 비트를 사용하는 방식으로 구성될 수도 있다.
운영 체제가 실행을 위해 어플리케이션 스레드를 프로그램 흐름으로 전환할 경우, 운영 체제는 그 특정 어플리케이션 스레드와 관련된 메일박스를 배출(drain)한다. 메일박스가 비트 벡터 포맷을 사용하는 경우, 운영 체제는, 어플리케이션 스레드를 실행하기에 앞서, 하지만 그 상태로 복원된 이후에, 로컬 APIC의 UIRR과 수신자 어플리케이션 스레드의 메일박스 비트 벡터 사이에서 논리 OR 동작을 수행한다. 그런 다음, 로컬 APIC 하드웨어는 배출된 인터럽트들을, 이들이 동시에 모두 수신된 것처럼, 개별적으로 전달한다. 메일박스가 큐 포맷을 이용하는 경우, 운영 체제는, 실행을 위해 어플리케이션 스레드가 실행되기 직전에, 하지만 그 상태로 복원된 이후에, (예를 들어, 상응하는 핸들러에 점프하는 방식으로) 직접 메일박스 큐에 기록된 인터럽트들을 전달한다. 상응하는 로컬 APIC UIRR 및 UISR도 또한 처리되고 있는 계류중인 사용자-레벨 인터럽트(들)와 일치되도록 업데이트된다.
도 3을 참조하면, 시스템(300)의 적어도 하나의 실시예에서, 디바이스에 의해 생성되는 사용자-레벨 인터럽트들을 지원하기 위해, I/O APIC(310)의 IRT 테이블은 테이블 엔트리마다 인터럽트 도메인 식별자를 포함하도록 확장된다. 인터럽트 도메인 식별자는 엔트리의 DM 필드가 소정의 사용자-레벨 인터럽트 값으로 설정될 때만 사용된다. 디바이스(예를 들어, 디바이스(312))가 인터럽트를 생성할 경우, IRT는 IRT 필드들, 예를 들어 DM 필드, 목적지 필드 또는 기타 인터럽트 라인에 매핑된 테이블 엔트리의 다른 적절한 필드들에 기초하여 인터럽트 메시지를 제공한다. DM 필드가 소정의 사용자-레벨 인터럽트 값으로 설정되는 경우, 인터럽트 도메인 식별자는 인터럽트 메시지에 포함된다. 사용자-레벨 인터럽트 메시지가 생성되면, 그것은 IPI 메시지외 유사하게 라우팅되고, 수신되고, 처리된다.
시스템(300)의 적어도 하나의 실시예에서, I/O APIC 내의 IRT 테이블을 확장하는 것이 아니라, 추가적인 하드웨어가 디바이스(312)로부터 코어들(302 및 304)까지의 인터럽트 메시지의 경로에 포함된다. 이러한 추가적인 하드웨어는 (추가적인 하드웨어 또는 마이크로코드에 의해 사용자-레벨 인터럽트들로서 예비 등록된) 사용자-레벨 인터럽트들로서 처리될 예정인 디바이스 인터럽트들을 검출하고, 사용자-레벨 인터럽트들에 대한 디바이스 인터럽트 (예를 들어, I/O 메모리 관리 유닛) 사이에 매핑을 수행한다.
디바이스(312)에 의해 생성되는 사용자-레벨 인터럽트가 그 예정된 수신자에게 전달될 수 없는 경우, 연기된 사용자-레벨 IPI들에 대한 로컬 APIC와 달리, I/O APIC(310)는 연기된 사용자-레벨 인터럽트에 대해 핸들러를 실행시키지 않는다. 오히려, I/O APIC(310)는, 비록 인터럽트가 사용자-레벨이라고 하더라도 조정된 인터럽트를 나타내기 위해, DM 필드를 소정의 값(이러한 소정의 값은 사용자-레벨 인터럽트 메시지들을 나타내는 데에 이용되는 소정의 값과 다르다)으로 설정한다. 조정된 인터럽트 전달 모드에서, I/O APIC(310)는 상응하는 코어들 상에서 실행되고 있는 현재 어플리케이션 스레드의 우선 순위에 관해 질의하기 위해 로컬 APIC(306) 및 로컬 APIC(308)에게 질의 메시지를 브로드캐스트한다. I/O APIC(310)는 로컬 APIC(306)과 로컬 APIC(308)로부터 응답 메시지를 수신한 다음, 최하위 순위 어플리케이션 스레드를 갖는 코어를 그 인터럽트에 대한 목적지로서 선택한다. I/O APIC(310)는 선택된 코어에 상응하는 로컬 APIC을 표시하기 위해 목적지 필드를 설정하고, 원래의 수신자 식별자는 인터럽트 메시지 페이로드에 포함된다. 그런 다음, I/O APIC(310)는 인터럽트 메시지를 브로드캐스트한다. 선택된 코어의 로컬 APIC는 인터럽트 메시지를 수신하여, 인터럽트 메시지의 DM 필드가 다른 소정의 값으로 설정되었는지를 결정한다. 로컬 APIC는 페이로드로부터 인터럽트 도메인 식별자 및 수신자 식별자를 얻는다. 로컬 APIC는 코어에 소정의 메일박스 핸들러와 더불어 사용자-레벨 인터럽트를 트리거하며, 연기된 IPI가 처리되는 것과 같은 방식으로 연기된 디바이스 인터럽트를 처리하기 위해 마이크로코드가 호출된다.
적어도 하나의 실시예에서, 시스템(300)이 전달 불가능한 인터럽트들을 항상 처리할 필요는 없다. 오히려, 시스템(300)은 전달 불가능한 인터럽트들에 대한 통지를 생성하거나, 전달 불가능한 인터럽트를 무시하도록 구성될 수 있다. 각 APIC(예를 들어, APIC(306), 로컬 APIC(308) 및 I/O APIC(310))는, 사용자-레벨 인터럽트가 자신의 예정된 수신자들중 하나 이상에 전달될 수 없을 때에 통지가 생성되어야 하는 지를 나타내는 전달 실패 통지 모드 필드를 포함한다. 예를 들어, 표 1에 서술된 3개의 가능한 상태를 부호화하기 위해 2 비트 필드가 사용될 수 있다.
예시적인 전달 실패 통지 모드 필드의 가능한 상태들
상태 의미
All 사용자-레벨 인터럽트가 예정된 수신자들 모두에게 전달되지 않을 경우, 전달 불가능 통지가 발행된다
Any 사용자-레벨 인터럽트가 예정된 수신자들 중 어느 것에도 전달되지 않는 경우에만, 전달 불가능 통지가 발행된다
None 사용자-레벨 인터럽트가 예정된 어느 수신자들에게도 전달되지 않더라도, 전달 불가능 통지가 발행되지 않는다
상태 All 은, 사용자-레벨 인터럽트의 모든 예정된 수신자들이 분명히 식별될 수 있는 경우에만 사용된다. 예를 들어, 수신자 그룹 필드가 아래 서술되는 바와 같이 1 비트로 실행되고, 사용자-레벨 인터럽트의 모든 예정된 수신자들을 식별하기 위한 어떤 메커니즘도 없는 경우, 모든 예정된 수신자들은 명백하게 식별될 수 없다. 더 복잡한 실행들도 가능하다는 점에 유의한다. 예를 들어, 전달 불가능한 사용자-레벨에 대한 통지가 필요한 요구되는 수신자들의 세트를 지정할 수 있는 실행이 또한, 더 큰 전달 실패 통지 모드 필드가 주어지는 경우, 가능해진다.
도 3을 다시 참조하면, 시스템(300)의 적어도 하나의 실시예에서, 로컬 APIC(306), 로컬 APIC(308) 및/또는 I/O APIC(310)는 사용자-레벨 인터럽트의 하나 이상의 수신자들을 구성한다. 각 APIC는 사용자-레벨 인터럽트의 예정된 수신자들을 나타내는 수신자 그룹 필드를 포함하고 있다. 이 필드는, (개별적인 필드, 예를 들어 목적지 필드에 부호화된) 단지 하나의 수신자 만이 있는지, 아니면 전송자의 도메인과 관련된 모든 스레드들이 수신자들인지(즉, 브로드캐스트되는지)를 결정하는 단 하나의 비트로 구현될 수 있다. 더 복잡한 구현들은, 수신자 그룹에 대해 전송자 도메인과 관련된 모든 스레드의 서브세트(즉, 멀티캐스트)일 수도 있는 다양한 비트 부호를 갖는 더 큰 필드를 포함한다.
시스템(300)의 적어도 하나의 실시예에서, 수신자 그룹 필드 및/또는 전달 실패 통지 모드 필드는 UICR 레지스터의 일부로 포함된다. 그러나, 다른 실시예들에서, 수신자 그룹 및/또는 전달 실패 통지 모드 정보는 별도의 레지스터들에 저장된다. 시스템(300)의 적어도 하나의 실시예에서, 이러한 필드들중 하나 이상은 UICR 레지스터의 일부이며, 해당 필드들은 어플리케이션 스레드가 사용자-레벨 인터럽트를 전송할 때 마다 설정된다. 빈번한 필드 변경들은 사용자-레벨 인터럽트들을 전송함에 있어서 오버헤드를 상당히 증가시킴으로써, 성능을 영향을 미칠 수도 있다. 시스템(300)의 적어도 하나의 실시예에서, 이러한 필드들중 하나 이상은 하나 이상의 별도 레지스터들에서 실행되며, 미리 구성된다. 시스템(300)의 적어도 하나의 실시예에서, 이러한 필드들중 하나 이상에 대한 디폴트 값들은 하나 이상의 별도 레지스터들에 저장된다. 따라서, 전송자는 UICR 내에 값들을 설정하기만 하면 되는데, 이는 이러한 값들이 디폴트 값들과 다른 경우에 그러하다. 이러한 필드들이 (예를 들어, MMIO 또는 MSR을 통해) 별도 레지스터들에 포함되어 있는 경우, UICR 레지스터에 대한 임의의 업데이트 메커니즘들을 이용하여 이러한 필드들을 업데이트할 수 있다.
시스템(300)의 적어도 하나의 실시예에서, 사용자-레벨 인터럽트 메시지들은 전달 실패 통지 상태 필드(Failed Delivery Notification Status field) 및 수신자 그룹 필드를 포함한다. 전달 실패 통지 상태 필드는 사용자-레벨 인터럽트의 예정된 수신자들중 어느 수신자들이 사용자-레벨 인터럽트를 수신하지 않았는지를 나타낸다. 이 필드는, 시스템이 하나 이상의 예정된 수신자들에 대한 전달 실패들(예를 들어, 상기 설명한 "All" 전달 실패 통지 모드)을 통지하도록 구성될 때에 이용된다. 시스템(300)의 적어도 하나의 실시예에서, 전달 실패 통지 상태 필드는 레지스터 자체로 실행되거나, 또는 기존의 상태 레지스터의 일부분이 될 수 있다. 시스템(300)의 적어도 하나의 실시예에서, "All" 통지 모드를 갖는 멀티캐스트 및 브로드캐스트 메커니즘들을 지원하기 위해, ACK 응답들은 ACK 응답을 전송하는 APIC의 수신자 식별자와 함께 확장된다.
시스템(300)의 적어도 하나의 실시예에서, 로컬 APIC(306), 로컬 APIC(308) 및/또는 I/O APIC(310)는 유니캐스트, 멀티캐스트 및 브로드캐스트 기법들에 의해 사용자-레벨 인터럽트 메시지들을 분배하도록 구성된다. 이러한 기법들은 표 2에서 서술된 동작들에 따라 작동하도록 구현될 수 있다. 사용자-레벨 인터럽트 메시지들은 당업계에 알려져있는 메시지 분배 기법들 또는 네트워크의 어느 지점에서도 직접 또는 간접적으로 수신자에게 도달될 수 있는 다른 적절한 분배 매체를 이용하여 분배될 수 있다는 것을 유념한다.
사용자-레벨 인터럽트 메커니즘의 다양한 구성들과 관련된 동작들
수신자 그룹 통지 모드 동작
유니캐스트 All 상기에서 설명
Any 상기에서 설명
None 단일 수신자에게 사용자-레벨 인터럽트를 전송한 다음, 전송자 APIC는 다른 APIC들로부터의 응답들을 수집한다. 하지만, ACK 메시지들이 없더라도, 전송자 APIC는 전송자 코어에서 전달 불가능한 사용자-레벨 인터럽트를 트리거하지 않는다.
멀티캐스트 All 그룹 내의 수신자들의 집합에 사용자-레벨 인터럽트를 전송한 후, 전송자 APIC는 다른 APIC로부터의 응답들을 이들을 수신자 ID들과 함께 수집한다. 예정된 수신자들의 집합 내의 각 수신자가 ACK로 응답하는 경우, 그 동작은 성공적으로 끝난다. 그렇지 않으면, 전달 불가능한 사용자-레벨 인터럽트가 전송자 코어에서 트리거되고, 도달할 수 없는 예정된 수신자들이 전달 실패 통지 상태 필드에서 보고된다.
Any 그룹 내의 수신자들의 집합에 사용자-레벨 인터럽트를 전송한 후, 전송자 APIC는 다른 APIC로부터의의 응답을 수집한다. 예정된 수신자들의 집합 내에서 적어도 하나의 수신자가 ACK로 응답한 경우, 그 동작은 성공적으로 끝난다. 그렇지 않으면, 전달 불가능한 사용자-레벨 인터럽트가 전송자 코어에서 트리거된다.
None 그룹 내의 수신자들의 집합에 사용자-레벨 인터럽트를 전송한 후, 전송자 APIC는 다른 APIC로부터의 응답들을 수집한다. 하지만, ACK 메시지들이 없더라도, 전송자 APIC는 전송자 코어에서 전달불가능한 사용자-레벨 인터럽트를 트리거하지 않는다.
브로드캐스트 All 그룹 내의 수신자들의 집합에 사용자-레벨 인터럽트를 전송한 후, 전송자 APIC는 다른 APIC로부터의 응답들을 이들의 수신자 ID들과 함께 수집한다. 예정된 수신자들의 집합 내의 각 수신자가 ACK로 응답한 경우, 그 동작은 성공적으로 끝난다. 그렇지 않으면, 전달 불가능한 사용자-레벨 인터럽트가 전송자 코어에서 트리거되고, 도달할 수 없는 예정된 수신자들이 전달 실패 알림 상태 필드에서 보고된다. 이는 모든 예정된 수신자들의 집합이 명시적으로 식별되는 경우에만 실행될 수 있다는 점에 유의한다.
Any 그룹 내의 모든 수신자들의 집합에 사용자-레벨 인터럽트를 전송한 후, 전송자 APIC는 다른 APIC로부터의 응답들을 수집한다. 예정된 수신자들의 집합 내의 적어도 하나의 수신자가 ACK로 응답한 경우, 그 동작은 성공적으로 끝난다. 그렇지 않으면, 전달 불가능한 사용자-레벨 인터럽트가 전송자 코어에서 트리거된다.
None 그룹 내의 모든 수신자들에게 사용자-레벨 인터럽트를 전송한 후, 전송자 APIC는 다른 APIC로부터의 응답들을 수집한다. 하지만, ACK 메시지가 없더라도, 전송자 APIC는 전송자 코어에서 전달 불가능한 사용자-레벨 인터럽트를 트리거하지 않는다.
시스템(300)의 적어도 하나의 실시예에서, 시스템(300)에서 실행되는 소프트웨어는 사용자-레벨 인터럽트들을 지원하기 위해 적어도 하나의 시스템 호출(call)을 포함한다. 표 3은 사용자-레벨 인터럽트들을 지원하기 위한 5개의 예시적인 시스템 호출들을 포함한다. 사용자-레벨 인터럽트들을 교환하도록 어플리케이션 스레드 및/또는 디바이스들의 그룹을 구성하기 위해, 시스템은 CreateDomain() 호출을 사용하여 인터럽트 도메인을 생성한다. 이러한 어플리케이션 스레드 및/또는 디바이스들은 Subscribe() 호출로 인터럽트 도메인에 조인하고, RegisterHandler()로 사용자-레벨 인터럽트 핸들러를 등록한다. 저장 동작에 의해 사용자-레벨 인터럽트가 UICR로 전송된다. 이 핸들러는 UnregisterHandler()로 등록되지 않는다. 어플리케이션 스레드들 및 디바이스들은 (예를 들어, 디바이스 드라이버를 통하여) Unsubscribe() 호출로 인터럽트 도메인을 떠난다.
사용자-레벨 인터럽트 어플리케이션 프로그래밍 인터페이스
범주 기능 설명
인터럽트
도메인
interrupt_domain_identifier
CreateDomain ()
인터럽트 도메인을 생성하고,
고유한 인터럽트 도메인 식별자를 반환한다.
void
Subscribe (interrupt_domain_identifier)
interrupt _ domain _ identifier 에 의해 식별되는 인터럽트 도메인에 호출 스레드를 가입(subscribe)한다.
void
Unsubscribe(interrupt_domain_identifier)
호출 스레드를 interrupt _ domain _ identifier.에서 식별된 인터럽트 도메인에 예약하지 않는다.
인터럽트
핸들러
void
RegisterHandler(handler, interrupt_vector_number)
호출 스레드가 조인된 인터럽트 도메인에 handler를 등록한다. 이러한 핸드러는 interrupt_vector_number.에 맵핑된다.
void
UnregisterHandler
(interrupt_vector_number)
호출 스레드가 조인된 인터럽트 도메인으로부터 interrupt_vector_number 에 매핑된 핸들러를 등록하지 않는다.
회로들 및 물리적인 구조들은 일반적으로 추정되지만, 최근의 반도체 설계 및 제조에서, 물리적인 구조들 및 회로들은 이후의 설계, 시험 또는 제조 단계들에서 이용하기에 적합한 컴퓨터 판독가능한 기술 형태로 구현될 수 있다는 것이 잘 알려져있다. 예시적인 구성들에서 개별적인 구성요소들로서 제시된 구조들 및 기능은 결합된 구조 또는 구성요소로서 구현될 수 있다. 본 발명은 회로들, 회로들의 시스템들, 관련 방법들, 및 이러한 회로들, 시스템들 및 방법들의 컴퓨터 판독가능한 매체 엔코딩들을 포함하도록 고려되는바 , 이들 모두는 본 명세서에서 설명되었으며, 첨부된 청구항들에서 정의된다. 본원에서 이용되는 바와 같이, 컴퓨터 판독가능한 매체는 적어도 디스크, 테이프, 또는 기타 자기, 광학, 반도체(예를 들어, 플래시 메모리 카드, ROM)를 포함한다.
본원에서 설명된 본 발명의 설명은 예시적으로서, 하기의 청구항에서 설명되는 본 발명의 범위를 한정하는 것으로 의도되지 않는다. 예를 들어, 본 발명이 2개의 코어들을 포함하는 실시예에서 설명되었지만, 당업자라면 본원에서의 교시가 부가적인 코어들 또는 다른 프로세싱 유닛들과 함께 이용될 수 있다는 것을 이해할 것이다. 하기의 청구항에서 설명되는 본 발명의 범위 및 정신을 벗어나지 않으면서, 본원에서의 설명에 기초하여, 본원에 개시된 실시예들의 변형들 및 수정들이 이루어질 수 있다.

Claims (18)

  1. 멀티-코어 시스템 내의 복수의 프로세서 코어들 중 제 1 프로세서 코어에 대해, 상기 제 1 프로세서 코어 상에서 실행되고 있는 어플리케이션 스레드(application thread)의 인터럽트 도메인(interrupt domain) 및 상기 제 1 프로세서 코어 상에서 실행되고 있는 상기 어플리케이션 스레드의 수신자 식별자(recipient identifier)가 사용자-레벨 인터럽트 메시지(user-level interrupt message) 내의 해당하는 필드들과 일치할 때, 상기 사용자-레벨 인터럽트 메시지에 의해 지시되는 사용자-레벨 인터럽트를 수락(accept)하는 단계; 및
    상기 사용자-레벨 인터럽트가, 수락된 다른 인터럽트들 보다 높은 우선순위를 갖고, 상기 프로세서 코어 상에서 실행되고 있는 어플리케이션 스레드 보다 높은 우선순위를 가질 때, 상기 사용자-레벨 인터럽트를 처리하는 단계;
    를 포함하는 것을 특징으로 하는 방법.
  2. 제 1 항에 있어서,
    상기 처리 단계는,
    사용자-레벨 인-서비스 레지스터(user-level in-service register)의 상태를 변경하는 단계;
    사용자-레벨 인터럽트 루틴을 실행하는 단계, 여기서 상기 실행하는 단계는 상기 사용자-레벨 인터럽트 메시지의 벡터 번호(vector number) 및 사용자-레벨 인터럽트 디스크립터 테이블 레지스터(interrupt descriptor table register)의 콘텐츠에 기초하여, 사용자-레벨 인터럽트 핸들러를 호출하는 단계; 및
    상기 사용자-레벨 인터럽트 핸들러로부터 프로그램 흐름을 리턴(return)시키는 단계;
    를 포함하는 것을 특징으로 하는 방법.
  3. 제 1 항에 있어서,
    상기 제 1 프로세서 코어와 관련된 로컬 인터럽트 컨트롤러(local interrupt controller)는 I/O 인터럽트 컨트롤러 및 상기 복수의 프로세서 코어들 중 제 2 프로세서 코어와 관련된 개별적인 로컬 인터럽트 컨트롤러 중 적어도 하나로부터 상기 사용자-레벨 인터럽트 메시지를 수신하는 것을 특징으로 하는 방법.
  4. 제 1 항에 있어서,
    사용자-레벨 인터럽트들은 운영 체제 인터럽트들(operating system interrupts) 보다 낮은 우선순위를 가지며; 그리고
    상기 사용자-레벨 인터럽트는 운영 체제 인터럽트를 호출하지 않으면서 처리되는 것을 특징으로 하는 방법.
  5. 제 1 항에 있어서,
    복수의 프로세서 코어들 중 제 2 프로세서 코어에 해당하는 사용자-레벨 인터럽트 제어 레지스터에 기록함으로써, 상기 사용자-레벨 인터럽트를 생성하는 단계를 더 포함하며,
    상기 사용자-레벨 인터럽트 제어 레지스터에 기록하는 것은,
    상기 사용자-레벨 인터럽트 제어 레지스터의 목적지 필드(destination field)를 구성하고;
    상기 사용자-레벨 인터럽트 제어 레지스터의 전달 모드 필드(delivery mode field)를 구성하는 것을 포함하는,
    것을 특징으로 하는 방법.
  6. 제 1 항에 있어서,
    상기 사용자-레벨 인터럽트는 상기 복수의 프로세서 코어들 중 제 2 프로세서 코어 상에서 실행되고 있는 어플리케이션 스레드에 의해 발행(issue)되며,
    상기 방법은, 상기 사용자-레벨 인터럽트의 전달 불가 상태(undeliverable status)를 검출하고, 이에 기초하여 상기 제 2 프로세서 코어에 대한 인터럽트를 트리거(trigger)하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  7. 제 1 항에 있어서,
    상기 인터럽트 도메인 식별자, 상기 인터럽트 수신자 식별자, 및 상기 사용자-레벨 인터럽트가 상기 제 1 프로세서 코어 상에서 실행되고 있는 수신자 어플리케이션 스레드에 전달될 수 없다는 표시에 적어도 부분적으로 기초하여, 메일박스(mailbox)에 상기 사용자-레벨 인터럽트를 전달 불가능한 것(undeliverable)으로서 기록하는 단계;
    수신자 어플리케이션 스레드 상태가 상기 제 1 프로세서 코어에 복구(restore)된 후에, 그리고 상기 수신자 어플리케이션 스레드를 실행시키기 전에, 상기 메일박스의 엔트리들을 처리하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  8. 제 7 항에 있어서,
    상기 메일박스의 오버플로우(overflow)의 통지에 응답하여, 운영 체제에 의해 상기 메일박스의 오버플로우를 핸들링하는 단계를 더 포함하며, 상기 메일박스의 오버플로우의 통지는, 상기 메일박스가 가득 찼을 때 상기 메일박스에 부가적인 사용자-레벨 인터럽트를 전달 불가능으로 기록하고자 하는 시도에 기초하는 것을 특징으로 하는 방법.
  9. 제 1 항에 있어서,
    복수의 사용자-레벨 인터럽트 전달 구성들로부터 선택되는 하나의 사용자-레벨 인터럽트 전달 구성에 따라, 하나 이상의 수신자들에게 상기 사용자-레벨 인터럽트 메시지를 전달하는 단계를 더 포함하며, 상기 하나 이상의 수신자들은 상기 복수의 프로세서 코어들 중 하나 이상의 프로세서 코어들 상에서 실행되는 하나 이상의 어플리케이션 스레드들에 해당하며; 그리고
    상기 복수의 사용자-레벨 인터럽트 전달 구성들은 유니캐스트 전달(unicast delivery), 상기 복수의 프로세서 코어들 중 다중 프로세서 코어들에 해당하는 다중 수신자들에 대한 멀티캐스트 전달(multicast delivery), 및 상기 복수의 프로세서 코어들 중 나머지 프로세서 코어들에 대한 브로드캐스트 전달(broadcast delivery)을 포함하는 것을 특징으로 하는 방법.
  10. 제 9 항에 있어서,
    전달 실패 통지 모드 구성(failed delivery notification mode configuration)에 따라, 사용자-레벨 인터럽트 메시지의 하나 이상의 의도된 수신자들에게 전달불가능한 사용자-레벨 인터럽트의 인디케이터(indicator)를 생성하는 단계를 더 포함하며, 상기 인디케이터는 상기 사용자-레벨 인터럽트가 전달불가능한 의도된 사용자-레벨 인터럽트 수신자들의 수에 적어도 부분적으로 기초하는 것을 특징으로 하는 방법.
  11. 멀티-코어 시스템 내의 복수의 프로세서 코어들 중 제 1 프로세서 코어에 해당하는 로컬 인터럽트 컨트롤러(local interrupt controller)를 포함하고,
    상기 로컬 인터럽트 컨트롤러는, 상기 제 1 프로세서 코어 상에서 실행되고 있는 어플리케이션 스레드의 인터럽트 도메인의 인디케이터를 저장하도록 동작가능한 인터럽트 도메인 식별자 상태 요소(interrupt domain identifier state element); 및
    상기 제 1 프로세서 코어 상에서 실행되고 있는 어플리케이션 스레드의 인디케이터를 저장하도록 동작가능한 수신자 식별자 상태 요소(recipient identifier state element)를 포함하고;
    상기 로컬 인터럽트 컨트롤러는 상기 인터럽트 도메인 식별자 및 상기 수신자 식별자 상태 요소의 콘텐츠에 기초하여, 사용자-레벨 인터럽트를 적어도 부분적으로 처리하도록 동작가능하며; 그리고
    상기 로컬 인터럽트 컨트롤러는 상기 인터럽트 도메인 식별자 상태 요소 및 상기 수신자 식별자 상태 요소의 콘텐츠에 기초하여 인터럽트 메시지들을 생성하도록 동작가능한 것을 특징으로 하는 장치.
  12. 제 11 항에 있어서,
    상기 로컬 인터럽트 컨트롤러는,
    상기 로컬 인터럽트 컨트롤러의 사용자-레벨 인터럽트의 구성을 나타내는 사용자-레벨 인터럽트 제어 상태 요소;
    승인된 사용자-레벨 인터럽트들을 나타내는 사용자-레벨 인-서비스 상태 요소(user-level in-service state element); 및
    승인 보류 중인 사용자-레벨 인터럽트들을 나타내는 사용자-레벨 인터럽트 요청 상태 요소를 더 포함하는 것을 특징으로 하는 장치.
  13. 제 11 항에 있어서,
    적어도 하나의 사용자-레벨 인터럽트 핸들러;
    사용자-레벨 인터럽트 디스크립터 테이블(interrupt descriptor table); 및
    사용자-레벨 인터럽트 디스크립터 테이블 레지스터를 더 포함하며,
    상기 적어도 하나의 사용자-레벨 인터럽트 핸들러는, 상기 사용자-레벨 인터럽트 디스크립터 테이블 레지스터의 콘텐츠에 따라 상기 사용자-레벨 인터럽트 디스크립터 테이블로부터 액세스가능한 것을 특징으로 하는 장치.
  14. 제 11 항에 있어서,
    상기 로컬 인터럽트 컨트롤러는 인터럽트 재지정 테이블(interrupt redirection table)을 포함하는 I/O 인터럽트 컨트롤러 및 다른 개별적인 로컬 인터럽트 컨트롤러 중 적어도 하나로부터 사용자-레벨 인터럽트를 수신할 수 있으며, 상기 인터럽트 재지정 테이블은 인터럽트 도메인 식별자들을 포함하며;
    상기 로컬 인터럽트 컨트롤러는 상기 개별적인 로컬 인터럽트 컨트롤러가 상기 수신된 사용자-레벨 인터럽트를 수락했는 지의 인디케이터를 제공하며; 그리고
    상기 로컬 인터럽트 컨트롤러는, 수신된 인터럽트 메시지 내의 전달 모드 필드가 사용자-레벨 인터럽트 코드를 나타내는 경우, 수신된 인터럽트 메시지 내의 목적지 인디케이터를 수신자 식별자 저장 위치의 컨텐츠와 비교하고, 상기 수신된 인터럽트 메시지 내의 인터럽트 도메인 식별자를 인터럽트 도메인 식별자 저장 위치의 컨텐츠와 비교하는 것을 특징으로 하는 장치.
  15. 제 11 항에 있어서,
    상기 제 1 프로세서 코어에 상응하는 메일박스 루트 저장 요소(mailbox root storage element); 및
    전달 불가능한 사용자-레벨 인터럽트 메시지들을 저장할 수 있고, 메일박스 루트 저장 요소, 인터럽트 도메인 식별자 및 인터럽트 수신자 식별자의 콘텐츠에 따라 상기 제 1 프로세서 코어에 의해 액세스가능한 메일박스 저장 구조를 더 포함하며;
    상기 제 1 프로세서 코어는, 상기 메일박스 루트 저장 요소에 따라 액세스가능한 메일박스 테이블에 저장된 해당하는 메일박스 디스크립터에 기초하여, 상기 메일박스 저장 구조 내의 전달 불가능한 사용자-레벨 인터럽트 메시지를 저장할 수 있는 것을 특징으로 하는 장치.
  16. 제 15 항에 있어서,
    상기 메일박스 루트 저장 요소의 콘텐츠에 따라 액세스가능한 메일박스 테이블을 더 포함하고;
    상기 메일박스 테이블은 상기 복수의 프로세서 코어들에 의해 공유되는 메모리 공간 내에 존재하며; 그리고
    상기 메일박스 테이블은 루트 테이블을 포함하는 테이블들의 계층적인 세트 및 적어도 하나의 수신자 메일박스 포인터 테이블을 포함하며, 상기 루트 테이블은 인터럽트 도메인 식별자들을 수신자 메일박스 포인터 테이블들에 관련시키는 것을 특징으로 하는 장치.
  17. 제 11 항에 있어서,
    상기 로컬 인터럽트 컨트롤러는 전달 실패 통지 모드 상태 요소를 포함하며, 그리고
    상기 로컬 인터럽트 컨트롤러는 상기 전달 실패 통지 모드 상태 요소의 콘텐츠의 인디케이터를 포함하는 사용자-레벨 인터럽트 메시지와, 상기 전달 실패 통지 모드 상태 요소의 콘텐츠에 따라 전달불가능한 사용자-레벨 인터럽트에 대한 전달 실패 통지 중 적어도 하나를 생성할 수 있는 것을 특징으로 하는 장치.
  18. 제 11 항에 있어서,
    상기 로컬 인터럽트 컨트롤러는 상기 하나 이상의 수신자들로부터 임의의 응답들을 수집할 수 있으며, 그리고 상기 하나 이상의 수신자들로부터 수집된 상기 응답들에 따라 인터럽트 동작을 핸들링하도록 구성되는 것을 특징으로 하는 장치.
KR1020127006465A 2009-08-14 2010-08-05 멀티-코어 아키텍처들을 위한 사용자-레벨 인터럽트 메커니즘 KR101651246B1 (ko)

Applications Claiming Priority (8)

Application Number Priority Date Filing Date Title
US23398309P 2009-08-14 2009-08-14
US61/233,983 2009-08-14
US12/633,032 2009-12-08
US12/633,034 2009-12-08
US12/633,034 US8285904B2 (en) 2009-08-14 2009-12-08 Flexible notification mechanism for user-level interrupts
US12/633,007 2009-12-08
US12/633,007 US8255603B2 (en) 2009-08-14 2009-12-08 User-level interrupt mechanism for multi-core architectures
US12/633,032 US8356130B2 (en) 2009-08-14 2009-12-08 Mechanism for recording undeliverable user-level interrupts

Publications (2)

Publication Number Publication Date
KR20120062768A true KR20120062768A (ko) 2012-06-14
KR101651246B1 KR101651246B1 (ko) 2016-09-05

Family

ID=43589266

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020127006465A KR101651246B1 (ko) 2009-08-14 2010-08-05 멀티-코어 아키텍처들을 위한 사용자-레벨 인터럽트 메커니즘

Country Status (7)

Country Link
US (3) US8255603B2 (ko)
EP (1) EP2465032B1 (ko)
JP (1) JP5646628B2 (ko)
KR (1) KR101651246B1 (ko)
CN (1) CN102483705B (ko)
IN (1) IN2012DN02104A (ko)
WO (1) WO2011019578A1 (ko)

Families Citing this family (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9032128B2 (en) * 2008-04-28 2015-05-12 Hewlett-Packard Development Company, L.P. Method and system for generating and delivering inter-processor interrupts in a multi-core processor and in certain shared memory multi-processor systems
US8255603B2 (en) * 2009-08-14 2012-08-28 Advanced Micro Devices, Inc. User-level interrupt mechanism for multi-core architectures
US8566492B2 (en) * 2009-12-31 2013-10-22 Intel Corporation Posting interrupts to virtual processors
US9652365B2 (en) * 2010-08-24 2017-05-16 Red Hat, Inc. Fault configuration using a registered list of controllers
KR101717494B1 (ko) * 2010-10-08 2017-03-28 삼성전자주식회사 인터럽트 처리 장치 및 방법
US20120158631A1 (en) * 2010-12-15 2012-06-21 Scientific Conservation, Inc. Analyzing inputs to an artificial neural network
WO2012082556A2 (en) 2010-12-15 2012-06-21 Advanced Micro Devices, Inc. Computer system interrupt handling
WO2013057769A1 (ja) * 2011-10-20 2013-04-25 富士通株式会社 情報処理装置、情報処理装置の制御方法および制御プログラム
CN102520916B (zh) * 2011-11-28 2015-02-11 深圳中微电科技有限公司 在mvp处理器中消除纹理延迟和寄存器管理的方法
WO2013100948A1 (en) * 2011-12-28 2013-07-04 Intel Corporation Delivering real time interrupts with an advanced programmable interrupt controller
KR101331957B1 (ko) * 2012-01-11 2013-11-21 엘아이지넥스원 주식회사 범용 운영체제의 실시간성 쓰레드 처리를 위한 커널 구성 방법
US9785133B2 (en) * 2012-02-10 2017-10-10 Fisher-Rosemount Systems, Inc. Methods for collaboratively assisting a control room operator
US8849731B2 (en) * 2012-02-23 2014-09-30 Microsoft Corporation Content pre-fetching for computing devices
US9043522B2 (en) * 2012-10-17 2015-05-26 Arm Limited Handling interrupts in a multi-processor system
US9208113B2 (en) 2013-01-15 2015-12-08 Apple Inc. Deferred inter-processor interrupts
US9594704B1 (en) 2013-12-17 2017-03-14 Google Inc. User mode interrupts
US9495311B1 (en) * 2013-12-17 2016-11-15 Google Inc. Red zone avoidance for user mode interrupts
WO2015096120A1 (en) * 2013-12-27 2015-07-02 Intel Corporation Techniques for implementing a secure mailbox in resource-constrained embedded systems
US9563588B1 (en) 2014-01-29 2017-02-07 Google Inc. OS bypass inter-processor interrupt delivery mechanism
US9542254B2 (en) 2014-07-30 2017-01-10 International Business Machines Corporation Application-level signal handling and application-level memory protection
US9665509B2 (en) * 2014-08-20 2017-05-30 Xilinx, Inc. Mechanism for inter-processor interrupts in a heterogeneous multiprocessor system
EP3198460B1 (en) * 2014-09-26 2022-08-17 Intel Corporation Apparatus and method for configuring sets of interrupts
US9910699B2 (en) 2014-10-28 2018-03-06 Intel Corporation Virtual processor direct interrupt delivery mechanism
US9928094B2 (en) * 2014-11-25 2018-03-27 Microsoft Technology Licensing, Llc Hardware accelerated virtual context switching
US9921984B2 (en) * 2014-12-23 2018-03-20 Intel Corporation Delivering interrupts to user-level applications
US10002102B2 (en) * 2015-03-13 2018-06-19 Microchip Technology Incorporated Low-pin microcontroller device with multiple independent microcontrollers
US10002103B2 (en) * 2015-03-13 2018-06-19 Microchip Technology Incorporated Low-pin microcontroller device with multiple independent microcontrollers
US10922252B2 (en) * 2015-06-22 2021-02-16 Qualcomm Incorporated Extended message signaled interrupts (MSI) message data
CN105094976A (zh) * 2015-10-09 2015-11-25 天津国芯科技有限公司 一种中断控制方法和中断控制器
CN105808338A (zh) * 2016-03-17 2016-07-27 李晓波 一种在处理中实现中断响应核可配置的方法及装置
CN107800546B (zh) 2016-08-31 2021-03-30 华为技术有限公司 一种广播消息的管理方法及装置
US10496572B1 (en) 2017-03-06 2019-12-03 Apple Inc. Intracluster and intercluster interprocessor interrupts including a retract interrupt that causes a previous interrupt to be canceled
US10467162B2 (en) * 2017-03-31 2019-11-05 Hewlett Packard Enterprise Development Lp Interrupt based on a last interrupt request indicator and a work acknowledgement
US10838760B2 (en) * 2017-11-29 2020-11-17 Nxp Usa, Inc. Systems and methods for interrupt distribution
CN112470125B (zh) * 2018-07-24 2024-02-20 三菱电机株式会社 中断处理方法、计算机系统以及存储介质
TWI703501B (zh) * 2018-08-23 2020-09-01 慧榮科技股份有限公司 具有分散式信箱架構的多處理器系統及其溝通方法
US11321144B2 (en) 2019-06-29 2022-05-03 Intel Corporation Method and apparatus for efficiently managing offload work between processing units
US11182208B2 (en) 2019-06-29 2021-11-23 Intel Corporation Core-to-core start “offload” instruction(s)
US11372711B2 (en) 2019-06-29 2022-06-28 Intel Corporation Apparatus and method for fault handling of an offload transaction
US11366769B1 (en) * 2021-02-25 2022-06-21 Microsoft Technology Licensing, Llc Enabling peripheral device messaging via application portals in processor-based devices
US20230099517A1 (en) * 2021-09-30 2023-03-30 Intel Corporation User-level interprocessor interrupts

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5909582A (en) * 1996-04-26 1999-06-01 Nec Corporation Microcomputer having user mode interrupt function and supervisor mode interrupt function
JP2002073350A (ja) * 2000-08-31 2002-03-12 Matsushita Electric Ind Co Ltd 割り込み管理装置及び割り込み管理方法

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05189252A (ja) * 1992-01-13 1993-07-30 Meidensha Corp ソフトウェアのイベント処理方法
US6061709A (en) 1998-07-31 2000-05-09 Integrated Systems Design Center, Inc. Integrated hardware and software task control executive
US6370606B1 (en) * 1998-11-05 2002-04-09 Compaq Computer Corporation System and method for simulating hardware interrupts in a multiprocessor computer system
US6148361A (en) * 1998-12-17 2000-11-14 International Business Machines Corporation Interrupt architecture for a non-uniform memory access (NUMA) data processing system
US7529235B2 (en) * 2000-12-06 2009-05-05 Franklin Zhigang Zhang Internet based time distributed message network system and personal mobile access device
US7392282B2 (en) * 2001-03-14 2008-06-24 International Business Machines Corporation Method for ensuring client access to messages from a server
JP2005190207A (ja) * 2003-12-25 2005-07-14 Matsushita Electric Ind Co Ltd 割り込み制御装置、制御方法
GB0404696D0 (en) 2004-03-02 2004-04-07 Level 5 Networks Ltd Dual driver interface
US7080179B1 (en) 2004-03-26 2006-07-18 Foundry Networks, Inc. Multi-level interrupts
US9189230B2 (en) 2004-03-31 2015-11-17 Intel Corporation Method and system to provide concurrent user-level, non-privileged shared resource thread creation and execution
US7689747B2 (en) 2005-03-28 2010-03-30 Microsoft Corporation Systems and methods for an augmented interrupt controller and synthetic interrupt sources
US7581051B2 (en) 2005-05-16 2009-08-25 Microsoft Corporation Method for delivering interrupts to user mode drivers
US20070073928A1 (en) 2005-09-26 2007-03-29 John Bruno High-speed input/output signaling mechanism using a polling CPU and cache coherency signaling
US7493436B2 (en) * 2006-10-26 2009-02-17 International Business Machines Corporation Interrupt handling using simultaneous multi-threading
US8689215B2 (en) * 2006-12-19 2014-04-01 Intel Corporation Structured exception handling for application-managed thread units
US7627706B2 (en) * 2007-09-06 2009-12-01 Intel Corporation Creation of logical APIC ID with cluster ID and intra-cluster ID
US8103816B2 (en) 2008-10-28 2012-01-24 Intel Corporation Technique for communicating interrupts in a computer system
US8255603B2 (en) 2009-08-14 2012-08-28 Advanced Micro Devices, Inc. User-level interrupt mechanism for multi-core architectures

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5909582A (en) * 1996-04-26 1999-06-01 Nec Corporation Microcomputer having user mode interrupt function and supervisor mode interrupt function
JP2002073350A (ja) * 2000-08-31 2002-03-12 Matsushita Electric Ind Co Ltd 割り込み管理装置及び割り込み管理方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
M. Parker, 'A case for user-level interrupts.', ACM SIGARCH Computer Architecture News, Vol. 30, Issue 3, pp.17-18, Jun. 2002. *
S. Ruocco, 'A real-time programmar's tour of general-purpose L4 microkernels.', EURASP Journal on Embedded Systems, Vol. 2008, No. 11, Jan. 2008. *

Also Published As

Publication number Publication date
KR101651246B1 (ko) 2016-09-05
EP2465032A1 (en) 2012-06-20
CN102483705A (zh) 2012-05-30
JP5646628B2 (ja) 2014-12-24
US8285904B2 (en) 2012-10-09
US20110040913A1 (en) 2011-02-17
EP2465032B1 (en) 2020-12-16
US20110040915A1 (en) 2011-02-17
IN2012DN02104A (ko) 2015-08-21
WO2011019578A1 (en) 2011-02-17
US20110040914A1 (en) 2011-02-17
US8255603B2 (en) 2012-08-28
CN102483705B (zh) 2014-12-17
JP2013502004A (ja) 2013-01-17
US8356130B2 (en) 2013-01-15

Similar Documents

Publication Publication Date Title
KR101651246B1 (ko) 멀티-코어 아키텍처들을 위한 사용자-레벨 인터럽트 메커니즘
US7260663B2 (en) System and method for presenting interrupts
US11489791B2 (en) Virtual switch scaling for networking applications
US7996593B2 (en) Interrupt handling using simultaneous multi-threading
US7290077B2 (en) Event queue structure and method
EP1856610B1 (en) Transmit completion event batching
US8190864B1 (en) APIC implementation for a highly-threaded x86 processor
US7769923B2 (en) Interrupt management for multiple event queues
US9798595B2 (en) Transparent user mode scheduling on traditional threading systems
US20090150892A1 (en) Interrupt controller for invoking service routines with associated priorities
CN115237556A (zh) 调度方法及装置、芯片、电子设备及存储介质
CN111831408A (zh) 异步任务处理方法、装置、电子设备及介质
US10229074B2 (en) Techniques for handling interrupts in a processing unit using interrupt request queues
US8869171B2 (en) Low-latency communications
US9460033B2 (en) Apparatus and method for interrupt collecting and reporting status and delivery information
CN117873665A (zh) 任务处理方法、芯片、电子设备及可读存储介质
CN114911658A (zh) 一种实时运行系统的检测方法及计算设备
CN114911703A (zh) 一种实时运行系统的检测方法及计算设备

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E902 Notification of reason for refusal
GRNT Written decision to grant