KR100890244B1 - 레지스터에의 스택 오퍼랜드의 저장 - Google Patents

레지스터에의 스택 오퍼랜드의 저장 Download PDF

Info

Publication number
KR100890244B1
KR100890244B1 KR1020037004688A KR20037004688A KR100890244B1 KR 100890244 B1 KR100890244 B1 KR 100890244B1 KR 1020037004688 A KR1020037004688 A KR 1020037004688A KR 20037004688 A KR20037004688 A KR 20037004688A KR 100890244 B1 KR100890244 B1 KR 100890244B1
Authority
KR
South Korea
Prior art keywords
instruction
stack
register
instructions
operand
Prior art date
Application number
KR1020037004688A
Other languages
English (en)
Other versions
KR20030036876A (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 KR20030036876A publication Critical patent/KR20030036876A/ko
Application granted granted Critical
Publication of KR100890244B1 publication Critical patent/KR100890244B1/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
    • 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)

Abstract

데이터 처리장치(102)는, 레지스터로 이루어진 뱅크(106)를 갖는 프로세서 코어(104)를 구비한다. 이 레지스터의 뱅크(106)는, 스택 오퍼랜드를 기억하는데 사용된 레지스터로 이루어진 세트를 구비한다. 스택 오퍼랜드를 지정하는 제 2 명령어 세트로부터의 명령어는, 명령어 변환기(108)에 의해 레지스터 오퍼랜드를 지정하는 제 1 명령어 세트의 명령어(또는 명령어들에 대응하는 제어신호)로 변환된다. 그 후, 이 변환된 명령어들은, 프로세서 코어(104)에 의해 실행된다. 그 명령어 변환기(108)는, 스택 내에 스택 오퍼랜드에 대응하는 레지스터를 제어하는 다수의 매핑상태를 갖는다. 레지스터의 세트에 추가되거나 이 세트로부터 제거된 스택 오퍼랜드에 따라 매핑상태간의 변화를 실행한다.
Figure R1020037004688
데이터 처리장치, 프로세서, 스택 오퍼랜드, 레지스터 오퍼랜드, 매핑 상태

Description

레지스터에의 스택 오퍼랜드의 저장{STORING STACK OPERANDS IN REGISTERS}
본 발명은 데이터 처리 시스템 분야에 관한 것이다. 특히, 본 발명은, 레지스터 뱅크에 의해 제 2 명령어 세트의 명령어를 제 1 명령어 세트의 명령어로 변환 가능하도록 동작하는 명령어 변환기(instruction translator)와 함께 사용되는 제 1 명령어 세트의 명령어를 실행하는 프로세서 코어를 갖는 데이터 처리 시스템에 관한 것이다.
다중 명령어 세트를 지원하는 데이터 처리 시스템이 제공된 것이 공지되어 있다. 이러한 시스템의 일례로는, 영국, 캠브리지의 ARM 사(社)에서 제조한 Thumb(썸) 인에이블형 프로세서가 있고, 이 프로세서는 16-비트 Thumb 명령어와 32-비트 ARM 명령어 모두를 실행할 수도 있다. 이 Thumb 명령어와 ARM 명령어는 모두, 명령어의 범위 내에서 레지스터 필드에 의해 지정된 프로세서 코어의 레지스터 내에 저장된 오퍼랜드에 관한 (수학적인 조작, 로딩, 저장 등과 같은) 동작을 실행한다. 컴파일러를 개발하는데 상당한 노력을 하고 있으므로, 프로세서 코어의 레지스터 자원을 효율적으로 사용하여 빨리 실행하는 명령어 스트림을 생성할 수 있다.
다른 종류의 명령어 세트들은, 이 명령어 세트들을 동작시키는 오퍼랜드를 저장 및 조작하는 스택 방법을 사용하는 명령어 세트들이 있다. 이와 같은 시스템내의 스택에는, 특정 순서로 상기 스택 내에 배치된 후 그 스택으로부터 역순으로 제거되는 오퍼랜드 값의 시퀀스를 저장하여도 된다. 그래서, 상기 스택 내에 배치되는 최종 오퍼랜드는, 일반적으로 상기 스택으로부터 제거되는 첫 번째 오퍼랜드일 것이다. 스택 기반 프로세서는, 스택 내의 현재 "상부(top)"위치를 나타내는 스택 포인터와 관련하여 스택 오퍼랜드를 기록 및 스택 오퍼랜드를 판독하는 기억소자의 블록을 제공한다. 이때의 스택 포인터는, 스택 메모리 내의 기준점을 나타낸 것으로, 이 기준점은 스택 내에 저장하려고 하는 최근의 스택 오퍼랜드이고, 이것으로부터 상기 스택으로의 다른 액세스가 참조된다. 또한, 컴파일러를 생성하는데 상당한 노력을 기울이고 있으므로, 상기와 같은 스택 기반 프로세서 시스템 내의 스택 하드웨어 자원을 효율적으로 사용할 수 있다.
스택 기반 명령어 세트의 특정 예로는, 선(Sun) 마이크로시스템스사가 규정한 것과 같은 Java(자바) 가상 기계 명령어 세트가 있다. Java 프로그래밍 언어는, 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, 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.
본 발명의 일 국면은,
복수의 레지스터를 포함하는 레지스터 뱅크를 갖고, 상기 레지스터 내에 보유된 레지스터 오퍼랜드에 대하여 제 1 명령어 세트의 명령어 내에 지정된 대로 연산을 실행하도록 동작가능한 프로세서 코어와,
하나의 스택에 보유된 스택 오퍼랜드에 관해 실행되는 연산을 지정하는 제 2 명령어 세트의 명령어를 상기 제 1 명령어 세트의 명령어에 대응한 변환기 출력신호로 변환하도록 동작가능한 명령어 변환기를 구비하고,
상기 명령어 변환기가, 상기 스택의 일부로부터 스택 오퍼랜드를 보유하기 위해 상기 레지스터 뱅크 내에 레지스터 세트를 할당하도록 동작가능하고,
상기 명령어 변환기가, 상기 레지스터 세트 내에 서로 다른 레지스터가 상기 스택의 상기 일부 내의 서로 다른 위치로부터 각각의 스택 오퍼랜드를 보유하는 복수의 매핑 상태를 갖고, 상기 명령어 변환기가, 상기 레지스터 세트 내에 보유된 스택 오퍼랜드를 추가 또는 제거하는 동작에 따라서 매핑 상태간에 변화하도록 동작하는 것이 가능하고, 상기 제 2 명령어 세트로부터의 명령어를 상기 제 1 명령어 세트로부터의 명령어로 변환하기 위한 복수의 명령어 템플릿을 사용하고,
하나 이상의 스택 오퍼랜드를 구비한 상기 제 2 명령어 세트로부터의 명령어는, 상기 명령어 변환기의 현재 채택된 매핑 상태에 의존하여 상기 스택 오퍼랜드에 대해 레지스터 오퍼랜드를 매핑한 상기 제 1 명령어 세트의 하나 이상의 명령어를 포함한 명령어 템플릿을 갖는 데이터 처리장치를 제공한다.
본 발명은, 제 2 스택 기반 명령어 세트의 명령어를 프로세서 코어의 실행을 위한 제 1 레지스터 기반 명령어 세트의 명령어로 변환하는 실행과정을 제공한다. 본 발명은, 레지스터 뱅크 내에 레지스터 세트를 제공하여 상기 스택의 일부로부터 스택 오퍼랜드를 보유한다. 이것은, 프로세서 코어 내의 스택 오퍼랜드를 캐시하여 실행 속도를 내는데 효과적이다. 또한, 스택 오퍼랜드에 할당된 상기 레지스터를 더욱 효율적으로 사용하기 위해서, 상기 명령어 변환기는, 서로 다른 레지스터가 상기 캐시된 스택의 일부 내에 서로 다른 위치로부터 각각의 스택 오퍼랜드를 보유하는 복수의 서로 다른 매핑 상태를 갖는다. 이러한 매핑 상태는, 상기 스택을 위해 사용된 레지스터 세트 내에 보유된 스택 오퍼랜드를 추가 또는 제거하는 동작에 따라 변화되므로, 하나의 스택 내의 스택 포인터의 기능과 유사한 기능을 제공한다. 이러한 방법에 의해 필요로 하는 처리 오버헤드를 감소시켜 레지스터 기반 프로세서의 레지스터 내에 스택형 기억을 제공한다.
본 발명의 바람직한 실시예에서, 상기 명령어 변환기는, 상기 레지스터 세트내의 레지스터간에 스택 오퍼랜드를 이동하지 않고 상기 레지스터 세트로부터 스택 오퍼랜드를 추가 또는 제거하도록 매핑 상태를 제공한다.
이러한 바람직한 특징은, 상기 매핑 상태를 사용하여 일단 스택 오퍼랜드를 그 레지스터 내에 저장하였으면 레지스터들간의 어떠한 스택 오퍼랜드도 이동할 필요가 없고, 또한 탐색시에 일어나는 중요한 처리 오버헤드를 피하여 상기 스택 내에 특정 위치를 갖는 스택 오퍼랜드를 소정 레지스터 내에서 항상 발견하는 시스템을 제공한다는 것이다.
상기 레지스터 세트가 상기 스택 내의 임의의 위치로부터 스택 오퍼랜드를 보유할 수도 있다는 것을 알 수 있지만, 상기 레지스터 세트가 스택 오퍼랜드의 상부를 구비한 스택의 상부를 기억하는 것이 매우 바람직하다. 스택 기반 처리 시스템은, 상기 스택으로 최근에 저장되었던 스택 오퍼랜드만을 아주 자주 액세스함으로써, 이들 스택 오퍼랜드를 빠르게 액세스하는 상기 레지스터들 내부에 유지하는 것이 매우 바람직하다. 또한, 상기 스택 오퍼랜드의 상부를 상기 레지스터 내에 보유시키려면, 스택 오퍼랜드가 상기 스택으로 푸시되거나 상기 스택으로부터 갑자기 나오는(pop) 것처럼 상기 스택 오퍼랜드의 상부가 자주 변화하기 때문에 상기 명령어 변환기가 서로 다른 매핑 상태 사이에서 이동 가능하게 하는 것이 아주 바람직하다.
상기 레지스터 내에 보유되지 않은 스택의 일부를 여러 가지 서로 다른 하드웨어 장치로 구성할 수도 있지만, 본 발명의 바람직한 실시예에서는, 상기 스택이 스택 오퍼랜드를 보유하는 복수의 어드레스 가능한 메모리 위치를 구비한다.
어드레스 가능한 메모리는, 이러한 어드레스 가능한 메모리 내의 데이터로의 고속 액세스가 가능하게 하는 복잡한 캐시 메모리들과 같은 메카니즘을 갖는 처리 시스템 내에서 자주 발견된다.
스택 오퍼랜드를 기억하는데 사용되는 상기 프로세서 코어의 레지스터는, 스택 기반 처리 시스템에서 발견되는, 상기 제 2 명령어 세트로부터 제 1 명령어 세트로의 명령어 변환 관리와, 변수 포인터 또는 일정 풀(pool) 포인터와 같은 다른 제어값들의 에뮬레이션 등의 기능을 위한 다른 레지스터를 제공할 필요성에 의해 한정된다는 것을 알 수 있을 것이다. 이에 따라, 스택 오퍼랜드 기억을 위해 제공된 레지스터 세트로부터 오버플로우하는 스택 오퍼랜드는, 상기 어드레스 가능한 메모리에 보유되어도 된다.
다른 방법으로, 여러 가지 고속 레지스터 기반 처리 시스템은, 레지스터 내에 보유된 데이터 값에 관한 데이터 처리 조작만을 제공하도록 구성되어, 비교적 긴 메모리 액세스 대기시간 등으로 인해 일어날 수 있는 문제점을 제거할 수 있다. 이에 따라, 본 발명은, 사용하기 전에 레지스터 세트 내에 스택 오퍼랜드를 항상 로딩하는 것을 제공한다.
상기 명령어 변환기는, 제 2 명령어 세트와 제 1 명령어 세트 사이에서 변환하는 명령어 템플릿을 편리하게 사용하도록 구성되어 있다. 이러한 명령어 템플릿은, 제 2 명령어 세트의 명령어와 일반적으로 상기 제 1 명령어 세트의 수개의 명령어 사이에서 달성될 수 있는 매핑과 유사한 바람직한 유동율(degree of flexibility)을 제공한다.
또한, 상기 명령어 변환기는, 매우 다양한 형태로 할 수 있을 것이다. 특히, 상기 명령어 변환기는, 제 2 명령어 세트를 변환 또는 컴파일하기 위한 특수목적용 하드웨어로서 또는, 프로세서 코어를 제어하여 유사한 변환 또는 컴파일 기능을 실행하는 소프트웨어로서 제공될 수 있다. 또한, 혼합 방법을 유용하게 이용하여도 된다. 소프트웨어 해석기(interpreter)일 경우에는, 상기 변환기 출력신호는 상기 소프트웨어 해석기에 의해 생성된 제 1 명령어 세트의 명령어를 변환시켜도 된다.
특히, 하드웨어 변환기는, 상기 제 2 명령어 세트 내에서 간단하게 자주 일어나는 명령어의 고속 변환을 달성하도록 구성되는 반면에, 소프트웨어 변환은, 이러한 변환을 제공하는 하드웨어 오버헤드가 실용적이거나 효율적이지 못한 제 2 명령어 세트의 복잡하거나 드물게 일어나는 명령어에 사용되어도 된다.
상기 명령어 변환기의 매핑상태를 제어하는 더 바람직한 방법은, 레지스터 세트 내에 보유된 스택 오퍼랜드의 수를 나타내는 복수의 상태 비트와, 레지스터가 스택 오퍼랜드의 상부를 보유하고 있는 것을 나타내는 복수의 상태 비트를 제공하는데 있다.
제 2 명령어 세트가 여러 가지 서로 다른 형태를 취할 수 있다는 것을 알지만, 본 발명은, 제 2 명령어가 Java 가상 기계 명령어 세트인 실시예에서 특히 유용하다.
본 발명의 다른 국면은,
복수의 레지스터를 포함하는 레지스터 뱅크를 갖고, 제 1 명령어 세트의 명령어 내에 지정된대로 상기 레지스터 내에 보유된 레지스터 오퍼랜드에 대한 연산을 실행 가능하도록 동작하는 프로세서 코어를 사용한 데이터 처리방법에 있어서,
하나의 스택에 보유된 스택 오퍼랜드에 관해 실행되는 연산을 지정하는 제 2 명령어 세트의 명령어를 상기 제 1 명령어 세트의 명령어에 대응한 변환기 출력신호로 변환하는 단계와,
상기 레지스터 뱅크 내에 레지스터 세트를 할당하여 상기 스택의 일부로부터 스택 오퍼랜드를 보유하는 단계와,
상기 레지스터 세트 내의 서로 다른 레지스터가 상기 스택의 상기 일부 내에 서로 다른 위치로부터 각각의 스택 오퍼랜드를 보유하는 복수의 매핑 상태 중 하나를 채택하는 단계와,
상기 레지스터 세트 내에 보유된 스택 오퍼랜드를 추가 또는 제거하는 동작에 따라 매핑 상태 사이에서 변화시키는 단계를 포함한 데이터처리방법을 제공한다.
또한, 본 발명은, 상술한 기술에 따라 범용 컴퓨터를 제어하는 컴퓨터 프로그램을 저장하는 컴퓨터 프로그램 제품을 제공한다. 이러한 컴퓨터 프로그램 제품은, 플로피 디스크, 콤팩트 디스크 또는 컴퓨터 네트워크로부터 다운받은 컴퓨터 파일 등의 다양한 형태로 할 수 있다.
이하, 본 발명의 실시예들을 다음의 첨부도면들을 참조하여 예들에 의해서만 설명하겠다:
도 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이다.
레지스터 세트는, 비어있고, 부분적으로 스택 오퍼랜드로 충전되거나 완전히 스택 오퍼랜드로 충전되어도 된다. 현재 스택 오퍼랜드의 상부를 유지하는 특정 레지스터는, 레지스터 세트 내의 레지스터 중 어느 것이어도 된다. 따라서, 모든 레지스터가, 비어있고, 레지스터 세트 내에 보유되고 스택 오퍼랜드의 상부를 유지하는 서로 다른 레지스터와 함께 보유되는 각각의 서로 다른 스택 오퍼랜드의 수에 각각 대응하는 4개의 상태로 이루어진 4개의 그룹일 경우, 상기 명령어 변환기는, 하나의 상태에 대응하는 17개의 서로 다른 매핑 상태 중 어느 하나이어도 되는 것을 알 수 있을 것이다. 표 1은, 상기 명령어 변환기(108)의 상태 매핑으로 생긴 17개의 서로 다른 상태를 나타낸 것이다. 스택 오퍼랜드 기억을 위해 할당된 서로 다른 레지스터의 수에 의해, 또는 레지스터 내에 보유된 데이터 값을 특정 프로세서 코어가 처리할 수 있는 방법을 갖는 제약 때문에, 상기 매핑 상태는, 특정 구현에 상당히 의존할 수 있고, 표 1은 일 특정 구현이 예로서 주어진 것뿐이라는 것을 알 수 있을 것이다.
Figure 112003011687369-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 112003011687369-pct00002
표 2로부터 알 수 있듯이, 스택 오퍼랜드를 저장하는 레지스터 세트 내에 로딩된 신규 스택 오퍼랜드는, 새로운 상부의 스택 오퍼랜드를 형성할 것이고, 이것은, 초기 상태에 따른 레지스터 세트 내의 레지스터 중 특정한 하나로 로딩될 것이다.
마찬가지로, 표 3은, 특정 Java 바이트코드의 요구 결핍 값이 Java 바이트코드가 실행되기 전에 소정 초기 상태가 필요한 것을 나타내는 경우, 초기 상태, 요구 결핍 값, 최종 상태 및 상기 초기 상태와 상기 최종 상태 사이에서 이동하는 레지스터 세트 내의 레지스터를 비우기 위한 연관 ARM 명령어와의 관계를 나타낸 것이다. STR 명령어에 의해 상기 어드레스 가능한 메모리에 벗어나서 저장된 특정 레지스터 값은, 그 레지스터의 현재 상부의 스택 오퍼랜드에 따라 변할 것이다.
Figure 112003011687369-pct00003
상술한 예의 시스템에서, 요구 충만 및 요구 결핍 조건은, 요구 충만 또는 요구 결핍 조건 중 하나만이 상기 명령어 변환기가 변환하려고 하는 특정 Java 바이트코드에 대해 임의의 소정 시간에 참이라고 말할 수 있는, 서로 배타적이다는 것을 알 수 있을 것이다. 하드웨어 명령어 변환기(108)에 의해 지원하도록 선택된 명령어와 함께 상기 명령어 변환기(108)에 의해 사용된 명령어 템플릿은, 이 상호 배타적인 요구사항을 만족하도록 선택된다. 이 요구 사항이 적합하지 않은 경우, 실행 결과가 요구된 대로 레지스터 내에 보유되도록 Java 바이트코드를 나타낸 명령어의 실행 후에, 충분한 빈 레지스터를 사용 가능하게 하지 못하는 레지스터 세트 내에 존재하는 입력 스택 오퍼랜드의 수를 특정 Java 바이트코드가 필요로 하는 상황이 일어날 수 있다.
소정 Java 바이트코드는, 소비된 스택 오퍼랜드의 수와 그 Java 바이트코드의 실행에 의해 생성된 스택 오퍼랜드의 수간의 균형을 나타내는 전반적인 네트(net) 스택 동작을 갖는다는 것을 알 수 있을 것이다. 소비된 스택 오퍼랜드의 수가 실행하기에 앞서 요구사항이고 생성된 스택 오퍼랜드의 수가 실행 후에 요구사항이므로, 각 Java 바이트코드와 연관된 요구 충만 값과 요구 결핍 값은, 심지어 상기 전반적인 네트 동작이 그 자체로서 만족되어도 그 바이트코드의 실행에 앞서 만족되어야 한다. 표 4는, 초기 상태, 전반적인 스택 동작, 최종 상태 및 레지스터 용도와 상부의 스택 오퍼랜드(TOS)의 상대적인 위치의 변화간의 관계를 나타낸 것이다. 표 2 또는 표 4에 나타낸 상태 천이 중 하나 이상이 표 4에 나타낸 상태 천이를 실행하기 전에 실행하여, Java 바이트코드의 요구 충만값 및 요구 부족값에 따른 소정 Java 바이트코드에 대한 사전 조건을 확보할 필요가 있어도 된다.
Figure 112003011687369-pct00004
Figure 112003011687369-pct00005
표 2, 표 3 및 표 4에 나타낸 상태와 조건간의 관계는, 단일 상태 천이 테이블 또는 상태도 내에서 조합될 수 있지만, 그들은 명료함을 위해 위에서는 따로 따로 나타내어져 있다는 것을 알 수 있을 것이다.
서로 다른 상태, 조건 및 네트 동작(action)간의 관계를 사용하여, 명령어 변환기(108)의 동작의 이러한 국면을 제어하는 (유한 상태 기계의 형태로) 하드웨어 상태 기계를 정의하여도 된다. 또한, 이들 관계는, 소프트웨어 또는 하드웨어 및 소프트웨어의 조합에 의해 모델링될 수 있다.
이하, 부분집합의 각 Java 바이트코드에 대해 상기 연관 요구 충만, 요구 부족 및 표 2, 표 3 및 표 4와 함께 사용되어도 되는 그 바이트코드에 대한 스택 동작값을 나타내는 것이 가능한 Java 바이트코드의 부분집합의 일례는 다음과 같다.
Figure 112003011687369-pct00006
Figure 112003011687369-pct00007
또한, 상기에서 설명된 각 Java 바이트코드 명령어에 대한 예시 명령어 템플릿은 다음과 같다. 여기서 나타낸 명령어는 ARM 명령어로, 이것은 상기 각 Java 바이트코드의 요구된 작용을 실행한다. 레지스터 필드 "TOS-3", "TOS-2", "TOS-1", "TOS", "TOS+1" 및 "TOS+2"는, 현재 채택된 매핑 상태에 따라 표 1로부터 판독될 때 적절한 레지스터명(register specifier)으로 바꿔도 된다. "TOS+n" 표시는, 상부의 스택 오퍼랜드를 저장하고, 상기 레지스터의 세트 내에 첫 번째 레지스터를 둘러싸는(wrap) 포인트에서 상기 레지스터의 세트의 끝에 도달할 때까지 레지스터 값의 증가를 카운트하는 레지스터로부터 시작하는 상부 스택 오퍼랜드를 현재 저장한 레지스터 상의 N번째 레지스터를 나타낸다.
Figure 112003011687369-pct00008
이하, 상술한 기술에 따라 하드웨어 변환부(108)에 의해 실행된 단일 Java 바이트코드의 실행 시퀀스의 예를 설명한다. 이 실행 시퀀스는, 실행되는 명령어에 의존한 상태의 시퀀스를 통해 진행되는 초기 상태의 면에서 도시되어 있고, 각 상태 천이에 관해 상기 동작을 수행한 결과로서 ARM 명령어의 시퀀스를 생성하고, 전체 과정은, Java 바이트코드를 ARM 명령어의 시퀀스로 변환하는 효과가 있다.
Figure 112003011687369-pct00009
Figure 112003011687369-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 112003011687369-pct00011
Figure 112003011687369-pct00012
Figure 112003011687369-pct00013
Figure 112003011687369-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 명령어 세트로부터의 명령어로 변환하기 위한 복수의 명령어 템플릿을 사용하고,
    하나 이상의 스택 오퍼랜드를 구비한 상기 제 2 명령어 세트로부터의 명령어는, 상기 명령어 변환기의 현재 채택된 매핑 상태에 의존하여 상기 스택 오퍼랜드에 대해 레지스터 오퍼랜드를 매핑한 상기 제 1 명령어 세트의 하나 이상의 명령어를 포함한 명령어 템플릿을 갖는 것을 특징으로 하는 데이터 처리장치.
  2. 제 1 항에 있어서,
    상기 변환기 출력신호는, 상기 제 1 명령어 세트의 명령어를 형성하는 신호 를 포함한 것을 특징으로 하는 데이터 처리장치.
  3. 제 1 항 또는 제 2 항에 있어서,
    상기 변환기 출력신호는, 상기 프로세서 코어의 동작을 제어하고, 상기 제 1 명령어 세트의 명령어를 디코딩시에 생성된 제어신호와 일치하는 제어신호를 포함한 것을 특징으로 하는 데이터 처리장치.
  4. 제 1 항 또는 제 2 항에 있어서,
    상기 변환기 출력신호는, 상기 프로세서 코어의 동작을 제어하고, 상기 제 1 명령어 세트의 명령어를 디코딩시에 생성된 제어신호에 의해 지정되지 않은 파라미터를 지정하는 제어신호를 포함한 것을 특징으로 하는 데이터 처리장치.
  5. 제 1 항 또는 제 2 항에 있어서,
    상기 명령어 변환기는, 상기 레지스터 세트내의 레지스터간에 스택 오퍼랜드를 이동하지 않고 상기 레지스터 세트에 스택 오퍼랜드를 추가 또는 상기 레지스터 세트로부터 스택 오퍼랜드를 제거하도록 매핑 상태를 제공하는 것을 특징으로 하는 데이터 처리장치.
  6. 제 1 항 또는 제 2 항에 있어서,
    상기 레지스터 세트는, 상기 스택내의 상부위치로부터의 상부 스택 오퍼랜드를 포함한 상기 스택의 상부로부터의 스택 오퍼랜드를 보유하도록 동작가능한 것을 특징으로 하는 데이터 처리장치.
  7. 제 1 항 또는 제 2 항에 있어서,
    상기 스택은, 스택 오퍼랜드를 보유하는 복수의 어드레스 가능한 복수의 메모리 위치를 더 포함한 것을 특징으로 하는 데이터 처리장치.
  8. 제 7 항에 있어서,
    상기 스택 오퍼랜드는, 상기 레지스터 세트로부터 상기 복수의 어드레스 가능한 메모리 위치로 오버플로우하는 것을 특징으로 하는 데이터 처리장치.
  9. 제 7 항에 있어서,
    상기 복수의 어드레스 가능한 메모리 위치 내에 보유된 스택 오퍼랜드는, 사용하기 전에 상기 레지스터 세트 내에 로딩되는 것을 특징으로 하는 데이터 처리장치.
  10. 삭제
  11. 삭제
  12. 제 1 항 또는 제 2 항에 있어서,
    상기 명령어 변환기는,
    하드웨어 변환로직부와,
    컴퓨터 장치를 제어하는 명령어 해석 프로그램 코드와,
    컴퓨터 장치를 제어하는 명령어 컴파일링 프로그램 코드와,
    하드웨어 컴파일링 로직부를, 하나 이상 구비한 것을 특징으로 하는 데이터 처리장치.
  13. 제 1 항 또는 제 2 항에 있어서,
    상기 명령어 변환기는, 상기 레지스터 세트 내에 보유된 다수의 스택 오퍼랜드를 나타내는 제 1의 복수의 상태 비트를 구비한 것을 특징으로 하는 데이터 처리장치.
  14. 제 13 항에 있어서,
    상기 명령어 변환기는, 상기 레지스터 세트 내의 레지스터가 상기 상부의 스택 오퍼랜드를 보유하는 것을 나타내는 제 2의 복수의 상태 비트를 구비한 것을 특징으로 하는 데이터 처리장치.
  15. 제 1 항 또는 제 2 항에 있어서,
    상기 제 2 명령어 세트는, Java 가상 기계 명령어 세트인 것을 특징으로 하는 데이터 처리장치.
  16. 복수의 레지스터를 포함하는 레지스터 뱅크를 갖고, 상기 레지스터 내에 보유된 레지스터 오퍼랜드에 대해 제 1 명령어 세트의 명령어 내에 지정된 대로 연산을 실행하도록 동작가능한 프로세서 코어를 사용한 데이터 처리방법에 있어서,
    복수의 명령어 템플릿을 사용하여 하나의 스택에 보유된 스택 오퍼랜드에 관해 실행되는 연산을 지정하는 제 2 명령어 세트의 명령어를 상기 제 1 명령어 세트의 명령어에 대응한 변환기 출력신호로 변환하는 단계와,
    상기 스택의 일부로부터 스택 오퍼랜드를 보유하기 위해 상기 레지스터 뱅크 내에 레지스터 세트를 할당하는 단계와,
    상기 레지스터 세트 내의 서로 다른 레지스터가 상기 스택의 상기 일부 내에 서로 다른 위치로부터 각각의 스택 오퍼랜드를 보유하는 복수의 매핑 상태 중 하나를 채택하는 단계로서, 하나 이상의 스택 오퍼랜드를 구비한 상기 제 2 명령어 세트로부터의 명령어는, 명령어 변환기의 현재 채택된 매핑 상태에 의존하여 상기 스택 오퍼랜드에 대하여 레지스터 오퍼랜드를 매핑한 상기 제 1명령어 세트의 하나 이상의 명령어를 포함한 명령어 템플릿을 갖는 단계와,
    상기 레지스터 세트 내에 보유된 스택 오퍼랜드를 추가 또는 제거하는 동작에 따라서 상기 복수의 매핑 상태 사이에서 변화시키는 단계를 포함한 것을 특징으로 하는 데이터 처리방법.
  17. 복수의 레지스터를 포함하는 레지스터 뱅크를 갖고, 상기 레지스터 내에 보유된 레지스터 오퍼랜드에 대하여 제 1 명령어 세트의 명령어 내에 지정된 대로 연산을 실행하도록 동작가능한 프로세서 코어를 사용한 데이터 처리를 제어하는 컴퓨터 프로그램이 저장된 컴퓨터 판독가능한 기록매체에 있어서,
    복수의 명령어 템플릿을 사용하여 하나의 스택에 보유된 스택 오퍼랜드에 관해 실행되는 연산을 지정하는 제 2 명령어 세트의 명령어를 상기 제 1 명령어 세트의 명령어에 대응한 변환기 출력신호로 변환하는 변환 코드와,
    상기 스택의 일부로부터 스택 오퍼랜드를 보유하기 위해 상기 레지스터 뱅크 내에 레지스터 세트를 할당하는 레지스터 할당 코드와,
    상기 레지스터 세트 내의 서로 다른 레지스터가 상기 스택의 상기 일부 내에 서로 다른 위치로부터 각각의 스택 오퍼랜드를 보유하는 복수의 매핑 상태 중 하나를 채택하는 매핑 상태 채택코드로서, 하나 이상의 스택 오퍼랜드를 구비한 상기 제 2 명령어 세트로부터의 명령어는, 명령어 변환기의 현재 채택된 매핑 상태에 의존하여 상기 스택 오퍼랜드에 대하여 레지스터 오퍼랜드를 매핑한 상기 제 1 명령어 세트의 하나 이상의 명령어를 포함한 명령어 템플릿을 갖는 매핑 상태 채택 코드와,
    상기 레지스터 세트 내에 보유된 스택 오퍼랜드를 추가 또는 제거하는 동작에 따라서 상기 복수의 매핑 상태 사이에서 변화하는 매핑 상태 변화코드를 포함하는 컴퓨터 프로그램이 저장된 컴퓨터 판독가능한 기록매체.
KR1020037004688A 2000-10-05 2001-06-21 레지스터에의 스택 오퍼랜드의 저장 KR100890244B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB0024404.6 2000-10-05
GB0024404A GB2367654B (en) 2000-10-05 2000-10-05 Storing stack operands in registers
PCT/GB2001/002776 WO2002029563A1 (en) 2000-10-05 2001-06-21 Storing stack operands in registers

Publications (2)

Publication Number Publication Date
KR20030036876A KR20030036876A (ko) 2003-05-09
KR100890244B1 true KR100890244B1 (ko) 2009-03-24

Family

ID=9900737

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020037004688A KR100890244B1 (ko) 2000-10-05 2001-06-21 레지스터에의 스택 오퍼랜드의 저장

Country Status (12)

Country Link
US (1) US7000094B2 (ko)
EP (1) EP1323036B1 (ko)
JP (1) JP4833499B2 (ko)
KR (1) KR100890244B1 (ko)
CN (1) CN1244051C (ko)
DE (1) DE60131864T2 (ko)
GB (1) GB2367654B (ko)
IL (2) IL153215A0 (ko)
MY (1) MY126879A (ko)
RU (1) RU2271565C2 (ko)
TW (1) TWI236616B (ko)
WO (1) WO2002029563A1 (ko)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0976034B1 (en) * 1996-01-24 2005-10-19 Sun Microsystems, Inc. Method and apparatus for stack caching
US7162612B2 (en) * 2000-08-16 2007-01-09 Ip-First, Llc Mechanism in a microprocessor for executing native instructions directly from memory
TW591405B (en) * 2002-04-19 2004-06-11 Ind Tech Res Inst Non-copy shared stack and register set device and dual language processor structure using the same
JP2004094533A (ja) * 2002-08-30 2004-03-25 Hajime Seki 計算機システム
JP4127495B2 (ja) 2002-09-05 2008-07-30 株式会社ルネサステクノロジ 情報処理装置
WO2005096136A1 (en) * 2004-03-31 2005-10-13 Intel Corporation Stack caching using code sharing
US7424596B2 (en) 2004-03-31 2008-09-09 Intel Corporation Code interpretation using stack state information
KR100597414B1 (ko) 2004-10-21 2006-07-05 삼성전자주식회사 데이터 처리 장치 및 이를 이용한 레지스터 할당 방법
US20070061551A1 (en) * 2005-09-13 2007-03-15 Freescale Semiconductor, Inc. Computer Processor Architecture Comprising Operand Stack and Addressable Registers
WO2007068706A1 (fr) * 2005-12-13 2007-06-21 Gemplus Procede pour securiser l'execution d'un code logiciel en langage intermediaire dans un appareil portatif
US7502029B2 (en) * 2006-01-17 2009-03-10 Silicon Integrated Systems Corp. Instruction folding mechanism, method for performing the same and pixel processing system employing the same
GB2442566B (en) * 2006-10-02 2009-02-11 Transitive Ltd Computer system and method of adapting a computer system to support a register window architecture
GB2474522B (en) * 2009-10-19 2014-09-03 Advanced Risc Mach Ltd Register state saving and restoring
US9128701B2 (en) * 2011-04-07 2015-09-08 Via Technologies, Inc. Generating constant for microinstructions from modified immediate field during instruction translation
CN107832083B (zh) * 2011-04-07 2020-06-12 威盛电子股份有限公司 具有条件指令的微处理器及其处理方法
JP5922353B2 (ja) 2011-08-22 2016-05-24 サイプレス セミコンダクター コーポレーション プロセッサ
CN103135964B (zh) * 2011-12-05 2015-09-23 联想(北京)有限公司 跨指令集调用函数的方法和电子设备
WO2013132767A1 (ja) 2012-03-09 2013-09-12 パナソニック株式会社 プロセッサ、マルチプロセッサシステム、コンパイラ、ソフトウェアシステム、メモリ制御システムおよびコンピュータシステム
GB2514618B (en) * 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems
RU2530285C1 (ru) * 2013-08-09 2014-10-10 Федеральное Государственное Бюджетное Образовательное Учреждение Высшего Профессионального Образования "Саратовский Государственный Университет Имени Н.Г. Чернышевского" Активный аппаратный стек процессора
CN109214169B (zh) * 2017-06-30 2023-12-08 芜湖美的厨卫电器制造有限公司 堆栈溢出检测方法、装置及家用电器
US10620955B2 (en) 2017-09-19 2020-04-14 International Business Machines Corporation Predicting a table of contents pointer value responsive to branching to a subroutine
US10725918B2 (en) 2017-09-19 2020-07-28 International Business Machines Corporation Table of contents cache entry having a pointer for a range of addresses
US10713050B2 (en) 2017-09-19 2020-07-14 International Business Machines Corporation Replacing Table of Contents (TOC)-setting instructions in code with TOC predicting instructions
US11061575B2 (en) 2017-09-19 2021-07-13 International Business Machines Corporation Read-only table of contents register
US10896030B2 (en) * 2017-09-19 2021-01-19 International Business Machines Corporation Code generation relating to providing table of contents pointer values
US10705973B2 (en) 2017-09-19 2020-07-07 International Business Machines Corporation Initializing a data structure for use in predicting table of contents pointer values
US10884929B2 (en) 2017-09-19 2021-01-05 International Business Machines Corporation Set table of contents (TOC) register instruction
US10802854B2 (en) * 2019-08-30 2020-10-13 Alibaba Group Holding Limited Method and apparatus for interpreting bytecode instruction stream
CN110704368B (zh) * 2019-09-25 2020-11-06 支付宝(杭州)信息技术有限公司 基于fpga的安全智能合约处理器的高效运算方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
WO2000034844A2 (en) * 1998-12-08 2000-06-15 Jedi Technologies, Inc. Java virtual machine hardware for risc and cisc processors
KR20010104678A (ko) * 2000-05-15 2001-11-26 가네꼬 히사시 자기저항 효과 센서, 자기저항 효과 센서의 제조 방법,자기저항 검출 시스템 및 자기 저장 시스템

Family Cites Families (42)

* 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
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
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
US5638525A (en) 1995-02-10 1997-06-10 Intel Corporation Processor capable of executing programs that contain RISC and CISC instructions
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
US5790825A (en) * 1995-11-08 1998-08-04 Apple Computer, Inc. Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions
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
DE69713400T2 (de) 1996-01-24 2002-10-31 Sun Microsystems Inc Prozessor mit Bereichsüberprüfung bei Matrixzugriffen
DE69738810D1 (de) 1996-01-24 2008-08-14 Sun Microsystems Inc Befehlsfalten in einem stapelspeicherprozessor
EP0976034B1 (en) * 1996-01-24 2005-10-19 Sun Microsystems, Inc. Method and apparatus for stack caching
EP0976029A2 (en) * 1996-01-24 2000-02-02 Sun Microsystems, Inc. A processor for executing instruction sets received from a network or from a local memory
US6038643A (en) 1996-01-24 2000-03-14 Sun Microsystems, Inc. Stack management unit and method for a processor having a stack
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
US6031992A (en) 1996-07-05 2000-02-29 Transmeta Corporation Combining hardware and software to provide an improved microprocessor
US5926832A (en) 1996-09-26 1999-07-20 Transmeta Corporation Method and apparatus for aliasing memory data in an advanced microprocessor
ATE244417T1 (de) 1996-11-13 2003-07-15 Paran Arik 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
US6009499A (en) 1997-03-31 1999-12-28 Sun Microsystems, Inc Pipelined stack caching circuit
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
US5898850A (en) * 1997-03-31 1999-04-27 International Business Machines Corporation Method and system for executing a non-native mode-sensitive instruction within a computer system
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
US5892966A (en) 1997-06-27 1999-04-06 Sun Microsystems, Inc. Processor complex for executing multimedia functions
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
DE69820027T2 (de) 1997-10-02 2004-07-08 Koninklijke Philips Electronics N.V. Vorrichtung zur ausführung virtueller maschinenbefehle
KR100623403B1 (ko) 1997-10-02 2006-09-13 코닌클리케 필립스 일렉트로닉스 엔.브이. 가상 머신 명령을 처리하기 위한 데이터 처리 장치
US6009509A (en) 1997-10-08 1999-12-28 International Business Machines Corporation Method and system for the temporary designation and utilization of a plurality of physical registers as a stack
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
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

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
WO2000034844A2 (en) * 1998-12-08 2000-06-15 Jedi Technologies, Inc. Java virtual machine hardware for risc and cisc processors
US6332215B1 (en) 1998-12-08 2001-12-18 Nazomi Communications, Inc. Java virtual machine hardware for RISC and CISC processors
KR20010104678A (ko) * 2000-05-15 2001-11-26 가네꼬 히사시 자기저항 효과 센서, 자기저항 효과 센서의 제조 방법,자기저항 검출 시스템 및 자기 저장 시스템

Also Published As

Publication number Publication date
WO2002029563A1 (en) 2002-04-11
GB0024404D0 (en) 2000-11-22
DE60131864D1 (de) 2008-01-24
RU2271565C2 (ru) 2006-03-10
EP1323036B1 (en) 2007-12-12
US20020066004A1 (en) 2002-05-30
GB2367654B (en) 2004-10-27
TWI236616B (en) 2005-07-21
IL153215A0 (en) 2003-07-06
GB2367654A (en) 2002-04-10
MY126879A (en) 2006-10-31
JP2004511044A (ja) 2004-04-08
CN1244051C (zh) 2006-03-01
JP4833499B2 (ja) 2011-12-07
DE60131864T2 (de) 2008-12-11
KR20030036876A (ko) 2003-05-09
CN1440528A (zh) 2003-09-03
US7000094B2 (en) 2006-02-14
EP1323036A1 (en) 2003-07-02
RU2002129004A (ru) 2004-03-10
IL153215A (en) 2008-08-07

Similar Documents

Publication Publication Date Title
KR100890244B1 (ko) 레지스터에의 스택 오퍼랜드의 저장
KR100890243B1 (ko) 변환된 명령어의 재시작
JP4938187B2 (ja) ネイティブおよび非ネイティブの命令集合間相互呼び出し
KR20030040515A (ko) 프로세서 파이프라인 내에서의 하드웨어 명령어 변환
EP0950216B1 (en) A processing device for executing virtual machine instructions
JP3499252B2 (ja) コンパイル装置及びデータ処理装置
US6332215B1 (en) Java virtual machine hardware for RISC and CISC processors
US5889985A (en) Array prefetch apparatus and method
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
EP0101718A1 (en) COMPUTER WITH AUTOMATIC TOPOGRAPHY OF THE MEMORY CONTENT IN REGISTERS.
Säntti et al. Java Co-Processor for Embedded Systems

Legal Events

Date Code Title Description
A201 Request for examination
AMND Amendment
E902 Notification of reason for refusal
AMND Amendment
E801 Decision on dismissal of amendment
E601 Decision to refuse application
AMND Amendment
J201 Request for trial against refusal decision
E902 Notification of reason for refusal
B701 Decision to grant
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