KR101501181B1 - 인터페이스 프로세서 - Google Patents

인터페이스 프로세서 Download PDF

Info

Publication number
KR101501181B1
KR101501181B1 KR1020097021480A KR20097021480A KR101501181B1 KR 101501181 B1 KR101501181 B1 KR 101501181B1 KR 1020097021480 A KR1020097021480 A KR 1020097021480A KR 20097021480 A KR20097021480 A KR 20097021480A KR 101501181 B1 KR101501181 B1 KR 101501181B1
Authority
KR
South Korea
Prior art keywords
thread
port
indication
threads
execution
Prior art date
Application number
KR1020097021480A
Other languages
English (en)
Other versions
KR20090122992A (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 KR20090122992A publication Critical patent/KR20090122992A/ko
Application granted granted Critical
Publication of KR101501181B1 publication Critical patent/KR101501181B1/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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/3237Power saving characterised by the action undertaken by disabling clock generation or distribution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/3287Power saving characterised by the action undertaken by switching off individual functional units in the computer system
    • 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
    • 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
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D30/00Reducing energy consumption in communication networks
    • Y02D30/50Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate

Abstract

본 발명은 프로세서를 제공하며, 상기 프로세서는, 제 1 포트 및 제 2 포트를 포함하며, 상기 제 1 포트는 상기 제 1 포트에서의 제 1 동작에 따라 제 1 표시를 발생시키도록 동작가능하고, 상기 제 2 포트는 상기 제 2 포트에서의 제 2 동작에 따라 제 2 표시를 발생시키도록 동작가능하다. 프로세서는 또한, 복수의 쓰레드들을 실행시키는 실행 유닛과; 그리고 상기 표시들을 수신하도록 연결되어, 상기 표시들에 근거하여 상기 실행 유닛에 의한 실행을 위해 상기 복수의 쓰레드들을 스케쥴링하는 쓰레드 스케쥴러를 포함한다. 상기 스케쥴링은 상기 표시 각각을 수신할 때까지 쓰레드의 실행을 보류하는 것을 포함한다. 상기 제 1 동작과 상기 제 2 동작 각각은 각각의 대응하는 쓰레드들과 관련된다.

Description

인터페이스 프로세서{INTERFACE PROCESSOR}
본 발명은 인터페이스 프로세서(interface processor)에 관한 것이고, 특히 다른 프로세서들 혹은 외부 디바이스들과 인터페이스(interface)하기 위한 프로세서에 관한 것이지만, 반드시 이러한 것에만 한정되는 것은 아니다.
프로세서 설계자들이 핸들링(handling)해야 하는 많은 것들 중 하나는, 프로세서와 통신하려는 외부 디바이스의 개수가 점점 증가하는데 따른 문제를 처리해야하는 것이다. 일반적으로, 이것은 외부 디바이스에 연결된 포트(port)들에서 일어나는 동작들을 핸들링하기 위해 어떤 종류의 인터럽트 핸들링 능력(interrupt handling capacity)을 프로세서에 제공함으로써 이루어진다. 더욱이, 더 정교한 인터페이스 로직이 예를 들어 포트 당 복수의 외부 디바이스들을 다루기 위해 이러한 포트들에서 사용된다.
여러 상황에서 인터페이스가 사용된다. 배경기술의 예를 통해 본 명세서에서 설명되는 그 한 가지는 모바일 애플리케이션 프로세싱에서의 인터페이스이다.
도 1은 모바일 애플리케이션 프로세서(2)의 예시적 애플리케이션을 나타낸다. 애플리케이션 프로세서(2)는 CPU(4)와 복수의 인터페이스 제어기들(6)을 포함하며, 복수의 인터페이스 제어기들(6)은 복수의 주변 디바이스들(8)과 인터페이스 한다. 인터페이스 제어기들은, 하드 드라이브(hard-drive, HDD)(8a) 및 SDRAM 메모리(8b)와 인터페이스하는 메모리 제어기(6a)와; 카메라(8c)와 인터페이스하는 비디오 제어기(6b)와; LCD 디스플레이(8d)와 인터페이스하는 디스플레이 제어기(6c)와; 마이크로폰(8e), 스피커(8f), 및 헤드셋(8g)과 인터페이스하는 오디오 제어기(6d)와; 그리고 키보드(8h), 범용 직렬 버스(Universal Serial Bus, USB) 디바이스(8i), 보안 디지털(Secure Digital, SD) 카드(8j), 멀티미디어 카드(Multi-Media Card, MMC)(8k), 및 범용 비동기 수신기/송신기(Universal Asynchronous Receiver/Transmitter, UART) 디바이스(8l)와 인터페이스하는 접속 제어기(connectivity controller)(6e)를 포함한다. 인터페이스 제어기들(6)은 전형적으로 버스(3)를 통해 CPU(4)에 연결된다. 시스템은 또한 파워 제어기(power controller)(10)와 라디오 프로세서(radio processor)(12)를 포함한다.
주의할 것으로, 인터페이스 제어기들(6)은 약간 개략적으로 도시되었지만, 일반적으로 어떤 종류의 전용 I/O 로직 혹은 특별히 구성된 포트들을 나타낸다.
일반적으로, 외부 인터페이스는 인터럽트를 사용하여 달성되거나 혹은 폴링(polling)에 의해 달성된다. 인터럽트가 사용될 때, 외부 주변 디바이스들은 신호를 전송하여 프로세서에 입력될 준비가 된 데이터가 있는지를 알려주거나 혹은 프로세서로부터의 데이터가 요구되는지를 프로세서에게 알려준다. 폴링이 사용될 때, 프로세서는, 디바이스가 데이터를 공급하거나 수신할 수 있는지 여부를 결정하기 위해 디바이스의 상태를 계속적으로 점검한다.
도 1에서와 같은 애플리케이션 프로세서(2)를 구현하는 한 가지 가능한 방법 은 ASIC(Application Specific Integrated Circuit) 마이크로프로세서를 사용하는 것이다. ASIC는 가능하게는 특정 애플리케이션 전용의 마이크로프로세서 및 특정 애플리케이션에 적합하도록 최적화된 마이크로프로세서를 포함하는 하드와이어링된 디바이스이다. 소정의 기능에 있어, 이들은 일반적으로 다른 옵션들보다 값이 더 싸고, 전력을 덜 소모한다. 그러나, 이들은 설계하기 복잡하고, 사전에 설계되어야만 하고, 그리고 쉽게 재구성될 수 없다.
달리 가능한 또 다른 것은 필드 프로그래밍가능 게이트 어레이(Field Programmable Gate Array, FPGA) 디바이스를 사용하는 것이다. FPGA는 제조 이후에 "현장에서(in the field)"에서 구성될 수 있는 반도체 디바이스이다. FPGA를 구성하기 위해, 먼저, 예를 들어 배선 약도(schematic diagram)를 그리거나 기능을 기술하는 텍스트 파일을 생성함으로써 요구된 로직 기능을 모델링하기 위해 컴퓨터가 사용된다. FPGA는 정적으로 구성되는 상호접속들 통해 통신하는 룩업 테이블(look-up table)들의 어레이를 포함한다. 컴퓨터 모델은 FPGA 벤더(vendor)에 의해 제공되는 소프트웨어를 사용하여 컴파일되고, FPGA 룩업 테이블에 다운로드될 수 있는 바이너리 파일을 생성한다. 이것은 장비 제조자들이 그들 자신의 개별 필요에 맞도록 FPGA를 만들 수 있게 한다.
이러한 예에서, 인터페이스 제어기(6)는 FPGA로서 구현된다. 이로 인해 모바일 전화기의 제조자는 일반적인 FPGA 디바이스(2)를 구입하여 그들의 요구된 애플리케이션에 특정되도록 바로(on site)(즉, 현장에서) 이들을 구성할 수 있는 장점이 있다. 그러나, FPGA의 단점은 ASIC보다 값이 비싸고, 더 느리며, 전력을 더 많 이 소모한다는 것이다.
대안적인 예에서, 전체 칩(2)은 FPGA로 구성될 수 있거나 혹은 칩(2)은 칩(2)과 각각의 주변기(8) 간에 개별 FPGA 칩이 접속된 범용 프로세서일 수 있다. 그러나, 이러한 옵션들은 값이 훨씬 더 비싸고 전력 소비가 훨씬 더 크며, 따라서 대부분의 모바일 폰 및 다른 가전 디바이스에 대해 사용되지 않고 있다.
ASIC의 가격, 속도, 범위 및 에너지 소비 레벨을 구비하면서 FPGA의 구성가능성를 달성하는 것은 이로운 것이다.
본 발명의 일 실시형태에 따르면, 프로세서가 제공되며, 상기 프로세서는, 제 1 포트(port)와, 여기서 상기 제 1 포트는 상기 제 1 포트에서의 제 1 동작(activity)에 따라 제 1 표시(indication)를 발생시키도록 동작가능하고; 제 2 포트와, 여기서 상기 제 2 포트는 상기 제 2 포트에서의 제 2 동작에 따라 제 2 표시를 발생시키도록 동작가능하고; 복수의 쓰레드(thread)들을 실행시키도록 구성된 실행 유닛(execution unit)과; 그리고 상기 표시들을 수신하도록 연결되어, 상기 표시들에 근거하여 상기 실행 유닛에 의한 실행을 위해 상기 복수의 쓰레드들을 스케쥴링(sceduling)하도록 구성된 쓰레드 스케쥴러(thread scheduler)를 포함하고, 상기 스케쥴링은 상기 표시 각각을 수신할 때까지 쓰레드의 실행을 보류하는 것을 포함하고, 상기 제 1 동작과 상기 제 2 동작 각각은 각각의 대응하는 쓰레드들과 관련되어 있다.
쓰레드들 각각은 각각의 포트에서의 동작과 관련되어 있고 쓰레드 스케쥴러가 동작의 표시 대기중 쓰레드를 보류시키도록 연결되어 있기 때문에, 프로세서는 포트에서 발생하는 동작에 대해 빠르게 응답할 수 있는 유리한 "장점(primed)"을 가지고 있다. 따라서, 본 발명은 외부 자극에 대해 빠른 응답을 요구되는 애플리케이션에서 실질적인 개선을 제공한다. 더욱이, 쓰레드의 보류 동안, 만약 다른 쓰레드들이 여전히 스케쥴링되어야 한다면 쓰레드 스케쥴러는 이러한 쓰레드들을 스케쥴링하기 시작할 수 있다.
이러한 쓰레드 보류 방법은 빠른 반응 시간이 요구되는 때 인터럽트의 사용에 바람직하다. 쓰레드 보류를 사용하여, 쓰레드 스케쥴러는 관련 동작을 예측하여 쓰레드를 실행할 준비를 할 수 있고, 이것은 앞서 설명된 바와 같이 프로세서가 반응할 준비가 되어있음을 의미한다. 대조적으로, 인터럽트를 사용하여, 실행 유닛은 어떤 잠재적으로 관련되지 않은 코드를 실행시키면서 외부 디바이스로부터의 신호에 의해 인터럽트된다. 이러한 인터럽트의 경우에, 현재 프로그램 상태는 인터럽트에 따라 동작될 수 있기 전에 저장되어야만 한다. 따라서 인터럽트를 사용하는 반응 시간은 훨씬 더 느리다. 폴링(polling)은, 계속적인 질의 및 응답 요구로 인해 에너지 효율이 낮다.
상기 쓰레드 스케쥴러는 제 1 이벤트를 기다리면서 보류된 제 1 쓰레드에 관한 제 1 쓰레드 식별자를, 상기 제 1 포트와 관련된 식별자 레지스터에 전송하도록 구성될 수 있다. 상기 쓰레드 스케쥴러는 제 2 이벤트를 기다리면서 보류된 제 2 쓰레드에 관한 제 2 쓰레드 식별자를, 상기 제 2 포트와 관련된 식별자 레지스터에 전송하도록 구성될 수 있다. 이러한 실시예에서, 쓰레드 스케쥴러는 쓰레드의 실행을 관리하도록 구성되고, 그러나 쓰레드 스케쥴러가 쓰레드 내에서 어떤 동작에 따라 달라지는 명령을 발견하게 될 때, 쓰레드 스케쥴러는 그 책임을 관련된 각각의 포트에 전달함으로써 유리하게 그 쓰레드를 "따로 놔둘(set aside)" 수 있다. 이것은 또한 반응 시간에 도움을 준다.
상기 쓰레드 스케쥴러는, 상기 제 1 쓰레드의 보류 시, 연속 포인트 벡터(continuation point vector)를 상기 제 1 포트와 관련된 벡터 레지스터에 전송하도록 구성될 수 있고, 그리고 상기 연속 포인트 벡터는 상기 제 1 동작에 따라 상기 실행 유닛에 반환될 수 있다. 연속 포인트 벡터는, 각각의 동작의 발생시 실행이 계속되어야 하는 코드 내의 포인트를 식별한다. 유리한 것으로, 이것은 쓰레드에 대한 추가적 책임이 포트에 전달될 수 있게 하고, 그리고 미해결 명령들로 채워진 유지될 필요가 없는 명령 버퍼를 비우게 한다.
더욱이, 연속 포인트 벡터들을 사용함으로써 복수의 동작들(혹은 이벤트들)은 쓰레드 단위로 핸들링될 수 있다. 따라서, 상기 제 1 쓰레드는 복수의 포트들로부터의 동작과 관련될 수 있고, 복수의 포트들 각각은 그 동작에 따라 각각의 표시를 발생시키도록 동작가능하고, 상기 실행 유닛은 상기 복수의 포트들 각각에 복수의 연속 포인트 벡터들 각각을 전송하도록 구성될 수 있고, 각각의 연속 연속 포인트 벡터는 각각의 상기 동작에 따라 반환되며, 그리고 상기 쓰레드 스케쥴러는 상기 각각의 표시들 중 적어도 하나를 수령할 때까지 상기 제 1 쓰레드의 실행을 보류하도록 구성될 수 있다.
상기 프로세서는, 보류된 쓰레드들의 쓰레드 식별자들 모두가 포트에 전송되면, 상기 실행 유닛, 상기 쓰레드 스케쥴러, 및 클럭 중 적어도 하나의 전원을 차단하도록 구성될 수 있다. 상기 프로세서는, 상기 쓰레드 식별자들 중 적어도 하나가 각각의 포트로부터 반환되면, 상기 실행 유닛, 상기 쓰레드 스케쥴러, 및 상기 클럭 중 상기 적어도 하나의 전원을 공급하도록 구성될 수 있다. 따라서, 만약 모든 쓰레드들의 스케쥴링이 취소되고, 모든 쓰레드들이 각각의 동작에 따라 각각의 포트에 전해진다면, 프로세서는 동작들 중 하나가 발생할 때까지 컴포넌트들 일부 혹은 모두의 전원을 차단하도록 구성될 수 있다. 이것은 시스템의 전력 소비를 크게 개선한다.
상기 제 1 포트와 상기 제 2 포트 중 적어도 하나는, 동작 핸들링 로직(activity handling logic)을 포함할 수 있고, 그리고 조건을 저장하기 위한 적어도 하나의 조건 레지스터(condition register)와 관련될 수 있으며, 상기 동작 핸들링 로직은 상기 포트에서의 동작을 모니터링하고 상기 조건을 이행하는 상기 동작에 따라 상기 표시를 발생시키도록 구성될 수 있다. 상기 실행 유닛은 각각의 조건 레지스터에 각각의 조건을 전송하도록 구성될 있다. 유리하게는, 이것은 쓰레드 스케쥴러가 포트에 조건을 제공하도록 함으로써 시스템의 범용성을 개선하여, 포트들은 더 특정적이고 다양한 타입의 조건을 핸들링할 수 있다.
상기 제 1 포트는 포트 이벤트 인에이블 플래그(port event enable flag)와 관련될 수 있고, 그리고 상기 쓰레드 스케쥴러는 상기 포트 이벤트 인에이블 플래그를 어써팅(asserting)함으로써 상기 스케쥴링을 트리거링(triggering)하도록 상기 제 1 동작을 인에이블(enable)시키고, 그리고 상기 포트 이벤트 인에이블 플래그를 디어써팅(de-asserting)함으로써 상기 스케쥴링을 트리거링하는 것으로부터 상기 제 1 동작을 디스에이블(disable)시키도록 구성될 수 있다. 상기 제 1 쓰레드는 쓰레드 이벤트 인에이블 플래그(thread event enable flag)와 관련되고, 그리고 상기 쓰레드 스케쥴러는 상기 쓰레드 이벤트 인에이블 플래그를 어써팅함으로써 상기 제 1 동작에 따라 스케쥴링되도록 상기 제 1 쓰레드를 인에이블시키고 그리고 상기 쓰레드 이벤트 인에이블 플래그를 디어써팅함으로써 상기 제 1 동작에 따라 스케쥴링되는 것으로부터 상기 제 1 쓰레드를 디스에이블시키도록 구성될 수 있다. 상기 포트 이벤트 인에이블 플래그와 상기 쓰레드 이벤트 인에이블 플래그 중 적어도 하나가 디어써팅되는 동안, 상기 쓰레드 스케쥴러는 포트로부터의 제 3 동작의 제 3 표시 대기중 상기 제 1 쓰레드의 실행을 보류하도록 구성될 수 있다.
상기 포트 이벤트 인에이블 플래그와 상기 쓰레드 이벤트 인에이블 플래그 중 적어도 하나는 상기 제 1 동작의 발생에 의해 자동으로 디어써팅될 수 있다.
복수의 각각의 포트 이벤트 인에이블 플래그들은 상기 제 1 쓰레드와 관련된 복수의 포트들 각각과 관련될 수 있고, 그리고 쓰레드 스케쥴러는 상기 쓰레드 이벤트 인에이블 플래그를 어써팅하고, 후속적으로 상기 복수의 포트 이벤트 인에이블 플래그들을 어써팅하도록 구성될 수 있다.
상기 프로세서는 버스에 의해 상기 실행 유닛에 연결되는 프로그램 메모리를 포함할 수 있고, 여기서 상기 쓰레드 스케쥴러는 상기 버스로부터 분리된 적어도 하나의 접속에 의해 상기 제 1 포트와 상기 제 2 포트 각각으로부터 상기 표시들을 수신하도록 연결된다. 이것은 포트들과 쓰레드 스케쥴러 간의 통신에서 버스 중재가 필요 없게 하고, 따라서 프로세서의 반응 시간을 훨씬 더 개선한다.
상기 프로세서는 쓰레드 레지스터들의 복수의 세트들을 포함할 수 있고, 쓰레드 레지스터들의 각각의 세트는 상기 복수의 쓰레드들 각각에 관한 정보를 저장하도록 할당된다. 상기 프로세서는 상기 세트들 중 적어도 두 개 세트들 간에 적어도 하나의 채널을 포함할 수 있고, 상기 쓰레드 스케쥴러는 상기 채널을 통해 일어나는 동작에 근거하여 쓰레드를 스케쥴링하도록 구성될 수 있다.
상기 프로세서는 칩(chip) 상에서 구현될 수 있다. 상기 제 1 포트와 상기 제 2 포트 중 적어도 하나는 상기 칩 상의 또 다른 프로세서와 통신하기 위한 내부 포트일 수 있다. 상기 제 1 포트와 상기 제 2 포트 중 적어도 하나는 상기 칩 외부에 있는 디바이스와 통신하기 위한 외부 포트일 수 있다. 적어도 하나의 외부 포트는 상기 칩의 물리적 경계에 있는 핀에서 일어나는 상승 신호 에지 혹은 하강 신호 에지를 검출하기 위한 핀 포트일 수 있다. 적어도 하나의 외부 포트는 포트에서의 하나 또는 그 이상의 비트들의 순간 로직 레벨을 핸들링하기 위한 데이터 포트일 수 있다.
상기 실행 유닛은 쓰레드의 보류 및 수행을 위한 전용 명령을 인식하고 실행하도록 구성될 수 있다.
상기 쓰레드 스케쥴러는 또한 인터럽트에 근거하여 쓰레드를 스케쥴링하도록 구성될 수 있다. 상기 인터럽트에 근거하여 스케쥴링되는 쓰레드는 상기 제 1 쓰레드이고, 상기 인터럽트는 보류되는 동안 상기 제 1 쓰레드를 인터럽트한다.
상기 쓰레드 스케쥴러는, 만약 관련 동작이, 그 동작에 의존하는 쓰레드 내에서 명령의 실행 시 혹은 이전에 일어난다면 그 쓰레드를 보류 없이 스케쥴링하도록 구성될 수 있다.
본 발명의 또 다른 실시형태에 따르면, 제 1 포트와 제 2 포트를 구비한 프로세서에서의 실행을 위한 복수의 쓰레드들을 스케쥴링하는 방법이 제공되고, 상기 방법은 상기 제 1 포트에서의 제 1 동작과 상기 제 2 포트에서의 제 2 동작을 각각의 대응하는 쓰레드들과 관련시키는 단계와; 상기 제 1 동작에 따라 상기 제 1 포트에서의 제 1 표시를 발생시키는 단계와; 상기 제 2 동작에 따라 상기 제 2 포트에서의 제 2 표시를 발생시키는 단계와; 그리고 상기 표시들에 근거하여 실행을 위한 상기 쓰레드들을 스케쥴링하는 단계와, 상기 스케쥴링은 각각의 상기 표시를 수신할 때까지 쓰레드의 실행을 보류하는 것을 포함하고; 그리고 상기 스케쥴링에 따라 상기 쓰레드들을 실행시킴으로써 상기 쓰레드들을 수행하는 단계를 포함한다.
본 발명의 또 다른 실시형태에 따르면, 실행을 위한 복수의 쓰레드들의 스케쥴링에서의 사용을 위한 포트가 제공되고, 상기 포트는, 상기 포트에서의 동작에 따라 표시를 발생시키도록 구성된 동작 핸들링 로직과; 상기 동작과 관련된 쓰레드를 식별하는 정보를 저장하기 위한 레지스터와; 그리고 조건을 저장하기 위한 레지스터를 포함하고, 여기서 상기 동작 핸들링 로직은 상기 동작이 상기 조건을 만족시킬 때 칩 상에서 제 1 표시를 전송하도록 구성된다.
본 발명의 또 다른 실시형태에 따르면, 제 1 포트와 제 2 포트를 구비한 프로세서에서의 실행을 위한 복수의 쓰레드들을 스케쥴링하는 쓰레드 스케쥴러가 제공되며, 여기서 상기 쓰레드 스케쥴러는 상기 제 1 포트에서의 제 1 동작에 따라 상기 제 1 포트에 의해 발생된 제 1 표시를 수신하도록 구성되고, 상기 쓰레드 스케쥴러는 상기 제 2 포트에서의 제 2 동작에 따라 상기 제 2 포트에 의해 발생된 제 2 표시를 수신하도록 구성되고, 그리고 상기 쓰레드 스케쥴러는 상기 표시들에 근거하여 상기 실행 유닛에 의한 실행을 위해 상기 복수의 쓰레드들을 스케쥴링하도록 구성되고, 여기서 상기 스케쥴링은 상기 표시 각각을 수신할 때까지 쓰레드의 실행을 보류하는 것을 포함하고, 상기 제 1 동작과 상기 제 2 동작 각각은 각각의 대응하는 쓰레드들과 관련되어 있다.
본 발명의 또 다른 실시형태에 따르면, 모바일 단말기(mobile terminal)가 제공되며, 상기 모바일 단말기는, 모바일 애플리케이션 프로세서(mobil applications processor)와, 적어도 하나의 주변 디바이스와, 그리고 상기 모바일 애플리케이션 프로세서와 상기 주변 디바이스 사이에 연결된 인터페이스 프로세서를 구비하며, 상기 인터페이스 프로세서는, 제 1 포트와, 여기서 상기 제 1 포트는 상기 제 1 포트에서의 제 1 동작에 따라 제 1 표시를 발생시키도록 동작가능하고; 제 2 포트와, 여기서 상기 제 2 포트는 상기 제 2 포트에서의 제 2 동작에 따라 제 2 표시를 발생시키도록 동작가능하고; 복수의 쓰레드들을 실행시키도록 구성된 실행 유닛과; 그리고 상기 표시들을 수신하도록 연결되어, 상기 표시들에 근거하여 상기 실행 유닛에 의한 실행을 위해 상기 복수의 쓰레드들을 스케쥴링하도록 구성된 쓰레드 스케쥴러를 포함하고, 상기 스케쥴링은 각각의 준비 신호를 수신할 때까지 쓰레드의 실행을 보류하는 것을 포함하고, 상기 제 1 동작과 상기 제 2 동작 각각은 각각의 대응하는 쓰레드들과 관련되어 있다.
본 발명의 또 다른 실시형태에 따르면, 상호연결된 프로세서들의 어레이(array)가 제공되며, 상기 프로세서들 중 적어도 하나의 프로세서는, 제 1 포트와, 여기서 상기 제 1 포트는 상기 제 1 포트에서의 제 1 동작에 따라 제 1 표시를 발생시키도록 동작가능하고; 제 2 포트와, 여기서 상기 제 2 포트는 상기 제 2 포트에서의 제 2 동작에 따라 제 2 표시를 발생시키도록 동작가능하고; 복수의 쓰레드들을 실행시키도록 구성된 실행 유닛과; 그리고 상기 표시들을 수신하도록 연결되어, 상기 표시들에 근거하여 상기 실행 유닛에 의한 실행을 위해 상기 복수의 쓰레드들을 스케쥴링하도록 구성된 쓰레드 스케쥴러를 포함하고, 상기 스케쥴링은 각각의 표시를 수신할 때까지 쓰레드의 실행을 보류하는 것을 포함하고, 상기 제 1 동작과 상기 제 2 동작 각각은 각각의 대응하는 쓰레드들과 관련되어 있으며, 상기 제 1 포트와 상기 제 2 포트 중 적어도 하나는 상기 적어도 하나의 프로세서를 상기 어레이 내의 또 다른 프로세서와 연결시킨다.
본 발명이 더 잘 이해되도록 하기 위해, 그리고 본 발명이 어떻게 실시될 수 있는지를 보여주기 위해, 본 발명은 대응하는 도면을 참조하여 예시적으로 설명된다.
도 1은 본 발명의 기술분야에서 알려진 바와 같이 FPGA 디바이스의 예시적 애플리케이션을 나타낸 것이다.
도 2는 인터페이스 프로세서의 예시적 애플리케이션을 나타낸 것이다.
도 2A는 인터페이스 프로세서의 또 다른 예시적 애플리케이션을 나타낸다.
도 3은 인터페이스 프로세서의 아키텍처를 도식적으로 나타낸 것이다.
도 4는 포트를 도식적으로 나타낸 것이다.
도 5는 쓰레드 레지스터 세트들을 도식적으로 나타낸 것이다.
도 6은 쓰레드 스케쥴러의 동작을 나타낸 흐름도이다.
도 7은 쓰레드 레지스터 세트들 간의 채널들을 도식적으로 나타낸 것이다.
도 7A는 채널 단부(channel end)를 도식적으로 나타낸 것이다.
도 2는 모바일 전화기 내의 인터페이스 프로세서들의 예시적 애플리케이션을 보여준다. 모바일 애플리케이션 프로세서(2)는 복수의 주변 디바이스들(8)과 통신할 필요가 있다. 도 1에 도시된 바와 같이, 애플리케이션 프로세서(2)는, 버스(3), CPU(4), 및 메모리 제어기(6a)를 포함하는데, 메모리 제어기(6a)는 하드 드라이브(HDD)(8a) 및 SDRAM 메모리(8b) 뿐만 아니라 파워 제어기(10) 및 라디오 프로세서(12)와 인터페이스한다.
그러나, 전용 제어기들(6) 대신에, 도 2의 구성은 CPU(4)가 범용 포트(7)를 통해 외부와 통신할 수 있게 할 수 있다. 이러한 예에서, 범용 포트(7a 및 7b)가 카메라(8c) 및 LCD 디스플레이(8d)와의 인터페이스를 위해 제공되고, 범용 포트(7c)가 마이크로폰(8e), 스피커(8f), 및 헤드셋(8g)과의 인터페이스를 위해 제공되고, 그리고 범용 포트(7d)가 키보드(8h), 범용 직렬 버스(Universal Serial Bus, USB) 디바이스(8i), SD(Secure Digital) 카드(8j), MMC(Multi-Media Card)(8k), 및 범용 비동기 수신기/송신기(Universal Asynchronous Receiver/Transmitter, UART) 디바이스(81)와의 인터페이스를 위해 제공된다.
도 2에서, 인터페이스 프로세서(14a, 14b 및 14c)는 관련 포트들(7)의 출력에 놓일 수 있고, 이 경우 제 1 인터페이스 프로세서(14a)는 이미지 디바이스들(8c-8d)과 범용 포트들(7a-7b) 사이에 연결되고, 제 2 인터페이스 프로세서(14b)는 오디오 디바이스들(8e-8g)과 범용 포트들(7c) 사이에 연결되고, 그리고 제 3 인터페이스 프로세서(14c)는 범용 포트들(7d)과 다양한 연결 디바이스(8h-8m) 사이에 연결된다. 포트들(7)은 단지 범용의 포트일 필요가 있는데, 왜냐하면 애플리케이션 특정 디스플레이, 오디오 및 연결 기능이 이후 설명되는 방식으로 인터페이스 프로세서(14a-14c)에 의해 구현되기 때문이다. 포트들(7)은 FPGA 로직을 사용할 필요가 없는데, 왜냐하면 인터페이스 프로세서들(14)이 FPGA가 제공하는 유연성과 구성가능성을 제공하기 때문이다. 인터페이스 프로세서(14a)는 포트(7a 및 7b)에 연결되는 포트(22a 및 22b)를 가지고, 그리고 외부 디바이스(8c 및 8g)에 연결되는 포트(22c, 22d, 22e 및 22f)를 갖는다. 인터페이스 프로세서(14b 및 14c)도 유사한 포트들을 가지지만 도 2에서는 도시되지 않았다.
인터페이스 프로세서들은 전형적으로, 인터페이스를 통해 데이터를 전달하기 위해 사용되는 특정 프로토콜을 구현하고, 데이터를 다시 포맷팅(이것은 데이터를 병렬 포맷과 직렬 포맷 간에 변환하는 것을 포함함)하고, 그리고 가능하게는 더 높은 수준의 기능, 예를 들어, 데이터를 인코딩하는것, 데이터를 압축하는 것, 혹은 데이터를 암호화하는 것을 수행한다.
인터페이스 프로세서의 또 다른 애플리케이션은 도 2a에 도시된 멀티프로세 서 칩(202)에서의 타일(tile)로서 존재한다. 이러한 칩(202)은, 칩(202) 상의 프로세서들(14) 간의 통신을 지원하는 고성능 상호접속(204)과, 그리고 시스템들이 복수의 칩들로부터 쉽게 구성될 수 있도록 하는 인터칩 링크(inter-chip links)(206)를 사용한다. 각각의 프로세서(14)는 포트들(22)을 통해 인터칩 링크(206)와 고성능 상호접속(204)에 연결된다.
이후 더 완전히 설명되는 인터페이스 프로세서의 중요한 특징은 포트들(22)에서의 동작을 관리하는 능력이다. 각각의 인터페이스 프로세서는 CPU, 메모리, 및 통신부들을 포함한다. CPU와 포트들 간의 직접 연결 및 응답 연결을 가능하게 하기 위해, 각각의 프로세서는 다수의 동시 프로그램 쓰레드들을 실행하기 위한 하드웨어 지원을 가지며, 동시 프로그램 쓰레드들 각각은 명령들의 시퀀스를 포함하고, 그리고 이중 적어도 일부는 특히 포트에서의 동작을 핸들링하는 역할을 하고 있다. 아래에서 더 완전히 설명되는 바와 같이, 하드에어 지원은,
- 각각의 쓰레드를 위한 레지스터들의 세트와,
- 어떤 쓰레드를 실행할지를 동적으로 선택하는 쓰레드 스케쥴러와,
- 입력과 출력을 위해 사용되는 포트들의 세트(포트들(22))를 포함한다.
각각의 프로세서 상에서 쓰레드들의 작은 세트를 사용하는 것은, 프로세서에 의해 핸들링되는 다른 계류중인 태스크들과 함께 통신 혹은 입력/출력이 진행할 수 있도록 사용될 수 있으며, 그리고 일부 쓰레드들이 계속될 수 있는 반면에 다른 쓰레드들은 원격 인터페이스 프로세서들로의 혹은 원격 인터페이스 프로세서로부터의 통신 중 보류됨으로써 상호접속에서의 대기시간 숨김(latency hiding)이 가능하도 록 사용될 수 있다.
도 3은 본 발명의 일 실시예에 따른 인터페이스 프로세서(14)의 예시적인 아키텍처를 도식적으로 나타낸다. 프로세서(14)는 쓰레드 스케쥴러(18)의 제어 하에서 명령들의 쓰레드들을 실행하는 실행 유닛(16)을 포함한다. 프로세서(14)는 또한, 프로그램 코드 및 다른 데이터를 홀딩하기 위한 RAM(Random Access Memory)(24)과, 그리고 부트 코드(boot code)와 같은 영구적 정보를 저장하기 위한 ROM(Read Only Memory)(미도시)를 포함한다.
쓰레드 스케쥴러(18)는, 실행 유닛(16)이 어떤 쓰레드를 실행시켜야 하는지를 동적으로 선택한다. 종래에, 쓰레드 스케쥴러의 기능은 단지 프로세서가 완전히 사용되도록 하기 위해 프로그램 메모리로부터 쓰레드들을 스케쥴링하는 것이다. 그러나, 본 발명에 따르면, 쓰레드 스케쥴러(18)에 의한 스케쥴링은 또한 포트들(22)에서의 동작과 관련되어 있다. 이러한 점에 있어서, 유의할 것으로, 쓰레드 스케쥴러는, 포트에서의 입력 혹은 출력 동작의 결과로서 쓰레드가 실행가능하게 될 때 대기시간을 최소화시키기 위해 프토들(22)에 직접 연결될 수 있다.
쓰레드 스케쥴러(18)에 의해 고려되는 m 개의 쓰레드들 각각은, 쓰레드 스케쥴러(18)가 액세스하는 레지스터들의 뱅크(20)에서의 쓰레드 레지스터들(20i ... 20m)의 각각의 세트로 나타내진다. 명령 버퍼(Instruction buffers, INSTR)(19)가 또한, 메모리(24)로부터 페치된 명령들을 실행 유닛(16)에 후속적으로 발행되기 전 일시적으로 홀딩하기 위해 제공된다. 이러한 레지스터들 및 버퍼들의 세부적인 것은 이후 설명된다.
m 개의 쓰레드들 중에서, 쓰레드 스케쥴러(18)는 실행가능한 쓰레드들의 세트를 유지하고, 상기 세트는 "실행"으로 명명되고, 이로부터, 교대로, 바람직하게는 라운드 로빈 방식으로 명령을 취한다. 쓰레드가 계속될 수 없을 때, 실행 세트로부터 쓰레드를 제거함으로써, 쓰레드는 보류된다. 예를 들어, 그 이유는 쓰레드가, 하나 또는 그 이상의 다음과 같은 동작 타입을 기다리고 있기 때문이다.
- 쓰레드의 레지스터들은 쓰레드가 실행될 수 있기 이전에 초기화된다
- 준비되지 않은 혹은 가용한 데이터를 가지지 않은 포트로부터의 입력을 시도한다.
- 준비되지 않은 혹은 데이터를 위한 공간이 없는 포트로의 출력을 시도한다.
- 포트가 입력에 대해 준비될 때 발생될 수 있는 하나 또는 그 이상의 이벤트를 쓰레드가 기다리도록 하는 명령을 실행한다.
유의할 것으로, 본 명세서 사용되는 용어 "이벤트(event)"는 특정 동작 타입을 말하며, 이것은 기본적인 입력-출력 동작과는 약간 다르다. 차이는 도 4와 도 5를 참조하여 아래에서 설명된다.
유리한 것으로, 빠른 응답 시간을 위해, 다이렉트 하드와이어링 접속(direct hardwired connection)(28)이 쓰레드 스케쥴러(18)와 실행 유닛(16) 사이에 제공되어, 쓰레드 스케쥴러(18)로 하여금 실행 유닛(16)이 어떤 쓰레드 혹은 쓰레드들을 페치 및 실행해야만 할지를 제어할 수 있게 한다. 다이렉트 하드와이어링 경로(30a, 30b, 30c)는 또한 쓰레드 스케쥴러(18)와 각각의 포트들(22) 사이에 제공되고, 그리고 다이렉트 하드와이어링 경로(291 ... 29m)는 쓰레드 스케쥴러(18)와 각각의 레지스터(20) 사이에 제공된다. 이러한 다이렉트 경로는 바람직하게는, 쓰레드 스케쥴러로 하여금 각각의 쓰레드를 하나 또는 그 이상의 프토들(22)과 관련시키고, 특히 어떤 동작이 발생했을 때 포트들로부터 준비 표시를 반환하게 할 수 있는 제어 경로를 제공하고 프로세서로 하여금 포트들(22)에서의 동작 혹은 자극에 빠르게 응답할 수 있게 한다. 포트들과 관련된 쓰레드 스케쥴러의 동작은 도 4 및 도 6와 관련하여 아래에서 설명된다.
실행 유닛(16)은 또한, 다이렉트 연결(27 및 31)을 통해 각각의 포트들(22a-22c) 및 각각의 레지스터(201-20m)에 액세스하고, 따라서 코어 프로세서와 레지스터와 외부 환경 사이에 다이렉트 링크를 제공한다. 바람직하게는, 이러한 다이렉트 경로는 실행 유닛으로 하여금 조건들을 포트들에 전달할 수 있게 하는 또 다른 제어 경로들을 제공한다. 이것은 도 4에 대해서 아래에서 더 상세히 설명된다. 다이렉트 경로(27 및 31)는 또한 데이터가 쓰레드 레지스터(20)와 포트(22) 사이에서 직접적으로 입력 및 출력될 수 있게 하여 쓰레드들이 외부 환경과 직접적으로 통신할 수 있게 할 수 있다. 예를 들어, 데이터는, 메모리(24)에 기입된 다음 후속적으로 페치되기보다는, 오히려 외부 디바이스로부터 쓰레드의 오퍼랜드 레지스터(operand register)들 중 하나에 직접 기입될 수 있다. 역으로, 동작 이후, 실행 유닛(16)에 의해 오퍼랜드 레지스터로부터 데이터가 선택될 수 있고, 포트(22)로부터 직접 전송될 수 있다. 이것은 반응 시간을 크게 개선한다.
유의할 것으로, "다이렉트 연결" 혹은 "다이렉트 경로"가 의미하는 것은, 실행 유닛과 프로그램 메모리(24) 간의 연결로부터 분리된 연결을 의미한다. 따라서, 예를 들어, 쓰레드 스케쥴러(18)와 실행 유닛(16)은, 데이터가 저장된 다음 후속적으로 메모리(24)로부터 페치됨이 없이 포트들(22)로부터 입력된 데이터에 액세스한다. 바람직하게는, 만약 실행 유닛(16)과 메모리(24) 간의 연결이 버스(3)를 통한 연결이라면, "다이렉트" 연결 혹은 경로는 버스로부터 분리된 것을 의미한다. 따라서, 포트들(22)과 레지스터들(20)과 쓰레드 스케쥴러(18)와 실행 유닛(16) 간의 다양한 통신은 모두 버스 중재를 필요로 하지 않으면서 일어날 수 있고, 이것은 반응 시간을 개선한다. 포트(22)에는 또한 버스(13)를 사용하여 추가적인 연결(미도시)이 제공될 수 있다.
본 명세서에서 사용되는 용어 "포트"는 "핀 포트" 또는 "데이터 포트"를 말할 수 있다. 핀 포트는 각각의 논리적 전이, 즉 프로세서 칩의 물리적 경계에서의 핀에서 일어나는 신호의 상승 에지 및 하강 에지를 검출한다. 데이터 포트들은, 이들이 하나 또는 그 이상의 비트들(이것은 전형적으로 I/O 버퍼에 축적되고, 그리고 전형적으로 워드와 같은 데이터의 부분을 채움)을 핸들링할 수 있다는 점에서, "더 높은 레벨"이다. 상승 에지 및 하강 에지를 검출하는 대신에, 데이터 포트는 특정 순간에서의 비트 혹은 비트들의 상태 혹은 로직 레벨을 핸들링한다. 데이터 포트는 온/오프 칩일 수 있고, 또는 이것은 동일한 칩 상에 임베드된 또 다른 프로세서에 대한 포트일 수 있다. 유의할 것으로, "핀 포트" 및 데이터 포트"는 사실, 실제 동일한 포트의 다른 모드를 말하는 것일 수 있다.
도 4는 본 발명의 바람직한 실시예에 따른 포트(22)를 도식적으로 나타낸 것이다. 포트(22)는 입력 및 출력 데이터를 프로세서(14)에 그리고 프로세서(14)로부터 전달하기 위한 I/O 버퍼(32)를 포함한다. 추가적으로, 각각의 포트(22)는 포트에서 일어나는 동작을 모니터링하고, 아울러 적어도 하나의 준비 비트 혹은 플래그(37)를 사용하여 어떤 동작의 발생을 시그널링하기 위한 동작 핸들링 로직(36)을 포함한다. 준비 플래그(37)는 바람직하게는 다이렉트 경로(30)를 통해 쓰레드 스케쥴러에 시그널링된다. 포트가 검출할 수 있는 잠재적인 동작은 다음을 포함할 수 있다.
- 데이터가 포트에 입력되었음,
- 어떤 특정 데이터가 포트에 입력되었음, 그리고/또는
- 포트는 출력에 대해 가용하게 되었음.
이러한 동작의 검출을 용이하게 하기 위해, 포트(22)에는 레지스터들(38)의 세트가 제공된다. 이러한 것들에는, 관련 쓰레드의 식별부를 저장하기 위한 쓰레드 식별자(thread identifier, TID) 레지스터, 하나 또는 그 이상의 조건을 저장하기 위한 제어(control, CTRL) 레지스터, 실행이 보류된 프로그램에서의 위치를 저장하기 위한 연속 포인트 벡터(VECTOR) 레지스터, 및 조건과 관련된 임의의 데이터를 저장하기 위한 데이터(DATA) 레지스터가 있다. TID 값이 다이렉트 경로(30)(이것은 도 3에서 30a, 30b, 30c일 수 있음)를 통해 쓰레드 스케쥴러(18)에 의해 레지스터(38)에 기입되고, 그리고 VECTOR, CTRL 및 DATA 값이 다이렉트 경로(31)를 통해 실행 유닛(16)에 의해 기입된다. TID는, 요구된 동작의 검출시, 관련 쓰레드를 식 별하기 위해, 쓰레드 스케쥴러(18)에 반환된다. 동작 로직은 또한 아래에서 더 상세히 설명되는 인에이블 플래그(39)를 포함한다.
유의할 것으로, 비록 레지스터(38)가 포트(22) 내에 포함되는 것으로 도 4에서 도시되었지만, 이들은 사실, 프로세서(14) 내의 다른 위치에 있을 수 있고, 간단히 포트(22)와 관련될 수 있다.
도 5는 쓰레드들을 나타내기 위해 사용되는 쓰레드 레지스터들(20)의 예시적 뱅크를 나타낸다. 뱅크(20)는 쓰레드 스케쥴러(18)에 의해 현재 고려 중인 각각의 쓰레드(T1 내지 Tm)에 대응하는 레지스터들의 복수의 세트를 포함한다. 이러한 바람직한 예에서, 각각의 쓰레드의 상태는 열여덟 개의 레지스터들로 나타내지는데, 즉, 두 개의 제어 레지스터, 네 개의 액세스 레지스터, 열두 개의 오퍼랜드 레지스터로 나타내진다. 이러한 것들은 다음과 같다.
제어 레지스터들:
- PC는 프로그램 카운터(Program Counter)
- SR은 상태 레지스터(Status Register)
액세스 레지스터들:
- GP는 글로벌 풀 포인터(Global pool Pointer)
- DP는 데이터 포인터(Data Pointer)
- SP는 스택 포인터(Stack Pointer)
- LR은 링크 레지스터(Link Register)
오퍼랜드 레지스터: OP1 ... OP12
제어 레지스터는 쓰레드의 상태에 관한 정보 및 쓰레드의 실행을 제어하는데 사용하기 위한 정보를 저장한다. 특히, 이벤트 혹은 인터럽트를 수용하는 쓰레드의 능력은 쓰레드 상태 레지스터(SR)에 보유된 정보에 의해 제어된다. 액세스 레지스터는 프로시져의 로컬 변수를 위해 사용되는 스택 포인터와, 프로시져들 간에 공유된 데이터를 위해 보통 사용되는 데이터 포인터와, 그리고 커다란 상수 및 프로시져 엔트리 포인트들에 액세스하기 위해 사용되는 상수 풀 포인터를 포함한다. 오퍼랜드 레지스터(OP1 ... OP12)는 산술 및 로직 동작을 수행하고, 데이터 구조에 액세스하고, 그리고 서브루틴을 호출하는 명령들에 의해 사용된다.
다수의 명령 버퍼(instruction buffers)(INSTR)(19)가 또한 쓰레드의 실제 명령을 일시적으로 저장하기 위해 제공된다. 각각의 명령 버퍼는 바람직하게는 육십네 개의 비트 길이를 가지고 있고, 각각의 명령은 바람직하게는 십육 비트의 길이를 가지고 있어, 버퍼 당 4개의 명령이 가능하다. 쓰레드 스케쥴러(18)의 제어 하에서, 프로그램 메모리(24)로부터 명령이 페치되고 그리고 명령 버퍼(19)에 일시적으로 놓인다.
실행 유닛은 레지스터(20)들 및 버퍼(19)들 각각에 액세스한다. 더욱이, 쓰레드 스케쥴러(18)는 적어도 각각의 쓰레드에 대한 상태 레지스터(SR)에 액세스한다.
앞서 언급된 바와 같이, 본 명세서에서 사용되는 용어 "이벤트"는 특정 동작 타입을 말하거나 혹은 그 특정 동작 타입에 대응하는 동작을 말한다. 이벤트 기반 의 동작은 기본적인 입력-출력 동작과는 약간 다르고, 다음과 같이 동작한다. 먼저, 실행 유닛(16)으로부터의 연속 포인트 벡터 및 쓰레드 스케쥴러(18)로부터의 쓰레드 식별자를, 바람직하게는 다이렉트 경로(31 및 30)를 통해, 포트(22)와 관련된 VECTOR 및 TID 레지스터(38)에 전송함으로써, 쓰레드에 대한 이벤트가 설정된다. 관련 조건 및 조건 데이터는 또한 포트(22)의 CTRL 및 DATA 레지스터(38)에 기입될 수 있다. 따라서 이벤트는 포트에서 설정되며 반드시 인에이블되는 것은 아니다. 포트가 이벤트의 표시를 발생시킬 수 있도록, 포트의 인에이블 플래그(39)는 또한, 바람직하게는 다이렉트 경로(30)를 통해 쓰레드 스케쥴러(18)에 의해 어써팅되어야만 한다. 더욱이, 이벤트를 수용하도록 쓰레드 자체를 인에이블시키기 위해, 쓰레드에 대한 각각의 상태 레지스터(SR)에서의 쓰레드의 이벤트 인에이블(Event Enable, EE) 플래그는 이벤트 인에이블된 것으로 설정되어야만 한다. 따라서, 이벤트가 설정되고 인에이블되면, 쓰레드는 쓰레드 스케쥴러(18) 상에서 동작하는 이벤트 기반의 대기 명령을 사용하여 이벤트를 기다리면서 보류하고 있을 수 있다. 이러한 지점에서, 현재 계류중인 명령은 관련 명령 버퍼(19)로부터 버려질 수 있다. 이벤트가 발생할 때, 예를 들어, 어떤 데이터가 포트에 입력될 때, 그 발생은, 포트(22)로부터 쓰레드 스케쥴러(18) 및 실행 유닛(16)으로, 쓰레드 식별자 및 연속 포인트 벡터의 반환에 의해 시그널링되어, 연속 포인트 벡터에서의 명령이 프로그램 메모리(24)로부터 명령 버퍼(19)에 페치될 수 있고, 코드 내의 적절한 포인트에서 실행이 재개될 수 있다.
이벤트가 발생할 때, 각각의 상태 레지스터(SR)에서의 쓰레드의 EE 플래그 는, 발생 직후 쓰레드가 이벤트에 반응하는 것을 막기 위해 이벤트 디스에이블된 것으로 설정될 수 있다. 인에이블 플래그(39)는 이벤트 발생시 쓰레드가 명령을 실행한 결과로 인해 디어써팅될 수 있다.
인에이블 플래그(39)는 어써팅될 수 있고, 반면에 포트들 중 하나 또는 그 이상으로부터 이벤트를 기다리는 것에 대한 준비로 포트의 개수를 설정할 수 있다. 쓰레드의 EE 플래그는 또한 포트 인에이블 플래그들의 세트를 인에이블하기 전에 이벤트 인에이블된 것으로 설정될 수 있고, 그리고 이러한 경우에 준비되어 인에이블될 제 1 포트는, 현재 명령이 버려지도록 하고 아울러 연속 포인트 벡터에서의 명령을 즉시 페치하여 실행시킴으로써 실행이 진행하도록 하는 이벤트를 발생시킨다.
포트의 인에이블 플래그(39)와 상태 레지스터 EE 플래그의 장점은, 대기 명령에 의해 이벤트의 설정과 쓰레드의 보류 양쪽 모두로부터 이벤트의 인에이블링 및 디스에이블링이 분리되어 있어, 서로 다른 입력 및 출력 조건이 특정 쓰레드에 대해 그리고/또는 서로 다른 다양한 쓰레드에 대해 쉽게 온 오프 토글될 수 있다는 것이다. 예를 들어, 이벤트는, 비록 이벤트가 디스에이블될 지라도 포트(22)에서 설정된 것으로 남아있을 수 있다. 따라서, 이벤트는 쓰레드에 의해 다시 사용될 수 있는데, 왜냐하면, 비록 이벤트가 이미 한번 발생했을지라도, 쓰레드 식별자, 연속 포인트 벡터, 및 조건은 여전히 포트(22)의 TID, VECTOR, CTRL 및 DATA 레지스터(38)에 저장되어 있기 때문이다. 만약 쓰레드가 이벤트를 다시 사용할 필요가 있다면, 포트의 레지스터(38)는 재기입될 필요가 없지만, 대신에 포트의 인에이블 플 래그(39)는 간단히 다시 어써팅될 수 있고, 그리고/또는 쓰레드에 대한 상태 레지스터(SR)에서의 EE 플래그는 이벤트 인에이블된 것으로 재설정될 수 있다. 그 다음에 또 다른 대기 명령이 동일 이벤트의 재발생까지 쓰레드를 보류시킨다.
더욱이, 연속 포인트 벡터의 사용으로 인해, 쓰레드 당 복수의 이벤트들이 인에이블될 수 있다. 즉, 소정의 쓰레드가 하나의 포트(22a)에서 연속 포인트 벡터를 그 포트에 전송함으로써 하나의 이벤트를 설정할 수 있고, 서로 다른 연속 포인트 벡터를 다른 포트에 전송함으로써 또 다른 포트(22b)에서의 또 다른 이벤트를 설정할 수 있는 등이다. 쓰레드는 또한 각각의 포트에 대해 서로 다른 인에이블 플래그들(39)을 따로따로 어써팅 혹은 디어써팅함으로써 다양한 이벤트들을 개별적으로 인에이블 및 디스에이블할 수 있다. 그 다음에, 대기 명령은 쓰레드로 하여금 임의의 인에이블된 이벤트를 대기하면서 보류되도록 한다.
이벤트와는 대조적으로, 기본 I/O 동작을 사용하여, 쓰레드 스케쥴러(18)는 연속 포인트 벡터를 VECTOR 레지스터에 전송하지 못하고, 그리고 상태 레지스터(SR) 내의 EE 플래그 혹은 포트의 인에이블 플래그(39)를 사용하지 못한다. 대신에, 계류중인 명령은 단지 명령 버퍼(19)에 남아있게 되고, 그리고 만약 필요하다면, 준비 플래그(37)에 의해 표시된 바와 같이 실행은 입력까지 혹은 출력을 위한 포트의 이용가능까지 단지 보류된다. 실시예들에서, TID 레지스터만이 기본 I/O에 따른 스케쥴링을 위해 요구될 수 있다. 기본 I/O는 CTRL 및 DATA 레지스터에서의 조건을 사용할 수 있거나 사용하지 않을 수 있다. 만약 조건이 사용되지 않는다면, I/O는 단지 포트가 준비되면 바로 완료된다.
또한 유의할 것으로, 쓰레드의 실행이 이벤트 이후 재개되면 후속적으로 기본 I/O 동작이 당연히 수행될 수 있다. 반대로 쓰레드가 기본 I/O 이후 재개되면 후속적으로 이벤트 동작이 포함될 수 있다. 이벤트 및 I/O의 임의의 이러한 체인은 쓰레드에 포함될 수 있다. 예를 들어, 기본 I/O 동작은 두 개의 이벤트 기반의 대기 동작들 사이에 놓일 수 있고, 반면에 이벤트는 디스에이블되지만(즉, 포트의 인에이블 플래그(39) 및/또는 상태 레지스터의 EE 플래그가 디어써팅됨), 이벤트 벡터 및 조건은 여전히 레지스터(38)에 설정된 채로 남아있게 된다. 즉, 이벤트는 제1의 이벤트 기반의 대기 동작의 완료 이후 디스에이블될 수 있고, 기본 I/O가 후속적으로 동일 포트를 사용하여 수행될 수 있고, 그리고 그 다음에 동일 이벤트가 제2의 이벤트 기반의 대기 동작에서의 사용을 위해 다시 인에이블될 수 있다. 앞서 설명된 바와 같이, 기본 I/O 동작은 쓰레드를 보류시키고 다시 시작하게 하지만, 상태 레지스터에서의 EE 플래그 혹은 포트의 인에이블 플래그(39)에 영향을 미치지 않으며 이벤트 벡터에 대한 전달 제어에도 영향을 미치지 않는다.
쓰레드 스케쥴러 및 두 개의 예시적 포트의 동작이 이제 도 6의 흐름도를 참조하여 설명된다. 단계(100)에서, 실행 유닛(16)은 쓰레드 스케쥴러(18)의 관리 하에서 제 1 쓰레드 및 제 2 쓰레드의 실행을 시작한다. 단계(102)에서, 쓰레드 스케쥴러는, 예를 들어 포트(22a)에서의 어떤 특정 신호의 수신과 같은, 이벤트에 따라 달라지는 제 1 쓰레드 내의 코드 부분을 발견하게 된다. 단계(104)에서, 쓰레드 스케쥴러는, 이벤트 검출시 프로그램 내의 어떤 포인트에서 쓰레드 실행이 계속되어야만 하는 지를 특정하는 연속 포인트 벡터(VECTOR)와 함께, 제 1 쓰레드의 쓰레드 식별자(TID)를 포트(22a)에 전송하고, 그리고 또한 임의의 요구된 조건 제어 정보(CTRL) 및 관련 데이터(DATA)를 전송한다. 예를 들어, 데이터는, 명령이 포트에서 수신할 것으로 예측하고 있는 신호의 값일 수 있다. 단계(104)에서, 쓰레드 스케쥴러는 또한 제 1 포트의 인에이블 플래그(39)를 설정할 수 있고, 그리고 제 1 쓰레드의 상태 레지스터(SR)를 이벤트 인에이블된 것으로 설정할 수 있다.
단계(106)에서, 포트(22a)는 이러한 정보를 쓰레드 스케쥴러(18)로부터 수신한다. 단계(108)에서, 쓰레드 스케쥴러(18)는 제 1 쓰레드의 실행을 보류시킨다. 단계(110)에서, 포트(22a)는 그 포트에서의 동작을 모니터링하기 시작한다.
단계(112)에서, 쓰레드 스케쥴러(18)는 제 2 쓰레드가 여전히 미해결이라고 결정하고, 그리고 실행 유닛(16)은 쓰레드 스케쥴러(18)의 관리 하에 제 2 쓰레드의 실행을 계속한다. 단계(114)에서, 쓰레드 스케쥴러(18)는 이벤트에 따라 달라지는 코드의 부분을 발견하게 된다. 단계(116)에서, 쓰레드 스케쥴러(18)는, 연속 포인트 벡터 및 임의의 다른 요구된 조건 정보와 함께, 쓰레드 식별자를 포트(22b)에 전송한다. 단계(116)에서, 쓰레드 스케쥴러는 또한 제 2 포트의 인에이블 플래그(39)를 설정하고 그리고 제 2 쓰레드에 대한 제 2 상태 레지스터를 이벤트 인에이블된 것으로 설정한다. 단계(118)에서, 포트(22b)는 이러한 정보를 수신한다. 단계(120)에서, 쓰레드 스케쥴러는 제 2 쓰레드의 실행을 보류한다. 단계(122)에서, 포트(22b)는 그 포트에서 일어나는 동작을 모니터링하기 시작한다.
단계(124)에서, 쓰레드 스케쥴러는 이제 더 이상 스케쥴링될 미해결의 쓰레드가 없다고 결정하고, 시스템은 포트(22a 및 22b)를 제외하고 모든 컴포넌트들의 파워를 차단한다. 단계(128)에서, 포트(22a)는 관련 이벤트(예를 들어, DATA 레지스터에 저장된 신호의 수신)를 검출하고, 결과적으로 쓰레드 식별자(TID)와 연속 포인트 벡터(VECTOR)를 반환한다(또한, 제 1 쓰레드의 상태 레지스터를 이벤트 디스에이블된 것으로 설정함). 단계(126)에서, 쓰레드 스케쥴러(18)는 반환된 식별자를 수신한다. 실행이 계속될 수 있기 때문에, 단계(130)에서, 시스템은 다시 파워를 공급한다. 단계(134)에서, 실행 유닛(16)은 쓰레드 스케쥴러(18)의 관리 하에 제 1 쓰레드의 실행을 완료한다. 단계(138)에서, 포트(22b)는 제 2 쓰레드에 대한 관련 이벤트를 검출하고, 그리고 그 쓰레드 식별자 및 연속 포인트 벡터를 반환한다(또한, 제 2 쓰레드의 상태 레지스터를 이벤트 디스에이블된 것으로 설정함). 단계(136)에서, 쓰레드 스케쥴러(18)는 반환된 정보를 수신하고, 그리고 단계(138)에서, 실행 유닛(16)은 쓰레드 스케쥴러(18)의 제어 하에서 제 2 쓰레드의 실행을 완료한다. 유의할 것으로, 단계(134)와 단계(136) 사이에 추가적인 파워 차단 단계가 있을 수 있다.
도 7에 도시된 바와 같이, 본 발명의 원리는 또한 쓰레드들 간의 통신, 또느 더 정확하게는 쓰레드들을 나타내는 정보를 저장하는 쓰레드 레지스터 세트들(20) 간의 통신에 적용될 수 있다. 예시적 목적으로, 단지 네 개의 쓰레드 레지스터 세트들(201 내지 204)이 도 7에 도시되었고, 그 각각은 쓰레드(T1 내지 T4) 각각에 대한 정보를 저장한다. 쓰레드 레지스터 세트들 각각은 상호접속 시스템(40)에 의해 다른 세트들 각각에 연결되고, 상호접속 시스템(40)은 쓰레드 레지스터 세트들(20) 중 적어도 두 개의 쓰레드 레지스터 세트 간의 직접적인 데이터 전송을 위한 적어도 하나의 채널을 확립하도록 동작가능하다. 채널은 바람직하게는 오퍼랜드 레지스터(OP)로의 데이터 전송 및 오퍼랜드 레지스터(OP)로부터의 데이터 전송을 위해 사용되지만, 기본적으로 상태 레지스터(SR)와 같은 다른 타입의 레지스터로의 정보 전송 및 상기 다른 타입의 레지스터로부터의 정보 전송을 위해 사용될 수 있다. 쓰레드 스케쥴러(18)는 앞서 포트와 관련하여 설명된 바와 유사한 방식으로 채널을 통해 일어나는 동작을 기반으로 하여 쓰레드들을 스케쥴링할 수 있다.
도 7A에 도시된 바와 같이, 채널 단부들(42) 각각은 입력 버퍼(44)와 출력 버퍼(46)를 가진 한 쌍의 포트들을 닮았다. 포트들(22)과 유사하게, 각각의 채널 입력 버퍼(44) 및 출력 버퍼(46)는 채널을 통해 발생하는 동작을 모니터링하고 아울러 적어도 하나의 준비 플래그(37')를 사용하여 어떤 동작의 발생을 시그널링하기 위한 동작 핸들링 로직(36')을 가질 수 있다. 채널 단부가 검출할 수 있는 가능한 동작은, 데이터가 채널에 입력되는 것, 또는 채널이 출력을 위해 이용가능하게 되는 것을 포함한다. 만약 채널이 너무 가득 차 데이터를 취할 수 없을 때 출력 명령이 실행된다면, 명령을 실행한 쓰레드는 보류되고, 그리고 명령이 성공적으로 완료될 수 있을 만큼 채널에 충분한 공간이 존재할 때 다시 시작된다. 마찬가지로, 명령이 실행되고 그리고 가용한 충분한 데이터가 없는 경우, 쓰레드는 보류되고, 그리고 충분한 데이터가 이용가능하게 될 때 다시 시작될 수 있다.
다시, 포트들(22)에서, 이러한 동작의 검출을 용이하게 하기 위해, 각각의 채널 단부는 레지스터들(38')과 관련된다. 이러한 것들은, 관련 쓰레드의 식별부를 저장하기 위한 쓰레드 식별자(TID) 레지스터와, 그리고 이벤트의 발생시 실행이 다시 시작해야 하는 프로그램 내의 위치를 저장하기 위한 연속 포인트 벡터(VECTOR) 레지스터를 포함한다. 이러한 TID 레지스터 및 VECTOR 레지스터는 포트들(22)에서와 동일한 방식으로 쓰레드들을 스케쥴링하기 위해 쓰레드 스케쥴러(18)와 실행 유닛(16)에 의해 사용될 수 있다. VECTOR 레지스터는 채널이 이벤트 및 인터럽트들을 발생시킬 수 있게 한다. 채널 단부는 또한 채널을 인에이블시켜 이벤트를 발생시키도록 하는 인에이블 플래그(39')를 갖는다. 실시예들에서, 채널 단부들(42)에는 CTRL 및 DATA 레지스터들이 제공되지 않을 수 있다.
동일한 채널 단부들(42)이 또한 포트들(22)을 통해 쓰레드 레지스터들로부터 외부 환경에 데이터를 전달하기 위해 사용될 수도 있다. 즉, 실행 유닛(16)은 채널 단부(42)를 통해 레지스터(20)의 콘텐츠를 선택할 수 있고, 그리고 이것을 포트(22)를 통해 직접적으로 외부로 전달할 수 있으며, 그리고 반대로, 실행 유닛(16)은 또한 포트(22)로부터 입력을 수신할 수 있고 그리고 채널 단부(42)를 통해 이것을 레지스터(20)에 직접적으로 전달할 수 있다. 따라서 만약 본 발명에 따른 두 개 또는 그 이상의 프로세서들이, 예를 들어, 도 2A에 도시된 바와 같이 함께 연결된다면, 이러한 프로세서들 간에 채널이 또한 확립될 수도 있다. 인터-프로세서 시스템(inter-processor system) 내에서, 각각의 프로세서는, 다른 프로세서들과의 동시 연결을 가능하게 하는 다수의 쌍방향성 물리적 링크들(204)을 통해 시스템 상호접속과 인터페이스할 수 있다.
포트, 채널, 및 동작의 다른 소스를 포괄하기 위해 본 명세서에서 사용되는 일반적인 용어는 "리소스(resource)"이다.
인터페이스 프로세서는, 자신의 쓰레드 기반의 구조로 인해, 몇 가지 프로그래밍 방법을 지원할 수 있다. 이것은 표준 입력 및 출력을 수행하는 단일의 종래 프로세서로서 취급될 수 있거나 혹은 수백 개의 통신 컴포넌트들의 병렬 어레이의 일부로서 프로그래밍될 수 있다. 이러한 옵션을 지원하는 명령 세트가 제공된다. 이러한 명령 세트는 초기화, 종료, 쓰레들의 시작 및 정지를 지원하고 그리고 입력/출력 통신을 제공하는 특별한 명령들을 포함한다. 입력 및 출력 명령은 외부 디바이스와의 매우 빠른 통신을 가능하게 한다. 이들은 속도가 높고, 대기 시간이 낮은 입력 및 출력 그리고 높은 레벨의 동시 프로그래밍 기술을 지원한다. 포트 동작 핸들링에 대한 본 명세서에서의 그 애플리케이션이 다음에서 더 완전히 설명되며, 이것은 본 발명을 구현하기 위해 사용될 수 있는 예시적 명령들을 설명한다.
요구된 리소스의 타입을 특정하는 GETR 명령을 사용하여 쓰레드에 대한 리소스들이 먼저 준비되고, 그리고 FREER 명령을 사용하여 다시 해방될 수 있다.
포트들은 입력 또는 출력 모드에서 사용될 수 있다. 입력 모드에서, 쓰레드에 전달된 데이터를 필터링하기 위해 임의의 조건이 사용될 수 있다. 아래에서 설명되는 바와 같이 데이터가 이용가능하게 될 때, 포트는 이벤트 혹은 인터럽트를 발생시키기 위해 사용될 수 있다. 이것은 쓰레드가 수 개의 포트들을 모니터링할 수 있게 하고, 단지 준비된 것에만 서비스를 제공한다. 그 다음에, 입력 및 출력 명령(IN 및 OUT)이, 준비된 경우, 포트로 데이터를 전송하고 포트로부터 데이터를 전송하기 위해 사용될 수 있다. 이러한 경우에, IN 명령은 n 비트 포트로부터 n 최 하위 비트(least significant bits)를 입력 및 제로 확장하고, 그리고 OUT 명령은 n 최하위 비트를 출력한다.
두 개의 또 다른 명령들(INSHR 및 OUTSHR)은 데이터의 전달을 최적화한다. INSHR 명령은 레지스터의 콘텐츠를 오른쪽으로 n 비트만큼 시프트시키고, 가장 왼쪽에 있는 n 비트를 n 비트 포트로부터 입력된 데이터로 채운다. OUTSHER 명령은 데이터의 n 최하위 비트를 n-비트 포트에 출력하고, 레지스터의 콘텐츠를 오른쪽으로 n 비트만큼 시프트시킨다.
OUTSHR port, s port ◁ s[bits 0 for width(port)]; 포트로부터 출력
s ← s >> width(port) 및 시프트
INSHR port, s s ← s >> width(d); 시프트 및 포트로부터 입력
port ▷ s[bits(bitsperword - width(d)) for width(d)]
여기서, "▷"은 입력을 나타내고, "◁"은 출력을 나타낸다.
포트는 사용될 수 있기 이전에 구성되어야만 한다. 포트는 포트의 수 개의 독립 설정을 정의하기 위해 사용되는 SETC 명령을 사용하여 구성된다. 이러한 것들 각각은 디폴트 모드(default mode)를 가지며, 만약 다른 모드가 필요하다면 단지 구성될 필요가 있다.
SETC port, mode port[ctrl]← mode 포드 제어 설정
SETC 모드 설정의 결과가 아래에서 설명된다. 각각의 설정에서의 첫 번째 엔트리가 디폴트 모드이다.
모드 ( Mode ) 결과( Effect )
OFF 포트가 활성화 안 됨; 핀(들)은 고 임피던스
ON 활성화
IN 포트는 입력
OUT 포트는 출력(하지만 입력은 현재 핀 값을 반환)
EVENT 포트가 이벤트들을 일으킬 것임
INTERRUPT 포트가 인터럽트들을 일으킬 것임
DRIVE 핀들이 하이 상태 및 로우 상태로 양쪽으로 구동됨
PULLDOWN 핀들이 0 비트에 대해 풀다운 됨, 그렇지 않다면 고 임피던스임
PULLUP 핀들이 1 비트에 대해 풀업 됨, 그렇지 않다면 고 임피던스임
UNCOND 포트가 언제나 준비됨, 입력이 바로 완료됨
EQUAL 포트의 값이 포트의 DATA 값과 같아질 때 포트가 준비됨
NE 포트의 값이 포트의 DATA 값과 다를 때 포트가 준비됨
TRANSITION 포트의 값이 포트의 DATA 값으로 향해 변할 때 포트가 준비됨
GR 포트의 값이 포트의 DATA 값보다 더 클 때 포트가 준비됨
LS 포트의 값이 포트의 DATA 값보다 더 작을 때 포트가 준비됨
포트 방향이 OUT일 때, DRIVE, PULLDOWN 및 PULLUP 모드가 단지 관련된다. TRANSITION 조건은 단지 1 비트 포트에 대해 관련되고, GR 및 LS 조건은 단지 일 비트 이상을 가진 포트에 대해 관련된다.
각각의 포트는 포트를 통해 데이터의 흐름을 제어하는데 사용되는 준비 비트(37)를 가지며, 포트가 입력 및 출력 명령을 완료할 수 있는지 여부를 정의한다. 준비 비트는 포트 구성에 따라 다른 방식으로 설정된다. 준비 비트는, SETC, SETD 혹은 SETV 명령들 중 어느 하나가 실행될 때 클리어(clear)된다.
입력 모드에서의 포트는 조건부 입력을 수행하도록 구성될 수 있다. 조건은 입력 데이터를 필터링하여 조건을 만족시키는 데이터만이 프로그램에 반환되도록 한다. 조건이 설정될 때, IN 명령 및 INSHR 명령은 포트가 준비된 경우에 단지 완료된다. 앞서 언급된 바와 같이, 준비되지 않은 포트 상에서의 입력 명령을 실행하는 것은 쓰레드를 보류시킨다. 준비된 경우, 포트는 그 준비 비트를 설정하고, 이것은 쓰레드 스케쥴러에 시그널링된다. 쓰레드는 다시 시작하여 입력 명령을 다시 실행시킨다. 포트가 준비되는 때에, 데이터는 반환되고 준비 비트(37)는 클리어된다.
포트 준비 비트가 설정되면, 조건을 충족시키는 데이터 값이 캡쳐되어 소프트웨어는 비록 포트 상의 값이 후속적으로 변할지라도 조건을 만족시키는 값을 얻는다. IN 명령 혹은 INSHR 명령이 실행되고, 준비 비트가 설정될 때, 데이터는 반환되고 그리고 준비 비트는 클리어된다. 만약 준비 비트가 설정되지 않는다면, 쓰레드는 준비 비트가 설정될 때까지 보류된다. 만약 조건이 설정되면 데이터는 이러한 조건에 대해 비교되고, 그리고 준비 비트는 이러한 조건이 충족될 때 단지 설정된다.
OUT 혹은 OUTSHR 명령이 실행될 때, 만약 준비 비트가 클리어된다면, 데이터는 포트에 의해 취해지고, 그리고 준비 비트는 설정된다. 만약 준비 비트가 설정된다면 쓰레드는 포트에 의해 클리어될 때까지 보류된다.
두 개의 쓰레드들 간의 통신을 위해, 두 개의 채널 단부들이 각각의 쓰레드에 대해 하나씩 할당될 필요가 있다. 이것은 GETR CHAN 명령을 사용하여 수행된다. 그 다음에 두 개의 쓰레드들이 출력 및 입력 명령들을 사용하여 데이터 워드를 전송하기 위해 리소스 식별자들을 사용할 수 있다.
OUT d ◁ s
IN d ▷ s
채널이 너무 가득 차 데이터를 취할 수 없을 때 만약 출력 명령이 실행된다면, 명령을 실행한 쓰레드는 보류된다. 명령이 성공적으로 완료할 수 있을 정도로 채널에 충분한 공간이 존재할 때 쓰레드는 다시 시작된다. 마찬가지로, 입력 명령이 실행되고 이용가능한 충분한 데이터가 존재하는 경우, 쓰레드는 보류되고 충분한 데이터가 이용가능하게 될 때 다시 시작된다. 이제 더 이상 요구되지 않는 경우, 채널은 FREER CHAN 명령을 사용하여 해방될 수 있다. 만약 그렇지 않으면, 채널은 또 다른 메시지를 위해 사용될 수 있다.
이벤트와 인터럽트는 리소스들(포트들 및 채널들)이 자동으로 제어를 사전에 정의된 이벤트 핸들러에 전달하게 할 수 있다. 이벤트 혹은 인터럽트를 수용하는 쓰레드의 능력은 쓰레드 상태 레지스터(SR)(도 4 참조)에 보유된 정보에 의해 제어되고, 그리고 TSE 및 TSD 명령을 사용하여 명확하게 제어될 수 있다. 이러한 정보는 이벤트 인에이블 플래그(EE) 및 인터럽트 인에이블 플래그(IE)를 포함한다.
TSE s SR ← SR ∨ s 쓰레드 상태 인에이블
TSD s SR ← SR ∧ ¬s 쓰레드 상태 디스에이블
이러한 명령들의 오퍼랜드는 다음 중 하나이어야 한다.
EE 이벤트를 인에블이블 혹은 디스에이블
IE 인터럽트를 인에이블 혹은 디스에이블
이벤트들은 이들이 설정된 범위와 동일한 범위에서 핸들링된다. 따라서, 이벤트 상에서 쓰레드의 상태 모두가 유효하여 쓰레드는 이벤트에 빠르게 응답할 수 있다. 쓰레드는 이벤트를 일으키는 포트를 사용하여 입력 및 출력 동작을 수행할 수 있고, 반면에 이벤트 정보 중 일부 혹은 모두가 변하지 않도록 놓아 둘 수 있다. 이것은 쓰레드가 이벤트 핸들링을 완료하고 또 다른 유사한 이벤트를 바로 대기할 수 있도록 한다.
이벤트 핸들러의 프로그램 위치는 SETV 명령을 사용하여 이벤트를 인에이블시키기 전에 설정되어야만 한다. 포트들은 이들이 언제 이벤트를 발생시킬지를 결정하는 조건을 가지고 있고, 이것은 SETC 명령 및 SETD 명령을 사용하여 설정된다. 채널들은, 이들이 충분한 데이터를 포함하고 있거나 혹은 출력에 대해 데이터를 수용할 공간을 가지는 순간 준비된 것으로 고려된다.
특정 포트 혹은 채널에 의한 이벤트 발생은 이벤트 인에이블 비조건적(Event Enable Unconditional, EEU) 명령을 사용하여 인에이블될 수 있고, 그리고 이벤트 디스에이블 비조건적(Event Disable Unconditional, EDU) 명령을 사용하여 디스에이블될 수 있다. 이벤트 인에이블 참(Event Enable True, EET) 명령은 만약 그 조건 오퍼랜드가 참이면 이벤트를 인에이블시키고, 만약 그렇지 않으면 디스에이블시키며, 역으로, 이벤트 인에이블 거짓(Event Enable False, EEF) 명령은 마약 그 조 건 오퍼랜드가 거짓이면 이벤트를 인에이블시키고, 만약 그렇지 않으면 디스에이블시킨다. 이러한 명령은 보호받는 입력의 구현을 최적화하기 위해 사용된다. 아래의 것은 포트 상에서의 이벤트를 구성하기 위한 일부 예시적 명령 포맷이지만, 이해해야 하는 것으로, 동일한 명령들이 채널과 관련하여 적용될 수 있다는 것이다.
SETV port, v port[vector]←v 이벤트 벡터 설정
SETD port, d port[data]←d 이벤트 데이터 설정
SETC port, c port[ctrl]←c 이벤트 제어 설정
EET port, b port[enable]←b; port[tid]←thread 이벤트 인에이블 참
EEF port, b port[enable]←¬b;port[tid]←thread 이벤트 인에이블 거짓
EDU port port[enable]←false;port[tid]←thread 이벤트 디스에이블
EEU port port[enable]←true;port[tid]←thread 이벤트 인에이블
하나 또는 그 이상의 리소스들 상에서 이벤트가 인에이블되면, 쓰레드는 적어도 하나의 이벤트를 기다리기 위해 WAITEU 명령을 사용할 수 있다. 이로 인해, 이벤트는 즉시 발생할 수 있고, 제어는 대응하는 이벤트 벡터에 의해 특정된 이벤트 핸들러에 전달되며, 이벤트는 EE(Event Enable) 플래그를 클리어함으로써 디스테이블된다. 대안적으로, 쓰레드는 이벤트가 일어날 때까지 보류될 수 있고, 이 경우 EE 플래그는 이벤트가 발생할 때 클리어되며, 그리고 쓰레드는 실행을 다시 시작한다.
WAITET b if b then SR[EE]←true 참이면 이벤트 대기
WAITEF b if ¬b then SR[EE]←true 거짓이면 이벤트 대기
WAITEU SR[EE]←true 이벤트 대기
CLRE SR[EE]←false; 모든 이벤트 디스에이블
forall port 모든 쓰레드에 대해
if port[tid]=thread then port[enable]← false
조건이 발생할 때까지 하나 또는 그 이상의 이벤트들을 반복적으로 대기하기는 일반적인 경우를 최적화하기 위해, 이벤트 대기 명령의 조건부 형태가 제공된다. WAITET 명령은 단지 그 조건 오퍼랜드가 참인 경우에만 대기하고, WAITEF는 단지 그 조건 오퍼랜드가 거짓인 경우에만 대기한다.
쓰레드에 의해 인에이블된 이벤트들 모두는 단일 CLRE 명령을 사용하여 디스에이블될 수 있다. 이것은 쓰레드에 의해 인에이블된 이벤트들을 가진 포트들 모두에서의 이벤트 발생을 디스에이블시킨다. CLRE 명령은 또한 쓰레드의 상태 레지스터에서의 이벤트 인에이블 상태를 클리어한다.
우선도가 높은 리소스들에 대한 쓰레드의 반응도를 최적화하기 위해, TSE EE 명령이, 쓰레드 상의 이벤트들을 인에이블시키기 위해 먼저, 후속적으로 포트 및/또는 채널을 인에이블시키기 시작하기 전에 그리고 이벤트 대기 명령들 중 하나를 사용하기 전에, 사용될 수 있다. 이러한 방식으로, 프로세서는 우선 순위로 리소스들 전체를 스캔할 수 있다. 이로 이해 이벤트는 인에이블 되자마자 즉시 핸들링될 수 있다.
이벤트와 대조적으로, 인터럽트는 현재 범위 내에서 핸들링되지 않고, 그래 서 현재 PC 및 SR(그리고 잠재적으로는 다른 레지스터들 중 일부 또는 모두)이 인터럽트 핸들러의 실행 이전에 저장될 수 있다. 리소스(r)에 의해 발생된 인터럽트에 관해, 다음과 같은 것이 자동으로 일어난다.
SAVEPC←PC;
SAVESR←SR;
SR[EE]←false;
SR[IE]←false;
PC←r[vector]
핸들러가 완료될 때, 인터럽트된 쓰레드의 실행은 RFINT 명령에 의해 수행될 수 있다.
RFINT PC←SAVEPC; 인터럽트로부터 반환
SR←SAVESR
인터럽트는 쓰레드를 인터럽트할 수 있고, 동시에 이벤트를 대기하면서 쓰레드는 보류된다.
다음의 예는 명령들이 입력, 출력 및 로직 동작을 수행하기 위해 쓰레드들에 의해 어떻게 사용되는지를 보여준다. 이러한 예들에서, 다음의 명령들이 사용된다.
LDFI: 명령 어드레스를 레지스터에 로딩
LDI: 상수 값을 레지스터에 로딩
EQI: 만약 레지스터 값이 상수와 같다면 부울린 (참) 값을 만듦
OR: 두 개의 레지스터 값들의 로직 OR 값을 만듦
ADD: 두 개의 레지스터 값을 더함
ADDI: 상수를 레지스터 값에 더함
SHL: 레지스터의 콘텐츠를 왼쪽으로 시프트시킴
BBF: 만약 부울린 값이 거짓이라면 프로그램 내의 또 다른 포인트로 분기
OUT: 데이터를 출력
다음은 8-비트 바이트를 핀으로부터 직렬로 입력시키는 예시적 코드를 나타낸다. 데이터의 각각의 비트는, 외부 클럭으로부터 제 2 포트에서 수신된 신호가 0에서 1로 변하여 데이터가 취해져야만 한다고 표시할 때, 제 1 포트로부터 입력된다. 레벨이 높은 언어에서, 동작은 아래와 같다.
PROC inbyte(clock, data)
VAR byte;
{ FOR n = 0 FOR 8
WHEN clock ? TO 1 DO { data ? bit; byte = (byte << 1) + b };
RETURN byte
}
이것에 대한 명령 레벨 프로그램은 아래와 같다.
SETC clock, TRANSITION
SETD clock, 1
LDI byte, 0
LDI count, 0
loop:
IN clock, c
IN data, bit
SHL byte, byte, data
ADD byte, byte, bit
ADDI count, count, 1
EQI go, count, 8
BBF go, Loop
두 개 또는 그 이상의 이러한 코드 시퀀스들을 동시에 실행시킬 수 있는데, 이것은 이들 각각을 그 자신의 쓰레드에 할당함으로써 수행된다.
다음은, 두 개의 입력(x 및 y) 중 하나가 상태를 바꿀 때마다 깨어나는 NAND 타입 프로세스를 구현하기 위해, 앞서의 명령들 중 일부를 사용하는 예시적 코드를 보여준다. 높은 레벨의 코드는 다음과 같다.
PROC nand(x, y, z) IS
WHILE TRUE
{ WHEN x ? TO notx DO { notx := NOT notx; z ! (notx OR noty) }
| WHEN y ? TO noty DO { noty := NOT noty; z ! (notx OR noty) }
}
낮은 레벨의 코드에서, 프로세스는 두 개의 포트(x 및 y)를 벡터("xv" 및 "yv")로 각각 초기화하고 아울러 이러한 포트들을 인에이블시켜 이벤트를 발생시키 게 하는 단일 쓰레드를 포함한다. 대응하는 명령 레벨 프로그램은 다음과 같다.
nand:
LDI notx, 1
LDI noty, 1
SETC x, TRANSITION
SETD x, notx
SETC y, TRANSITION
SETD y, noty
LDFI temp, xv
SETV temp, x
LDFI temp, yv
SETV temp, y
EEU x
EEU y
WAIT
xv:
EQI notx, notx, 0
SETD x, notx
OR temp, notx, noty
OUT z, temp
WAIT
yv:
EQl noty, noty, 0
SETD y, noty
OR temp, notx , noty
OUT z, temp
WAIT
동작시, x-입력이 변하거나 혹은 y-입력이 변하며, 제어는 xv 혹은 yv에 전달된다. 어느 경우에나, 응답 코드는 다섯 개의 명령을 실행하고, 그 다음의 입력 상태 변화를 대기한다. 입력 변경으로부터 출력 변경까지의 대기 시간은 약 10 싸이클보다 작을 수 있다. 1 GHz 프로세서는 100 MHz 로직을 에뮬레이팅할 수 있다.
또 다른 예로서, 다음은, 입력이 상태를 변경하지만 단지 외부 클럭에 의해 클럭킹될 때 출력을 변경하게 되는 경우에는 언제나 깨어나는 D 타입 플립 플롭 로직을 구현하기 위한 프로세서를 보여준다. 높은 레벨의 프로그램은 다음과 같다.
PROC dtype(d, ck, q) IS
WHILE TRUE
{ WHEN d ? TO notd DO notd := NOT notd
| WHEN ck ? TO TRUE DO q ! NOT notd
}
대응하는 명령 레벨 프로그램은 다음과 같다.
dtype:
IN d, temp
EQI temp, temp, 0
SETC d, TRANSITION
SETD d, temp
SETC ck TRANSITION
LDI temp, 1
SETD ck, temp
LDFl temp, dv
SETV d, temp
LDFI temp, ckv
SETV ck, ckv
EEU d
EEU ck
WAIT
dv:
IN d, temp
SETD d, temp
WAIT
ckv:
EQI temp, notd, 0
OUT q, temp
WAIT
동작시, d-입력이 변하거나 혹은 ck-입력이 변한다. 어느 경우에나, 응답 코드는 세 개의 명령을 실행하고, 그 다음의 입력 상태 변경을 대기한다. 입력 변경으로부터 출력 변경까지의 대기 시간은 약 10 싸이클보다 더 작을 수 있다. 또한, 1 GHz 프로세서가 100 MHz 로직을 에뮬레이팅할 수 있다.
다음과 같은 것은 좀 더 복합적인 로직의 예를 제공한다. D-타입처럼, 이것은 입력 데이터(이것은 수 비트의 폭을 가질 수 있음)를 추적하여 외부 클럭이 도착할 때 설정된다(또 다른 방법은 클럭 상에서 데이터를 단지 판독하는 것이고, 이 경우 데이터에 대해 비제로 홀딩 시간(non-zero hold time)이 존재함). 출력은 (아래의 예에서는 룩업 테이블에 의해) 계산되어 클럭 상에 출력된다. 입력의 더 복합적인 기능이 계산될 수 있고, 그리고 이것은 잠재적으로는 아래에 표시된 포인트에서의 더 많은 명령들을 추가한다. 그러나, 유의할 것으로, 프로세서는 어떤 매우 복합적인 기능(작은 LUT와 비교하여)을 단지 몇 가지 명령으로 계산할 수 있다. 높은 레벨의 코드는 다음과 같다.
PROC lookup(d, ck, q) IS
WHILE TRUE
{ WHEN d ? x : x != lastx DO lastx := x
| WHEN ck ? TO TRUE DO q ! lookup[lastx]
}
대응하는 명령 레벨 프로그램은 다음과 같다.
logic:
IN d, data
SETC d, NE
SETD d, data
SETC ck, TRANSITION
LDI temp, 1
SETD ck, temp
LDFI temp, dv
SETV d, temp
LDFI temp, ckv
SETV ck, temp
EEU d
EEU ck
WAIT
dv:
IN d, data
SETD d, data
WAIT
ckv:
LDW temp,, lookup, data // 기능을 변경하기 위해 이것을 대체함
OUT temp, q
WAIT
동작시, d-입력이 변하거나 혹은 ck-입력이 변한다. 어느 경우에나, 응답 코드는 세 개의 명령을 실행하고, 그 다음의 입력 상태 변경을 대기한다. 입력 변경으로부터 출력 변경까지의 대기 시간은 약 10 싸이클보다 작을 수 있다. 또한, 1 GHz 프로세서는 100 MHz 로직을 에뮬레이팅할 수 있다.
또한 유의할 것으로, 앞서의 예들은 소정의 쓰레드가 복수의 이벤트들과 같은 복수의 동작들을 어떻게 핸들링하는 지를 보여 준다.
이벤트들과는 대조적으로, 인터럽트는, 상태가, 인터럽트 핸들러에 대한 엔트리 상에 저장되고 핸들러 내에서의 사용을 위해 레지스터들이 이용가능하도록 하기 위해 출구 상에서 복원될 것을 요구한다. 추가적으로, 핸들러는 통상적으로, 마지막으로 동작된 때로부터 상태를 검색하여 그 다음 동작되었을 때를 위해 저장할 필요가 있다. 인터럽트 핸들러의 간단한 예가 아래에 보여진다. 이것은 어떤 추가적인 명령들을 사용한다.
LDWSP 스택 포인터를 사용하여 메모리로부터 값을 로딩
STWSP 스택 포인터를 사용하여 메모리에 값을 저장
LDWDP 데이터 포인터를 사용하여 메모리로부터 값을 로딩
STWDP 데이터 포인터를 사용하여 메모리에 값을 저장
EXTSP 새로운 값들을 위한 공간을 만들기 위해 스택을 확장시키기 위해 사용됨
LDAWSP 스택으로부터 값들을 버리기 위해 사용됨
이러한 예는 데이터의 바이트를 한번에 한 비트 입력하는데, 이벤트를 사용하는 앞서의 예와 대조적으로, 이것은 인터럽트 핸들러를 사용한다. 높은 레벨의 프로그램은 다음과 같다.
PORT clock: INT, TRANSITION, 1;
VAR byte;
VAR count;
byte := 0;
count := 0;
ENABLE clock;
// 인터럽트될 프로그램은 이것을 따름
HANDLER inbyte()
{ data ? bit; byte := (byte << 1) + bit;
count := count + 1;
IF count = 8 THEN DISABLE clock
}
포트가 인에이블되어 인터럽트들을 발생시킬 때, 인터럽트 핸들러는 외부 클럭이 로직 1로 전이될 때마다 동작한다. 핸들러는 데이터 비트들을 취하여 바이트를 형성한다. 입력된 비트들의 카운트와 함께, 바이트는 메모리 내의 여러 위치에 저장되고 데이터 포인터를 통해 액세스된다. 8 비트가 입력될 때, 핸들러는 또 다른 인터럽트들을 디스에이블시키고, 프로그램이 사용하는 바이트가 준비되게 한다. 대응하는 명령 레벨 프로그램은 다음과 같다.
SETD clock, 1
SETC clock, TRANSITION
SETC clock, INT
LDI r0, 0
STWDP r0, byte
STWDP r0, n
EEU clock
...// 인터럽트될 프로그램
int: // 인터럽트 핸들러
EXTSP 2
STWSP RO1 O
STWSP R1, 1
IN clock, rO
IN data, rO
LDWDP r1, byte
SHL byte, byte, 1
ADD byte, byte, rO
STWDP r1 , byte
LDWDP rO, n
ADDI rO, rO, 1
STWDP rO, n
EQI rO, rO, 8
EEF clock, rO
LDWSP R1, 1
LDWSP RO, O
LDAWSP 2
RFINT
앞서의 설명 및 예들로부터, 각각의 포트에서의 동작을 각각의 쓰레드와 어 떻게 관련시킬지, 그리고 이러한 동작으로부터 일어나는 이벤트들에 근거하여 쓰레드들을 어떻게 스케쥴링할 지를 알 수 있고, 이것은 외부 자극에 빠르게 반응할 수 있는 프로세서를 유리하게 제공한다.
이해해야만 하는 것으로 앞서의 실시예들은 단지 예시적 목적으로 설명되었다. 다른 실시예들에서, 레지스터 및 명령들의 다른 세트가 칩의 요구된 사양에 따라 제공될 수 있다. 일부 예시적 실시예에서, 쓰레드 식별자는 포트에 전송될 필요가 없고, 쓰레드 스케쥴러가 책임지고 있거나 혹은 다른 장소에 저장될 수 있다. 대안적으로, 각각의 쓰레드는 포트에서의 개별 준비 플래그에 주어질 수 있어, 쓰레드 식별자는 올바른 준비 신호를 선택하기 위해 포트에 전해지지만, 쓰레드 식별자는 동작 검출시 쓰레드 스케쥴러에 반환될 필요가 없다. 더욱이, 조건들 및/또는 조건 데이터는 포트들에 전송될 필요가 없다. 대신에 조건들은 포트들에서 사전에 구성될 수 있고, 그리고/또는 조건들은 쓰레드 스케쥴러 혹은 다른 곳에서 평가될 수 있다. 쓰레드들은 포트들 및 채널들과는 다른 소스로부터의 동작에 근거하여 스케쥴링될 수 있다. 프로세서의 다양한 컴포넌트들 간의 서로 다른 상호접속이 제공될 수 있다. 또한, 본 발명은 모바일 애플리케이션 프로세서를 가진 모바일 단말기에서의 사용에만 특정된 것이 아니다. 다른 애플리케이션 및 구성이 본원발명의 기술분야에서 숙련된 자들에게는 명백할 것이다. 본 발명의 범위는 설명된 실시예들에만 한정되는 것이 아니며, 단지 다음의 특허청구범위에 의해서만 한정된다.

Claims (56)

  1. 프로세서로서,
    제 1 포트와, 여기서 상기 제 1 포트는 상기 제 1 포트에서의 제 1 동작에 따라 제 1 표시를 발생시키도록 동작가능하고;
    제 2 포트와, 여기서 상기 제 2 포트는 상기 제 2 포트에서의 제 2 동작에 따라 제 2 표시를 발생시키도록 동작가능하고;
    복수의 쓰레드들 - 상기 복수의 쓰레드들은 제 1 쓰레드 및 제 2 쓰레드를 포함함 - 을 실행시키는 실행 유닛과; 그리고
    상기 제 1 표시 및 제 2 표시를 수신하도록 연결되어, 상기 제 1 표시 및 제 2 표시에 근거하여 상기 실행 유닛에 의한 실행을 위해, 상기 제 1 표시의 수신 대기중 상기 제 1 쓰레드의 실행을 보류하고 상기 제 2 표시의 수신 대기중 상기 제 2 쓰레드의 실행을 보류함으로써, 상기 복수의 쓰레드들을 스케쥴링하는 쓰레드 스케쥴러를 포함하여 구성되고,
    상기 제 1 동작은 상기 제 1 쓰레드와 관련되어 있으며, 상기 제 2 동작은 상기 제 2 쓰레드와 관련되어 있는 것을 특징으로 하는 프로세서.
  2. 제1항에 있어서,
    상기 쓰레드 스케쥴러는 상기 제 1 동작 대기중 보류된 상기 제 1 쓰레드에 관한 제 1 쓰레드 식별자를, 상기 제 1 포트와 관련된 식별자 레지스터에 전송하는 것을 특징으로 하는 프로세서.
  3. 제2항에 있어서,
    상기 쓰레드 스케쥴러는 상기 제 2 동작 대기중 보류된 상기 제 2 쓰레드에 관한 제 2 쓰레드 식별자를, 상기 제 2 포트와 관련된 식별자 레지스터에 전송하는 것을 특징으로 하는 프로세서.
  4. 제1항에 있어서,
    상기 프로세서는, 상기 제 1 동작 대기중 보류된 상기 제 1 쓰레드의 제 1 쓰레드 식별자가 상기 제 1 포트에 전송되고 상기 제 2 동작 대기중 보류된 상기 제 2 쓰레드의 제 2 쓰레드 식별자가 상기 제 2 포트에 전송되면, 상기 실행 유닛, 상기 쓰레드 스케쥴러, 및 클럭 중 적어도 하나의 전원을 차단하는 것을 특징으로 하는 프로세서.
  5. 제4항에 있어서,
    상기 프로세서는, 상기 제 1 쓰레드 식별자가 상기 제 1 포트로부터 반환되는 것과 상기 제 2 쓰레드 식별자가 상기 제 2 포트로부터 반환되는 것 중 하나 이상이 이루어지면, 상기 실행 유닛, 상기 쓰레드 스케쥴러, 및 상기 클럭 중 상기 적어도 하나의 전원을 공급하는 것을 특징으로 하는 프로세서.
  6. 제1항에 있어서,
    상기 제 1 포트는, 제 1 동작 핸들링 로직을 포함하고, 그리고 제 1 조건을 저장하기 위한 적어도 하나의 제 1 조건 레지스터와 관련되며, 상기 제 1 동작 핸들링 로직은 상기 제 1 포트에서의 제 1 동작을 모니터링하고 상기 제 1 조건을 이행하는 상기 제 1 동작에 따라 상기 제 1 표시를 발생시키는 것을 특징으로 하는 프로세서.
  7. 제6항에 있어서,
    상기 제 2 포트는, 제 2 동작 핸들링 로직을 포함하고, 그리고 제 2 조건을 저장하기 위한 적어도 하나의 제 2 조건 레지스터와 관련되며, 상기 제 2 동작 핸들링 로직은 상기 제 2 포트에서의 제 2 동작을 모니터링하고 상기 제 2 조건을 이행하는 상기 제 2 동작에 따라 상기 제 2 표시를 발생시키며,
    상기 실행 유닛은 상기 제 1 조건 레지스터에 상기 제 1 조건을 전송하고, 상기 제 2 조건 레지스터에 상기 제 2 조건을 전송하는 것을 특징으로 하는 프로세서.
  8. 제1항에 있어서,
    버스에 의해 상기 실행 유닛에 연결된 프로그램 메모리를 더 포함하고, 여기서 상기 쓰레드 스케쥴러는 상기 버스로부터 분리된 적어도 하나의 접속에 의해 상기 제 1 포트로부터 상기 제 1 표시를 수신하고, 상기 제 2 포트로부터 상기 제 2 표시를 수신하도록 연결되는 것을 특징으로 하는 프로세서.
  9. 제2항에 있어서,
    상기 쓰레드 스케쥴러는, 상기 제 1 쓰레드의 보류 시, 연속 포인트 벡터(continuation point vector)를 상기 제 1 포트와 관련된 벡터 레지스터에 전송하고, 그리고 상기 연속 포인트 벡터는 상기 제 1 동작에 따라 상기 실행 유닛에 반환되는 것을 특징으로 하는 프로세서.
  10. 제9항에 있어서,
    상기 제 1 쓰레드는 복수의 포트들로부터의 동작 - 동작 각각은 상기 복수의 포트들 각각으로부터의 동작임 - 과 관련되고, 복수의 포트들 각각은 상기 복수의 포트들 각각으로부터의 각각의 동작에 따라 각각의 표시를 발생시키도록 동작가능하고, 상기 실행 유닛은 상기 복수의 포트들 각각에 복수의 연속 포인트 벡터들 각각을 전송하고, 복수의 연속 포인트 벡터 각각은 각각의 상기 동작에 따라 반환되며, 그리고 상기 쓰레드 스케쥴러는 상기 각각의 표시들 중 적어도 하나를 수령할 때까지 상기 제 1 쓰레드의 실행을 보류하는 것을 특징으로 하는 프로세서.
  11. 제10항에 있어서,
    상기 제 1 포트는 포트 이벤트 인에이블 플래그와 관련되고, 그리고 상기 쓰레드 스케쥴러는 상기 포트 이벤트 인에이블 플래그를 어써팅함으로써 상기 제 1 쓰레드의 스케쥴링을 트리거링하도록 상기 제 1 동작을 인에이블시키고, 그리고 상기 포트 이벤트 인에이블 플래그를 디어써팅함으로써 상기 제 1 쓰레드의 스케쥴링을 트리거링하는 것으로부터 상기 제 1 동작을 디스에이블시키는 것을 특징으로 하는 프로세서.
  12. 제11항에 있어서,
    상기 제 1 쓰레드는 쓰레드 이벤트 인에이블 플래그와 관련되고, 그리고 상기 쓰레드 스케쥴러는 상기 쓰레드 이벤트 인에이블 플래그를 어써팅함으로써 상기 제 1 동작에 따라 스케쥴링되도록 상기 제 1 쓰레드를 인에이블시키고, 그리고 상기 쓰레드 이벤트 인에이블 플래그를 디어써팅함으로써 상기 제 1 동작에 따라 스케쥴링되는 것으로부터 상기 제 1 쓰레드를 디스에이블시키는 것을 특징으로 하는 프로세서.
  13. 제12항에 있어서,
    상기 포트 이벤트 인에이블 플래그와 상기 쓰레드 이벤트 인에이블 플래그 중 적어도 하나는 상기 제 1 동작의 발생에 의해 자동으로 디어써팅되는 것을 특징으로 하는 프로세서.
  14. 제12항에 있어서,
    상기 포트 이벤트 인에이블 플래그와 상기 쓰레드 이벤트 인에이블 플래그 중 적어도 하나가 디어써팅되는 동안, 상기 쓰레드 스케쥴러는 포트로부터의 제 3 동작의 제 3 표시 대기중 상기 제 1 쓰레드의 실행을 보류하는 것을 특징으로 하는 프로세서.
  15. 제12항에 있어서,
    복수의 각각의 포트 이벤트 인에이블 플래그들은 상기 제 1 쓰레드와 관련된 복수의 포트들 각각과 관련되고, 그리고 쓰레드 스케쥴러는 상기 쓰레드 이벤트 인에이블 플래그를 어써팅하고, 후속적으로 상기 복수의 포트 이벤트 인에이블 플래그들을 어써팅하는 것을 특징으로 하는 프로세서.
  16. 제1항에 있어서,
    쓰레드 레지스터들의 복수의 세트들을 더 포함하고, 상기 쓰레드 레지스터들의 세트 각각은 상기 복수의 쓰레드들 각각에 관한 정보를 저장하도록 할당되는 것을 특징으로 하는 프로세서.
  17. 제1항에 있어서,
    상기 프로세서는 칩 상에서 구현되고, 그리고 상기 제 1 포트와 상기 제 2 포트 중 적어도 하나는 상기 칩 상의 또 다른 프로세서와 통신하기 위한 내부 포트인 것을 특징으로 하는 프로세서.
  18. 제1항에 있어서,
    상기 프로세서는 칩 상에서 구현되고, 그리고 상기 제 1 포트와 상기 제 2 포트 중 적어도 하나는 상기 칩 외부에 있는 디바이스와 통신하기 위한 외부 포트인 것을 특징으로 하는 프로세서.
  19. 제18항에 있어서,
    상기 외부 포트는 상기 칩의 물리적 경계에 있는 핀에서 일어나는 상승 신호 에지 혹은 하강 신호 에지를 검출하기 위한 핀 포트인 것을 특징으로 하는 프로세서.
  20. 제18항 또는 제19항에 있어서,
    상기 외부 포트는 포트에서의 하나 또는 그 이상의 비트들의 순간 로직 레벨을 핸들링하기 위한 데이터 포트인 것을 특징으로 하는 프로세서.
  21. 제1항에 있어서,
    상기 실행 유닛은 쓰레드의 보류 및 수행을 위한 전용 명령을 인식하고 실행하는 것을 특징으로 하는 프로세서.
  22. 제16항에 있어서,
    상기 쓰레드 레지스터들의 세트들 중 적어도 두 개 세트들 간에 적어도 하나의 채널을 더 포함하고, 상기 쓰레드 스케쥴러는 상기 채널을 통해 일어나는 동작에 근거하여 상기 복수의 쓰레드들중 하나의 쓰레드를 스케쥴링하는 것을 특징으로 하는 프로세서.
  23. 제1항에 있어서,
    추가적으로 상기 쓰레드 스케쥴러는 인터럽트에 근거하여 상기 복수의 쓰레드들 중 하나의 쓰레드를 스케쥴링하는 것을 특징으로 하는 프로세서.
  24. 제23항에 있어서,
    상기 인터럽트에 근거하여 스케쥴링되는 상기 복수의 쓰레드들 중 하나의 쓰레드는 상기 제 1 쓰레드이고, 상기 인터럽트는 보류되는 동안 상기 제 1 쓰레드를 인터럽트하는 것을 특징으로 하는 프로세서.
  25. 제1항에 있어서,
    상기 쓰레드 스케쥴러는, 만약 관련 동작이, 상기 제 1 동작에 의존하는 상기 제 1 쓰레드 내에서 명령의 실행 시 혹은 이전에 일어난다면 상기 제 1 쓰레드를 보류 없이 스케쥴링하는 것을 특징으로 하는 프로세서.
  26. 제 1 포트와 제 2 포트를 구비한 프로세서에서의 실행을 위한 복수의 쓰레드들 - 상기 복수의 쓰레드들은 제 1 쓰레드 및 제 2 쓰레드를 포함함 - 을 스케쥴링하는 방법으로서,
    쓰레드 스케쥴러를 이용하여, 상기 제 1 포트에서의 제 1 동작과 상기 제 1 쓰레드를 관련시키고, 상기 제 2 포트에서의 제 2 동작과 상기 제 2 쓰레드를 관련시키는 단계와;
    상기 제 1 포트를 이용하여, 상기 제 1 동작에 따라 상기 제 1 포트에서의 제 1 표시를 발생시키는 단계와;
    상기 제 2 포트를 이용하여, 상기 제 2 동작에 따라 상기 제 2 포트에서의 제 2 표시를 발생시키는 단계와; 그리고
    상기 쓰레드 스케쥴러를 이용하여, 상기 제 1 표시 및 제 2 표시에 근거하여 실행을 위해, 상기 제 1 표시의 수신 대기중 상기 제 1 쓰레드의 실행을 보류하고 상기 제 2 표시의 수신 대기중 상기 제 2 쓰레드의 실행을 보류함으로써, 상기 복수의 쓰레드들을 스케쥴링하는 단계와; 그리고
    상기 스케쥴링에 따라 상기 프로세서의 실행유닛으로 상기 복수의 쓰레드들의 실행을 수행함으로써 상기 복수의 쓰레드들을 수행하는 단계를 포함하는 것을 특징으로 하는 복수의 쓰레드들을 스케쥴링하는 방법.
  27. 제26항에 있어서,
    상기 관련시키는 단계는, 상기 제 1 포트와 관련된 식별자 레지스터에, 상기 제 1 동작 대기중 보류된 상기 제 1 쓰레드에 관한 제 1 쓰레드 식별자를 전송하는 단계를 포함하는 것을 특징으로 하는 복수의 쓰레드들을 스케쥴링하는 방법.
  28. 제27항에 있어서,
    상기 관련시키는 단계는, 상기 제 2 포트와 관련된 식별자 레지스터에, 상기 제 2 동작 대기중 보류된 상기 제 2 쓰레드에 관한 제 2 쓰레드 식별자를 전송하는 단계를 포함하는 것을 특징으로 하는 복수의 쓰레드들을 스케쥴링하는 방법.
  29. 제28항에 있어서,
    상기 제 1 동작 대기중 보류된 상기 제 1 쓰레드의 상기 제 1 쓰레드 식별자가 상기 제 1 포트에 전송되고 상기 제 2 동작 대기중 보류된 상기 제 2 쓰레드의 상기 제 2 쓰레드 식별자가 상기 제 2 포트에 전송되면, 상기 쓰레드들을 실행시키는데 사용되는 실행 유닛, 상기 쓰레드들을 스케쥴링하는데 사용되는 쓰레드 스케쥴러, 및 클럭 중 적어도 하나의 전원을 차단하는 것을 특징으로 하는 복수의 쓰레드들을 스케쥴링하는 방법.
  30. 제29항에 있어서,
    상기 제 1 쓰레드 식별자가 상기 제 1 포트로부터 반환되는 것과 상기 제 2 쓰레드 식별자가 상기 제 2 포트로부터 반환되는 것 중 하나 이상이 이루어지면, 상기 실행 유닛, 상기 쓰레드 스케쥴러, 및 상기 클럭 중 상기 적어도 하나의 전원을 공급하는 것을 특징으로 하는 복수의 쓰레드들을 스케쥴링하는 방법.
  31. 삭제
  32. 삭제
  33. 삭제
  34. 삭제
  35. 삭제
  36. 삭제
  37. 삭제
  38. 삭제
  39. 삭제
  40. 삭제
  41. 제26항에 있어서,
    상기 스케쥴링하는 단계는, 쓰레드 레지스터들의 각각의 세트에 상기 복수의 쓰레드들 각각을 나타내는 정보를 저장하는 단계를 더 포함하는 것을 특징으로 하는 복수의 쓰레드들을 스케쥴링하는 방법.
  42. 제26항에 있어서,
    상기 프로세서는 칩 상에서 구현되고, 그리고 상기 제 1 포트와 상기 제 2 포트 중 적어도 하나는 상기 칩 상의 또 다른 프로세서와 통신하기 위한 내부 포트인 것을 특징으로 하는 복수의 쓰레드들을 스케쥴링하는 방법.
  43. 제26항에 있어서,
    상기 프로세서는 칩 상에서 구현되고, 그리고 상기 제 1 포트와 상기 제 2 포트 중 적어도 하나는 상기 칩 외부에 있는 디바이스와 통신하기 위한 외부 포트인 것을 특징으로 하는 복수의 쓰레드들을 스케쥴링하는 방법.
  44. 제43항에 있어서,
    적어도 하나의 외부 포트는 상기 칩의 물리적 경계에 있는 핀에서 일어나는 상승 신호 에지 혹은 하강 신호 에지를 검출하기 위한 핀 포트인 것을 특징으로 하는 복수의 쓰레드들을 스케쥴링하는 방법.
  45. 제43항 또는 제44항에 있어서,
    적어도 하나의 외부 포트는 포트에서의 하나 또는 그 이상의 비트들의 순간 로직 레벨을 핸들링하기 위한 데이터 포트인 것을 특징으로 하는 복수의 쓰레드들을 스케쥴링하는 방법.
  46. 제26항에 있어서,
    상기 스케쥴링하는 단계는, 상기 복수의 쓰레드들의 보류 및 수행을 위한 전용 명령을 실행하는 단계를 더 포함하는 것을 특징으로 하는 복수의 쓰레드들을 스케쥴링하는 방법.
  47. 제41항에 있어서,
    상기 프로세서는 또한 상기 쓰레드 레지스터들의 세트들 중 적어도 두 개 세트들 간에 적어도 하나의 채널을 더 포함하고, 상기 스케쥴링하는 단계는 상기 채널을 통해 일어나는 동작에 근거하여 상기 복수의 쓰레드들중 하나를 스케쥴링하는 단계를 포함하는 것을 특징으로 하는 복수의 쓰레드들을 스케쥴링하는 방법.
  48. 제26항에 있어서,
    상기 스케쥴링하는 단계는 인터럽트에 근거하여 상기 복수의 쓰레드들중 하나를 스케쥴링하는 단계를 추가적으로 포함하는 것을 특징으로 하는 복수의 쓰레드들을 스케쥴링하는 방법.
  49. 제48항에 있어서,
    상기 인터럽트에 근거하여 스케쥴링되는 상기 복수의 쓰레드들중 하나는 상기 제 1 쓰레드이고, 상기 인터럽트는 보류되는 동안 상기 제 1 쓰레드를 인터럽트하는 것을 특징으로 하는 복수의 쓰레드들을 스케쥴링하는 방법.
  50. 제26항에 있어서,
    만약 상기 제 1 동작이, 그 제 1 동작에 의존하는 상기 제 1 쓰레드 내에서 명령의 실행 시 혹은 이전에 일어난다면 그 제 1 쓰레드를 보류 없이 스케쥴링하는 단계를 포함하는 것을 특징으로 하는 복수의 쓰레드들을 스케쥴링하는 방법.
  51. 제 1 포트와 제 2 포트를 구비한 프로세서에서의 실행을 위한 복수의 쓰레드들 - 상기 복수의 쓰레드들은 제 1 쓰레드 및 제 2 쓰레드를 포함함 - 을 스케쥴링하는 쓰레드 스케쥴러로서,
    상기 쓰레드 스케쥴러는 상기 제 1 포트에서의 제 1 동작에 따라 상기 제 1 포트에 의해 발생된 제 1 표시를 수신하고,
    상기 쓰레드 스케쥴러는 상기 제 2 포트에서의 제 2 동작에 따라 상기 제 2 포트에 의해 발생된 제 2 표시를 수신하고,
    상기 쓰레드 스케쥴러는 상기 제 1 표시 및 제 2 표시에 근거하여 상기 실행 유닛에 의한 실행을 위해, 상기 제 1 표시의 수신 대기중 상기 제 1 쓰레드의 실행을 보류하고 상기 제 2 표시의 수신 대기중 상기 제 2 쓰레드의 실행을 보류함으로써, 상기 복수의 쓰레드들을 스케쥴링하고, 상기 제 1 동작은 상기 제 1 쓰레드와 관련되어 있으며, 상기 제 2 동작은 상기 제 2 쓰레드와 관련되어 있는 것을 특징으로 하는 쓰레드 스케쥴러.
  52. 실행을 위한 복수의 쓰레드들의 스케쥴링에서의 사용을 위한 포트로서,
    상기 포트에서의 동작 - 상기 동작은 상기 포트로의 데이터 입력을 포함함 - 에 따라 표시를 발생시키는 동작 핸들링 로직과;
    상기 동작과 관련된 쓰레드를 식별하는 정보를 저장하기 위한 레지스터와; 그리고
    조건을 저장하기 위한 레지스터를 포함하여 구성되고,
    상기 동작 핸들링 로직은 상기 동작이 상기 조건을 만족시킬 때 상기 데이터와 상기 조건을 비교하여 칩 상에서 상기 표시를 쓰레드 스케쥴러로 전송하고, 이에 따라서 상기 복수의 쓰레드들중 하나에 상기 포트를 통해 데이터의 조건부 입력을 수행하는 것을 특징으로 하는 쓰레드 스케쥴링에서의 사용을 위한 포트.
  53. 모바일 단말기로서,
    모바일 애플리케이션 프로세서와;
    적어도 하나의 주변 디바이스와; 그리고
    상기 모바일 애플리케이션 프로세서와 상기 주변 디바이스 사이에 연결된 인터페이스 프로세서를 구비하여 구성되며,
    상기 인터페이스 프로세서는,
    제 1 포트와, 여기서 상기 제 1 포트는 상기 제 1 포트에서의 제 1 동작에 따라 제 1 표시를 발생시키도록 동작가능하고;
    제 2 포트와, 여기서 상기 제 2 포트는 상기 제 2 포트에서의 제 2 동작에 따라 제 2 표시를 발생시키도록 동작가능하고;
    복수의 쓰레드들 - 상기 복수의 쓰레드들은 제 1 쓰레드 및 제 2 쓰레드를 포함함 - 을 실행시키는 실행 유닛과; 그리고
    상기 제 1 표시 및 제 2 표시를 수신하도록 연결되어, 상기 제 1 표시 및 제 2 표시에 근거하여 상기 실행 유닛에 의한 실행을 위해, 상기 제 1 표시의 수신 대기중 상기 제 1 쓰레드의 실행을 보류하고 상기 제 2 표시의 수신 대기중 상기 제 2 쓰레드의 실행을 보류함으로써, 상기 복수의 쓰레드들을 스케쥴링하는 쓰레드 스케쥴러를 포함하고,
    상기 제 1 동작은 상기 제 1 쓰레드와 관련되어 있으며, 상기 제 2 동작은 상기 제 2 쓰레드와 관련되어 있는 것을 특징으로 하는 모바일 단말기.
  54. 상호연결된 프로세서들의 어레이로서, 상기 프로세서들 중 적어도 하나의 프로세서는,
    제 1 포트와, 여기서 상기 제 1 포트는 상기 제 1 포트에서의 제 1 동작에 따라 제 1 표시를 발생시키도록 동작가능하고;
    제 2 포트와, 여기서 상기 제 2 포트는 상기 제 2 포트에서의 제 2 동작에 따라 제 2 표시를 발생시키도록 동작가능하고;
    복수의 쓰레드들 - 상기 복수의 쓰레드들은 제 1 쓰레드 및 제 2 쓰레드를 포함함 - 을 실행시키는 실행 유닛과; 그리고
    상기 제 1 표시 및 제 2 표시를 수신하도록 연결되어, 상기 제 1 표시 및 제 2 표시에 근거하여 상기 실행 유닛에 의한 실행을 위해, 상기 제 1 표시의 수신 대기중 상기 제 1 쓰레드의 실행을 보류하고 상기 제 2 표시의 수신 대기중 상기 제 2 쓰레드의 실행을 보류함으로써, 상기 복수의 쓰레드들을 스케쥴링하는 쓰레드 스케쥴러를 포함하고,
    상기 제 1 동작은 상기 제 1 쓰레드와 관련되어 있으며, 상기 제 2 동작은 상기 제 2 쓰레드와 관련되어 있으며, 상기 제 1 포트와 상기 제 2 포트 중 적어도 하나는 상기 적어도 하나의 프로세서를 상기 어레이 내의 또 다른 프로세서와 연결시키는 것을 특징으로 하는 상호연결된 프로세서들의 어레이.
  55. 프로세서로서,
    제 1 포트에서의 제 1 동작에 따라 제 1 표시를 발생시키는 제 1 포트 수단과;
    제 2 포트에서의 제 2 동작에 따라 제 2 표시를 발생시키는 제 2 포트 수단과;
    복수의 쓰레드들- 상기 복수의 쓰레드들은 제 1 쓰레드 및 제 2 쓰레드를 포함함 - 을 실행시키는 실행 수단과; 그리고
    상기 제 1 표시 및 제 2 표시를 수신하여, 상기 제 1 표시 및 제 2 표시에 근거하여 상기 실행 유닛에 의한 실행을 위해 상기 복수의 쓰레드들을 스케쥴링하는 쓰레드 스케쥴링 수단을 포함하여 구성되고,
    상기 스케쥴링은 상기 제 1 표시의 수신 대기중 상기 제 1 쓰레드의 실행을 보류하고, 상기 제 2 표시의 수신 대기중 상기 제 2 쓰레드의 실행을 보류하는 것을 포함하고, 상기 제 1 동작은 상기 제 1 쓰레드와 관련되어 있고, 상기 제 2 동작은 상기 제 2 쓰레드와 관련되어 있는 것을 특징으로 하는 프로세서.
  56. 제 1 포트와 제 2 포트를 구비한 프로세서에서의 실행을 위한 복수의 쓰레드들 - 상기 복수의 쓰레드들은 제 1 쓰레드 및 제 2 쓰레드를 포함함 - 을 스케쥴링하는 쓰레드 스케쥴러로서,
    상기 제 1 포트에서의 제 1 동작에 따라 상기 제 1 포트에 의해 발생된 제 1 표시를 수신하는 수단과;
    상기 제 2 포트에서의 제 2 동작에 따라 상기 제 2 포트에 의해 발생된 제 2 표시를 수신하는 수단과; 그리고
    상기 제 1 표시 및 제 2 표시에 근거하여 프로세서에 의한 실행을 위해 상기 복수의 쓰레드들을 스케쥴링하는 수단을 포함하여 구성되고,
    상기 스케쥴링은 상기 제 1 표시의 수신 대기중 상기 제 1 쓰레드의 실행을 보류하고, 상기 제 2 표시의 수신 대기중 상기 제 2 쓰레드의 실행을 보류하는 것을 포함하고, 상기 제 1 동작은 상기 제 1 쓰레드와 관련되어 있으며, 상기 제 2 동작은 상기 제 2 쓰레드와 관련되어 있는 것을 특징으로 하는 쓰레드 스케쥴러.
KR1020097021480A 2007-03-14 2008-03-13 인터페이스 프로세서 KR101501181B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/717,622 2007-03-14
US11/717,622 US8219789B2 (en) 2007-03-14 2007-03-14 Interface processor
PCT/GB2008/000870 WO2008110799A1 (en) 2007-03-14 2008-03-13 Interface processor

Publications (2)

Publication Number Publication Date
KR20090122992A KR20090122992A (ko) 2009-12-01
KR101501181B1 true KR101501181B1 (ko) 2015-03-18

Family

ID=39433789

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097021480A KR101501181B1 (ko) 2007-03-14 2008-03-13 인터페이스 프로세서

Country Status (6)

Country Link
US (1) US8219789B2 (ko)
EP (1) EP2137616B1 (ko)
JP (1) JP5271287B2 (ko)
KR (1) KR101501181B1 (ko)
CN (1) CN101681274B (ko)
WO (1) WO2008110799A1 (ko)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5173714B2 (ja) 2008-09-30 2013-04-03 ルネサスエレクトロニクス株式会社 マルチスレッドプロセッサ及びその割り込み処理方法
US20110173420A1 (en) * 2010-01-08 2011-07-14 International Business Machines Corporation Processor resume unit
US8447960B2 (en) * 2010-01-08 2013-05-21 International Business Machines Corporation Pausing and activating thread state upon pin assertion by external logic monitoring polling loop exit time condition
JP2014211890A (ja) * 2014-06-25 2014-11-13 ルネサスエレクトロニクス株式会社 マルチスレッドプロセッサ及びその割り込み処理方法
CN110908491B (zh) * 2018-08-28 2023-08-08 上海忆芯实业有限公司 功耗控制方法、控制部件及其电子系统
US11288072B2 (en) * 2019-09-11 2022-03-29 Ceremorphic, Inc. Multi-threaded processor with thread granularity

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002183073A (ja) * 2000-12-18 2002-06-28 Nec Kofu Ltd バッファ制御装置、汎用ポート制御装置、入出力システム、情報処理装置
US20020161957A1 (en) * 2001-02-09 2002-10-31 Guillaume Comeau Methods and systems for handling interrupts
JP2003167748A (ja) * 2001-11-30 2003-06-13 Fujitsu Ltd マルチスレッド計算機
US6661794B1 (en) * 1999-12-29 2003-12-09 Intel Corporation Method and apparatus for gigabit packet assignment for multithreaded packet processing

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5515538A (en) * 1992-05-29 1996-05-07 Sun Microsystems, Inc. Apparatus and method for interrupt handling in a multi-threaded operating system kernel
US5944816A (en) 1996-05-17 1999-08-31 Advanced Micro Devices, Inc. Microprocessor configured to execute multiple threads including interrupt service routines
US6985431B1 (en) * 1999-08-27 2006-01-10 International Business Machines Corporation Network switch and components and method of operation
US6976095B1 (en) * 1999-12-30 2005-12-13 Intel Corporation Port blocking technique for maintaining receive packet ordering for a multiple ethernet port switch
US6952824B1 (en) * 1999-12-30 2005-10-04 Intel Corporation Multi-threaded sequenced receive for fast network port stream of packets
US7480706B1 (en) * 1999-12-30 2009-01-20 Intel Corporation Multi-threaded round-robin receive for fast network port
US6799317B1 (en) * 2000-06-27 2004-09-28 International Business Machines Corporation Interrupt mechanism for shared memory message passing
WO2002059731A2 (en) * 2000-11-17 2002-08-01 Links Point, Inc. Methods and systems for reducing power consumption in computer data communications
US20030065741A1 (en) * 2001-09-29 2003-04-03 Hahn Vo Concurrent bidirectional network communication utilizing send and receive threads
KR100429543B1 (ko) * 2002-05-25 2004-04-29 삼성전자주식회사 네트워크 프로세서에서 다양한 개수의 포트들을 처리하기위한 방법
JP2004220070A (ja) * 2003-01-09 2004-08-05 Japan Science & Technology Agency コンテキスト切り替え方法及び装置、中央演算装置、コンテキスト切り替えプログラム及びそれを記憶したコンピュータ読み取り可能な記憶媒体
US7496915B2 (en) * 2003-04-24 2009-02-24 International Business Machines Corporation Dynamic switching of multithreaded processor between single threaded and simultaneous multithreaded modes
US7350060B2 (en) * 2003-04-24 2008-03-25 International Business Machines Corporation Method and apparatus for sending thread-execution-state-sensitive supervisory commands to a simultaneous multi-threaded (SMT) processor
US7424599B2 (en) * 2003-08-28 2008-09-09 Mips Technologies, Inc. Apparatus, method, and instruction for software management of multiple computational contexts in a multithreaded microprocessor
US7203100B2 (en) * 2004-11-01 2007-04-10 Sun Mircosystems, Inc. Efficient implementation of a read scheme for multi-threaded register file
US7149832B2 (en) * 2004-11-10 2006-12-12 Microsoft Corporation System and method for interrupt handling
US8745627B2 (en) * 2005-06-27 2014-06-03 Qualcomm Incorporated System and method of controlling power in a multi-threaded processor
US8074026B2 (en) * 2006-05-10 2011-12-06 Intel Corporation Scatter-gather intelligent memory architecture for unstructured streaming data on multiprocessor systems

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6661794B1 (en) * 1999-12-29 2003-12-09 Intel Corporation Method and apparatus for gigabit packet assignment for multithreaded packet processing
JP2002183073A (ja) * 2000-12-18 2002-06-28 Nec Kofu Ltd バッファ制御装置、汎用ポート制御装置、入出力システム、情報処理装置
US20020161957A1 (en) * 2001-02-09 2002-10-31 Guillaume Comeau Methods and systems for handling interrupts
JP2003167748A (ja) * 2001-11-30 2003-06-13 Fujitsu Ltd マルチスレッド計算機

Also Published As

Publication number Publication date
JP2010521730A (ja) 2010-06-24
KR20090122992A (ko) 2009-12-01
US8219789B2 (en) 2012-07-10
CN101681274A (zh) 2010-03-24
US20080229311A1 (en) 2008-09-18
JP5271287B2 (ja) 2013-08-21
EP2137616A1 (en) 2009-12-30
CN101681274B (zh) 2014-12-17
WO2008110799A1 (en) 2008-09-18
EP2137616B1 (en) 2013-10-30

Similar Documents

Publication Publication Date Title
KR101486025B1 (ko) 프로세서에서의 쓰레드 스케쥴링
EP2137628B1 (en) Clocked ports
KR101486027B1 (ko) 타이밍 포트
EP2165253A1 (en) Data transfer between thread register sets
KR101501181B1 (ko) 인터페이스 프로세서
US9367321B2 (en) Processor instruction set for controlling an event source to generate events used to schedule threads
EP2137617B1 (en) Processor instruction set
JP2010521730A5 (ko)
EP2188726A1 (en) Token protocol
EP2137613B1 (en) Processor register architecture

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
AMND Amendment
J201 Request for trial against refusal decision
B701 Decision to grant
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20180201

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20190214

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20200205

Year of fee payment: 6