KR20030040515A - 프로세서 파이프라인 내에서의 하드웨어 명령어 변환 - Google Patents

프로세서 파이프라인 내에서의 하드웨어 명령어 변환 Download PDF

Info

Publication number
KR20030040515A
KR20030040515A KR10-2003-7004689A KR20037004689A KR20030040515A KR 20030040515 A KR20030040515 A KR 20030040515A KR 20037004689 A KR20037004689 A KR 20037004689A KR 20030040515 A KR20030040515 A KR 20030040515A
Authority
KR
South Korea
Prior art keywords
instruction
instructions
converter
pipeline
instruction set
Prior art date
Application number
KR10-2003-7004689A
Other languages
English (en)
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 KR20030040515A publication Critical patent/KR20030040515A/ko

Links

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/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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • 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
    • 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

Landscapes

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

Abstract

처리 시스템은, 명령어 파이프라인(30)과 프로세서 코어를 갖는다. 비고유 명령어를 고유 명령어 동작으로 변환하는 명령어 변환기(42)는, 페치단계(32) 뒤의 명령어 파이프라인 내에 설치된다. 그 명령어 변환기는, 발생하려고 하는 가변 길이 고유 명령어 동작 시퀀스가 비고유 명령어를 에물레이션하도록 고유 명령어 동작의 다단계 시퀀스를 발생할 수 있다. 상기 페치단계는, 현재 명령어 워드와 다음 명령어 워드를 기억하는 워드 버퍼(62)가 구비된다. 이에 따라서, 메모리로부터 판독된 명령어 워드 사이의 범위에 있는 가변 길이 비고유 명령어는, 즉시 디코드되도록 구성되어 다수의 전력 소비 메모리 페치를 피할 수 있다.

Description

