KR100890243B1 - 변환된 명령어의 재시작 - Google Patents

변환된 명령어의 재시작 Download PDF

Info

Publication number
KR100890243B1
KR100890243B1 KR1020037004687A KR20037004687A KR100890243B1 KR 100890243 B1 KR100890243 B1 KR 100890243B1 KR 1020037004687 A KR1020037004687 A KR 1020037004687A KR 20037004687 A KR20037004687 A KR 20037004687A KR 100890243 B1 KR100890243 B1 KR 100890243B1
Authority
KR
South Korea
Prior art keywords
instruction
instructions
instruction set
execution
sequence
Prior art date
Application number
KR1020037004687A
Other languages
English (en)
Other versions
KR20030034243A (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 KR20030034243A publication Critical patent/KR20030034243A/ko
Application granted granted Critical
Publication of KR100890243B1 publication Critical patent/KR100890243B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • 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/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift registers
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • 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/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • 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 or look ahead
    • G06F9/3802Instruction prefetching
    • 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 or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • 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 or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
    • 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 or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)
  • Advance Control (AREA)

Abstract

처리 시스템은, 제 1 명령어 세트의 명령어를 실행하는 프로세서 코어(104)와, 그 제 1 명령어 세트의 하나 이상의 명령어에 대응한 변환기 출력신호를 발생하여 제 2 명령어 세트의 명령어를 에뮬레이션하는 명령어 변환기(108)를 구비한다. 이 명령어 변환기(108)는, 제 2 명령어 세트의 명령어에 대한 입력변수가 변경되고 나서 그 명령어를 에뮬레이션하는 최종 연산을 실행하도록 구성된 동작을 지정하는 변환기 출력신호를 제공한다. 인터럽트 핸들러는, 제 1 명령어 세트의 명령어의 동작을 실행한 후 인터럽트를 서비스한다. 입력상태가 변경되고 나서 최종 명령어가 실행되는 상기 변환된 명령어의 시퀀스는, 상기 인터럽트 후, 최종 연산이 인터럽트가 일어났을 때 시작되지 않았으면 완료 에뮬레이션을 재수행하거나, 최종 연산이 인터럽트가 일어났을 때 시작되었으면 제 2 명령어 세트로부터 다음 명령어를 수행하여서, 처리를 재시작하도록 구성된다.
데이터 처리장치, 프로세서, 스택 오퍼랜드, 명령어 변환기, 매핑 상태

Description

변환된 명령어의 재시작{RESTARTING TRANSLATED INSTRUCTIONS}
본 발명은, 데이터 처리 시스템 분야에 관한 것이다. 특히, 본 발명은, 제 1 명령어 세트의 명령어를 실행 가능하도록 동작하는 프로세서 코어와, 제 2 명령어 세트의 명령어를 상기 프로세서 코어가 실행하는데 적합한 형태로 변환 가능하도록 동작하는 명령어 변환기(instruction translator)를 구비한 데이터 처리시스템에 관한 것이다.
고유 명령어 세트를 갖는 프로세서 코어와 관련하여 동작하여 비고유 명령어를 상기 프로세서 코어에 의해 실행하기 위한 고유 명령어로 변환하는 명령어 변환기는 공지되어 있다. 데이터 처리 시스템의 능력을 확장할 때 상기와 같은 방법은 바람직하지만, 그 방법은, 이 방법을 특히 어렵고 복잡하게 한다.
이러한 문제점의 하나는, 인터럽트 신호를 처리하는 방법이 있다. 처리 시스템은, 가능한 빠르게 인터럽트 신호에 응답하는 것이 바람직하다. 이것은, 실시간으로 동작을 제어하는 시스템에서 특히 중요하다. 인터럽트 대기시간은, 중요한 성능 파라미터일 수 있고, 최악의 경우의 상황을 이용하여 측정된다. 따라서, 고유 명령어를 실행할 때, 인터럽트 신호는 현재 실행하는 고유 명령어가 종료할 때 응답하도록 구성된다는 것이 공지되어 있다.
비고유 명령어를 고유 명령어 변환하는 시스템에 있어서, 그 시스템은, 종종 단일 비고유 명령어를 하나 이상의 고유 명령어로 변환하는 것이 생긴다. 따라서, 단일 비고유 명령어를 나타낸 고유 명령어의 시퀀스를 실행하는 동안에 인터럽트를 수신하면, 그 비고유 명령어는 일부만 완료되어 그 처리 시스템의 상태는 불확실하다. 이것을 처리하는 하나의 방법은, 인터럽트 신호의 수신시에 트리거하여 현재의 처리 시스템의 상태를 저장하므로 인터럽트 후 재시작 전에 그 상태를 복원할 수 있어서, 임의의 일부 완료된 비고유 명령어는 완료가 될 수 있을 추가의 하드웨어를 제공해야 할 것이다. 그러나, 이러한 방법은, 하드웨어 비용이 추가되고, 복잡성이 더해지는 단점이 있고, 또한 그 자체로서 인터럽트를 서비스하기 전에 상기 처리 시스템의 상태를 저장할 필요성으로 인해 인터럽트 성능을 저하시키기도 한다.
또 다른 방법은, 비고유 명령어를 사소한 것으로서 취급하는, 즉, 비고유 명령어가 완전히 그 실행을 완료한 후까지 인터럽트를 서비스하지 않는 시스템을 제어하는데 있다. 또한, 이러한 방법은, 역으로 인터럽트 대기시간에 영향을 준다.
명령어 세트와 다른 배경 정보간에 변환을 위한 공지된 시스템의 예들로서는, 다음과 같은 예들이 있다: US-A-5,805,895; US-A-3,955,180;US-A-5,970,242;US-A-5,826,089;US-A-5,925,123;US-A-5,875,336;US-A-5,937,193;US-A-5,953,520;US-A-6,021,469;US-A-5,568,646;US-A-5,758,115;US-A-5,367,685; IBM Technical Disclosure Bulletin, March 1988,pp308-309, "System/370 Emulator Assist Processor For a Reduced Instruction Set Computer"; IBM Technical Disclosure Bulletin, July 1986,pp548-549, "Full Function Series/1 Instruction Set Emulator"; IBM Technical Disclosure Bulletin, March 1994,pp605-606, "Real-Time CISC Architecture HW Emulator On A RISC Processor"; IBM Technical Disclosure Bulletin, March 1998,pp272, "Performance Improvement Using An EMULATION Control Block"; IBM Technical Disclosure Bulletin, January 1995, pp537-540, "Fast Instruction Decode For Code Emulation on Reduced Instruction Set Computer/Cycles Systems"; IBM Technical Disclosure Bulletin, February 1993, pp231-234, "High Performance Dual Architecture Processor"; IBM Technical Disclosure Bulletin, August 1989, pp40-43, "System/370 I/O Channel Program Channel Command Word Prefetch"; IBM Technical Disclosure Bulletin, June 1985, pp305-306, "Fully Microcode-Controlled Emulation Architecture"; IBM Technical Disclosure Bulletin, March 1972, pp3074-3076, "Op Code and Status Handling For Emulation"; IBM Technical Disclosure Bulletin, August 1982, pp954-956, "On-Chip Microcoding of a Microprocessor With Most Frequently Used Instructions of Large System and Primitives Suitable for Coding Remaining Instructions"; IBM Technical Disclosure Bulletin, April 1983, pp5576-5577, "Emulation Instruction"; the book ARM System Architecture by S Furber; the book Computer Architecture: A Quantitative Approach by Hennessy and Patterson; 및 the book The Java Virtual Machine Specification by Tim Lindholm and Frank Yellin 1st and 2nd Editions.
비고유 명령어를 실행할 때 인터럽트 대기시간을 낮추려면, 상기와 같은 시 스템을, 최악의 경우 안전성 임계 파라미터일 수도 있는 에어백 제어시스템 또는 안티록 브레이크 시스템(ABS: Anti-lock Brake System) 등의 실시간 애플리케이션에서 사용하기를 원한다고 생각할 경우 강조되는 것이 바람직하다.
본 발명의 일 국면은,
제 1 명령어 세트의 명령어에 의해 지정된 대로 연산을 실행하도록 동작가능한 프로세서 코어와,
제 2 명령어 세트의 명령어를 상기 제 1 명령어 세트의 명령어에 대응하는 변환기 출력신호로 변환하도록 동작 가능한 명령어 변환기로서, 상기 제 2 명령어 세트 중 적어도 하나의 명령어가 하나 이상의 입력변수를 사용하여 실행하는 연산을 지정하는 명령어 변환기와,
인터럽트 신호에 응답하여 현재 실행 중인 연산의 실행을 완료한 후 상기 제 1 명령어 세트의 명령어에 대응하는 연산의 실행을 인터럽트하는 인터럽트 핸들러와,
상기 인터럽트 후 실행을 재시작하기 위한 재시작 로직부를 구비하고,
상기 명령어 변환기는 상기 제 1 명령어 세트의 명령어에 대응하는 변환기 출력 신호의 하나 이상의 세트의 시퀀스를 발생하고,
상기 제 2 명령어 세트 중 상기 적어도 하나의 명령어를 나타낼 수 있도록 동작 가능하고, 이때, 각 시퀀스는 상기 시퀀스 내의 마지막 연산을 실행할 때까지 상기 하나 이상의 입력 변수에 대해서 변경하지 않으며,
상기 제 2 명령어 세트의 적어도 하나의 명령어를 나타내는 연산의 시퀀스의 실행중에 인터럽트가 발생한 후,
(i) 상기 인터럽트가 상기 시퀀스내에서 최종 연산의 실행을 시작하기 전에 일어난 경우, 상기 재시작 로직부는 상기 시퀀스내에서 첫 번째 연산의 실행을 재시작하고,
(ii) 상기 인터럽트가 상기 시퀀스내에서 최종 연산의 실행을 시작한 후 일어난 경우, 상기 재시작 로직부는 상기 시퀀스에 이어서 다음 명령어의 실행을 재시작하는 것을 특징으로 하는 데이터 처리장치를 제공한다.
삭제
삭제
본 발명은, 재시작시에 심한 문제를 일으키지 않고 고유 명령어에 대응한 동작의 완료 후 서비스하는 인터럽트를 실행하고 또 제공하는데 동등한 일부 고유 명령어를 필요로 하는 형태로 비고유 명령어를 변환하는 것을 고려한다. 발명에서는, 이것을 상기 변환된 동작의 시퀀스가 그 동작을 위한 입력변수에 대해 어떠한 변경을 하지않고 최종 명령어를 실행하도록 구성함으로써 달성한다. 따라서, 인터럽트가 최종 연산의 실행전에 일어나면, 비고유 명령어는, 입력변수가 변경되지 않은 채 그대로 재시작되는 반면에, 그 인터럽트가 최종 연산의 실행을 시작한 후 일어나면, 상기 최종 연산은 완료되어 상기 재시작 로직부는 상기 인터럽트가 일어난 동안 비고유 명령어에 이어서 다음 명령어부터 실행한다.
여기서, 제 2(비고유) 명령어 세트로부터의 명령어를 제 1(고유) 명령어 세트로부터의 명령어로 완전히 변환하기도 한다는 것을 알 수 있을 것이다. 그러나, 제 2 명령어 세트로부터의 명령어를, 상기 제 1 명령어 세트로부터의 명령어와 마찬가지의 방법으로, 상기 프로세서 코어를 제어할 수 있는 제어신호의 형태로 변환하는 것도 가능하다. 또한, 제 2 명령어 세트로부터의 명령어가 제 1 명령어 세트로부터의 명령어들 이상의 능력을 가지기도 하고, 상기 제 2 명령어 세트의 명령어로부터 도출된 제어신호가 상기 제 1 명령어 세트의 명령어에 의해 제공되는 기능 이상으로 확장되도록 상기 프로세서 코어의 동작을 제어하는 것도 가능하다.
상기 재시작 로직부가 전용 하드웨어 항목이라는 것을 알 수 있지만, 본 발명의 바람직한 실시예에서는, 상기 재시작 로직부가 명령어 변환기의 일부이어도 된다. 상기 명령어 변환기는, 비고유 명령어를 제공하는 동작의 시퀀스를 제어하는 변환기 출력신호들을 발생하여서, 인터럽트가 생길 경우 최종 연산이 시작했는지의 여부를 쉽게 검사할 수 있다. 이에 따라서, 이 정보는, 명령어 변환기 내의 재시작 로직부에 쉽게 제공되어, 비고유 명령어가 온전히 그대로 재시작되는지 또는 다음 명령어가 재시작되는지를 검사한다.
인터럽트가 생기는 경우 상기 시스템이 어떻게 재시작되는지를 기억하는 종래의 방법은, 최종 연산의 실행시에 진전하고 있는 재시작 위치에 대한 포인터를 기억하는데 있다. 이 포인터는, 편리하게, 현재 변환되는 명령어를 기억하는 메모리 위치의 메모리 어드레스를 가리키는 프로그램 카운터 값이어도 된다.
본 발명은 여러 가지서로 다른 형태의 명령어 세트에 적용 가능한데, 특히 제 2 명령어 세트가 스택 내에 보유된 스택 오퍼랜드에 관해 실행되는 동작을 지정하는 명령어 세트일 경우 특히 유용하다. 이러한 스택 기반 시스템은, 일반적으로, 상기 스택으로부터 입력 오퍼랜드를 판독하고 그 스택에 출력 오퍼랜드를 기록한다. 이와 같은 동작을 에뮬레이션하는 경우, 본 발명은 스택 오퍼랜드가 최종 연산의 실행이 시작된 후까지 확실히 오버라이트되지 않는다. 마찬가지로, 스택 오퍼랜드는, 그 스택에 추가되고 나서 최종 연산의 실행이 시작된다.
여기서, 특정 비고유 명령어를 실행하는 동작을 제어하는 상기 시스템의 입 력변수는, 그 비고유 명령어 내에 명백히 선언된 오퍼랜드 이상으로 확장하여도 된다는 것을 알 수 있을 것이다. 특히, 주변 시스템 상태 변수는, 소정 명령어를 실행하는 동작에 영향을 주어서, 본 발명은 그와 같은 시스템 상태 변수가 변경되고 나서 최종 연산의 실행이 시작되는 것을 제공한다.
시스템 상태를 변경하고 나서 상기 최종 연산의 실행을 확보하는데 필요한 것은, 효율적으로 변환된 동작 시퀀스의 발생에 관한 제약이어도 된다. 그래서, 인터럽트 대기시간이 유지되는 동안, 비고유 명령어의 처리 속도는 영향을 받기도 한다. 그러나, 레지스터 기반 프로세서 코어가 스택 기반 명령어를 에뮬레이션하고 있는 시스템에 있어서, 갱신하고 나서 최종 연산을 실행한 매핑 상태에 따라 스택 위치에, 상기 프로세서 코어의 레지스터 내에 보유된 스택 오퍼랜드를 매핑하는 것을 제공하여 상기와 같은 영향은 감소되므로, 변환될 수 있는 명령어의 형태 또는 달성되는 상기 변환된 시퀀스의 구성성(compactness)에 관한 아주 큰 제한을 부여하지 않고서, 최종 연산까지 상기 스택으로부터 입력 오퍼랜드를 제거하지 않고 그 스택에 출력 오퍼랜드를 추가하지 않는다.
본 발명의 다른 국면은,
제 1 명령어 세트의 명령어에 의해 지정된대로 연산을 실행하는 단계와,
제 2 명령어 세트의 명령어를 상기 제 1 명령어 세트의 명령어에 대응하는 변환기 출력신호로 변환하는 단계로서, 상기 제 2 명령어 세트 중 적어도 하나의 명령어가 하나 이상의 입력변수를 사용하여 실행하는 연산을 지정하는 변환 단계와,
인터럽트 신호에 응답하여 현재 실행 중인 연산의 실행을 완료한 후 상기 제 1 명령어 세트의 명령어에 대응하는 연산의 실행을 인터럽트하는 단계와,
상기 인터럽트 후 실행을 재시작하는 단계를 포함하고,
상기 변환단계는, 상기 제 1 명령어 세트의 명령어에 대응하는 변환기 출력 신호의 하나 이상의 세트의 시퀀스를 발생하고, 상기 제 2 명령어 세트 중 상기 적어도 하나의 명령어를 나타낼 수 있도록 동작 가능하고, 이때, 각 시퀀스는 상기 시퀀스 내의 마지막 연산을 실행할 때까지 상기 하나 이상의 입력 변수에 대해서 변경하지 않으며,
상기 제 2 명령어 세트의 적어도 하나의 명령어를 나타내는 연산의 시퀀스의 실행중에 인터럽트가 발생한 후,
(i) 상기 인터럽트가 상기 시퀀스내에서 최종연산의 실행을 시작하기 전에 일어난 경우, 상기 시퀀스내에서 첫 번째 연산의 실행을 재시작하고,
(ii) 상기 인터럽트가 상기 시퀀스내에서 최종 연산의 실행을 시작한 후 일어난 경우, 상기 시퀀스에 이어서 다음 명령어의 실행을 재시작하는 것을 특징으로 하는 데이터 처리방법을 제공한다.
삭제
삭제
또한, 본 발명은, 상술한 기술에 따라 범용 컴퓨터를 제어할 수 있는 컴퓨터 프로그램을 저장한 컴퓨터 판독가능한 기록매체를 제공한다.
이하, 본 발명의 실시예들을 다음의 첨부도면들을 참조하여 예들에 의해서만 설명하겠다:
도 1 및 도 2는 예시 명령어 파이프라인 구성을 나타낸 개략도,
도 3은 페치(fetch) 단계 구성을 더욱 상세히 나타낸 도면,
도 4는 페치 단계에서 버퍼링된 명령어 워드로부터 가변 길이 비고유 명령어 를 판독하는 것을 나타낸 도면,
도 5는 프로세서 코어 고유 명령어 및 변환 요구 명령어를 실행하기 위한 데이터 처리 시스템의 개략도,
도 6은 예시 명령어 및 상태의 시퀀스일 경우에, 스택 오퍼랜드 기억에 사용된 레지스터의 내용, 매핑 상태 및 변환 요구 명령어와 고유 명령어간의 관계를 개략적으로 나타낸 도면,
도 7은 고유 명령어의 시퀀스로서 비고유 명령어를 실행하는 것을 개략적으로 나타낸 도면,
도 8은 변환된 명령어에 대한 인터럽트 대기시간을 유지하도록 명령어 변환기가 동작하는 방법을 나타낸 흐름도,
도 9는 하드웨어와 소프트웨어 기술을 사용하여 Java 바이트코드의 ARM 연산코드로의 변환을 개략적으로 나타낸 도면,
도 10은 하드웨어 변환기, 소프트웨어 기반 해석기 및 소프트웨어 기반 스케쥴링 간의 제어 흐름을 개략적으로 나타낸 도면,
도 11 및 도 12는 타이머 기반 방법을 사용하여 스케쥴링 동작을 제어하는 다른 방법을 나타낸 도면,
도 13은 도 12의 회로의 동작을 제어하는 신호들을 나타낸 신호도이다.
도 1은 ARM 프로세서 기반 시스템에서 사용하는데 적합한 형태의 제 1 예시 명령어 파이프라인(30)을 나타낸 것이다. 이 명령어 파이프라인(30)은, 페치단계(32)와, 고유 명령어(ARM/Thumb 명령어) 디코드 단계(34)와, 실행 단계(36)와, 메모리 액세스 단계(38)와, 라이트백(writeback) 단계(40)를 포함한다. 이 실행단계(36), 메모리 액세스 단계(38) 및 라이트백 단계(40)는, 거의 일반적인 것이다. 페치단계(32)의 뒤 및 고유 명령어 디코드 단계(34)의 앞에는, 명령어 변환단계(42)가 제공된다. 이 명령어 변환단계(42)는, 유한 상태 기계로, 이는 가변길이를 갖는 Java 바이트코드 명령어를 고유 ARM 명령어로 변환한다. 명령어 변환단계(42)는, 다단계 동작이 가능하여서, 단일 Java 바이트코드 명령어가, 나머지 명령어 파이프라인(30)을 따라 제공된 ARM 명령어의 시퀀스를 발생하여, 그 Java 바이트코드 명령어가 지정한 명령을 수행한다. 간단한 Java 바이트코드 명령어는, 그 명령을 수행하는데 단일 ARM 명령어만이 필요한 반면에, 더욱 복잡한 Java 바이트코드 명령어 또는 주변 시스템 상태를 더 요구하는 경우에 일부의 ARM 명령어는, Java 바이트코드 명령어가 지정한 동작을 제공하는 것이 필요하기도 하다. 이러한 다단계 동작은 페치 단계(32) 뒤에 일어나므로 메모리 시스템으로부터 다수의 변환된 ARM 명령어 또는 Java 바이트코드를 불러올 때 전력이 소비되지 않는다. 이러한 Java 바이트코드 명령어는, 종래의 방법으로 메모리 시스템 내에 저장되어, 메모리 시스템 상에 추가적인 제약을 제공하지 않아 Java 바이트코드 변환 동작을 지원한다.
상술한 것처럼, 명령어 변환단계(42)는, 바이패스 경로를 제공한다. 명령어 변환모드에서 동작하지 않을 경우, 명령어 파이프라인(30)은, 명령어 변환단계(42)를 우회하여도 되고, 꼭 바꾸지 않아도 되는 방법으로 동작하여 고유 명령어를 디코딩하여도 된다.
명령어 파이프라인(30)에서는, 명령어 변환단계(42)를, 대응 ARM 명령어를 전적으로 나타내고 다중화기를 통해 고유 명령어 디코더(34)로 전달된 변환기 출력신호들을 발생하는 것으로 도시하였다. 또한, 명령어 변환단계(42)는, 고유 명령어 디코더(34)에 전달되는 일부 별도의 제어신호들을 발생한다. 고유 명령어 인코딩내의 비트 공간 제약은, 고유 명령어에 의해 지정된 오퍼랜드의 범위에 제한을 준다. 이들 제한은, 비고유 명령어에 의해 반드시 공유되지 않는다. 또한, 별도의 제어신호들은, 메모리 내에 저장된 고유 명령어 내에 지정 불가능한 비고유 명령어로부터 도출된 신호들을 지정하는 추가 명령어를 전달하도록 구성된다. 일례로서, 고유 명령어는, 고유 명령어 내의 즉치 오퍼랜드 필드로서 사용하기 위한 비교적 낮은 비트수만을 제공하는 반면에, 비고유 명령어로 인해 범위가 확장되게 하고, 이것은 상기 별도의 제어신호를 사용함으로써 이용될 수 있어 상기 고유 명령어 디코더(34)로 전달된 상기 변환된 고유 명령어의 외부에 있는 고유 명령어 디코더(34)로 상기 즉치 오퍼랜드의 확장부를 전달할 수 있다.
도 2는 또 다른 명령어 파이프라인(44)을 나타낸다. 이 예에서는, 시스템이, 2개의 고유 명령어 디코더(46, 48)와, 비고유 명령어 디코더(50)로 구성된다. 이때, 상기 비고유 명령어 디코더(50)는, 고유 명령어를 지원하도록 구성된 실행단계(52), 기억단계(54) 및 라이트백 단계(56)에 의해 지정될 수 있는 것을 동작상 제약하고 있다. 따라서, 비고유 명령어 디코더(50)는, 비고유 명령어를 (단일 고유 동작 또는 고유 동작의 시퀀스일 수 있는) 고유 동작으로 효과적으로 변환하 고나서 적절한 제어신호를 실행단계(52)로 제공하여 이들의 하나 이상의 고유 동작을 실행해야 한다. 이 예에서는, 비고유 명령어 디코더가 고유 명령어를 형성하는 신호들을 생성하는 것이 아니라, 오히려 고유 명령어(또는 확장된 고유 명령어) 동작을 지정하는 제어신호를 제공하는 것임을 알 수 있을 것이다. 이렇게 생성된 제어신호는, 고유 명령어 디코더(46, 48)에 의해 생성된 제어신호와 일치하지 않아도 된다.
동작상, 페치단계(58)에서 불러온 명령어는, 도시된 역다중화기를 사용하여 특정 처리모드에 따라 상기 명령어 디코더(46, 48 또는 50) 중의 하나에 선택적으로 공급된다.
도 3은 명령어 파이프라인의 페치단계를 더욱 상세하게 나타낸 개략도이다. 페치 로직부(60)는, 메모리 시스템으로부터 고정 길이 명령어 워드를 불러와서 이들을 명령어 워드 버퍼(62)에 공급한다. 이 명령어 워드 버퍼(62)는, 현재 명령어 워드와 다음 명령어 워드를 모두 저장하도록 양측면을 갖는 스윙(swing) 버퍼이다. 그 현재 명령어 워드가 완전히 디코딩되어 다음 명령어 상에서 디코딩이 진행될 때마다, 상기 페치 로직부(60)는 이전의 현재 명령어 워드를 메모리로부터 불러올 다음 명령어 워드로 대체하는 역할을 한다, 즉 상기 스윙 버퍼의 각 측면은 연속적으로 저장하는 명령어 워드를 인터리브식으로 2개씩 증가시킬 것이다.
상술한 예에서는, Java 바이트코드 명령어의 최대 명령어 길이가 3바이트이다. 이에 따라서, 워드 버퍼(62)의 양측면의 임의의 3개의 인접 바이트를 선택하여 명령어 변환기(64)에 공급할 수 있는 3개의 다중화기가 구비된다. 이 워드 버퍼(62)와 명령어 변환기(64)는, 고유 명령어가 페치되어 디코딩되는데 사용하기 위한 바이패스 경로(66)도 구비한다.
각 명령어 워드가 메모리로부터 한번 페치되어 상기 워드 버퍼(62) 내에 저장된다는 것을 알 수 있을 것이다. 명령어 변환기(64)가 Java 바이트코드의 ARM 명령어로의 변환을 수행하므로, 단일 명령어 워드는, 그 워드 버퍼로부터 판독한 다수의 Java 바이트코드를 갖는다. 고유 명령어의 가변길이 변환 시퀀스는, 명령어 변환 동작이 명령어 파이프라인 내에 구속되어 있어, 다수의 메모리 시스템을 판독할 필요가 없고 메모리 자원을 소비하지 않거나 메모리 시스템에 다른 제약을 부과하지 않고서 생성되어도 된다.
프로그램 카운터(PC) 값은, 현재 변환되는 각 Java 바이트코드와 연관되어 있다. 이 프로그램 카운터 값은, 필요하면, 처리되는 특정 Java 바이트코드에 관한 정보를 각 단계가 사용 가능하도록 그 파이프라인의 단계들에 따라 전달된다. 복수의 ARM 명령어 동작으로 이루어진 시퀀스로 변환하는 Java 바이트코드용 프로그램 카운터 값이 증가된 후, 비로소 그 시퀀스 내의 최종 ARM 명령어 동작이 실행된다. 실행되고 있는 메모리 내의 명령어를 계속하여 직접 가리키도록 프로그램 카운터 값을 유지하는 것은, 디버깅 및 브랜치 타겟 계산 등과 같은 시스템의 다른 국면을 간단하게 한다.
도 4는 명령어 버퍼(62)로부터 가변 길이 Java 바이트코드 명령어를 판독하는 것을 개략적으로 나타낸다. 첫 번째 단계에서는, 1의 길이를 갖는 Java 바이트코드 명령어를 판독하여 디코딩한다. 다음 단계는, 3바이트 길이이고 메모리로부터 페치되었던 2개의 인접 명령어 워드간의 기간인 Java 바이트코드 명령어이다. 이들 명령어 워드들 모두는, 명령어 버퍼(62) 내에 존재하므로, 그 명령어 디코딩 및 처리는 페치된 명령어 워드들간의 가변길이 명령어의 길이에 의해 지연되지 않는다. 일단 3개의 Java 바이트코드를 명령어 버퍼(62)로부터 판독하면, 그 명령어 워드들 중 이 보다 일찍 페치된 것의 리필(refill)은, 이미 존재하는 다음 명령어 워드로부터 Java 바이트코드의 디코딩에 따라 연속적인 처리가 계속될 때 시작되어도 된다.
도 4에 도시된 최종 단계는, 두 번째 3개의 바이트코드 명령어가 판독되는 것을 나타낸다. 또한, 이것은 명령어 워드간에 기간을 갖는다. 선행 명령어 워드가 그 리필이 아직 완료되지 않을 경우, 상기 적절한 명령어 워드가 명령어 버퍼(62)에 저장될 때까지 상기 명령어의 판독은 파이프라인 시간 벌기(stall)에 의해 지연되어도 된다. 일부 실시예에서는, 이러한 형태의 작용으로 인해 파이프라인이 결코 시간을 지연시키지 않는 타이밍이다. 특정 예는, 대부분의 Java 바이트코드가 상기 설명된 예와 그에 따른 명령어 워드간의 양 범위가 비교적 일반적이지 않은 2개의 연속적인 디코드보다 짧아서 비교적 드문 예라는 것을 알 수 있을 것이다. 유효 신호는, 상기 명령어 워드를 적절하게 리필한 후 그것으로부터 Java 바이트코드를 판독하였는지의 여부를 신호로 보내도록 상기 명령어 버퍼(62) 내에 각 명령어 워드와 연관된다.
도 5는 프로세서 코어(104)와 레지스터 뱅크(106)를 구비한 데이터 처리 시스템(102)을 나타낸다. 명령어 변환기(108)는, 상기 명령어 경로 내에서 Java 가상 기계 명령어를, 상기 프로세서 코어(104)에 공급된 고유 ARM 명령어(또는 이에 대응한 제어신호)로 변환하도록 구성된다. 이러한 명령어 변환기(108)는, 고유 ARM 명령어를 어드레스 가능한 메모리로부터 페치하고 있는 경우에 바이패스되어도 된다. 이 어드레스 가능한 메모리는, 추가의 오프-칩 램 메모리를 갖는 캐시 메모리 등의 메모리 시스템이어도 된다. 메모리 시스템, 특히 캐시 메모리의 뒤에 명령어 변환기(108)를 제공하는 것에 의해, 변환을 요구하는 조밀 명령어가 메모리 시스템 내에 저장되어 프로세서 코어(104)로 전달되기 바로 전에만 고유 명령어로 확장되기 때문에 상기 메모리 시스템의 기억용량을 효율적으로 사용하게 한다.
이 예에서 레지스터 뱅크(106)는, 16개의 범용 32-비트 레지스터를 포함하고, 그 중의 4개는 스택 오퍼랜드를 저장할 때에 사용하기 위해 할당된다, 즉 스택 오퍼랜드를 저장하는 레지스터의 세트는, 레지스터 R0, R1, R2, R3이다.
레지스터의 세트는, 비어있고(empty), 부분적으로 스택 오퍼랜드로 충전되거나 완전히 스택 오퍼랜드로 충전되어도 된다. 현재 스택 오퍼랜드의 상부를 유지하는 특정 레지스터는, 레지스터의 세트 내의 레지스터 중 어느 것이어도 된다. 따라서, 모든 레지스터가, 비어있고, 레지스터의 세트 내에 보유되고 스택 오퍼랜드의 상부를 유지하는 서로 다른 레지스터와 함께 보유되는 각각의 서로 다른 스택 오퍼랜드의 수에 각각 대응하는 4개의 상태로 이루어진 4개의 그룹일 경우, 상기 명령어 변환기는, 하나의 상태에 대응하는 17개의 서로 다른 매핑 상태 중 어느 하나이어도 되는 것을 알 수 있을 것이다. 표 1은, 상기 명령어 변환기(108)의 상태 매핑으로 생긴 17개의 서로 다른 상태를 나타낸 것이다. 스택 오퍼랜드 기억을 위해 할당된 서로 다른 레지스터의수에 의해, 또는 레지스터 내에 보유된 데이터 값을 특정 프로세서 코어가 처리할 수 있는 방법을 갖는 제약 때문에, 상기 매핑 상태는, 특정 구현에 상당히 의존할 수 있고, 표 1은 일 특정 구현이 예로서 주어진 것뿐이라는 것을 알 수 있을 것이다.
Figure 112003011687213-pct00001
표 1에는, 상태(state) 값 중 첫 번째 3비트는 레지스터의 세트 내에 비어 있지 않은(non-empty) 레지스터의 수를 나타낸 것을 볼 수 있다. 그 상태 값 중 마 지막 2비트는, 스택 오퍼랜드의 상부를 보유하는 레지스터의 레지스터 수를 나타낸다. 이와 같이, 상태 값을 사용하여 하드웨어 변환기 또는 소프트웨어 변환기의 동작을 쉽게 제어하여 레지스터의 세트의 현재 점유시간(occupancy)과 스택 오퍼랜드 상부의 현재 위치를 고려한다.
도 5에 도시된 것처럼, Java 바이트코드 J1, J2, J3로 이루어진 스트림은, 어드레스 가능한 메모리 시스템으로부터 명령어 변환기(108)에 공급된다. 그 후, 이 명령어 변환기(108)는, 입력 Java 바이트코드와 상기 명령어 변환기(8)의 순간 매핑 상태뿐만 아니라 다른 변수에도 의존한 ARM 명령어로 이루어진 스트림(또는 확장 가능한 등가 제어신호들)을 출력한다. 여기서 도시된 예는, ARM 명령어 A1와 A2로 매핑된 Java 바이트코드 J1을 나타낸다. Java 바이트코드 J2는, ARM 명령어 A21, A22 및 A23으로 매핑한다. 끝으로, Java 바이트코드 J3은, ARM 명령어 A31로 매핑한다. 각 Java 바이트코드는, 입력으로서 하나 이상의 스택 오퍼랜드를 필요로 하고, 출력으로서 하나 이상의 스택 오퍼랜드를 생성한다. 이 예에서는, 프로세서 코어(104)가 로드(load)/저장 구조의 ARM 프로세서 코어이여서 레지스터 내에 보유된 데이터 값만이 처리된다고 하면, 상기 명령어 변환기(108)는, 필요한 경우, 임의의 요구된 스택 오퍼랜드를 처리하기 전에 레지스터의 세트 내로 페치하거나 또는 생성된 결과적인 스택 오퍼랜드에 대한 공간을 만들어 주기 위해 레지스터의 세트 내에 임의의 현재 보유된 스택 오퍼랜드를 어드레스 가능한 메모리에 저장하는 ARM 명령어를 생성하도록 구성된다. 각 Java 바이트코드는, 레지스터의 세트 내에 존재되어야 하는 스택 오퍼랜드의 수를 나타내는 연관된 "충만 요구(Require Full)" 값을 갖는 것으로서 생각한 후에, Java 연산코드를 나타낸 ARM 명령어의 실행에 앞서 사용 가능해야 되는 레지스터의 세트 내에 빈 레지스터의 수를 나타내는 "결핍 요구(Require Empty)"값과 함께 실행한다.
표 2는 초기 매핑 상태 값, 충만 요구 값, 최종 상태 값 및 연관 ARM 명령어간의 관계를 나타낸 것이다. 이때, 초기 상태 값과 최종 상태 값은, 표 1에 나타낸 매핑 상태에 해당한다. 명령어 변환기(108)는, 변환하고 있는 특정 Java 바이트코드(연산코드)와 연관된 충만 요구 값을 결정하다. 명령어 변환기(108)는, 그것이 갖는 초기 매핑 상태에 따라, Java 바이트코드를 실행하기 전에 레지스터의 세트 내로 더 스택 오퍼랜드를 로딩할 필요가 있는지의 여부를 결정한다. 표 1은, 레지스터의 세트 내로 연관 ARM 명령어(LDR 명령어)와 이러한 스택 캐시 로드 동작 후 채택될 최종 매핑 상태를 사용하여 스택 오퍼랜드를 로딩할 필요가 있는지의 여부를 결정하는데 함께 적용된 Java 바이트코드의 충만 요구 값에 적용된 테스트와 함께 초기 상태를 나타낸다. 실제로, 하나 이상의 스택 오퍼랜드가 Java 바이트코드의 실행에 앞서 레지스터의 세트 내로 로딩할 필요가 있을 경우, 다수의 매핑 상태 천이는, 상기 연관 ARM 명령어에 의해 레지스터의 세트의 그 레지스터의 하나로 스택 오퍼랜드를 로딩할 때마다 일어날 것이다. 다른 실시예에서는, 단일 상태 천이로 다수의 스택 오퍼랜드를 로딩함에 따라 표 2에 나타낸 것들 이외의 매핑 상태를 변환시키는 것이 가능할 수도 있다.
Figure 112003011687213-pct00002
표 2로부터 알 수 있듯이, 스택 오퍼랜드를 저장하는 레지스터의 세트 내로 로딩된 신규 스택 오퍼랜드는, 새로운 상부의 스택 오퍼랜드를 형성할 것이고, 이것은, 초기 상태에 따른 레지스터의 세트 내의 레지스터 중 특정한 하나로 로딩될 것이다.
마찬가지로, 표 3은, 특정 Java 바이트코드의 결핍 요구 값이 Java 바이트코드가 실행되기 전에 소정 초기 상태가 필요한 것을 나타내는 경우, 초기 상태, 결핍 요구 값, 최종 상태 및 상기 초기 상태와 상기 최종 상태 사이에서 이동하는 레지스터의 세트 내의 레지스터를 비우기 위한 연관 ARM 명령어와의 관계를 나타낸 것이다. STR 명령어에 의해 어드레스 가능한 메모리에 벗어나서 저장된 특정 레지스터 값은, 그 레지스터의 현재 상부의 스택 오퍼랜드에 따라 변할 것이다.
Figure 112003011687213-pct00003
상술한 예의 시스템에서, 충만 요구 및 결핍 요구 조건은, 충만 요구 또는 결핍 요구 조건 중 하나만이 명령어 변환기가 변환하려고 하는 특정 Java 바이트코드에 대해 임의의 소정 시간에 참이라고 말할 수 있는, 서로 배타적이다는 것을 알 수 있을 것이다. 하드웨어 명령어 변환기(108)에 의해 지원하도록 선택된 명령어와 함께 명령어 변환기(108)에 의해 사용된 명령어 템플릿은, 이 상호 배타적인 요구사항을 만족하도록 선택된다. 이 요구 사항이 적합하지 않은 경우, 실행 결과가 요구된 대로 레지스터 내에 보유되도록 Java 바이트코드를 나타낸 명령어의 실행 후에, 충분한 결핍 레지스터를 사용 가능하게 하지 못하는 레지스터의 세트 내에 존재하는 입력 스택 오퍼랜드의 수를 특정 Java 바이트코드가 필요로 하는 상황이 일어날 수 있다.
소정 Java 바이트코드는, 소비된 스택 오퍼랜드의 수와 그 Java 바이트코드의 실행에 의해 생성된 스택 오퍼랜드의 수간의 균형을 나타내는 전반적인 네트(net) 스택 동작을 갖는다는 것을 알 수 있을 것이다. 소비된 스택 오퍼랜드의 수가 실행하기에 앞서 요구사항이고 생성된 스택 오퍼랜드의 수가 실행 후에 요구사항이므로, 각 Java 바이트코드와 연관된 충만 요구 값과 결핍 요구 값은, 심지어 상기 전반적인 네트 동작이 그 자체로서 만족되어도 그 바이트코드의 실행에 앞서 만족되어야 한다. 표 4는, 초기 상태, 전반적인 스택 동작, 최종 상태 및 레지스터 용도와 상부의 스택 오퍼랜드(TOS)의 상대적인 위치의 변화간의 관계를 나타낸 것이다. 표 2 또는 표 4에 나타낸 상태 천이 중 하나 이상이 표 4에 나타낸 상태 천이를 실행하기 전에 실행하여, Java 바이트코드의 충만 요구 값 및 결핍 요구 값에 따른 소정의 Java 바이트코드에 대한 사전 조건을 확보할 필요가 있어도 된다.
Figure 112003011687213-pct00004
Figure 112003011687213-pct00005
표 2, 표 3 및 표 4에 나타낸 상태와 조건간의 관계는, 단일 상태 천이 테이 블 또는 상태도 내에서 조합될 수 있지만, 그들은 명료함을 위해 위에서는 따로 따로 나타내어져 있다는 것을 알 수 있을 것이다.
서로 다른 상태, 조건 및 네트 동작(action)간의 관계를 사용하여, 명령어 변환기(108)의 동작의 이러한 국면을 제어하는 (유한 상태 기계의 형태로) 하드웨어 상태 기계를 정의하여도 된다. 또한, 이들 관계는, 소프트웨어 또는 하드웨어 및 소프트웨어의 조합에 의해 모델링될 수 있다.
이하, 부분집합의 각 Java 바이트코드에 대해 관련된 충만 요구, 결핍 요구 및 표 2, 표 3 및 표 4와 함께 사용되어도 되는 그 바이트코드에 대한 스택 동작값을 나타내는 것이 가능한 Java 바이트코드의 부분집합의 일례는 다음과 같다.
Figure 112003011687213-pct00006
Figure 112003011687213-pct00007
또한, 상기에서 설명된 각 Java 바이트코드 명령어에 대한 예시 명령어 템플릿은 다음과 같다. 여기서 나타낸 명령어는 ARM 명령어로, 이것은 상기 각 Java 바이트코드의 요구된 작용을 실행한다. 레지스터 필드 "TOS-3", "TOS-2", "TOS-1", "TOS", "TOS+1" 및 "TOS+2"는, 현재 채택된 매핑 상태에 따라 표 1로부터 판독될 때 적절한 레지스터명(register specifier)으로 바꿔도 된다. "TOS+n" 표시는, 상부의 스택 오퍼랜드를 저장하고, 상기 레지스터의 세트 내에 첫 번째 레지스터를 둘러싸는(wrap) 포인트에서 레지스터의 세트의 끝에 도달할 때까지 레지스터 값의 증가를 카운트하는 레지스터로부터 시작하는 상부 스택 오퍼랜드를 현재 저장한 레지스터 상의 N번째 레지스터를 나타낸다.
Figure 112003011687213-pct00008
이하, 상술한 기술에 따라 하드웨어 변환부(108)에 의해 실행된 단일 Java 바이트코드의 실행 시퀀스의 예를 설명한다. 이 실행 시퀀스는, 실행되는 명령어에 의존한 상태의 시퀀스를 통해 진행되는 초기 상태의 면에서 도시되어 있고, 각 상태 천이에 관해 상기 동작을 수행한 결과로서 ARM 명령어의 시퀀스를 생상하고, 전체 과정은, Java 바이트코드를 ARM 명령어의 시퀀스로 변환하는 효과가 있다.
Figure 112003011687213-pct00009
Figure 112003011687213-pct00010
도 6은 다수의 추가적인 Java 바이트코드 명령어를 서로 다른 방법으로 실행하는 것을 나타낸다. 도 6에서 상부는, ARM 명령어의 시퀀스, 매핑 상태의 변화 및 iadd Java 바이트코드 명령어의 실행시에 일어나는 레지스터 내용을 나타낸다. 초기 매핑 상태는, 비어 있는 레지스터의 세트 내의 모든 레지스터에 해당하는 00000이다. 상기 생성된 첫 번째 2개의 ARM 명령어는, 상부의 스택 "TOS" 레지스터가 R0이면서 스택 오퍼랜드를 저장하는 레지스터 내로 2개의 스택 오퍼랜드를 갑자기 나오는(POP) 역할을 한다. 세 번째 ARM명령어는, 실제로 가산연산을 수행하고 그 결과를 (이하, 상부의 스택 오퍼랜드가 되는)레지스터 R3에 기록하고, 이전에 레지 스터 R1 내에 보유되었던 스택 오퍼랜드를 소비하여서, -1을 갖는 전체 스택 동작을 생성한다.
그 후, 처리를 진행하여 긴 로드의 2개의 스택 오퍼랜드를 각각 나타내는 2개의 Java 바이트코드를 실행한다. 첫 번째 Java 바이트코드에 대해 2의 결핍요구 조건이 즉시 만족됨에 따라 2개의 ARM LDR 명령어가 출력되어 실행되어도 된다. 첫 번째 긴 로드 Java 바이트코드의 실행 후 매핑 상태는, 01101이다. 이 상태에서, 레지스터의 세트는, 단일의 빈 레지스터만을 포함한다. 다음 Java 바이트코드 긴 로드 명령어는, 만족하지 않는 결핍 요구 값 2를 가짐에 따라서 필요한 첫 번째 동작은 ARM STR 명령어를 사용하여 어드레스 가능한 메모리로의 스택 오퍼랜드의 PUSH이다. 이것은, 2개의 다음 LDR 명령어의 일부로서 로딩되는 새로운 스택 오퍼랜드에 의한 사용을 위해 레지스터의 세트 내의 레지스터를 완전히 비운다. 상술한 것처럼, 명령어 변환은, 하드웨어, 소프트웨어 또는 이 둘의 조합에 의해 이루어진다. 아래에는 상술한 기술에 따라 생성된 예시 소프트웨어 해석기의 세부가 기재되어 있다.
Figure 112003011687213-pct00011
Figure 112003011687213-pct00012
Figure 112003011687213-pct00013
Figure 112003011687213-pct00014
도 7은 상부의 스택 위치에서 시작하는 2개의 데이터 워드로 지정한 데이터 어레이 내부로부터 2개의 데이터 워드를 판독하는 기능을 갖는 Java 바이트코드 명령어 "laload"를 나타낸 것이다. 상기 데이터 어레이로부터 판독된 2개의 워드는, 그들의 위치를 지정한 2개의 워드를 바꾸어 최상의 스택 엔트리를 구성한다.
어레이 및 그 데이터의 어레이 내부의 위치를 지정하는 입력 스택 오퍼랜드를 오버라이트하지 않고 그 어레이로부터 불러온 스택 오퍼랜드의 임시 기억을 위한 충분한 레지스터 공간을 상기 "laload" 명령어가 갖기 위해서, 상기 Java 바이트코드 명령어는, 결핍 요구 값이 2로서, 즉 스택 오퍼랜드 기억 전용 레지스터 뱅크 내부의 2개의 레지스터가 "laload"명령어를 에뮬레이션하는 ARM 명령어를 실행하기 전에 비워져 있어야 한다는 것으로서 규정되어 있다. 이러한 Java 바이트코드가 충돌할 때 2개의 빈 레지스터가 없으면, 저장 동작들(STRs)을 수행하여 현재 레지스터 내부에 보유된 스택 오퍼랜드를 메모리 PUSH 아웃하고, 상기 임시 기억을 위해 필요한 공간을 만들어 그 명령어에 대한 결핍 요구 값을 만족시킨다.
또한, 이 명령어는, 그 데이터 위치가 2개의 별도의 스택 오퍼랜드로서 어레이 위치와 그 어레이 내부의 인덱스에 의해 규정되어 있어서, 충만 요구 값이 2이다. 도면에는 이미 상기 충만 요구 및 결핌 요구 조건을 만족하고 매핑 상태가 "01001"인 제 1 상태를 나타낸 것이다. 상기 "laload" 명령어는, 3개의 ARM 명령어로 세분화된다. 이들 중 첫 번째 명령어는, 스택 오퍼랜드의 레지스터 캐시로서 작용하는 레지스터의 세트의 외부에서 여분의 작업 레지스터 내부에 어레이 레퍼런스를 로딩한다. 그 후, 두 번째 명령어는, 어레이 내부의 인덱스 값과 함께 이 어레이 레퍼런스를 사용하여 스택 오퍼랜드 기억 전용의 빈 레지스터 중 하나에 기록된 제 1 어레이 워드를 액세스한다.
이때, 첫 번째 2개의 ARM 명령어의 실행 후, 본 시스템의 매핑 상태는 변하지 않고, 상부의 스택 포인터는, 빈 것으로서 지정된 레지스터가 그와 같이 지정되면서 시작되는 곳이라는 것을 더 주목한다.
ARM 명령어의 시퀀스내에서의 최종 명령어는, 제 2 어레이 워드를 스택 오퍼랜드를 저장하는 레지스터의 세트 내로 로딩한다. 이것은 최종 명령어이기 때문에, 그 동안에 만약 인터럽트가 일어나면, 그 최종 명령어는, 그 명령어가 종료한 후 변화에 의해 이러한 명령어를 갖는 입력상태를 스택 오퍼랜드를 저장하는 레지스터의 매핑 상태로 안전하게 변화시킬 때까지 서비스를 받지 못할 것이다. 이 예에서는, 제 2 어레이 워드에 있는 새로운 상부의 스택 포인터가 놓이고, 어레이 레퍼런스와 인덱스 값으로 이루어진 입력 변수들은 이하 빈 레지스터인 것을 나타내는, 즉 그 레지스터들이 스택으로부터 보유한 값들을 제거한 빈 레지스터를 나타내는 "01011"로, 상기 매핑 상태를 변경한다.
또한, "laload" 명령어의 전체 스택 동작은 레지스터 내에 보유된 스택 오퍼랜드의 수를 변경하지 않았지만, 그 결과 매핑 상태 스왑은 일어나지 않았다는 것을 주목해야 할 것이다. 상기 최종 연산의 실행에 따라 수행된 매핑 상태의 변경은, Java 바이트코드를 변환하는 기능으로서 명령어 변환기 내에 하드와이어(hardwire)되고, "laload" 명령어의 특징으로서 도시된 "스왑" 파라미터로 나타낸다.
이 도면의 예는 하나의 특정 명령어이지만, 제시된 원리가 ARM 명령어 또는 기타 형태의 명령어로서 에뮬레이션되는 여러 가지 서로 다른 Java 바이트코드 명령어로 확장되어도 된다는 것을 알 수 있을 것이다.
도 8은 상기 기술을 개략적으로 나타낸 흐름도이다. 단계 10에서는, Java 바이트코드를 메모리로부터 페치한다. 단계 12에서는, 그 Java 바이트코드의 충만 요구 및 결핍 요구 값을 검사한다. 결핍 요구 조건 또는 충만 요구 조건 중 어느 하나를 만족하지 않으면, 스택 오퍼랜드(다수의 스택 오퍼랜드도 가능함)의 각각의 PUSH 및 POP 동작을 단계 14 및 단계 16에서 수행한다. 이 특정 시스템에 의해, 상기 결핍 요구 조건 및 충만 요구 조건을 동시에 불만족하지 않게 해야 하는 것을 주목해야 할 것이다. 단계 14와 단계 16을 통한 다수의 통과는, 단계 12의 조건을 만족할 때까지 요구된다.
단계 18에서는, 관련된 Java 바이트코드용 변환 템플릿 내부에 지정된 첫 번째 ARM 명령어를 선택한다. 단계 20에서는, 그 선택된 ARM 명령어가, 단계 10에서 페치된 Java 바이트코드의 에뮬레이션에서 실행된 최종 명령어인지의 여부를 검사한다. 실행되는 ARM 명령어가 최종 명령어일 경우, 단계 21에서는 프로그램 카운터(PC)의 값을 실행될 명령어의 순서로 다음 Java 바이트코드의 포인트까지 갱신한다. 또한, 상기 ARM 명령어가 최종 명령어일 경우, 지금 인터럽트 발생의 여부에 상관없이 그 명령어의 실행을 종료함에 따라서, 안전하게 프로그램 카운터 값을 다음 Java 바이트코드까지 갱신하고, 그 시스템의 상태가 Java 바이트코드의 정상의 인터럽트가 없는 완전 실행이 일치하게 될 때, 그 포인트로부터 실행을 재개한다. 단계 20에서의 검사는 최종 바이트코드가 도달하지 않은 것을 나타내는 경우에, 그 프로그램 카운터 값을 갱신하지 않는다.
단계 22에서는, 현재의 ARM 명령어를 실행한다. 단계 24에서는, 템플릿의 일부로서 실행하는데 요구되는 더 이상의 ARM 명령어가 존재하는지의 여부에 관하여 검사를 한다. 만약 더 이상의 ARM 명령어가 존재하면, 이들 중 다음 명령어를 단계 26에서 선택하고 단계 20으로 되돌아가 처리를 한다. 그러나, 더 이상의 명령어가 존재하지 않으면, 단계 28로 진행하여 관련된 Java 바이트코드에 대해 규정된 임의의 매핑 변경/스왑을, 원하는 상부의 스택 위치와 스택 오퍼랜드를 보유하는 여러 가지 레지스터의 충만/결핍 상태를 반영하기 위해서 수행한다.
또한, 도 8은 어서트(assert)된 인터럽트를 서비스 받아서 인터럽트 후에 처 리를 재개하는 시점을 개략적으로 나타낸 것이다. 인터럽트는, 현재의 프로그램 카운터가 바이트코드 시퀀스에 의해 리턴 포인트로서 저장된다고 할지라도 단계 22에서 현재 진행하고 있는 ARM 명령어를 실행한 후에 서비스 받기 시작한다. 현재의 ARM 명령어 실행이 템플릿 시퀀스 내의 최종 명령어일 경우, 단계 21에서는 그 프로그램 카운터 값을 바로 갱신함으로써, 이것은 다음 Java 바이트코드(또는 명령어 세트 전환이 바로 시작되는 ARM 명령어)를 가리킬 것이다. 만약 현재 실행하는 ARM명령어가 시퀀스에서 최종 명령어 이외의 임의의 것일 경우, 그 프로그램 카운터 값은 관련된 Java 바이트코드의 실행 초기에 시작된 것과 여전히 같고, 그에 따라서, 리턴하는 경우, 전체 Java 바이트코드는 재실행될 것이다.
도 9는 Java 바이트코드의 스트림을 수신하고 변환된 ARM 명령어(또는 해당 제어신호)를 출력하여 프로세서 코어의 동작을 제어하는 Java 바이트코드 변환부(68)를 나타낸 것이다. 상술한 것처럼, Java 바이트코드 변환기(68)는, 명령어 템플릿을 사용하여 간단한 Java 바이트코드를 ARM 명령어 또는 ARM 명령어의 시퀀스로 변환한다. 각 Java 바이트코드가 실행되었을 경우, 스케쥴링 제어 로직부(70) 내의 카운터 값은 감소된다. 이 카운터 값이 0에 도달할 때, Java 바이트코드 변환부(68)는, 쓰레드들 또는 태스크들 간의 스케쥴링을 적절하게 관리하는 스케쥴링 코드로 브랜치(branch)하는 ARM 명령어를 출력한다.
간단한 Java 바이트코드가 이들 바이트코드를 고속 하드웨어를 기반으로 하여 실행하는 상기 Java 바이트코드 변환부(68) 자체에 의해 핸들링되는 한편, 더욱 복잡한 처리 동작을 요구하는 바이트코드는, 해석 루틴의 콜렉션의 형태(이러한 루 틴의 선택 예는 이 설명의 초기에 주어져 있다)로 제공된 소프트웨어 해석기로 보내진다. 특히, Java 바이트코드 변환부(68)는, 수신한 바이트코드가 하드웨어 변환에 의해 지원되는 것이 아니어서 그 바이트코드를 해석하기 위한 소프트웨어 루틴이 발견되거나 참조되는 Java 바이트코드에 의존한 어드레스로 브랜치할 수 있는 것을 결정할 수 있다. 또한, 이 메카니즘은, 스케쥴링 로직부(70)가 브랜치를 스케쥴링 코드로 산출하는데 스케쥴링 동작을 필요로 하는 것을 가리킬 때 이용되어도 된다.
도 10은 도 9의 실시예의 동작과 하드웨어와 소프트웨어간의 태스크의 분할을 나타낸다. 모든 Java 바이트코드는, 상기 Java 바이트코드 변환부(68)에 의해 수신되어 단계 72에서 카운터가 감소되게 된다. 단계 74에서는, 그 카운터 값이 0인지를 검사한다. 만약 그 카운터 값이 (시스템 내로의 하드와이어된 소정 값 또는 사용자에 의해 제어/프로그래밍된 값으로부터 카운트 다운하는) 0일 경우, 단계 76에서 스케쥴링 코드로 브랜치한다. 일단 스케쥴링 코드가 단계 76에서 종료되면, 제어는 하드웨어로 리턴하고 단계 72로 진행하여, 다음 Java 바이트코드를 페치하고 카운터를 다시 감소시킨다. 그 카운터가 0이기 때문에, 새로운 비제로(non-zero) 값으로 순환(roll-round)할 것이다. 또한, 새로운 값은, 단계 76에서의 스케쥴링 처리의 결과의 일부로서 카운터로 전달되어도 된다.
단계 74에서의 검사로 나타낸 카운터가 0이 아니었을 경우, 단계 78에서는 Java 바이트코드를 페치한다. 단계 80에서 상기 페치한 바이트코드가 간단한 바이트코드인지 여부에 관해 결정하고, 단계 82에서는 그 간단한 바이트코드를 하드웨 어 변환에 의해 실행하거나, 더욱 복잡한 처리를 요구하는 경우, 단계 84에서는 소프트웨어 해석을 실행한다. 소프트웨어 해석으로 처리가 실행될 경우, 일단 이 제어가 완료되면 하드웨로 되돌아가 단계 72에서는 카운터가 다시 감소되어 다음 Java 바이트코드를 페치하는 것을 고려한다.
도 11은 다른 제어 구성을 나타낸 것이다. 단계 86에서의 처리의 시작시에는 명령어 신호(스케쥴링 신호)가 디어서트(deassert)된다. 단계 88에서는, 페치된 Java 바이트코드를 검사하여, 그것이 하드웨어 변환을 지원하는 간단한 바이트코드인지를 알아낸다. 만약 하드웨어 변환을 지원하지 않는 경우, 단계 90의 소프트웨어 해석으로의 제어로 간 후 ARM 명령어 루틴을 실행하여 Java 바이트코드를 해석한다. 그 바이트코드가 하드웨어 변환을 지원하는 간단한 바이트코드일 경우, 단계 92로 진행하여 하나 이상의 ARM 명령어가 멀티 사이클 유한 상태 기계의 형태로서 작용하는 Java 바이트코드 변환부(68)에 의해 순서적으로 출력된다. 단계 90 또는 단계 92에서 Java 바이트코드를 적절하게 실행한 경우, 단계 94로 진행하여 단주기 동안 명령어 신호를 어서트한 후 단계 86에서 디어서트한다. 상기 명령어 신호의 검증(assertion)은, 타이머 기반 스케쥴링 인터럽트가 해석되거나 변환된 명령어의 부분적인 실행으로 인한 데이터의 완전성 손실의 위험없이 일어날 수 있는 적절한 안전 포인트가 외부 회로에 도달한 것을 나타낸다.
도 12는 도 11에서 발생된 명령어 신호에 응답하는데 사용되는 회로의 예를 나타낸다. 타이머(96)는, 소정 시간 주기의 만료 후 타이머 신호를 주기적으로 발생한다. 이 타이머 신호는, 클리어 타이머 인터럽트 신호에 의해 래치가 클리어 될 때까지 래치(98)내에 저장된다. 이 래치(98)의 출력은, AND 게이트(100)에 의해 단계 94에서 어서트된 명령어 신호와 논리적으로 조합된다. 이 래치가 세트되고 명령어 신호가 어서트될 경우, 인터럽트가 AND 게이트(100)의 출력으로서 발생되고, 표준 인터럽트 처리를 위한 시스템 내에 구비된 인터럽트 처리 메카니즘을 사용하여 스케쥴링 동작을 수행하는 인터럽트를 트리거하는데 사용된다. 이 인터럽트 신호가 발생되면, 이것은, 다음 타이머 출력 펄스가 발생할 때까지 래치(98)를 클리어하는 클리어 타이머 인터럽트 신호의 생성을 교대로 트리거한다.
도 13은 도 12의 회로 동작을 나타낸 신호도이다. 이 프로세서 코어 클록신호는, 규칙적인 주파수로 생긴다. 타이머(96)는 소정 주기로 타이머 신호를 발생하여, 안전할 경우, 스케쥴링 동작이 시작되는 것을 나타낸다. 이 타이머 신호는 래치된다. 명령어 신호는, 특정 Java 바이트코드를 얼마나 빠르게 실행하였나에 따라서 간격을 두고 이격된 시간에 발생된다. 간단한 Java 바이트코드가 단일 프로세서 코어 클록 사이클 또는 전형적으로는 2개 또는 3개 그 이상의 사이클에서 실행되는 한편, 하이 레벨 관리형 기능을 제공하는 복잡한 Java 바이트코드는, 수백 프로세서 클록 사이클이 걸린 후 소프트웨어 해석기에 의해 그 실행을 완료한다. 이러한 두 경우, 진행중인 어서트된 래치 타이머 신호가 작용하여 스케쥴링 동작을 트리거하고 나서야 비로소 그 스케쥴링 동작이 시작하는 것이 안전하다는 것을 나타낸 명령신호를 출력한다. 그 후, 래치된 타이머 신호와 명령어 신호의 동시 발생은, 인터럽트 신호 직후에 래치(98)를 클리어하는 클리어 신호의 발생을 트리거한다.

Claims (17)

  1. 제 1 명령어 세트의 명령어에 의해 지정된 대로 연산을 실행하도록 동작가능한 프로세서 코어와,
    제 2 명령어 세트의 명령어를 상기 제 1 명령어 세트의 명령어에 대응하는 변환기 출력신호로 변환하도록 동작 가능한 명령어 변환기로서, 상기 제 2 명령어 세트 중 적어도 하나의 명령어가 하나 이상의 입력변수를 사용하여 실행하는 연산을 지정하는 명령어 변환기와,
    인터럽트 신호에 응답하여 현재 실행 중인 연산의 실행을 완료한 후 상기 제 1 명령어 세트의 명령어에 대응하는 연산의 실행을 인터럽트하는 인터럽트 핸들러와,
    상기 인터럽트 후 실행을 재시작하기 위한 재시작 로직부를 구비하고,
    상기 명령어 변환기는 상기 제 1 명령어 세트의 명령어에 대응하는 변환기 출력 신호의 하나 이상의 세트의 시퀀스를 발생하고,
    상기 제 2 명령어 세트 중 상기 적어도 하나의 명령어를 나타낼 수 있도록 동작 가능하고, 이때, 각 시퀀스는 상기 시퀀스 내의 최종 연산을 실행할 때까지 상기 하나 이상의 입력 변수에 대해서 변경하지 않으며,
    상기 제 2 명령어 세트의 적어도 하나의 명령어를 나타내는 연산의 시퀀스의 실행중에 인터럽트가 발생한 후,
    (i) 상기 인터럽트가 상기 시퀀스내에서 최종 연산의 실행을 시작하기 전에 일어난 경우, 상기 재시작 로직부는 상기 시퀀스내에서 첫 번째 연산의 실행을 재시작하고,
    (ii) 상기 인터럽트가 상기 시퀀스내에서 최종 연산의 실행을 시작한 후 일어난 경우, 상기 재시작 로직부는 상기 시퀀스에 이어서 다음 명령어의 실행을 재시작하는 것을 특징으로 하는 데이터 처리장치.
  2. 제 1 항에 있어서,
    상기 변환기 출력신호는, 상기 제 1 명령어 세트의 명령어를 형성하는 신호를 포함한 것을 특징으로 하는 데이터 처리장치.
  3. 제 1 항 또는 제 2 항에 있어서,
    상기 변환기 출력신호는, 상기 프로세서 코어의 동작을 제어하고, 상기 제 1 명령어 세트의 명령어를 디코딩시에 생성된 제어신호와 일치하는 제어신호를 포함한 것을 특징으로 하는 데이터 처리장치.
  4. 제 1 항 또는 제 2 항에 있어서,
    상기 변환기 출력신호는, 상기 프로세서 코어의 동작을 제어하고, 상기 제 1 명령어 세트의 명령어를 디코딩시에 생성된 제어신호에 의해 지정되지 않은 파라미터를 지정하는 제어신호를 포함한 것을 특징으로 하는 데이터 처리장치.
  5. 제 1 항 또는 제 2 항에 있어서,
    상기 재시작 로직부는, 상기 명령어 변환기의 일부인 것을 특징으로 하는 데이터 처리장치.
  6. 제 1 항 또는 제 2 항에 있어서,
    상기 재시작 로직부는, 변환되는 상기 제 2 명령어 세트의 명령어 내의 재시작 위치에 대한 포인터를 기억하고, 상기 포인터는 상기 최종 연산의 실행시에 전진하는 것을 특징으로 하는 데이터 처리장치.
  7. 제 6 항에 있어서,
    상기 포인터는, 현재 변환되는 상기 제 2 명령어 세트의 명령어를 기억하는 메모리 위치의 메모리 어드레스를 가리키는 프로그램 카운터 값인 것을 특징으로 하는 데이터 처리장치.
  8. 제 1 항에 있어서,
    상기 제 2 명령어 세트의 명령어는 스택 내에 보유된 스택 오퍼랜드상에서 실행되는 연산을 지정하고, 상기 입력 변수는 입력 스택 오퍼랜드를 포함한 것을 특징으로 하는 데이터 처리장치.
  9. 제 8 항에 있어서,
    상기 제 2 명령어 세트 중 상기 적어도 하나의 명령어의 실행에 의해 상기 스택으로부터 제거된 임의의 스택 오퍼랜드는, 상기 최종 연산의 실행을 시작한 후까지 제거되지 않는 것을 특징으로 하는 데이터 처리장치.
  10. 제 8 항에 있어서,
    상기 제 2 명령어 세트 중 상기 적어도 하나의 명령어의 실행에 의해 상기 스택에 추가된 임의의 스택 오퍼랜드는, 상기 최종 연산의 실행을 시작한 후까지 추가되지 않는 것을 특징으로 하는 데이터 처리장치.
  11. 제 1 항 또는 제 2 항에 있어서,
    상기 입력변수는, 상기 제 2 명령어 내에 지정되지 않은 시스템 상태 변수를 포함한 것을 특징으로 하는 데이터 처리장치.
  12. 제 1 항 또는 제 2 항에 있어서,
    상기 프로세서 코어는 복수의 레지스터를 포함하는 레지스터 뱅크를 갖고, 상기 제 1 명령어 세트의 명령어는 상기 레지스터 내에 보유된 레지스터 오퍼랜드에 관한 연산을 실행하는 것을 특징으로 하는 데이터 처리장치.
  13. 제 8 항, 제9항 또는 제10항 중 어느 한 항에 있어서,
    상기 프로세서 코어는 복수의 레지스터를 포함하는 레지스터 뱅크를 갖고, 상기 제 1 명령어 세트의 명령어는 상기 레지스터 내에 보유된 레지스터 오퍼랜드에 관한 연산을 실행하며,
    상기 레지스터 뱅크 내의 레지스터 세트는, 상기 스택의 상부로부터 스택 오퍼랜드를 보유하는 것을 특징으로 하는 데이터 처리장치.
  14. 제 13 항에 있어서,
    상기 명령어 변환기는 상기 레지스터 세트 내에 서로 다른 레지스터가 상기 스택 내의 서로 다른 위치로부터 각각의 스택 오퍼랜드를 보유하는 복수의 매핑 상태를 갖고, 상기 명령어 변환기는 상기 입력변수를 갱신 가능하도록 상기 최종 연산이 실행될 때 매핑 상태 사이에서 이동하도록 동작가능한 것을 특징으로 하는 데이터 처리장치.
  15. 제 1 항 또는 제 2 항에 있어서,
    상기 제 2 명령어 세트의 상기 명령어는, 자바(Java) 가상 기계 명령어인 것을 특징으로 하는 데이터 처리장치.
  16. 제 1 명령어 세트의 명령어에 의해 지정된 대로 연산을 실행하는 단계와,
    제 2 명령어 세트의 명령어를 상기 제 1 명령어 세트의 명령어에 대응하는 변환기 출력신호로 변환하는 단계로서, 상기 제 2 명령어 세트 중 적어도 하나의 명령어가 하나 이상의 입력변수를 사용하여 실행하는 연산을 지정하는 변환 단계와,
    인터럽트 신호에 응답하여 현재 실행 중인 연산의 실행을 완료한 후 상기 제 1 명령어 세트의 명령어에 대응하는 연산의 실행을 인터럽트하는 단계와,
    상기 인터럽트 후 실행을 재시작하는 단계를 포함하고,
    상기 변환단계는, 상기 제 1 명령어 세트의 명령어에 대응하는 변환기 출력 신호의 하나 이상의 세트의 시퀀스를 발생하고, 상기 제 2 명령어 세트 중 상기 적어도 하나의 명령어를 나타낼 수 있도록 동작 가능하고, 이때, 각 시퀀스는 상기 시퀀스 내의 최종 연산을 실행할 때까지 상기 하나 이상의 입력 변수에 대해서 변경하지 않으며,
    상기 제 2 명령어 세트의 적어도 하나의 명령어를 나타내는 연산의 시퀀스의 실행중에 인터럽트가 발생한 후,
    (i) 상기 인터럽트가 상기 시퀀스내에서 최종연산의 실행을 시작하기 전에 일어난 경우, 상기 시퀀스내에서 첫 번째 연산의 실행을 재시작하고,
    (ii) 상기 인터럽트가 상기 시퀀스내에서 최종 연산의 실행을 시작한 후 일어난 경우, 상기 시퀀스에 이어서 다음 명령어의 실행을 재시작하는 것을 특징으로 하는 데이터 처리방법.
  17. 청구항 제16항의 데이터 처리방법을 수행하도록 컴퓨터를 제어하는 컴퓨터 프로그램을 저장한 것을 특징으로 하는 컴퓨터 판독가능한 기록매체.
KR1020037004687A 2000-10-05 2001-06-21 변환된 명령어의 재시작 KR100890243B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB0024402.0 2000-10-05
GB0024402A GB2367653B (en) 2000-10-05 2000-10-05 Restarting translated instructions
PCT/GB2001/002741 WO2002029555A1 (en) 2000-10-05 2001-06-21 Restarting translated instructions

Publications (2)

Publication Number Publication Date
KR20030034243A KR20030034243A (ko) 2003-05-01
KR100890243B1 true KR100890243B1 (ko) 2009-03-24

Family

ID=9900736

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020037004687A KR100890243B1 (ko) 2000-10-05 2001-06-21 변환된 명령어의 재시작

Country Status (12)

Country Link
US (1) US7003652B2 (ko)
EP (1) EP1323032B1 (ko)
JP (1) JP4950408B2 (ko)
KR (1) KR100890243B1 (ko)
CN (1) CN1287270C (ko)
DE (1) DE60140068D1 (ko)
GB (1) GB2367653B (ko)
IL (2) IL151396A0 (ko)
MY (1) MY127147A (ko)
RU (1) RU2263949C2 (ko)
TW (1) TWI224280B (ko)
WO (1) WO2002029555A1 (ko)

Families Citing this family (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69734399D1 (de) * 1996-01-24 2006-03-02 Sun Microsystems Inc Verfahren und vorrichtung zur stapel-cachespeicherung
US7162612B2 (en) * 2000-08-16 2007-01-09 Ip-First, Llc Mechanism in a microprocessor for executing native instructions directly from memory
JP2005506630A (ja) * 2001-10-25 2005-03-03 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 低オーバヘッドの例外チェック
US7155718B1 (en) * 2002-04-04 2006-12-26 Applied Micro Circuits Corp. Method and apparatus to suspend and resume on next instruction for a microcontroller
JP2004094533A (ja) * 2002-08-30 2004-03-25 Hajime Seki 計算機システム
JP4127495B2 (ja) * 2002-09-05 2008-07-30 株式会社ルネサステクノロジ 情報処理装置
US9158574B2 (en) 2002-11-18 2015-10-13 Arm Limited Handling interrupts in data processing
US7539853B2 (en) 2002-11-18 2009-05-26 Arm Limited Handling interrupts in data processing of data in which only a portion of a function has been processed
US20060117167A1 (en) * 2002-12-12 2006-06-01 Evrard Christophe J Processing activity masking in a data processing system
DE102004025418A1 (de) * 2004-05-24 2005-12-22 Infineon Technologies Ag Controller mit einer Decodiereinrichtung
DE102004025419A1 (de) * 2004-05-24 2005-12-22 Infineon Technologies Ag Controller und Verfahren zum Verarbeiten von Befehlen
US8621444B2 (en) * 2004-06-01 2013-12-31 The Regents Of The University Of California Retargetable instruction set simulators
EP1622009A1 (en) * 2004-07-27 2006-02-01 Texas Instruments Incorporated JSM architecture and systems
GB2424092A (en) * 2005-03-11 2006-09-13 Transitive Ltd Switching between code translation and execution using a trampoline
US7769983B2 (en) * 2005-05-18 2010-08-03 Qualcomm Incorporated Caching instructions for a multiple-state processor
US8010849B2 (en) * 2006-09-05 2011-08-30 Arm Limited Diagnosing faults within programs being executed by virtual machines
US7711927B2 (en) * 2007-03-14 2010-05-04 Qualcomm Incorporated System, method and software to preload instructions from an instruction set other than one currently executing
US8489989B1 (en) * 2008-07-15 2013-07-16 Adobe Systems Incorporated Methods and systems for preflighting using multiple preflight profiles
US8880857B2 (en) 2011-04-07 2014-11-04 Via Technologies, Inc. Conditional ALU instruction pre-shift-generated carry flag propagation between microinstructions in read-port limited register file microprocessor
US9317288B2 (en) 2011-04-07 2016-04-19 Via Technologies, Inc. Multi-core microprocessor that performs x86 ISA and ARM ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US9645822B2 (en) 2011-04-07 2017-05-09 Via Technologies, Inc Conditional store instructions in an out-of-order execution microprocessor
US9032189B2 (en) 2011-04-07 2015-05-12 Via Technologies, Inc. Efficient conditional ALU instruction in read-port limited register file microprocessor
US9292470B2 (en) 2011-04-07 2016-03-22 Via Technologies, Inc. Microprocessor that enables ARM ISA program to access 64-bit general purpose registers written by x86 ISA program
US9274795B2 (en) 2011-04-07 2016-03-01 Via Technologies, Inc. Conditional non-branch instruction prediction
US9176733B2 (en) 2011-04-07 2015-11-03 Via Technologies, Inc. Load multiple and store multiple instructions in a microprocessor that emulates banked registers
US8924695B2 (en) 2011-04-07 2014-12-30 Via Technologies, Inc. Conditional ALU instruction condition satisfaction propagation between microinstructions in read-port limited register file microprocessor
US9898291B2 (en) 2011-04-07 2018-02-20 Via Technologies, Inc. Microprocessor with arm and X86 instruction length decoders
US9336180B2 (en) 2011-04-07 2016-05-10 Via Technologies, Inc. Microprocessor that makes 64-bit general purpose registers available in MSR address space while operating in non-64-bit mode
US9043580B2 (en) 2011-04-07 2015-05-26 Via Technologies, Inc. Accessing model specific registers (MSR) with different sets of distinct microinstructions for instructions of different instruction set architecture (ISA)
US9146742B2 (en) 2011-04-07 2015-09-29 Via Technologies, Inc. Heterogeneous ISA microprocessor that preserves non-ISA-specific configuration state when reset to different ISA
US8880851B2 (en) 2011-04-07 2014-11-04 Via Technologies, Inc. Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US9378019B2 (en) 2011-04-07 2016-06-28 Via Technologies, Inc. Conditional load instructions in an out-of-order execution microprocessor
US9244686B2 (en) 2011-04-07 2016-01-26 Via Technologies, Inc. Microprocessor that translates conditional load/store instructions into variable number of microinstructions
US9141389B2 (en) 2011-04-07 2015-09-22 Via Technologies, Inc. Heterogeneous ISA microprocessor with shared hardware ISA registers
US9128701B2 (en) 2011-04-07 2015-09-08 Via Technologies, Inc. Generating constant for microinstructions from modified immediate field during instruction translation
US8914615B2 (en) 2011-12-02 2014-12-16 Arm Limited Mapping same logical register specifier for different instruction sets with divergent association to architectural register file using common address format
WO2013132767A1 (ja) 2012-03-09 2013-09-12 パナソニック株式会社 プロセッサ、マルチプロセッサシステム、コンパイラ、ソフトウェアシステム、メモリ制御システムおよびコンピュータシステム
GB2514618B (en) * 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems
US9727944B2 (en) 2015-06-22 2017-08-08 Apple Inc. GPU instruction storage
EP3663916A4 (en) * 2017-08-02 2020-08-19 FeliCa Networks, Inc. INFORMATION PROCESSING DEVICE AND INFORMATION PROCESSING METHOD
CN112817812B (zh) * 2020-12-31 2022-11-04 深圳市联影高端医疗装备创新研究院 序列翻译模拟方法、装置、设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0103547A2 (en) * 1982-08-09 1984-03-21 Giuseppe Rigo Apparatus for generating a controllable steam and ozone mixture and hair-dryer for uniformly distributing said mixture on hair
EP0772122A2 (en) * 1991-03-07 1997-05-07 Digital Equipment Corporation Method for translating a first program code to a second program code and a system for executing a second program code
KR19980702137A (ko) * 1995-02-10 1998-07-15 카알 실버맨 프로세서의 명령어 집합간의 변환 방법 및 장치
KR100230552B1 (ko) 1995-04-13 1999-11-15 포만 제프리 엘 동적 명령어 포맷팅을 이용한 컴퓨터 처리 시스템

Family Cites Families (55)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3889243A (en) 1973-10-18 1975-06-10 Ibm Stack mechanism for a data processor
US3955180A (en) 1974-01-02 1976-05-04 Honeywell Information Systems Inc. Table driven emulation system
US4236204A (en) 1978-03-13 1980-11-25 Motorola, Inc. Instruction set modifier register
US4587632A (en) 1980-05-27 1986-05-06 At&T Bell Laboratories Lookahead stack oriented computer
US4922414A (en) 1982-12-17 1990-05-01 Symbolics Inc. Symbolic language data processing system
DE3726192A1 (de) 1987-08-06 1989-02-16 Otto Mueller Stacksteuerung
US5136696A (en) 1988-06-27 1992-08-04 Prime Computer, Inc. High-performance pipelined central processor for predicting the occurrence of executing single-cycle instructions and multicycle instructions
US5440749A (en) 1989-08-03 1995-08-08 Nanotronics Corporation High performance, low cost microprocessor architecture
JPH04302329A (ja) * 1990-12-26 1992-10-26 Xerox Corp マイクロ処理システム
TW197505B (ko) * 1991-03-07 1993-01-01 Digital Equipment Corp
US5307504A (en) * 1991-03-07 1994-04-26 Digital Equipment Corporation System and method for preserving instruction granularity when translating program code from a computer having a first architecture to a computer having a second reduced architecture during the occurrence of interrupts due to asynchronous events
US5367685A (en) 1992-12-22 1994-11-22 Firstperson, Inc. Method and apparatus for resolving data references in generated code
US5455775A (en) 1993-01-25 1995-10-03 International Business Machines Corporation Computer design system for mapping a logical hierarchy into a physical hierarchy
GB2289353B (en) 1994-05-03 1997-08-27 Advanced Risc Mach Ltd Data processing with multiple instruction sets
GB2289354B (en) 1994-05-03 1997-08-27 Advanced Risc Mach Ltd Multiple instruction set mapping
GB2290395B (en) 1994-06-10 1997-05-28 Advanced Risc Mach Ltd Interoperability with multiple instruction sets
US5752035A (en) 1995-04-05 1998-05-12 Xilinx, Inc. Method for compiling and executing programs for reprogrammable instruction set accelerator
US5619665A (en) 1995-04-13 1997-04-08 Intrnational Business Machines Corporation Method and apparatus for the transparent emulation of an existing instruction-set architecture by an arbitrary underlying instruction-set architecture
US5838948A (en) 1995-12-01 1998-11-17 Eagle Design Automation, Inc. System and method for simulation of computer systems combining hardware and software interaction
US5826089A (en) 1996-01-04 1998-10-20 Advanced Micro Devices, Inc. Instruction translation unit configured to translate from a first instruction set to a second instruction set
US5970242A (en) 1996-01-24 1999-10-19 Sun Microsystems, Inc. Replicating code to eliminate a level of indirection during execution of an object oriented computer program
US6026485A (en) 1996-01-24 2000-02-15 Sun Microsystems, Inc. Instruction folding for a stack-based machine
US6038643A (en) 1996-01-24 2000-03-14 Sun Microsystems, Inc. Stack management unit and method for a processor having a stack
DE69734399D1 (de) * 1996-01-24 2006-03-02 Sun Microsystems Inc Verfahren und vorrichtung zur stapel-cachespeicherung
JP2000501217A (ja) 1996-01-24 2000-02-02 サン・マイクロシステムズ・インコーポレイテッド 配列アクセス境界チェックを加速したプロセッサ
KR100513138B1 (ko) 1996-01-24 2005-09-07 선 마이크로시스템즈 인코퍼레이티드 네트워크 또는 로컬 메모리로부터 수신된 명령 세트를실행하는 프로세서 및 컴퓨터 시스템
US5742802A (en) 1996-02-16 1998-04-21 International Business Machines Corporation Method and system for efficiently mapping guest instruction in an emulation assist unit
US5805895A (en) 1996-06-09 1998-09-08 Motorola, Inc. Method and apparatus for code translation optimization
US6031992A (en) 1996-07-05 2000-02-29 Transmeta Corporation Combining hardware and software to provide an improved microprocessor
JPH1069640A (ja) 1996-08-27 1998-03-10 Mitsumi Electric Co Ltd Cd−rドライブにおけるウォブル信号生成方法
US5926832A (en) 1996-09-26 1999-07-20 Transmeta Corporation Method and apparatus for aliasing memory data in an advanced microprocessor
DE69723286T2 (de) 1996-11-13 2004-05-13 Paran, Arik, Sunnyvale Echtzeitprogramm-sprachbeschleuniger
US5937193A (en) * 1996-11-27 1999-08-10 Vlsi Technology, Inc. Circuit arrangement for translating platform-independent instructions for execution on a hardware platform and method thereof
US5953741A (en) 1996-11-27 1999-09-14 Vlsi Technology, Inc. Stack cache for stack-based processor and method thereof
US6011908A (en) * 1996-12-23 2000-01-04 Transmeta Corporation Gated store buffer for an advanced microprocessor
US6009499A (en) 1997-03-31 1999-12-28 Sun Microsystems, Inc Pipelined stack caching circuit
US5898885A (en) * 1997-03-31 1999-04-27 International Business Machines Corporation Method and system for executing a non-native stack-based instruction within a computer system
US5875336A (en) 1997-03-31 1999-02-23 International Business Machines Corporation Method and system for translating a non-native bytecode to a set of codes native to a processor within a computer system
US5892966A (en) 1997-06-27 1999-04-06 Sun Microsystems, Inc. Processor complex for executing multimedia functions
US6088786A (en) 1997-06-27 2000-07-11 Sun Microsystems, Inc. Method and system for coupling a stack based processor to register based functional unit
US6003126A (en) 1997-07-01 1999-12-14 International Business Machines Special instruction register including allocation field utilized for temporary designation of physical registers as general registers
US6317872B1 (en) 1997-07-11 2001-11-13 Rockwell Collins, Inc. Real time processor optimized for executing JAVA programs
US5953520A (en) 1997-09-22 1999-09-14 International Business Machines Corporation Address translation buffer for data processing system emulation mode
US5995743A (en) * 1997-09-22 1999-11-30 International Business Machines Corporation Method and system for interrupt handling during emulation in a data processing system
EP0950216B1 (en) 1997-10-02 2003-11-26 Koninklijke Philips Electronics N.V. A processing device for executing virtual machine instructions
KR100623403B1 (ko) 1997-10-02 2006-09-13 코닌클리케 필립스 일렉트로닉스 엔.브이. 가상 머신 명령을 처리하기 위한 데이터 처리 장치
AU745449B2 (en) * 1997-11-20 2002-03-21 Hajime Seki Computer system
US6070173A (en) 1997-11-26 2000-05-30 International Business Machines Corporation Method and apparatus for assisting garbage collection process within a java virtual machine
US6122638A (en) 1997-11-26 2000-09-19 International Business Machines Corporation Object-oriented processor and method for caching intermediate data in an object-oriented processor
US6039765A (en) * 1997-12-15 2000-03-21 Motorola, Inc. Computer instruction which generates multiple results of different data types to improve software emulation
US6148391A (en) 1998-03-26 2000-11-14 Sun Microsystems, Inc. System for simultaneously accessing one or more stack elements by multiple functional units using real stack addresses
US6374286B1 (en) 1998-04-06 2002-04-16 Rockwell Collins, Inc. Real time processor capable of concurrently running multiple independent JAVA machines
US6332215B1 (en) * 1998-12-08 2001-12-18 Nazomi Communications, Inc. Java virtual machine hardware for RISC and CISC processors
US6338134B1 (en) 1998-12-29 2002-01-08 International Business Machines Corporation Method and system in a superscalar data processing system for the efficient processing of an instruction by moving only pointers to data
US6718539B1 (en) * 2000-12-22 2004-04-06 Lsi Logic Corporation Interrupt handling mechanism in translator from one instruction set to another

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0103547A2 (en) * 1982-08-09 1984-03-21 Giuseppe Rigo Apparatus for generating a controllable steam and ozone mixture and hair-dryer for uniformly distributing said mixture on hair
EP0772122A2 (en) * 1991-03-07 1997-05-07 Digital Equipment Corporation Method for translating a first program code to a second program code and a system for executing a second program code
EP0772122A3 (en) 1991-03-07 1997-05-14 Digital Equipment Corporation Method for translating a first program code to a second program code and a system for executing a second program code
KR19980702137A (ko) * 1995-02-10 1998-07-15 카알 실버맨 프로세서의 명령어 집합간의 변환 방법 및 장치
KR100230552B1 (ko) 1995-04-13 1999-11-15 포만 제프리 엘 동적 명령어 포맷팅을 이용한 컴퓨터 처리 시스템

Also Published As

Publication number Publication date
WO2002029555A1 (en) 2002-04-11
CN1434938A (zh) 2003-08-06
CN1287270C (zh) 2006-11-29
KR20030034243A (ko) 2003-05-01
RU2002127807A (ru) 2004-02-27
US7003652B2 (en) 2006-02-21
IL151396A0 (en) 2003-04-10
RU2263949C2 (ru) 2005-11-10
JP4950408B2 (ja) 2012-06-13
EP1323032B1 (en) 2009-09-30
GB2367653A (en) 2002-04-10
IL151396A (en) 2008-08-07
JP2004511041A (ja) 2004-04-08
TWI224280B (en) 2004-11-21
GB0024402D0 (en) 2000-11-22
US20020066003A1 (en) 2002-05-30
EP1323032A1 (en) 2003-07-02
MY127147A (en) 2006-11-30
GB2367653B (en) 2004-10-20
DE60140068D1 (de) 2009-11-12

Similar Documents

Publication Publication Date Title
KR100890243B1 (ko) 변환된 명령어의 재시작
KR100890244B1 (ko) 레지스터에의 스택 오퍼랜드의 저장
JP4938187B2 (ja) ネイティブおよび非ネイティブの命令集合間相互呼び出し
KR20030040515A (ko) 프로세서 파이프라인 내에서의 하드웨어 명령어 변환
EP0950216B1 (en) A processing device for executing virtual machine instructions
US7356673B2 (en) System and method including distributed instruction buffers for storing frequently executed instructions in predecoded form
WO2001061475A1 (en) Transforming a stack-based code sequence to a register based code sequence
GB2367652A (en) Scheduling control within a system having mixed hardware and software based instruction execution
GB2367658A (en) Intercalling between native and non-native instruction sets
Säntti et al. Java Co-Processor for Embedded Systems
WO2001061474A1 (en) Delayed update of a stack pointer and program counter
WO2001061476A2 (en) System including cpu and code translator for translating code from a second instruction set to a first instruction set

Legal Events

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

Payment date: 20130221

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20140221

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20150226

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20160218

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20170220

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20180219

Year of fee payment: 10