프로세서 파이프라인 내에서의 하드웨어 명령어 변환{HARDWARE INSTRUCTION TRANSLATION WITHIN A PROCESSOR PIPELINE}
본 발명은, 데이터 처리 시스템에 관한 것이다. 특히, 본 발명은, 프로세서 파이프라인 내에서 하나의 명령어 세트를 다른 명령어 세트로 명령어 변환하는 데이터 처리 시스템에 관한 것이다.
명령어 파이프라인 내에서 제 1 명령어 세트의 제 2 명령어 세트로의 명령어 변환을 하는 처리 시스템이 공지되어 있다. 이 시스템에서는, 변환하려고 하는 명령어마다 단일 고유 명령어로 매핑한다. 이러한 시스템의 일예로는, ARM 및 Thumb 명령어 코드 모두를 지원하는 ARM 리미티드에 의해 제조된 프로세서가 있다.
또한, 비고유 명령어를 다중 고유 명령어를 포함하는 고유 명령어 시퀀스로 변환하는 처리 시스템이 공지되어 있다. 이러한 시스템의 일례로는, US-A-5,937,193에 기재되어 있다. 이 시스템은, Java(자바) 바이트코드를 32-비트 ARM 명령어로 매핑한다. 이 변환은, 그 명령어가 상기 프로세서 파이프라인에 전달되기 전에 일어나고, 메모리 어드레스 리맵핑 기술을 사용한다. Java 바이트코드를 사용하여 메모리에 있는 ARM 명령어의 시퀀스를 찾은 후 그 Java 바이트코드의 동작을 에뮬레이션한다.
US-A-5,937,193의 시스템은, 여러 가지 관련 단점이 있다. 이러한 시스템은,메모리 및 메모리 페치를 사용하는 방법에 있어서 비효율적이다. 상기 ARM 명령어 시퀀스들은, 비록 덜 점유하도록 구성되었을지라도 메모리 공간은 동일한 양을 모두 점유한다. 메모리로부터의 ARM 명령어의 다중 페치는, 각 Java 바이트코드의 디코딩시에 요구되지만 전력을 소비하고 성능에 영향을 주어 바람직하지 못하다. 이러한 변환된 명령어 시퀀스는, 서로 다르거나, 보다 낳은 최적화된 명령어 변환이 될 수 있는 각 Java 바이트코드를 실행할 경우 무엇이 서로 시작 시스템 상태인지를 고려하는 것은 곤란하여 고정되어 있다.
명령어 세트와 다른 배경 정보간에 변환을 위한 공지된 시스템의 예들로서는, 다음과 같은 예들이 있다: 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, February1993, 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 1stand 2ndEditions.
본 발명의 일 국면은,
제 1 명령어 세트의 명령어에 지정된대로 연산을 실행 가능하도록 동작하고, 메모리로부터 실행하려고 하는 명령어를 내부로 페치(fetch)하여 그에 따라 명령어를 진행하는 명령어 파이프라인을 갖는 프로세서 코어와,
제 2 명령어 세트의 명령어를 상기 제 1 명령어 세트의 명령어에 대응하는 변환기 출력신호로 변환 가능하도록 동작하는 명령어 변환기를 구비하고,
상기 명령어 변환기가, 상기 명령어 파이프라인 내부에 있고, 상기 메모리로부터 상기 명령어 파이프라인 내부로 페치한 상기 제 2 명령어 세트의 명령어를 변환하고,
상기 제 2 명령어 세트 중 적어도 하나의 명령어가, 상기 프로세서 코어에 의해 수행되도록 상기 제 1 명령어 세트의 명령어에 의해 지정되는 복수의 연산을 요구하는 다단계 연산을 지정하고,
상기 명령어 변환기가, 상기 프로세서 코어를 제어하기 위해 변환기 출력신호의 시퀀스를 발생하여 상기 다단계 연산을 수행하는 것을 특징으로 하는 데이터 처리장치를 제공한다.
본 발명은 상기 페치단계 다음에 상기 프로세서 코어 그 자체의 명령어 파이프라인 내부에 명령어 변환기를 제공한다. 이러한 구성에 의해, 비고유 명령어(제 2 명령어 세트 명령어)는, 고유 명령어(제 1 명령어 세트 명령어)와 같은 방법으로 메모리 시스템 내부에 기억되므로, 메모리 시스템 사용에 관한 제한이 있는 것을 제거한다. 더욱이, 비고유 명령어마다, 상기 메모리 시스템으로부터 비고유 명령어의 단일 메모리 페치는, 상기 프로세서 파이프라인 내에서 일어나는 고유 명령어 동작의 임의의 다단계 시퀀스의 발생에 의해 생긴다. 이에 따라 메모리 페치에 의해 소비된 전력을 감소시키고 성능을 향상시킨다. 또한, 파이프라인 내의 명령어 변환기는, 가변 단위의 고유 명령어 동작을 나머지 파이프라인을 따라 출력하여, 디코딩되는 특정 비고유 명령어에 따라 실행될 수 있고, 고유 명령어가 원하는 비고유 동작을 효율적으로 수행하는 것에 영향을 주는 임의의 주변 시스템 상태에 따라 실행될 수 있다.
상기 명령어 변환기는, 상기 제 1 명령어 세트로부터 고유 명령어를 충분하고 완전하게 나타내는 변환기 출력신호를 발생할 수 있다는 것을 알 수 있을 것이다. 이러한 시스템에 의해, 상기 제 1 명령어 세트의 명령어들에 의해 동작하도록 설계되었던 하드웨어 로직을 간단히 재사용하게 된다. 그러나, 상기 명령어 변환기는, 또한 고유 명령어들에 직접 해당하지 않는 고유 명령어들과 같은 효과를 내거나 또는 추가로 상기 제 1 명령어 세트의 명령어에 의해 직접 제공된 고유 명령어들에는 없는 확장 오퍼랜드 필드와 같은 추가적인 동작을 제공할 수 있는 제어신호인 변환기 출력신호를 발생한다.
비고유 명령어의 고유 명령어로의 변환이 메모리 구성에 의존하지 않고 일어나므로, 상기 명령어 파이프라인 내부의 명령어 변환기는 프로세서 코어용 프로그램 카운터 값을 사용하여 종래의 방법으로 상기 메모리로부터 비고유 명령어를 페치 가능하게 한다. 더욱이, 프로그램 카운터 값은, 비고유 명령어가 고유 명령어의 단일 단계 또는 다중 단계 동작으로 변환하든지 아닌지에 의존하지 않고 비고유 명령어의 실행에 따라 복수의 연산을 요구하는되도록 제어되어도 된다. 바람직하게는, 프로그램 카운터 값을 사용하여 비고유 명령어의 실행을 따라가면, 인터럽트, 브랜치 및 시스템 설계에 의한 다른 국면을 처리하는 방법을 단순화시킨다.
유한 상태 기계를 제공하는 것으로서 간주되는 방법으로 명령어 파이프라인 내부의 명령어 변환기를 제공하면, 상기 명령어 변환기가 상기 변환된 명령어 동작을 더욱 용이하게 조정하여 변환되는 비고유 명령어와 시스템 상태를 반영할 수 있다는 결과를 갖는다. 특히, 이러한 것의 바람직한 예로서, 상기 제 2 명령어 세트가 스택 기반 처리를 지정하고 그 프로세서 코어가 레지스터 기반 처리를 하는 하나일 때, 레지스터의 세트를 사용하여 스택 오퍼랜드를 효과적으로 캐시하는 것이 가능하여 처리 속도를 향상시킬 수 있다. 이에 따라, 상기 변환된 명령어 시퀀스는, 특정 스택 오퍼랜드가 레지스터 내부에 캐시되거나 또는 페치되는지의 여부에 따라 달라진다.
명령어 변환기가 고유 명령어의 실행에 영향을 주는 것을 감소시키기 위한 바람직한 실시예로는, 상기 명령어 파이프라인 내부의 명령어 변환기가 바이패스 경로를 구비하여, 고유 명령어 처리 모드에서 동작할 경우, 상기 명령어 변환기에 의해 영향을 받지 않고 처리되도록 하는 예가 있다.
고유 명령어 및 비고유 명령어가 여러 가지 서로 다른 형태를 취할 수 있다는 것을 알 수 있을 것이다. 그러나, 본 발명은, 이들 비고유 명령어의 고유 명령어로의 변환이 본 발명에서 해결할 수 있는 많은 문제점들과 곤란성을 나타내므로, 제 2 명령어 세트의 비고유 명령어가 Java 가상 기계 명령어일 경우 특히 유용하다.
본 발명의 다른 국면은, 제 1 명령어 세트의 명령어에 지정된 연산을 실행 가능하도록 동작하고, 메모리로부터 실행하려고 하는 명령어를 내부로 페치하여 그에 따라 명령어를 진행하는 명령어 파이프라인을 갖는 프로세서 코어를 사용한 데이터 처리방법에 있어서,
상기 명령어 파이프라인 내부로 명령어를 페치하는 단계와,
상기 명령어 파이프라인 내부의 명령어 변환기를 사용하여, 제 2 명령어 세트의 페치된 명령어를 상기 제 1 명령어 세트의 명령어에 대응한 변환기 출력신호로 변환하는 단계를 포함하고,
상기 제 2 명령어 세트 중 적어도 하나의 명령어가, 상기 프로세서 코어에 의해 수행되도록 상기 제 1 명령어 세트의 명령어에 의해 지정되는 복수의 연산을 요구하는 다단계 연산을 지정하고,
상기 명령어 변환기가, 상기 프로세서 코어를 제어하기 위해 변환기 출력신호의 시퀀스를 발생하여 상기 다단계 연산을 수행하는 것을 특징으로 하는 데이터 처리방법을 제공한다.
또한, 본 발명은, 상기 기술방법에 따라 컴퓨터를 제어하는 컴퓨터 프로그램을 보유한 컴퓨터 프로그램 제품을 제공한다.
명령어 파이프라인 내부에서 변환되는 명령어를 페치할 때, 그 변환된 명령어가 가변 길이 명령어일 경우 문제가 생긴다. 명령어 파이프라인의 페치단계(fetch stage)는, 고정 길이 명령어를 페치할 때 비교적 예측 가능한 동작을 갖는다. 예를 들면, 명령어 사이클마다 명령어를 실행할 경우, 그 페치단계는 명령어 사이클마다 명령어를 페치하여 그 명령어 파이프라인이 계속 충만하도록 구성되어도 된다. 그러나, 페치된 명령어가 가변 길이를 가질 경우, 명령어들간의 경계를 식별하는데 곤란한 점이 있다. 이에 따라서, 고정 길이 메모리 판독을 제공하는 메모리 시스템에서, 특정 가변 길이 명령어는, 명령어의 최종 부분을 판독하는데 제 2 페치를 필요로 하는 메모리 판독 사이의 범위에 있다.
본 발명의 또 다른 국면은,
제 1 명령어 세트의 명령어에 지정된대로 연산을 실행 가능하도록 동작하고, 메모리로부터 실행하려고 하는 명령어를 내부로 페치하여 그에 따라 명령어를 진행하는 명령어 파이프라인을 갖는 프로세서 코어와,
제 2 명령어 세트의 명령어를 상기 제 1 명령어 세트의 명령어에 대응하는 변환기 출력신호로 변환 가능하도록 동작하는 명령어 변환기를 구비하고,
상기 제 2 명령어 세트의 상기 명령어는, 가변 길이 명령어이고,
상기 명령어 변환기는, 상기 명령어 파이프라인 내부에 있고, 상기 메모리로부터 상기 명령어 파이프라인의 페치 단계 내부로 페치한 상기 제 2 명령어 세트의 명령어를 변환하고,
상기 명령어 파이프라인의 상기 페치 단계는, 현재 명령어 워드와 상기 메모리로부터 페치된 다음 명령어 워드를 적어도 보유하고, 상기 제 2 명령어 세트의 가변 길이 명령어가 상기 현재 명령어 워드에서 시작하여 상기 다음 명령어 워드로 연장하는 경우, 상기 다음 명령어 워드가 상기 명령어 변환기에 의해 추가의 페치 동작의 필요없이 변환을 하기 위한 상기 파이프라인 내에서 사용 가능한 명령어 버퍼를 구비한 것을 특징으로 하는 데이터 처리장치를 제공한다.
본 발명은, 적어도 현재 명령어 워드와 다음 명령어 워드를 기억하는 페치단계 내의 버퍼를 제공한다. 이러한 구성에 의해, 특정 가변 길이 명령어가 현재 명령어로부터 다음 명령어 워드로 확장하면, 그 명령어 워드는 이미 페치되어 즉각적인 디코딩 및 사용을 위해 사용 가능해진다. 다음 명령어 워드와 현재 명령어 워드를 버퍼링하고, 가변 길이 명령어를 지원하는 파이프라인에서의 페치단계를 제공하는 것에 의해, 상기 명령어 파이프라인 내의 나머지 단계에 관련하여 더욱 비동기적인 방법으로 상기 페치단계가 동작한다. 이것은, 파이프라인 스테이지가 동기적으로 동작하려고 하는 고정 길이 명령어를 실행하기 위한 명령어 파이프라인 내에 정상의 연산 경향과는 반대이다.
상기 페치 단계 내의 명령어를 버퍼링하는 본 발명의 실시예들은, 상기 본 발명의 첫 번째 국면에 관련하여 기재된 상술한 특징을 갖는 시스템 내에서 사용하는데 아주 적합하다.
본 발명의 또 다른 국면은,
제 1 명령어 세트의 명령어에 지정된대로 연산을 실행 가능하도록 동작하고, 메모리로부터 실행하려고 하는 명령어를 내부로 페치하여 그에 따라 명령어를 진행하는 명령어 파이프라인을 갖는 프로세서 코어를 사용한 데이터 처리방법에 있어서,
상기 명령어 파이프라인 내부로 명령어를 페치하는 단계와,
상기 명령어 파이프라인 내부의 명령어 변환기를 사용하여, 제 2 명령어 세트의 페치된 명령어를 상기 제 1 명령어 세트의 명령어에 대응한 변환기 출력신호로 변환하는 단계를 포함하고,
상기 제 2 명령어 세트의 상기 명령어는, 가변 길이 명령어이고,
상기 명령어 변환기는, 상기 명령어 파이프라인 내부에 있고, 상기 메모리로부터 상기 명령어 파이프라인의 페치 단계 내부로 페치한 상기 제 2 명령어 세트의 명령어를 변환하고,
상기 명령어 파이프라인의 상기 페치 단계는, 현재 명령어 워드와 상기 메모리로부터 페치된 다음 명령어 워드를 적어도 보유하고, 상기 제 2 명령어 세트의 가변 길이 명령어가 상기 현재 명령어 워드에서 시작하여 상기 다음 명령어 워드로 연장하는 경우, 상기 다음 명령어 워드가 상기 명령어 변환기에 의해 추가의 페치 동작의 필요없이 변환을 하기 위한 상기 파이프라인 내에서 사용 가능한 명령어 버퍼를 구비한 것을 특징으로 하는 데이터 처리방법을 제공한다.
이하, 본 발명의 실시예들을 다음의 첨부도면들을 참조하여 예들에 의해서만 설명하겠다:
도 1 및 도 2는 예시 명령어 파이프라인 구성을 나타낸 개략도,
도 3은 페치 단계 구성을 더욱 상세히 나타낸 도면,
도 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은 일 특정 구현이 예로서 주어진 것뿐이라는 것을 알 수 있을 것이다.
표 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에 나타낸 것들 이외의 매핑 상태를 변환시키는 것이 가능할 수도 있다.
표 2로부터 알 수 있듯이, 스택 오퍼랜드를 저장하는 레지스터의 세트 내로 로딩된 신규 스택 오퍼랜드는, 새로운 상부의 스택 오퍼랜드를 형성할 것이고, 이것은, 초기 상태에 따른 레지스터의 세트 내의 레지스터 중 특정한 하나로 로딩될 것이다.
마찬가지로, 표 3은, 특정 Java 바이트코드의 요구 부족 값이 Java 바이트코드가 실행되기 전에 소정 초기 상태가 필요한 것을 나타내는 경우, 초기 상태, 요구 부족 값, 최종 상태 및 상기 초기 상태와 상기 최종 상태 사이에서 이동하는 레지스터의 세트 내의 레지스터를 비우기 위한 연관 ARM 명령어와의 관계를 나타낸 것이다. STR 명령어에 의해 상기 어드레스 가능한 메모리에 벗어나서 저장된 특정 레지스터 값은, 그 레지스터의 현재 상부의 스택 오퍼랜드에 따라 변할 것이다.
상술한 예의 시스템에서, 요구 충만 및 요구 부족 조건은, 요구 충만 또는요구 부족 조건 중 하나만이 상기 명령어 변환기가 변환하려고 하는 특정 Java 바이트코드에 대해 임의 소정 시간에 참이라고 말할 수 있는, 서로 배타적이다는 것을 알 수 있을 것이다. 하드웨어 명령어 변환기(108)에 의해 지원하도록 선택된 명령어와 함께 상기 명령어 변환기(108)에 의해 사용된 명령어 템플릿은, 이 상호 배타적인 요구사항을 만족하도록 선택된다. 이 요구 사항이 적합하지 않은 경우, 실행 결과가 요구된 대로 레지스터 내에 보유되도록 Java 바이트코드를 나타낸 명령어의 실행 후에, 충분한 부족 레지스터를 사용 가능하게 하지 못하는 레지스터의 세트 내에 존재하는 입력 스택 오퍼랜드의 수를 특정 Java 바이트코드가 필요로 하는 상황이 일어날 수 있다.
소정 Java 바이트코드는, 소비된 스택 오퍼랜드의 수와 그 Java 바이트코드의 실행에 의해 생성된 스택 오퍼랜드의 수간의 균형을 나타내는 전반적인 네트(net) 스택 동작을 갖는다는 것을 알 수 있을 것이다. 소비된 스택 오퍼랜드의 수가 실행하기에 앞서 요구사항이고 생성된 스택 오퍼랜드의 수가 실행 후에 요구사항이므로, 각 Java 바이트코드와 연관된 요구 충만 값과 요구 부족 값은, 심지어 상기 전반적인 네트 동작이 그 자체로서 만족되어도 그 바이트코드의 실행에 앞서 만족되어야 한다. 표 4는, 초기 상태, 전반적인 스택 동작, 최종 상태 및 레지스터 용도와 상부의 스택 오퍼랜드(TOS)의 상대적인 위치의 변화간의 관계를 나타낸 것이다. 표 2 또는 표 4에 나타낸 상태 천이 중 하나 또는 그 이상이 표 4에 나타낸 상태 천이를 실행하기 전에 실행하여, Java 바이트코드의 요구 충만값 및 요구 부족값에 따른 소정 Java 바이트코드에 대한 사전 조건을 확보할 필요가 있어도 된다.
표 2, 표 3 및 표 4에 나타낸 상태와 조건간의 관계는, 단일 상태 천이 테이블 또는 상태도 내에서 조합될 수 있지만, 그들은 명료함을 위해 위에서는 따로 따로 나타내어져 있다는 것을 알 수 있을 것이다.
서로 다른 상태, 조건 및 네트 동작(action)간의 관계를 사용하여, 명령어 변환기(108)의 동작의 이러한 국면을 제어하는 (유한 상태 기계의 형태로) 하드웨어 상태 기계를 정의하여도 된다. 또한, 이들 관계는, 소프트웨어 또는 하드웨어 및 소프트웨어의 조합에 의해 모델링될 수 있다.
이하, 부분집합의 각 Java 바이트코드에 대해 상기 연관 요구 충만, 요구 부족 및 표 2, 표 3 및 표 4와 함께 사용되어도 되는 그 바이트코드에 대한 스택 동작값을 나타내는 것이 가능한 Java 바이트코드의 부분집합의 일례는 다음과 같다.
또한, 상기에서 설명된 각 Java 바이트코드 명령어에 대한 예시 명령어 템플릿은 다음과 같다. 여기서 나타낸 명령어는 ARM 명령어로, 이것은 상기 각 Java 바이트코드의 요구된 작용을 실행한다. 레지스터 필드 "TOS-3", "TOS-2", "TOS-1", "TOS", "TOS+1" 및 "TOS+2"는, 현재 채택된 매핑 상태에 따라 표 1로부터 판독될 때 적절한 레지스터명(register specifier)으로 바꿔도 된다. "TOS+n" 표시는, 상부의 스택 오퍼랜드를 저장하고, 상기 레지스터의 세트 내에 첫 번째 레지스터를둘러싸는(wrap) 포인트에서 상기 레지스터의 세트의 끝에 도달할 때까지 레지스터 값의 증가를 카운트하는 레지스터로부터 시작하는 상부 스택 오퍼랜드를 현재 저장한 레지스터 상의 N번째 레지스터를 나타낸다.
이하, 상술한 기술에 따라 하드웨어 변환부(108)에 의해 실행된 단일 Java 바이트코드의 실행 시퀀스의 예를 설명한다. 이 실행 시퀀스는, 실행되는 명령어에 의존한 상태의 시퀀스를 통해 진행되는 초기 상태의 면에서 도시되어 있고, 각 상태 천이에 관해 상기 동작을 수행한 결과로서 ARM 명령어의 시퀀스를 생상하고, 전체 과정은, Java 바이트코드를 ARM 명령어의 시퀀스로 변환하는 효과가 있다.
도 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 명령어의 일부로서 로딩되는 새로운 스택 오퍼랜드에 의해 사용을 위해 레지스터의 세트 내의 레지스터를 완전히 비운다. 상술한 것처럼, 명령어 변환은, 하드웨어, 소프트웨어 또는 이 둘의 조합에 의해 이루어진다. 아래에는 상술한 기술에 따라 생성된 예시 소프트웨어 해석기의 세부가 기재되어 있다.
도 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 (25)

  1. 제 1 명령어 세트의 명령어에 지정된대로 연산을 실행 가능하도록 동작하고, 메모리로부터 실행하려고 하는 명령어를 내부로 페치하여 그에 따라 명령어를 진행하는 명령어 파이프라인을 갖는 프로세서 코어와,
    제 2 명령어 세트의 명령어를 상기 제 1 명령어 세트의 명령어에 대응하는 변환기 출력신호로 변환 가능하도록 동작하는 명령어 변환기를 구비하고,
    상기 명령어 변환기가, 상기 명령어 파이프라인 내부에 있고, 상기 메모리로부터 상기 명령어 파이프라인 내부로 페치한 상기 제 2 명령어 세트의 명령어를 변환하고,
    상기 제 2 명령어 세트 중 적어도 하나의 명령어가, 상기 프로세서 코어에 의해 수행되도록 상기 제 1 명령어 세트의 명령어에 의해 지정되는 복수의 연산을 요구하는 다단계 연산을 지정하고,
    상기 명령어 변환기가, 상기 프로세서 코어를 제어하기 위해 변환기 출력신호의 시퀀스를 발생하여 상기 다단계 연산을 수행하는 것을 특징으로 하는 데이터 처리장치.
  2. 제 1 항에 있어서,
    상기 변환기 출력신호는, 상기 제 1 명령어 세트의 명령어를 형성하는 신호를 포함한 것을 특징으로 하는 데이터 처리장치.
  3. 제 1 항 또는 제 2 항에 있어서,
    상기 변환기 출력신호는, 상기 프로세서 코어의 동작을 제어하고, 상기 제 1 명령어 세트의 명령어를 디코딩시에 생성된 제어신호와 일치하는 제어신호를 포함한 것을 특징으로 하는 데이터 처리장치.
  4. 제 1 항, 제 2 항 및 제 3 항 중 어느 한 항에 있어서,
    상기 변환기 출력신호는, 상기 프로세서 코어의 동작을 제어하고, 상기 제 1 명령어 세트의 명령어를 디코딩시에 생성된 제어신호에 의해 지정되지 않은 파라미터를 지정하는 제어신호를 포함한 것을 특징으로 하는 데이터 처리장치.
  5. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 프로세서 코어는, 상기 프로세서 코어가 보유한 프로그램 카운터 값에 의해 지정된 상기 메모리 내의 명령어 어드레스로부터 명령어를 페치하는 것을 특징으로 하는 데이터 처리장치.
  6. 제 5 항에 있어서,
    상기 제 2 명령어 세트의 명령어가 실행될 경우, 상기 프로그램 카운터 값은, 상기 제 2 명령어 세트의 상기 명령어가 다단계 연산을 지정하는지의 여부에 관계없는 양만큼 전진하는 것을 특징으로 하는 데이터 처리장치.
  7. 제 5 항 또는 제 6 항에 있어서,
    상기 제 2 명령어 세트의 명령어가 실행될 경우, 상기 프로그램 카운터 값은, 실행하려고 하는 상기 제 2 명령어 세트의 다음 명령어를 지정하도록 전진하는 것을 특징으로 하는 데이터 처리장치.
  8. 제 5 항, 제 6 항 및 제 7 항 중 어느 한 항에 있어서,
    상기 프로그램 카운터 값은, 상기 제 2 명령어 세트의 명령어를 실행할 때 인터럽트가 발생할 경우 저장되어, 상기 인터럽트 후 상기 제 2 명령어 세트의 상기 명령어의 실행을 재시작하는데 사용되는 것을 특징으로 하는 데이터 처리장치.
  9. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 제 2 명령어 세트의 명령어는, 스택에 보유된 스택 오퍼랜드에 관해 실행하고자하는 연산을 지정한 것을 특징으로 하는 데이터 처리장치.
  10. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 프로세서는 복수의 레지스터를 포함하는 레지스터 뱅크를 갖고, 상기 제 1 명령어 세트의 명령어는 상기 레지스터에 보유된 레지스터 오퍼랜드에 관한 연산을 실행하는 것을 특징으로 하는 데이터 처리장치.
  11. 제 10 항에 있어서,
    상기 레지스터 뱅크 내의 레지스터의 세트는, 상기 스택의 상부로부터 스택 오퍼랜드를 보유한 것을 특징으로 하는 데이터 처리장치.
  12. 제 9 항 및 제 11 항에 있어서,
    상기 명령어 변환기는, 레지스터의 상기 세트 내의 서로 다른 레지스터가 상기 스택 내의 서로 다른 위치로부터 각각의 스택 오퍼랜드를 보유하고 있는 복수의 매핑 상태를 갖고, 상기 명령어 변환기는, 상기 스택 내에 보유된 스택 오퍼랜드를 추가 또는 제거하는 동작에 따라 매핑 상태간에 이동 가능하도록 동작하는 것을 특징으로 하는 데이터 처리장치.
  13. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 제 2 명령어 세트의 명령어가 처리되지 않을 경우, 상기 명령어 변환기는 바이패스되도록 상기 명령어 파이프라인 내에 바이패스 경로를 더 구비한 것을 특징으로 하는 데이터 처리장치.
  14. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 제 2 명령어 세트의 상기 명령어는, Java 가상 기계 바이트코드인 것을 특징으로 하는 데이터 처리장치.
  15. 제 1 명령어 세트의 명령어에 지정된 연산을 실행 가능하도록 동작하고, 메모리로부터 실행하려고 하는 명령어를 내부로 페치하여 그에 따라 명령어를 진행하는 명령어 파이프라인을 갖는 프로세서 코어를 사용한 데이터 처리방법에 있어서,
    상기 명령어 파이프라인 내부로 명령어를 페치하는 단계와,
    상기 명령어 파이프라인 내부의 명령어 변환기를 사용하여, 제 2 명령어 세트의 페치된 명령어를 상기 제 1 명령어 세트의 명령어에 대응한 변환기 출력신호로 변환하는 단계를 포함하고,
    상기 제 2 명령어 세트 중 적어도 하나의 명령어가, 상기 프로세서 코어에 의해 수행되도록 상기 제 1 명령어 세트의 명령어에 의해 지정되는 복수의 연산을 요구하는 다단계 연산을 지정하고,
    상기 명령어 변환기가, 상기 프로세서 코어를 제어하기 위해 변환기 출력신호의 시퀀스를 발생하여 상기 다단계 연산을 수행하는 것을 특징으로 하는 데이터 처리방법.
  16. 청구항 13의 방법을 수행하도록 컴퓨터를 제어하기 위한 컴퓨터 프로그램을 보유한 것을 특징으로 하는 컴퓨터 프로그램 제품.
  17. 제 1 명령어 세트의 명령어에 지정된대로 연산을 실행 가능하도록 동작하고, 메모리로부터 실행하려고 하는 명령어를 내부로 페치하여 그에 따라 명령어를 진행하는 명령어 파이프라인을 갖는 프로세서 코어와,
    제 2 명령어 세트의 명령어를 상기 제 1 명령어 세트의 명령어에 대응하는 변환기 출력신호로 변환 가능하도록 동작하는 명령어 변환기를 구비하고,
    상기 제 2 명령어 세트의 상기 명령어는, 가변 길이 명령어이고,
    상기 명령어 변환기는, 상기 명령어 파이프라인 내부에 있고, 상기 메모리로부터 상기 명령어 파이프라인의 페치 단계 내부로 페치한 상기 제 2 명령어 세트의 명령어를 변환하고,
    상기 명령어 파이프라인의 상기 페치 단계는, 현재 명령어 워드와 상기 메모리로부터 페치된 다음 명령어 워드를 적어도 보유하고, 상기 제 2 명령어 세트의 가변 길이 명령어가 상기 현재 명령어 워드에서 시작하여 상기 다음 명령어 워드로 연장하는 경우, 상기 다음 명령어 워드가 상기 명령어 변환기에 의해 추가의 페치 동작의 필요없이 변환을 하기 위한 상기 파이프라인 내에서 사용 가능한 명령어 버퍼를 구비한 것을 특징으로 하는 데이터 처리장치.
  18. 제 17 항에 있어서,
    상기 명령어 버퍼는, 스윙 버퍼인 것을 특징으로 하는 데이터 처리장치.
  19. 제 17 항 또는 제 18 항에 있어서,
    상기 페치 단계는, 상기 현재 명령어 워드와 상기 다음 명령어 워드 중의 하나 또는 그 이상으로부터 가변 길이 명령어를 선택하는 복수의 다중화기를 구비한 것을 특징으로 하는 데이터 처리장치.
  20. 제 17 항, 제 18 항 및 제 19 항 중 어느 한 항에 있어서,
    상기 제 2 명령어 세트의 상기 명령어는, Java 가상 기계 바이트코드인 것을 특징으로 하는 데이터 처리장치.
  21. 제 17 항 내지 제 20 항 중 어느 한 항에 있어서,
    상기 제 2 명령어 세트의 명령어가 처리되지 않을 경우, 상기 명령어 변환기는 바이패스되도록 상기 명령어 파이프라인 내에 바이패스 경로를 더 구비한 것을 특징으로 하는 데이터 처리장치.
  22. 제 17 항 내지 제 21 항 중 어느 한 항에 있어서,
    상기 제 2 명령어 세트의 적어도 하나의 명령어는, 상기 프로세서 코어에 의해 수행되도록 상기 제 1 명령어 세트의 명령어에 의해 지정되는 복수의 연산을 요구하는 다단계 연산을 지정하고,
    상기 명령어 변환기는, 상기 프로세서 코어를 제어하기 위해 변환기 출력신호의 시퀀스를 발생하여 상기 다단계 연산을 수행하는 것을 특징으로 하는 데이터 처리장치.
  23. 제 22 항과, 제 2 항 내지 제 12 항 중 어느 한 항에 기재된 데이터 처리장치.
  24. 제 1 명령어 세트의 명령어에 지정된대로 연산을 실행 가능하도록 동작하고, 메모리로부터 실행하려고 하는 명령어를 내부로 페치하여 그에 따라 명령어를 진행하는 명령어 파이프라인을 갖는 프로세서 코어를 사용한 데이터 처리방법에 있어서,
    상기 명령어 파이프라인 내부로 명령어를 페치하는 단계와,
    상기 명령어 파이프라인 내부의 명령어 변환기를 사용하여, 제 2 명령어 세트의 페치된 명령어를 상기 제 1 명령어 세트의 명령어에 대응한 변환기 출력신호로 변환하는 단계를 포함하고,
    상기 제 2 명령어 세트의 상기 명령어는, 가변 길이 명령어이고,
    상기 명령어 변환기는, 상기 명령어 파이프라인 내부에 있고, 상기 메모리로부터 상기 명령어 파이프라인의 페치 단계 내부로 페치한 상기 제 2 명령어 세트의 명령어를 변환하고,
    상기 명령어 파이프라인의 상기 페치 단계는, 현재 명령어 워드와 상기 메모리로부터 페치된 다음 명령어 워드를 적어도 보유하고, 상기 제 2 명령어 세트의 가변 길이 명령어가 상기 현재 명령어 워드에서 시작하여 상기 다음 명령어 워드로 연장하는 경우, 상기 다음 명령어 워드가 상기 명령어 변환기에 의해 추가의 페치동작의 필요없이 변환을 하기 위한 상기 파이프라인 내에서 사용 가능한 명령어 버퍼를 구비한 것을 특징으로 하는 데이터 처리방법.
  25. 청구항 24의 방법을 수행하도록 컴퓨터를 제어하기 위한 컴퓨터 프로그램을 보유한 것을 특징으로 하는 컴퓨터 프로그램 제품.
KR10-2003-7004689A 2000-10-05 2001-06-21 프로세서 파이프라인 내에서의 하드웨어 명령어 변환 KR20030040515A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB0024396A GB2367651B (en) 2000-10-05 2000-10-05 Hardware instruction translation within a processor pipeline
GB0024396.4 2000-10-05
PCT/GB2001/002743 WO2002029507A2 (en) 2000-10-05 2001-06-21 Hardware instruction translation within a processor pipeline

Publications (1)

Publication Number Publication Date
KR20030040515A true KR20030040515A (ko) 2003-05-22

Family

ID=9900734

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2003-7004689A KR20030040515A (ko) 2000-10-05 2001-06-21 프로세서 파이프라인 내에서의 하드웨어 명령어 변환

Country Status (9)

Country Link
US (1) US20020083302A1 (ko)
EP (1) EP1330691A2 (ko)
JP (1) JP2004522215A (ko)
KR (1) KR20030040515A (ko)
CN (1) CN1484787A (ko)
GB (1) GB2367651B (ko)
IL (1) IL154956A0 (ko)
RU (1) RU2003112679A (ko)
WO (1) WO2002029507A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9703562B2 (en) 2013-03-16 2017-07-11 Intel Corporation Instruction emulation processors, methods, and systems

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2393270B (en) 2002-09-19 2005-07-27 Advanced Risc Mach Ltd Executing variable length instructions stored within a plurality of discrete memory address regions
US7769983B2 (en) * 2005-05-18 2010-08-03 Qualcomm Incorporated Caching instructions for a multiple-state processor
JP2007122626A (ja) * 2005-10-31 2007-05-17 Matsushita Electric Ind Co Ltd マイクロプロセッサ
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
GB2460280A (en) * 2008-05-23 2009-11-25 Advanced Risc Mach Ltd Using a memory-abort register in the emulation of memory access operations
CN101304312B (zh) * 2008-06-26 2011-07-20 复旦大学 一种适用于精简指令集处理器的加密单元
US8195923B2 (en) * 2009-04-07 2012-06-05 Oracle America, Inc. Methods and mechanisms to support multiple features for a number of opcodes
JP2011209905A (ja) * 2010-03-29 2011-10-20 Sony Corp 命令フェッチ装置、プロセッサ、および、プログラムカウンタ加算制御方法
FR2969787B1 (fr) * 2010-12-24 2013-01-18 Morpho Protection des applets
WO2012103367A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest to native block address mappings and management of native code storage
WO2012103373A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Variable caching structure for managing physical storage
WO2012103359A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
WO2012103253A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Multilevel conversion table cache for translating guest instructions to native instructions
WO2012103245A2 (en) 2011-01-27 2012-08-02 Soft Machines Inc. Guest instruction block with near branching and far branching sequence construction to native instruction block
EP2668565B1 (en) 2011-01-27 2019-11-06 Intel Corporation Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor
WO2013132767A1 (ja) 2012-03-09 2013-09-12 パナソニック株式会社 プロセッサ、マルチプロセッサシステム、コンパイラ、ソフトウェアシステム、メモリ制御システムおよびコンピュータシステム
EP2972798B1 (en) 2013-03-15 2020-06-17 Intel Corporation Method and apparatus for guest return address stack emulation supporting speculation
WO2014151652A1 (en) 2013-03-15 2014-09-25 Soft Machines Inc Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor
US20140281398A1 (en) * 2013-03-16 2014-09-18 William C. Rash Instruction emulation processors, methods, and systems
GB2514618B (en) * 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems
CN105373414B (zh) * 2014-08-26 2018-11-20 龙芯中科技术有限公司 支持MIPS平台的Java虚拟机实现方法及装置
GB2553102B (en) * 2016-08-19 2020-05-20 Advanced Risc Mach Ltd A memory unit and method of operation of a memory unit to handle operation requests
US10802854B2 (en) 2019-08-30 2020-10-13 Alibaba Group Holding Limited Method and apparatus for interpreting bytecode instruction stream
CN110704108B (zh) * 2019-08-30 2020-08-14 阿里巴巴集团控股有限公司 解释执行字节码指令流的方法及装置

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3955180A (en) * 1974-01-02 1976-05-04 Honeywell Information Systems Inc. Table driven emulation system
CA1271561A (en) * 1986-07-02 1990-07-10 Jeffry M. Bram Instruction decoding microengines
US5432795A (en) * 1991-03-07 1995-07-11 Digital Equipment Corporation System for reporting errors of a translated program and using a boundry instruction bitmap to determine the corresponding instruction address in a source program
GB2263985B (en) * 1992-02-06 1995-06-14 Intel Corp Two stage window multiplexors for deriving variable length instructions from a stream of instructions
US5367685A (en) * 1992-12-22 1994-11-22 Firstperson, Inc. Method and apparatus for resolving data references in generated code
US5781750A (en) * 1994-01-11 1998-07-14 Exponential Technology, Inc. Dual-instruction-set architecture CPU with hidden software emulation mode
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
US5598546A (en) * 1994-08-31 1997-01-28 Exponential Technology, Inc. Dual-architecture super-scalar pipeline
US5640526A (en) * 1994-12-21 1997-06-17 International Business Machines Corporation Superscaler instruction pipeline having boundary indentification logic for variable length instructions
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
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
US5802373A (en) * 1996-01-29 1998-09-01 Digital Equipment Corporation Method for providing a pipeline interpreter for a variable length instruction set
US5805895A (en) * 1996-06-09 1998-09-08 Motorola, Inc. Method and apparatus for code translation optimization
US5909567A (en) * 1997-02-28 1999-06-01 Advanced Micro Devices, Inc. Apparatus and method for native mode processing in a RISC-based CISC processor
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
US5953520A (en) * 1997-09-22 1999-09-14 International Business Machines Corporation Address translation buffer for data processing system emulation mode
EP1359501A3 (en) * 1997-10-02 2007-11-21 Koninklijke Philips Electronics N.V. A processing device for executing virtual machine instructions
CN1279782A (zh) * 1997-11-20 2001-01-10 关一 计算机系统
US6012138A (en) * 1997-12-19 2000-01-04 Lsi Logic Corporation Dynamically variable length CPU pipeline for efficiently executing two instruction sets
US6249861B1 (en) * 1998-12-03 2001-06-19 Sun Microsystems, Inc. Instruction fetch unit aligner for a non-power of two size VLIW instruction
US6332215B1 (en) * 1998-12-08 2001-12-18 Nazomi Communications, Inc. Java virtual machine hardware for RISC and CISC processors

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9703562B2 (en) 2013-03-16 2017-07-11 Intel Corporation Instruction emulation processors, methods, and systems

Also Published As

Publication number Publication date
JP2004522215A (ja) 2004-07-22
US20020083302A1 (en) 2002-06-27
RU2003112679A (ru) 2004-11-27
GB2367651B (en) 2004-12-29
IL154956A0 (en) 2003-10-31
GB0024396D0 (en) 2000-11-22
WO2002029507A2 (en) 2002-04-11
WO2002029507A3 (en) 2003-05-22
GB2367651A (en) 2002-04-10
CN1484787A (zh) 2004-03-24
EP1330691A2 (en) 2003-07-30

Similar Documents

Publication Publication Date Title
KR100890243B1 (ko) 변환된 명령어의 재시작
KR100890244B1 (ko) 레지스터에의 스택 오퍼랜드의 저장
JP4938187B2 (ja) ネイティブおよび非ネイティブの命令集合間相互呼び出し
KR20030040515A (ko) 프로세서 파이프라인 내에서의 하드웨어 명령어 변환
EP0950216B1 (en) A processing device for executing virtual machine instructions
EP1157323A2 (en) Java virtual machine hardware for risc and cisc processors
US7356673B2 (en) System and method including distributed instruction buffers for storing frequently executed instructions in predecoded form
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

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid