KR100864891B1 - 다중 명령 세트 시스템에서의 미처리된 연산 처리 - Google Patents

다중 명령 세트 시스템에서의 미처리된 연산 처리 Download PDF

Info

Publication number
KR100864891B1
KR100864891B1 KR1020037015480A KR20037015480A KR100864891B1 KR 100864891 B1 KR100864891 B1 KR 100864891B1 KR 1020037015480 A KR1020037015480 A KR 1020037015480A KR 20037015480 A KR20037015480 A KR 20037015480A KR 100864891 B1 KR100864891 B1 KR 100864891B1
Authority
KR
South Korea
Prior art keywords
instruction
unprocessed
floating point
instructions
instruction set
Prior art date
Application number
KR1020037015480A
Other languages
English (en)
Other versions
KR20040005992A (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 KR20040005992A publication Critical patent/KR20040005992A/ko
Application granted granted Critical
Publication of KR100864891B1 publication Critical patent/KR100864891B1/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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, 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/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, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3816Instruction alignment, e.g. cache line crossing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators

Abstract

자바 바이트코드 등의 제 1 명령 세트의 프로그램 명령의 미처리된 연산이 검출된다. 이 미처리된 연산을 직접 처리하기 위한 메카니즘을 불러내는 대신에, 미처리된 연산을 겪은 명령을 에뮬레이션하기 위해 ARM 명령과 같은 제 2 명령 세트로부터의 1개 이상의 명령이 사용된다. 이들 제 2 명령 세트의 명령이 마찬가지로 미처리된 연산을 겪으면, 이 제 2 명령 세트 내부의 미처리된 연산을 처리하는 메카니즘이 불러내져 이 연산을 복구한다. 이와 같은 접근방법은, 네이티브 고정 길이 명령 세트를 갖는 프로세서 코어를 사용하여 해석되는 가변 길이 명령의 미처리된 연산을 처리하는데 매우 적합하다. 특히, 프리페치 중단과 미처리된 부동소수점 연산이 이와 같은 방법으로 간편하게 처리될 수 있다.
Figure R1020037015480
데이터 처리, 미처리 연산, 자바 바이트코드, 에뮬레이션, 부동소수점 연산, 프리페치

Description

다중 명령 세트 시스템에서의 미처리된 연산 처리{UNHANDLED OPERATION HANDLING IN MULTIPLE INSTRUCTION SET SYSTEMS}
본 발명은 데이터 처리 시스템 분야에 관한 것이다. 특히, 본 발명은 다중 명령 세트를 지원하는 시스템 내부에서 미처리된 연산을 처리하는 것에 관한 것이다.
다중 명령 세트를 지원하는 데이터 처리 시스템을 제공하는 것은 공지되어 있다. 이와 같은 시스템의 일례로는, 영국, 캠브리지의 ARM 리미티드에 의해 제조된 썸(Thumb)이 사용가능한 프로세서를 들 수 있다. 썸이 사용가능한 이들 프로세서는 32 비트 ARM 명령과 16 비트 썸 명령 모두의 실행을 지원한다.
데이터 처리 시스템 내부에서는, 프로그램 명령이 데이터 처리 시스템에 의해 직접 처리될 수 없는 때가 있을 수 있다. 따라서, 이와 같은 미처리된 연산을 처리하는 메카니즘을 제공하는 것이 알려져 있다. 이와 같은 상황의 일례로는 프리페치 명령 중단을 들 수 있다. 가상 메모리 시스템에서 명령을 프리페치할 때, 명령 로드가 페이지 경계를 교차할 수 있으며, 가상 메모리 시스템 내부에 아직 적절히 매핑되지 않은 새로운 페이지로 인해 중단이 발생할 수 있다는 것이 알려져 있다. 그후, 정확한 매핑이 수행되어 명령 프리페치가 재발생될 수 있다.
이와 같은 상황의 또 다른 예로는 실행 부동소수점 명령을 들 수 있다. 부동소수점 연산의 실행중에, 데이터 처리 시스템이 직접 처리할 수 없는 상황이 발생할 수도 있다는 것이 알려져 있다. 이것은 특히 IEEE 754 사양서와 호환되는 부동소수점 시스템에 대해 성립한다. 이러한 상황의 예로는, 제로값으로의 나눗셈, NaN을 포함하는 연산, 무한대를 포함하는 연산 또는 비정규화된 수치를 특정한 연산을 들 수 있다.
새로운 명령 세트가 추가될 때, 일어날 수 있는 모든 중단에 대해 적절한 중단 메카니즘이 제대로 동작하도록 보장하기 위해서는 상당한 노력과 개발이 필요하다는 점에서 문제가 존재한다.
미처리된 부동소수점 연산이 발생하였을 때 특별한 문제가 일어난다. 다수의 시스템은 명령 스트림의 조사에 의존하여, 처리되지 않은 부동소수점 연산을 결정한다. 새로운 명령 세트를 사용하여, 이들 시스템은 이 새로운 명령 세트를 제공하기 위해 재기록되어야만 한다. 더구나, 새로운 명령 세트가 이 새로운 명령 세트의 한 개의 명령에 대해 다수의 부동소수점 연산을 발생할 수 있을 때 문제가 발생하게 된다. 이와 같은 경우에는, 한 개의 명령이 1개보다 많은 수의 미처리된 부동소수점 연산을 일으킬 수 있기 때문에, 시스템이 명령 스트림을 조사하여 어떤 부동소수점 연산이 처리되지 않았는지를 판정하는 것이 불가능할 수 있다.
미처리된 부동소수점 연산이 부정확할 때, 즉 부동소수점 연산을 발생하는 명령이 실행되는 시점에는 미처리된 부동소수점 연산이 검출되지 않고, 그 대신에 몇시간 후에 이것이 검출될 때, 추가적인 문제가 일어난다. 이와 같은 상황은 다수의 부동소수점 시스템의 병렬 특성으로 인해 발생한다. 데이터 처리 시스템은 부동소수점 연산을 지정하는 명령과 마주치면 부동소수점 서브시스템에 부동소수점 연산을 발생한다. 부동소수점 연산이 부동소수점 서브시스템에 발생되면, 주 데이터 처리 시스템은 명령 스트림에 있는 추가적인 명령의 실행을 계속 진행한다. 다수의 명령은, 부동소수점 서브시스템이 미처리된 부동소수점 연산을 검출하고 미처리된 연산 조건을 주 데이터 처리 시스템으로 신호를 보내기 전에 실행될 수 있다. 이와 같은 경우에, 미처리된 부동소수점 연산의 원인을 명령 스트림을 조사하여 판정할 수 없게 된다. 이와 같은 경우에는, 부동소수점 시스템이, 미처리된 부동소수점 연산을 식별하는 레지스터, 예를 들면 영국, 캠브리지의 ARM 리미티드에 의해 제조된 벡터 부동소수점 시스템을 포함하는 것이 알려져 있다.
다수의 시스템에서는, 부동소수점 서브시스템이 임의의 시점에 주 데이터 처리 시스템에 미처리된 연산을 전송하는 것이 불가능하며, 주 데이터 처리 시스템이 부동소수점 서브시스템과 핸드쉐이크를 수행하는 명확한 시점에서만 주 데이터 처리 시스템으로 미처리된 연산의 신호가 주어질 수 있다. 일반적으로, 이들 핸드쉐이크는 부동소수점 연산을 지정하는 명령의 실행시에만 일어난다. 이와 같은 경우에, 미처리된 부동소수점 연산은, 주 데이터 처리 시스템이 부동소수점 연산을 지정하는 추가적인 명령을 실행할 때까지 주 데이터 처리 시스템으로 전송될 수 없다.
부정확한 미처리된 부동소수점 연산과 연계하여 명령마다 다수의 부동소수점 연산을 실행할 수 있는 새로운 명령 세트의 도입은, 매우 어려운 문제를 일으키거나, 이 시스템이 미처리된 부동소수점 연산을 처리할 수 없게 만든다. 이 시스템은 어떤 명령이 미처리된 부동소수점 연산을 일으키는지를 판정하지 못하며, 미처리된 부동소수점 연산이 처리되면, 어디에서 명령 스트림의 실행이 계속되어야 하는지를 결정하지도 못한다.
Ludwig ClaBen Ulrich Wiesner: Wissensspeicher 80286-Programmierung, 1990, VEB Verlag Technik, Berlin, ISBN 3-341-00867-5에는, 선택적인 수치 코프로세서를 갖는 시스템이 개시되어 있다. 콘피규레이션 플래그는, 수치 코프로세서가 존재하지 않는지를 나타낸다. 그 수치 코프로세서가 존재하지 않는 경우, 수치 코프로세서 명령은 에뮬레이션된다.
일면에 따르면, 본 발명은, 제 1 명령 세트와 1개 이상의 추가 명령 세트로부터의 프로그램 명령의 제어하에서 데이터를 처리하는 장치에 있어서,
상기 제 1 명령 세트의 프로그램 명령의 실행시에 일어나는 미처리된 연산을 검출하도록 동작하는 미처리 연산 검출기(238)와,
상기 미처리된 연산을 검출하였을 때, 상기 1개 이상의 추가 명령 세트 중 적어도 1개의 추가 명령 세트의 1개 이상의 명령을 사용하여 상기 제 1 명령 세트의 상기 명령의 에뮬레이션을 기동하도록 동작하는 미처리 연산 처리기(250)와,
상기 제 1 명령 세트의 상기 명령의 상기 에뮬레이션시에 일어나는 임의의 추가의 미처리 연산을 처리하도록 동작하는 상기 1개 이상의 추가 명령 세트의 예외 처리 메카니즘(236)을 구비한 것을 특징으로 하는 데이터 처리장치를 제공한다.
본 발명은, 시스템이 제 1 명령 세트에 있는 미처리된 연산을 인식하도록 하지만, 이 상황을 반드시 복구하여 해당 제 1 명령 세트의 명령을 재실행하고자 할 필요가 없게 구성함으로써, 전술한 문제점을 상당히 해소할 수 있다는 것을 파악하였다. 그 대신에, 미처리된 연산을 일으킨 제 1 명령 세트(새로운 명령 세트)의 명령어가 1개 이상의 추가 명령 세트(예를 들면, 제 2 명령 세트)의 1개 이상의 명령을 사용하여 에뮬레이션된다. 발생한 미처리된 연산의 형태에 의존하여, 미처리된 연산이 에뮬레이션시에 재발생되지 않게 될 수 있다. 이와 달리, 1개 이상의 추가 명령 세트의 명령을 사용하여 에뮬레이션할 때 미처리된 연산이 마찬가지로 발생하면, 미처리된 연산을 억누르기 위해 1개 이상의 추가 명령 세트의 이와 같은 미처리된 연산을 처리하기 위한 기존의 메카니즘이 채용될 수 있다.
미처리 연산 처리기는 데이터 처리 시스템의 미처리된 연산 상태를 소거하기 위한 명령을 내릴 수 있다. 일부의 데이터 처리 시스템은, 데이터 처리 시스템이 미처리된 연산 상태에 있는지 여부를 기록하는 1개 이상의 플래그를 포함한다. 상기 제 1 명령 세트의 상기 명령을 에뮬레이션하기 전에, 이 플래그는 미처리된 연산에 의해 소거될 필요가 있다. 이 플래그가 소거될 필요가 있는지 여부는, 미처리된 연산의 종류와, 이 미처리된 연산 종류와 관련된 플래그가 존재하는지 여부에 의존한다.
본 발명의 기술은 범용적인 적용성을 갖기는 하지만, 제 1 명령 세트가 가변 길이 명령 세트이고, 1개 이상의 추가 명령 세트가 고정 길이 명령 세트인 시스템에 특히 적합하다. 이와 같은 조합은, 새로운 종류의 미처리된 연산이 가변 길이 명령 세트에서는 가능하지만, 고정 길이 명령 세트에서는 불가능하며, 미처리된 연산이 가변 길이 제 1 명령 그 자체와 연계하여 발생할 때, 1개 이상의 추가 명령 세트의 미처리된 연산을 처리하기 위해 개발된 메카니즘이 미처리된 연산을 처리하는데 용이하게 적응되지 않는 조합이다.
본 발명의 기술이 매우 유리한 특별한 상황은, 가변 길이 명령의 페치 중단을 처리하는 것이다. 이와 같은 상황에서, 가변 길이 명령은 1개보다 많은 수의 명령어에 걸쳐있을 수 있으며, 어떤 명령어의 페치가 미처리된 연산을 발생하였는지에 대해서는 명확하지 않을 수 있다.
또한, 본 발명의 기술은, 제 1 명령 세트의 한 개의 명령이 다수의 부동소수점 연산을 발생하거나, 미처리된 부동소수점 연산의 신호전송이 부정확한 부동소수점 시스템 또는 서브시스템을 포함하는 시스템에 특히 적합하다.
본 발명이 매우 유리한 특별한 상황은, 제 1 명령 세트의 단일 명령이 미처리된 부동소수점 연산의 부정확한 신호전송과 연계하여 다수의 부동소수점 연산을 발생할 수 있는 시스템이다. 이와 같은 상황에서는, 제 1 명령 세트의 어떤 명령이 미처리된 부동소수점 연산을 일으킨 것인지를 시스템이 판정하는 것이 불가능할 수 있다.
본 발명의 기술은, 1개 이상의 추가 명령 세트의 1개 이상의 명령을 사용하여 미처리된 부동소수점 연산이 기동되었을 때, 실행되고 있었던 제 1 명령 세트의 명형의 에뮬레이션을 기동함으로써, 이와 같은 상황을 극복한다. 미처리된 부동소수점 연산이 기동되었을 때 실행되고 있었던 제 1 명령 세트의 명령은, 미처리된 부동소수점 연산을 일으킨 명령일 수도 있고 아닐 수도 있다. 미처리된 부동소수점 연산이 기동되었을 때 실행되고 있었던 제 1 명령 세트의 명령이 미처리된 부동소수점 연산을 일으켰는지 여부에 무관하게, 미처리된 부동소수점 연산이 기동되었을 때 실행되고 있었던 제 1 명령 세트의 명령의 에뮬레이션이 1개 이상의 추가 명령 세트의 이와 같은 미처리된 연산을 처리하기 위한 기존의 메카니즘이 미처리된 연산을 억제하는데 채용되도록 한다.
1개 이상의 추가 명령 세트의 명령을 사용하여 제 1 명령 세트의 명령을 에뮬레이션하기 전에, 미처리된 부동소수점 연산 처리기는 미처리된 부동소수점 연산 플래그가 존재하는 경우에 이것을 소거할 필요가 있다.
미처리된 부동소수점 연산이 기동되었을 때 실행되고 있었던 제 1 명령 세트의 명령이 미처리된 부동소수점 연산을 일으킨 명령이었으면, 이 명령이 에뮬레이션되고, 1개 이상의 추가 명령 세트의 이와 같은 미처리된 연산을 처리하기 위한 기존의 메카니즘이 미처리된 연산을 억제하는데 사용될 때, 동일한 미처리된 부동소수점 연산이 다시 발생하게 된다.
미처리된 부동소수점 연산이 기동되었을 때 실행되고 있었던 제 1 명령 세트의 명령이, 데이터 처리 시스템이 부정확한 미처리된 부동소수점 연산 검출을 사용하기 때문에, 미처리된 부동소수점 연산을 일으킨 명령이 아닌 경우에는, 이 명령이 에뮬레이션될 때 동일한 미처리된 부동소수점 연산이 다시 발생하지 않게 된다. 이와 같은 경우에, 데이터 처리 시스템은 보통, 미처리된 부동소수점 연산이 발생하였다는 사실을 기록하기 위한 미처리된 부동소수점 연산 플래그 또는 이와 동등한 메카니즘을 갖게 된다. 더구나, 데이터 처리 시스템은 일반적으로 미처리된 부동소수점 연산을 일으킨 부동소수점 연산을 기록한다.
미처리된 부동소수점 연산이 발생한 사실을 기록하는데 사용된 상기 플래그 또는 기타 메카니즘의 소거는, 보통 1개 이상의 추가 명령 세트의 이와 같은 미처리된 연산을 처리하기 위한 기존의 메카니즘이 미처리된 연산을 억제하도록 한다.
다른 시스템에서는, 플래그 또는 기타 메카니즘을 테스트하고, 미처리된 부동소수점 연산이 기록된 것으로 표시하는 경우에는, 플래그 또는 기타 메카니즘을 소거하기 전에, 이와 같은 미처리된 연산을 처리하는 1개 이상의 추가 명령 세트의 명시성(explicity) 채용 메카니즘을 테스트하는 것이 필요할 수 있다. 상기한 미처리된 연산을 처리하기 위해 1개 이상의 추가 명령 세트의 메카니즘을 채용하는 것은 플래그 또는 기타 메카니즘을 자동으로 소거할 수도 있으며, 이와 같은 경우에는, 미처리된 부동소수점 연산 처리기가 플래그 또는 기타 메카니즘을 명시적으로 소거할 필요가 없어진다.
또 다른 시스템에서는, 플래그 또는 기타 메카니즘을 테스트하는 것이 필요하지 않을 수도 있다. 그 대신에, 상기한 미처리된 연산을 처리하기 위한 1개 이상의 추가 명령 세트의 메카니즘을 채용하는 것이 충분할 수도 있다. 이것은, 시스템이 미처리된 부동소수점 연산 처리에서 코드를 실행하고 있다는 사실로 인해 플래그 또는 기타 메카니즘이 설정된다는 것이 이미 알려져 있기 때문에 충분하거나, 상기한 메카니즘들을 채용하는 것은, 테스트 또는 상기 메카니즘들의 채용의 불가결한 부분으로서 상기 플래그 또는 기타 메카니즘의 있을 수 있는 후속하는 소거를 포함하게 되는 경우일 수도 있다.
한 개의 데이터 처리 시스템으로부터 다른 데이터 처리 시스템으로 변할 수 있는 미처리된 부동소수점 처리기에 채용된 정확한 기술에 무관하게, 미처리된 부동소수점 연산이 기동되었을 때 실행되고 있었던 제 1 명령 세트의 명령이 미처리된 부동소수점 연산을 일으킨 명령이 아닌 경우에, 미처리된 부동소수점 연산을 기동한 제 1 명령 세트의 명령을 에뮬레이션하기 전에, 미처리된 부동소수점 연산이 해결된다. 이와 같은 경우에, 제 1 명령 세트의 명령의 에뮬레이션이 미처리된 연산을 일으키거나 일으키지 않을 수 있다. 그러나, 이것이 미처리된 연산을 일으키는지 여부를 알지 못하며, 따라서, 이것이 미처리된 부동소수점 연산이 반복되어 기동되면서 미처리된 부동소수점 연산 처리기가 반복적으로 그 명령을 재실행하는 무한 루프를 일으킬 수 있기 때문에, 단순히 실행을 재개하는 것은 불가능하다. 따라서, 제 1 명령 세트의 명령이 에뮬레이션되어야 하며, 다음의 명령에 대해 실행이 재개되어야 한다.
또한, 본 발명의 기술은, 1개 이상의 추가 명령 세트가 향상된 처리기들의 세트를 갖는 경향이 있는 프로세서 코드의 네이티브 명령 세트이고, 제 1 명령 세트가 나중에 지원을 추가하는 것이 바람직할 수 있는 형태의 해석된 명령 세트인 상황에도 매우 적합하다. 이와 같은 가변 길이의 해석된 제 1 명령 세트의 특정한 예는 자바 바이트코드 명령일 수 있다.
또 다른 일면에 따르면, 본 발명은, 제 1 명령 세트와 1개 이상의 추가 명령 세트로부터의 프로그램 명령의 제어하에서 데이터를 처리하는 방법에 있어서,
상기 제 1 명령 세트의 프로그램 명령의 실행시에 일어나는 미처리된 연산을 검출하는 단계(238)와,
상기 미처리된 연산을 검출하였을 때, 상기 1개 이상의 추가 명령 세트 중 적어도 1개의 추가 명령 세트의 1개 이상의 명령을 사용하여 상기 제 1 명령 세트의 상기 명령의 에뮬레이션을 기동하는 단계(250)와,
상기 1개 이상의 추가 명령 세트의 예외 처리 메카니즘을 사용하여 상기 제 1 명령 세트의 상기 명령의 에뮬레이션시에 일어나는 임의의 추가의 미처리 연산을 처리하는 단계를 포함하는 것을 특징으로 데이터 처리방법을 제공한다.
또한, 또 다른 일면에 따르면, 본 발명은, 데이터 처리장치를 제어하여, 제 1 명령 세트와 1개 이상의 추가 명령 세트로부터의 프로그램 명령의 제어하에서 데이터를 처리하는 컴퓨터 프로그램 제품에 있어서,
상기 제 1 명령 세트의 명령의 실행시에 일어나는 미처리된 연산을 검출하였을 때, 상기 1개 이상의 추가 명령 세트 중 적어도 1개의 추가 명령 세트의 1개 이상의 명령을 사용하여, 상기 미처리된 연산을 일으킨 상기 명령의 에뮬레이션을 기동하도록 동작하는 미처리 연산 처리기 논리(250)와,
상기 제 1 명령 세트의 상기 명령의 상기 에뮬레이션시에 일어나는 임의의 추가의 미처리 연산을 처리하도록 동작하는 상기 1개 이상의 추가 명령 세트의 예외 처리 논리(236)를 포함하는 것을 특징으로 컴퓨터 프로그램 제품을 제공한다.
본 발명은, 장치와 이 장치를 작동하는 방법의 관점에서 표현될 수 있을 뿐만 아니라, 미처리 연산 처리기로서의 역할을 하는 컴퓨터 지원 코드의 형태로 표현될 수도 있다. 이와 같은 지원 코드는 별개의 기록가능한 매체를 사용하여 배포되거나, 임베디드 처리 시스템 내부에 펌웨어로써 삽입되거나, 다음 방식으로 삽입될 수 있다.
이하, 본 발명의 실시예를 다음의 첨부도면을 참조하여 더욱 상세히 설명한다:
도 1은 바이트코드 번역 하드웨어를 포함하는 데이터 처리 시스템을 나타낸 것이고,
도 2는 바이트코드들의 소프트웨어 명령 해석을 개략적으로 나타낸 것이며,
도 3은 시퀀스 종결 명령으로 끝나는 소프트웨어 명령 해석기 내부에서의 코드 단편의 연산을 개략적으로 나타낸 흐름도이고,
도 4는 바이트코드 대신에 실행되는 코드 단편의 일례를 나타낸 것이며,
도 5는 하드웨어 바이트코드 실행 지원을 갖지 않는 데이터 처리 시스템의 일례를 나타낸 것이고,
도 6은 도 5의 시스템을 운용할 때의 소프트웨어 명령 해석기 동작을 나타낸 흐름도이며,
도 7은 자바 바이트코드들과 처리 연산 사이의 매핑을 나타낸 것이고,
도 8은 콘텐트 어드레스 지정가능한 메모리의 형태를 갖는 프로그램 가능한 번역 테이블을 나타낸 것이며,
도 9는 랜덤 액세스 메모리의 형태를 갖는 프로그램 가능한 번역 테이블을 나타낸 것이고,
도 10은 프로그램 가능한 번역 테이블의 초기화 및 프로그래밍을 개략적으로 나타낸 흐름도이며,
도 11은 자바 바이트코드 해석을 수행하는 시스템 내부의 처리 파이프라인의 일부를 개략적으로 나타낸 것이고,
도 12는 2개의 명령어와 2개의 가상 메모리 페이지에 걸쳐있는 가변 길이 명령을 개략적으로 나타낸 것이며,
도 13은 도 12에 예시된 형태의 프리페치(prefetch) 중단을 처리하는 메카니즘을 포함하는 데이터 처리 시스템 파이프라인의 일부를 개략적으로 나타낸 것이 고,
도 14는 도 12에 예시된 형태의 프리페치 중단을 검출할 수 있는 방법을 지정하는 한가지 방식인 논리 표현을 나타낸 것이며,
도 15는 중단 처리 및 명령 에뮬레이션을 위한 지원 코드의 배치를 개략적으로 나타낸 것이다.
도 16은 가변 길이 바이트코드 명령의 프리페치 중단을 처리하기 위해 수행되는 처리를 개략적으로 나타낸 흐름도이다.
도 17은 운용체계와 운용체계에 의해 제어되는 다양한 프로세스들 사이의 관계를 나타낸 것이다.
도 18은 프로세서 코어와 자바 가속기를 구비한 처리장치를 나타낸 것이다.
도 19는 자바 가속기의 구성을 제어함에 있어서 운용체계의 동작을 개략적으로 나타낸 흐름도이다.
도 20은 자바 가상머신이 자바 가속 메카니즘의 구성을 제어함에 있어서 사용하는 자바 가속 메카니즘과 연계하여 자바 가상머신의 동작을 개략적으로 나타낸 흐름도이다.
도 21은 도 1에 도시된 것과 같은 바이트코드 번역 하드웨어를 포함하고, 부동소수점 서브시스템을 더 포함하는 데이터 처리 시스템을 나타낸 것이다.
도 22는 도 1에 도시된 것과 같은 바이트코드 번역 하드웨어와 도 21에 도시된 것과 같은 부동소수점 서브시스템을 포함하고, 부동소수점 연산 레지스터와 미처리된 연산 상태 플래그를 더 포함하는 데이터 처리 시스템을 나타낸 것이다.
도 23은 자바 부동소수점 명령에 대해 생성된 ARM 부동소수점 명령을 나타낸 것이다.
도 24는 'dmul'과 'dcmpg' 명령에 대해 자바 가속 하드웨어에 의해 생성될 수 있는 ARM 명령의 시퀀스를 나타낸 것이다.
도 25는 'dmul' 명령와 그후의 'dcmpg' 명령을 실행할 때 연산 순서를 나타낸 것으로, 이때 미처리된 부동소수점 연산은 자바 'dmul' 명령에 대해 자바 가속 하드웨어에 의해 생성된 FCMPD 명령의 실행에 의해 발생되며, 도시된 연산 순서는 도 22에 대응하는 부정확한 미처리된 연산 검출을 사용하는 시스템에 대한 것이다.
도 26은 도 25의 FMULD 명령의 실행 후에 부동소수점 연산 레지스터와 미처리 연산 상태 플래그의 상태를 나타낸 것이다.
도 27은 'dmul' 명령와 그후의 'dcmpg' 명령을 실행할 때 연산 순서를 나타낸 것으로, 이때 미처리된 부동소수점 연산은 자바 'dcmpg' 명령에 대해 자바 가속 하드웨어에 의해 생성된 FCMPD 명령의 실행에 의해 발생되며, 도시된 연산 순서는 도 22에 대응하는 부정확한 미처리된 연산 검출을 사용하는 시스템에 대한 것이다.
도 28은 도 27의 FCMPD 명령의 실행 후에 부동소수점 연산 레지스터와 미처리 연산 상태 플래그의 상태를 나타낸 것이다.
도 29는 'dmul' 명령와 그후의 'dcmpg' 명령을 실행할 때 연산 순서를 나타낸 것으로, 이때 미처리된 부동소수점 연산은 자바 'dmul' 명령에 대해 자바 가속 하드웨어에 의해 생성된 FMULD 명령의 실행에 의해 발생되며, 도시된 연산 순서는 도 21에 대응하는 부정확한 미처리된 연산 검출을 사용하는 시스템에 대한 것이다.
도 30은 'dmul' 명령와 그후의 'dcmpg' 명령을 실행할 때 연산 순서를 나타낸 것으로, 이때 미처리된 부동소수점 연산은 자바 'dcmpg' 명령에 대해 자바 가속 하드웨어에 의해 생성된 FCMPD 명령의 실행에 의해 발생되며, 도시된 연산 순서는 도 21에 대응하는 정확한 미처리된 연산 검출을 사용하는 시스템에 대한 것이다.
도 1은 ARM 프로세서 등의 프로세서 코어(4)와 바이트코드 번역 하드웨어(6)(제이젤로도 불린다)를 포함하는 데이터 처리 시스템(2)을 나타낸 것이다. 프로세서 코어(4)는 레지스터 뱅크(8), 명령 디코더(10)와, 레지스터 뱅크(8)의 레지스터들 내부에 기억된 데이터 값들에 대해 다양한 데이터 처리 연산을 수행하는 데이터패스(datapath)(12)를 포함한다. 바이트코드 번역 하드웨어(6)가 현재 인에이블 상태인지 디스에이블 상태인지를 제어하는 플래그(20)를 포함하는 레지스터(18)가 설치된다. 더구나, 바이트코드 번역 하드웨어가 현재 활성인지 비활성인지를 나타내는 플래그(21)를 포함하는 레지스터(19)가 설치된다. 즉, 플래그 21은 데이터 처리 시스템이 현재 자바 바이트코드를 실행하는지 ARM 명령을 실행하는지를 표시한다. 이때, 다른 실시예들에서는 레지스터 18 및 19가 플래그들 20 및 21을 모두 포함하는 한 개의 레지스터일 수도 있다는 것은 자명하다.
연산시에, 자바 바이트코드가 실행되고 있으며 바이트코드 번역 하드웨어(6)가 활성상태이면, 자바 바이트코드들이 바이트코드 번역 하드웨어(6)에 의해 수신되어, (본 특정한 비제한적인 실시예에서는) 대응하는 ARM 명령의 시퀀스를 발생하거나, 적어도 ARM 명령을 나타내는 프로세서 코더 제어신호들을 발생하는 역할을 하며, 그후 이들은 프로세서 코어(4)로 전달된다. 따라서, 바이트코드 번역 하드웨어(6)는, 간단한 자바 바이트코드를 프로세서 코어(4)에 의해 실행될 수 있는 대응하는 ARM 명령의 시퀀스에 매핑할 수 있다. 바이트코드 번역 하드웨어가 비활성이면, 이것은 바이패스되고 정규의 ARM 명령이 ARM 명령 디코더(10)로 공급되어, 그 자신의 고유의 명령 세트에 따라 프로세서 코어(4)를 제어할 수 있다. 이때, ARM 명령의 시퀀스들은 마찬가지로 썸 명령의 시퀀스들이거나 및/또는 서로 다른 명령 세트로부터의 명령의 혼합일 수 있으며, 이와 같은 대체물도 본 발명에 포함된다는 것이 자명하다.
바이트코드 번역 하드웨어(6)는, 마주칠 수 있는 자바 바이트코드들의 서브집합에 대한 하드웨어 번역 지원만을 제공할 수 있다는 점은 명백하다. 특정한 자바 바이트코드들은, 광범위하며 추상적인 처리를 필요로 하여, 하드웨어 내부의 이들 자바 바이트코드들을 대응하는 ARM 명령 연산으로 시도하고 매핑하는 것이 효율적이지 않을 수 있다. 따라서, 바이트코드 번역 하드웨어(6)가 이와 같은 비하드웨어 지원 바이트코드와 마주치면, ARM 고유 명령으로 쓰여진 소프트웨어 명령 인터프리터를 기동하여, 이 비하드웨어 지원 자바 바이트코드에 의해 지정된 처리를 수행한다.
소프트웨어 명령 해석기는 해석되는 모든 가능한 자바 바이트코드들에 대해 소프트웨어 지원을 제공하도록 작성될 수 있다. 바이트코드 번역 하드웨어(6)가 존재하고 인에이블 상태인 경우에는, 비하드웨어 지원된 자바 코드들만이 보통 소프트웨어 명령 해석기 내부의 해당하는 코드 단편들에서 참조된다. 그러나, 바이트코드 번역 하드웨어(6)가 설치되지 않거나 (디버깅 등 중에) 디스에이블되면, 모든 자바 바이트코드들이 소프트웨어 명령 해석기에서 참조된다.
도 2는 소프트웨어 명령 해석기의 동작을 개략적으로 나타낸 것이다. 자바 바이트코드들의 스트림(22)은 자바 프로그램을 나타낸다. 이들 자바 바이트코드들 사이에는 오퍼랜드들이 끼워질 수 있다. 따라서, 주어진 자바 바이트코드의 실행 후에, 실행되는 다음 자바 바이트코드는 바로 다음의 바이트 위치에 존재하거나, 중간에 오퍼랜드 바이트들이 존재하는 경우에는 몇 개의 바이트 위치 뒤에 위치할 수 있다.
도 2에 도시된 것과 같이, 바이트코드 번역 하드웨어(6)에 의해 지원되지 않는 자바 바이트코드 BC4를 만나게 된다. 이것은, 바이트코드 값 BC4를 색인으로 사용하여 포인터 테이블(24) 내에서 탐색이 행해지도록 하는 바이트코드 번역 하드웨어 내부의 예외를 기동하여, 비하드웨어 지원 바이트코드 BC4에 의해 지정된 처리를 수행하는 코드 단편(26)을 가리키는 포인터 P#4를 판독한다. 포인터 테이블의 기준 어드레스 값도 레지스터에 기억될 수 있다. 그후, 선택된 코드 단편이 비지원되는 바이트코드 BC4를 가리키는 R14과 함께 입력된다.
도시된 것과 같이, 256개의 가능한 바이트코드 값이 존재하므로, 포인터 테이블(24)은 256개의 포인터를 포함한다. 마찬가지로, 모든 가능한 자바 바이트코드들에 의해 지정된 처리를 수행하기 위해 256개에 이르는 ARM 고유 명령 코드 단편들이 제공된다(2개의 바이트코드가 동일한 코드 단편을 사용할 수 있는 경우에는 256개보다 작을 수 있다). 바이트코드 번역 하드웨어(6)는 일반적으로 처리속도를 증진시키기 위해 많은 간단한 자바 바이트코드들에 대한 하드웨어 지원을 제공하며, 이 경우에, 디버그 중과 같이 강제되거나 후술하는 것과 같이 프리페치 중단 등과 같은 다른 환경에서와 같은 경우를 제외하고는, 소프트웨어 명령 해석기 내부의 대응하는 코드 단편들이 사용되지 않는다. 그러나, 이들은 보통 더 간단하고 더 짧은 코드 단편들이기 때문에, 이들을 제공함으로써 발생되는 추가적인 메모리 오버헤드는 비교적 거의 존재하지 않는다. 더구나, 이와 같은 적은 추가적인 메모리 오버헤드는, 소프트웨어 명령 해석기의 속성과, 바이트코드 번역 하드웨어가 존재하지 않거나 디스에이블된 상황에서 모든 가능한 자바 바이트코드에 대처할 수 있는 능력에 의해 보상되는 것 이상이다.
도 2의 코드 단편(26) 각각은 시퀀스 종결 명령 BXJ로 끝난다는 것을 볼 수 있다. 이와 같은 시퀀스 종결 명령 BXJ의 작용은 도 3에 도시된 것과 같이 데이터 처리 시스템(2)의 상태에 따라 변한다. 도 3은 소프트웨어 명령 해석기 내부의 코드 단편(26)에 의해 수행되는 처리를 개략적으로 나타낸 흐름도이다. 스텝 28에서, 해석되고 있는 자바 바이트코드에 의해 지정된 연산이 수행된다. 스텝 30에서, 실행되는 다음 자바 바이트코드가 바이트코드 스트림(22)으로부터 판독되고, 이 다음의 자바 바이트코드에 대응하는 자바 바이트코드 스트림(22) 내부의 바이트코드 포인터가 레지스터 뱅크(8)의 레지스터, 즉 R14 내부에 기억된다. 따라서, 도 2의 자바 바이트코드 BC4에 대해서, 다음 자바 바이트코드는 BC5이며, 레지스터 R14에는, 자바 바이트코드 BC5의 메모리 위치를 가리키는 포인터가 로딩된다.
스텝 32에서, 다음 자바 바이트코드 BC5에 대응하는 포인터 테이블(24) 내부의 포인터가 포인터 테이블(24)에서 판독되어, 레지스터 뱅크(8)의 레지스터, 즉 레지스터 R12 내부에 기억된다.
도 3에는, 스텝 28, 30 및 32가 별개로 그리고 순차적으로 행해지고 있는 것으로 도시되어 있는 것을 알 수 있다. 그러나, 공지된 프로그래밍 기술에 따르면, 스텝 30 및 32의 처리는 스텝 28의 처리 내부에 간편하게 끼워넣어져, 이와 같이 구성하지 않았더라면 스텝 28의 처리에서의 낭비되었을 처리 기회(사이클)를 이용할 수도 있다. 따라서, 스텝 30 및 32의 처리는 비교적 적은 실행속도 오버헤드가 제공될 수 있다.
스텝 34는 오퍼랜드로 지정된 레지스터 R14로 시퀀스 종결 명령 BXJ를 실행한다.
스텝 34에서 BXJ 명령을 실행하기 전에, 레지스터 R14 내부에 기억되는 자바 바이트코드 스트림(22) 내부의 다음 자바 바이트코드를 가리키는 포인터와, 레지스터 R12 내부에 기억되는 다음의 그 자바 바이트코드에 대응하는 코드 단편을 가리키는 포인터를 사용하여 시스템의 상태가 셋업되었다. 특정한 레지스터들의 선택은 변할 수 있으며, 한 개도 지정되지 않거나 1개 또는 모두가 시퀀스 종결 명령에 대한 오퍼랜드로 지정되거나, 아키텍처에 의해 사전에 결정되어 정의될 수도 있다.
스텝 28, 30, 32 및 34는 주로 소프트웨어 스텝들이다. 도 3에서 스텝 34 다음의 스텝들은 주로 하드웨어 스텝들로 별도의 식별가능한 프로그램 명령을 사용하지 않고 일어난다. 스텝 36에서, 하드웨어는 바이트코드 번역 하드웨어(6)가 활성상태인지 여부를 검출한다. 하드웨어는, 바이트코드 번역 하드웨어(6)의 존재와 사용가능성에 대한 레지스터 플래그 값들을 판독함으로써 이것을 수행한다. 활성의 바이트코드 번역 하드웨어(6)의 존재를 판정하는 다른 메카니즘도 가능하다.
바이트코드 번역 하드웨어(6)가 존재하고 인에이블 상태이면, 처리과정이 스텝 38로 진행하여, 바이트코드 번역 하드웨어(6)가 그것의 다음 바이트코드로서 실행하려고 하여야 하는 바이트코드 스트림(22) 내부의 바이트코드를 가리키는 바이트코드 포인터를 지정하는 레지스터 R14의 내용과 함께 제어가 바이트코드 번역 하드웨어(6)로 건네진다. 그후, 도시된 코드 단편(26)의 실행이 종료된다.
이와 달리, 스텝 36에서의 판정이 바이트코드 번역 하드웨어(6)가 없거나 바이트코드 번역 하드웨어가 디스에이블 상태이면, 처리과정이 스텝 40으로 진행하여, 고유의 ARM 명령 코드 내에서의 점프가 행해져, 레지스터 R12 내부에 기억된 어드레스가 가리키는 소프트웨어 명령 해석기 내부의 코드 단편의 실행을 개시한다. 따라서, 다음 코드 단편의 신속한 실행이 개시되어 처리속도에 있어서 이점을 제공한다.
도 4는 특정한 코드 단편을 더욱 더 상세히 나타낸 것이다. 이와 같은 특정한 예는 정수 가산 자바 바이트코드이며, 그것의 간략기호는 iadd이다.
첫 번째 ARM 고유 명령은 다음 바이트코드 값을 판독하기 위해 1만큼 증분된 레지스터 R14 내부의 바이트코드 포인터를 사용한다(정수 가산 명령은 뒤에 바이트코드 오퍼랜드를 갖지 않으므로, 다음 바이트코드는 현재 바이트코드의 바로 뒤에 위치한다). 레지스터 R14 내부의 바이트코드 포인터도 증분된 값으로 갱신된다.
두 번째 및 세 번째 명령은 스택으로부터 가산하고자 하는 2개의 정수 오퍼랜드 값을 검색하는 역할을 한다.
네 번째 명령은, 그렇지 않았더라면 레지스터 R0의 레지스터 연동으로 인해 낭비가 되는 처리 사이클이었는지도 모른다는 것을 이용하여, 레지스터 R4에 기억된 다음 바이트코드에 대한 코드 단편의 어드레스 값을 검색하여, 이 어드레스를 레지스터 E12 내부에 기억한다. 레지스터 Rexc는 포인터 테이블(24)의 시작점을 가리키는 기저 포인터를 기억하는데 사용된다.
다섯 번째 명령은 자바 바이트코드에 의해 지정된 정수 가산을 수행한다.
여섯 번째 명령은 자바 바이트코드의 결과를 다시 스택에 기억한다.
마지막 명령은 오퍼랜드 R12에 의해 지정된 시퀀스 종결 명령 BXJ이다. 레지스터 R12는, 소프트웨어 해석이 필요한 경우에, 다음 자바 바이트코드를 소프트웨어 해석하는데 필요하게 되는 ARM 코드 단편의 어드레스를 기억한다. BXJ 명령의 실행은, 인에이블 상태의 바이트코드 번역 하드웨어(6)가 존재하는지 여부를 판정한다. 이것이 존재하면, 다음 바이트코드 어드레스를 지정하는 레지스터 R14에 기억된 오퍼랜드와 함께, 이 바이트코드 번역 하드웨어(6)로 제어가 건네진다. 활성의 바이트코드 번역 하드웨어가 존재하지 않으면, 레지스터 R12 내부의 어드레스 값이 가리키는 다음 바이트코드에 대한 코드 단편의 실행이 시작된다.
도 5는, 이 경우에는 바이트코드 번역 하드웨어(6)가 설치되지 않은 것을 제외하고는, 도 1에 도시된 것과 유사한 데이터 처리 시스템(42)을 개략적으로 나타낸 것이다. 본 시스템에서, 플래그 21은, ARM 명령이 실행되고 있으며 자바 바이트코드 실행에 들어가려고 한다는 것을 항상 표시하며, BXJ 명령은 바이트코드 번역 하드웨어(6)가 디스에이블된 것처럼 항상 처리되며, 이때 플래그 20은 무시된다.
도 6은 자바 바이트코드를 실행하는데 있어서 시스템(42)에 의해 수행되는 처리의 흐름도를 나타낸 것이다. 이것은, 동일한 소프트웨어 해석기 코드가 사용된다는 점에서 도 3의 처리와 유사하지만, 이 경우에는, 시퀀스 종결 명령 BXJ가 실행될 때, 하드웨어 바이트코드 지원의 가능성이 전혀 없으므로, 다음의 자바 바이트코드에 대한 코드 단편인 R12가 가리키는 코드 단편을 실행하도록 하는 점프로 처리가 항상 계속된다는 점이 다르다.
이 경우에 소프트웨어 명령 해석기는 ARM 고유 명령으로서 주어진다는 것을 알 수 있다. 소프트웨어 명령 해석기(와 다른 지원 코드)는 정당한 자격으로 별개의 컴퓨터 프로그램 제품으로 주어질 수 있다. 이와 같은 컴퓨터 프로그램 제품은 플로피 디스크 또는 CD 등의 기록매체를 통해 배포되거나, 네트워크 링크를 통해 동적으로 다운로드될 수 있다. 본 발명이 매우 적합하게 사용되는 임베디드 처리 응용과 관련하여, 소프트웨어 명령 해석기는 임베디드 시스템 내부의 판독전용 메모리나 다른 불휘발성 프로그램 저장장치 내부에 펌웨어로서 설치될 수 있다.
도 7은 자바 바이트코드들과 이들 바이트코드가 지정하는 처리 연산과의 관계를 나타낸 것이다. 도 7에서 알 수 있는 것과 같이, 8-비트 자바 바이트코드들이 256개의 가능한 서로 다른 바이트코드 값을 제공한다. 이들 자바 바이트코드들 중에서 첫 번째 203개는 자바 표준에 규정된 것과 같이 고정 바인딩을 겪으며, 전술한 것과 같이 iadd 등의 대응하는 처리 연산을 겪게 된다. 마지막 2개의 자바 바이트코드, 즉 254 및 255는, 규정된 구현(implementation)으로서 자바 가상머신 사양서에 기재되어 있다. 따라서, 자바 구현은 이들 바이트코드에 고정 바인딩을 할당하기 위한 요금(fee)에 해당한다. 이와 달리, 자바 구현은 이들이 프로그램가능한 바인딩을 갖는 것으로 처리하도록 선택할 수도 있다. 제이젤은 이들 바이트코드들에 대한 고정 바인딩을 지정한다. 바이트코드 값 203과 253 사이에서, 프로그램가능한 바인딩은 필요할 때 사용자에 의해 지정될 수 있다. 이들은 보통 실행시간 중에 해석되는 급속 형태(quick form)의 바이트코드들과 같은 바이트코드들과 처리 연산 사이에서 바인딩을 제공하는데 사용된다(참조: The Java Virtual Machine Specification, 저자 Tim Lindholm and Frank Yellin, 출판사 Addison Wesley, ISBN 0-201-63452-X).
도 7로부터, 하드웨어 가속 해석기술은 고정 바인딩을 처리하는데에는 적합하지만, 이들 기술은 프로그램가능한 바인딩을 처리하는데에는 별로 적합하지 않다는 것을 알 수 있다. 관련된 바이트코드들을 대응하는 코드 단편들로 표시되도록 하는 것과 같이, 소프트웨어 해석기술을 이용하여 모든 프로그램가능한 바인딩을 취급할 수 있기는 하지만, 몇몇 경우에 성능이 중요한 바이트코드들에 대해서는 이것이 속도가 느릴 수 있다.
도 8은 프로그램가능한 번역 테이블의 일 형태를 나타낸 것이다. 이와 같은 프로그램가능한 번역 테이블(100)은 콘텐트 어드레스지정가능한 메모리의 형태를 갖는다. 번역하고자 하는 바이트코드는 CAM 룩업 어레이(102)에 입력된다. 이와 같은 어레이(102)가 일치하는 바이트코드 항목을 포함하는 경우에는, 대응하는 연산 지정값이 출력이 되도록 하는 히트(hit)가 발생되는데, 즉
CAM 테이블 내부에 일치하는 바이트코드 항목이 존재하는 경우에는, 하드웨어가 연산 지정 코드를 사용하여, 하드웨어로 실행될 연산을 결정하고, 이 연산을 수행하여, 다음 바이트코드로 이동하고,
CAM 테이블 내부에 일치하는 바이트코드 항목이 존재하지 않으면, 바이트코드가 비하드웨어 지원되는 것으로 처리되고, 그것의 코드 단편이 호출된다.
본 실시예에서, 연산 지정값은 4 비트 값이고, 히트를 발생한 CAM 항목은 바이트코드 bc6에 해당한다. 도 7로부터 알 수 있는 것과 같이, 이와 같은 프로그램가능한 번역을 겪을 수 있는 모든 바이트코드들은 최상위 2 비트를 "1"로서 가지므로, 이 바이트코드의 최하위 6 비트가 어레이(102)에 입력될 필요가 있다.
본 실시예에 있어서, 프로그램가능한 번역 테이블(100)은 8개의 항목을 갖는다. 존재하는 항목의 개수는 이 작업을 위해 전용으로 사용하기를 원하는 하드웨어 자원의 양에 따라 변할 수 있다. 일부의 실시예에서는 4개의 항목만이 제공되는 한 편, 다른 실시예에서는 10개의 항목이 적합할 수 있다. 또한, 모든 존재가능한 프로그램가능한 바인딩 바이트코드에 대해 한 개의 항목을 제공하는 것도 가능하다.
사용가능한 프로그램가능한 매핑 자원들이 먼저 가장 중요한 번역으로 채워지면, 덜 중요한 번역들은 소프트웨어 해석을 겪는다는 것은 자명하다. 프로그램가능한 번역 테이블과 조합하여 소프트웨어 해석기를 설치하는 것은, 테이블이 오버플로우된 경우에, 필요한 번역이 소프트웨어 번역기에 의해 트랩되어 수행되기 때문에, 얼마나 많은 수의 테이블 항목들이 사용가능한지를 파악할 필요가 없이, 시스템의 구성과 테이블의 프로그래밍이 이루어질 수 있도록 한다.
도 9는 제 2 실시예의 프로그램가능한 번역 테이블(104)을 나타낸 것이다. 본 실시예에서, 번역 테이블은 랜덤 액세스 메모리의 형태로 제공되며, 변환하고자 하는 바이트코드는 연산 지정 코드를 각각 나타내는 4 비트 워드들의 RAM 어레이(108)에 대한 어드레스로서 바이트코드를 취급하는 디코더(106)에 입력된다. 이와 같은 경우에, 바이트코드에 대해 항상 연산 지정 코드가 발견된다. 그 결과, 이와 같은 형태의 테이블은, "이 바이트코드에 대한 코드 단편의 호출"을 지정하는 1개의 추가적인 연산 지정 코드를 사용한다.
도 10은 도 8의 실시예의 형태를 갖는 프로그램가능한 매핑 하드웨어 해석기의 초기화 및 구성을 나타낸 개략적인 흐름도이다. 실제는, 이와 같은 흐름도에 도시된 동작의 서로 다른 부분은 각각 소프트웨어 초기화 명령과 이들 명령에 응답하는 하드웨어에 의해 수행된다.
스텝 110에서는, 모든 현존하는 테이블 항목을 소거하고 테이블 내부의 상단 항목을 가리키는 포인터를 설정하는 역할을 하는 테이블 초기화 명령이 실행된다. 이 다음에, 초기화 코드는 코프로세서 레지스터 올려놓기와 같은 프로그램 명령을 사용하여 번역 테이블 내부에 매핑을 로딩하는 것을 실행한다. 이들 서로 다른 형태의 테이블 로딩 명령은 특정한 상황과 환경에 따라 변할 수 있다. 프로그래밍가능한 매핑 하드웨어 해석기 시스템은, 스텝 112에서 자바 바이트코드 등의 프로그램 명령 값과 이와 관련하고자 하는 연산값을 수신함으로써, 이들 명령에 응답한다. 스텝 114에서, 지원되지 않는 연산 트랩 하드웨어는, 프로그램되고 있는 연산값이 이 프로그램가능한 매핑 하드웨어 해석기에 의해 지원되는 연산값인지를 검사한다. 서로 다른 프로그램가능한 매핑 하드웨어 해석기들이 서로 다른 세트의 연산값을 지원할 수 있으므로, 그들 자신의 특정한 트랩 하드웨어가 제공될 수 있다. 특정한 시스템이 예를 들면 0, 1, 2, 3, 4, 5, 6, 7, 8, 10을 지원하지만 9를 지원하지 않는다는 것을 알면, 트랩 하드웨어가 비교적 간단해질 수 있다. 스텝 114에서 하드웨어 비교기는 연산값을 9의 값과 같은지 비교하고, 9가 검출되면 처리를 스텝 116으로 되돌림으로써 프로그래밍을 거부할 수 있다.
스텝 114에서, 연산값이 지원되는 것으로 표시되었다고 가정하면, 스텝 118은 프로그램가능한 매핑 테이블의 끝에 이미 도달하였는지 여부를 판정하기 위해 검사한다. 프로그램가능한 매핑 테이블이 이미 채워져 있으면, 새로운 매핑이 추가되지 않고 처리가 다시 스텝 116으로 진행한다. 하드웨어 내부에 스텝 118을 설치하는 것은, 오버플로우되는 항목을 단순히 거부하는 하드웨어에 대해 얼마나 많은 수의 항목이 존재하는지에 관해 알지 못하면서, 지원 코드가 프로그램가능한 매핑 테이블을 프로그램하려고 한다는 것을 의미한다. 따라서, 프로그래머는 가장 중요한 매핑들이 사용가능한 슬롯들을 차지하도록 보장하기 위해 이들 매핑들을 테이블 프로그래밍의 시작위치에 배치하여야만 한다. 지원 코드가 얼마나 많은 수의 프로그램가능한 슬롯들이 사용될 수 있는지를 알 필요가 없도록 한다는 것은, 한 개의 지원 코드 세트가 다수의 플랫폼 상에서 동작하여야 한다는 것을 의미한다.
테이블이 비어 있는 항목을 갖고 있다고 가정하면, 스텝 120에서 새로운 매핑이 이 항목에 기록된 후, 스텝 122에서 테이블 포인터가 전진한다.
스텝 116에서, 시스템은 더 이상의 프로그램 명령 값이 프로그램가능한 매핑 테이블 내에 프로그래밍되어야 하는지를 검사한다. 스텝 116은, 일반적으로 지원 코드가 시스템의 초기화 중에 프로그램하기를 원하는 만큼의 많은 매핑을 프로그램하려고 하는 소프트웨어 스텝에 해당한다.
도 9에 도시된 것과 같은 RAM 테이블을 초기화하는 경우에는, 도 10과 관련하여 전술한 처리과정을 다음과 같이 변형하여 따를 수 있다:
스텝 110에서, 도 8의 어레이(102)를 각각의 항목이 어떤 바이트코드에도 일치하지 않도록 설정하기 보다는, 도 9의 어레이(108)에 있는 모든 테이블 항목을 "이 바이트코드에 대한 바이트코드 단편을 호출"하도록 설정함으로써, 테이블이 소거되고,
스텝 110에는, 초기화될 번역 테이블 포인터가 존재하지 않으며,
번역 테이블 포인터가 존재하지 않으므로, 스텝 118은 존재하지 않고,
스텝 120은 "프로그램 명령 값에 의해 지정된 테이블 항목에 연산값을 기록"이 되며,
번역 테이블 포인터가 존재하지 않으므로, 스텝 112는 존재하지 않는다.
도 11은 자바 바이트코드 해석을 위해 사용될 수 있는 처리 파이프라인의 일부분을 나타낸 것이다. 처리 파이프라인(124)은 번역 스테이지(126)와 자바 디코드 스테이지(128)를 포함한다. 다음의 스테이지(130)는 특정한 구현에 따라서 다양한 서로 다른 형태를 취할 수 있다.
자바 바이트코드 스트림으로부터의 워드들이 스윙 버퍼(132)의 2개의 절반부에 교대로 로딩된다. 보통, 멀티플렉서(133)는 스윙 버퍼(132)로부터 현재의 바이트코드와 그것의 오퍼랜드를 선택하고, 그것을 멀티플렉서(137)를 통해 래치(134)로 전달한다. 파이프라인이 플러시(flush)되었거나 다른 이유로 인해 스윙 버퍼(132)가 비워지면, 멀티플렉서(135)는 자바 바이트코드의 들어온 워드로부터 직접 정확한 바이트코드를 선택하고, 그것을 래치(134)에 전달한다.
바이트코드에 대한 디코드의 첫 번째 사이클은 래치(134)에 있는 바이트코드에 대해 동작하는 제 1 사이클 디코더(146)에 의해 행해진다. 하드웨어 지원 바이트코드가 오퍼랜드들을 갖는 경우를 허용하기 위해, 추가적인 멀티플렉서들이 스윙 버퍼(132)로부터 오퍼랜드들을 선택하고, 그것들을 제 1 사이클 디코더(146)로 전달한다. 이들 멀티플렉서들은 도면에는 도시되지 않았지만, 멀티플렉서 133과 유사하다. 일반적으로, 제 1 사이클 디코더(146)는 바이트코드 입력보다 오퍼랜드 입력들에 대해 더욱 완화된 타이밍 요구조건을 가지므로, 오퍼랜드들에 대해 멀티플렉서들 135 및 137과 래치(134)에 의해 제공된 것과 유사한 바이패스 경로가 필요하 지 않다.
스윙 버퍼(132)가 래치(134)에 있는 바이트코드에 대해 불충분한 오퍼랜드 바이트들을 포함하면, 제 1 사이클 디코더(146)는 충분한 오퍼랜드 바이트들을 사용할 수 있을 때까지 정지한다.
제 1 사이클 디코더(146)의 출력은, 멀티플렉서(146)를 통해 다음의 파이프라인 스테이지(130)로 주어지는 ARM 명령(또는 ARM 명령을 나타내는 신호를 제어하는 프로세서 코어의 집합)이다. 제 2 출력은 멀티플렉서(139)를 통해 래치(138)에 기록되는 연산 지정 코드이다. 연산 지정 코드는 이것이 단일 사이클 바이트코드인지 여부를 지정하는 비트(140)를 포함한다.
다음 사이클에서, 전술한 것과 같이 바이트코드가 제 1 사이클 디코더(146)에 의해 디코딩된다. 비트(140)가 단일 사이클 바이트코드를 표시하면, 이 바이트코드가 디코딩되어, 전술한 것과 같이 다음 파이프라인 스테이지(130)를 제어한다.
그 대신에 비트(140)가 다중사이클 바이트코드를 표시하면, 제 1 사이클 디코더(146)가 정지하고, 다중사이클 또는 번역된 디코더(144)가 래치(138)에 있는 연산 지정 코드를 디코드하여, ARM 명령(또는 ARM 명령을 표시하는 신호를 제어하는 프로세서 코어의 집합)를 생성하고, 이것을 멀티플렉서(142)가 제 1 사이클 디코더(146)의 대응하는 출력 대신에 다음의 파이프라인 스테이지(130)로 전달한다. 또한, 다중사이클 또는 번역된 디코더는, 마찬가지로 제 1 사이클 디코더(146)의 대응하는 출력 대신에, 멀티플렉서(139)를 통해 래치(138)에 기록되는 또 다른 연산 지정 코드를 생성한다. 이와 같은 추가적인 연산 지정 코드는, 이 코드가 다중사이클 바이트코드에 대해 생성될 최종 ARM 명령인지 여부를 지정하는 비트(140)를 포함한다. 비트(140)가 최종 ARM 명령이 생성되었다는 것을 표시할 때까지, 전술한 것과 같이 다중사이클 또는 번역된 디코더(144)가 추가적인 ARM 명령을 계속 발생한 후, 제 1 사이클 디코더(146)가 정지되는 것을 멈추고, 다음의 바이트코드에 대해 첫 번째 ARM 명령을 생성한다.
래치(134)에 있는 바이트코드가 번역될 필요가 있는 경우에는, 전술한 처리가 3가지 방식으로 변형된다. 첫째, 바이트코드가 멀티플렉서(133)에 의해 스윙 버퍼(132)에서 추출되고 바이트코드 번역기(136)에 의해 번역되어, 멀티플렉서(139)를 통해 래치(138)에 기록되는 연산 지정 코드를 생성한다. 이와 같은 연산 지정 코드는 현재의 바이트코드에 대해 최종 ARM 명령이 생성되지 않았다는 것을 표시하도록 설정된 비트(140)를 가지므로, 멀티플렉서 142와 멀티플렉서 139는 번역된 바이트코드의 첫 번째 사이클에서 제 1 사이클 디코더(146)의 출력 대신에 다중사이클 또는 번역된 디코더(144)의 출력을 선택하게 된다.
두 번째, 다중사이클 또는 번역된 디코더(144)는, 번역을 필요로 하지 않는 바이트코드에 대해서 필요할 때 첫 번째 사이클 다음에만 ARM 명령과 그들의 대응하는 연산 지정 코드들을 발생하는 대신에, 다음의 파이프라인 스테이지(130)로 전달될 모든 ARM 명령과, 래치(138)에 다시 기록될 그들의 대응하는 추가적인 연산 지정 코드들을 발생한다.
세 번째, 바이트코드가 멀티플렉서(135)를 통해 래치(134)에 바로 기록되어, 스윙 버퍼(132) 내부에 존재하지 않고 이전 사이클에서 바이트코드 번역기(136)에 의해 번역이 될 수 없었던 경우에는, 제 1 사이클 디코더(146)가 바이트코드 번역기(136)에게 재시작하여 한 사이클동안 대기하여야 한다는 신호를 보낸다. 이와 같은 구성은, 제 1 사이클 디코더(146)가 정지하는 것을 중단할 때, 래치(138)가 번역된 바이트코드에 대한 유효한 연산 지정 코드를 유지하도록 보장한다.
도 11로부터, 버퍼링된 명령이 사전에 번역되고 필요에 따라 파이프라인의 나머지 부분으로 스트리밍되므로, 번역 파이프라인 스테이지의 설치에 의해, 프로그램가능한 번역단계에 의해 필요한 처리가 파이프라인 내부에 효율적으로 은닉되거나 가려질 수 있다는 것을 알 수 있다.
본 실시예에서는, 고정된 매핑 하드웨어 해석기가 주로, 제 1 사이클 디코더(146)와, 다중사이클 또는 번역된 디코더가 제 1 사이클 디코더(146)에 의한 제 1 사이클 디코딩을 겪은 다중다이클 바이트코드들을 디코드하는 모드에서 동작하는 다중사이클 또는 번역된 디코더(144)로 구성된 것으로 생각할 수 있다는 것을 도 11에서 알 수 있다. 본 실시예에서 프로그램가능한 매핑 하드웨어 해석기는, 바이트코드 번역기(136)와, 본 실시예에서는 프로그램가능한 바이트코드의 번역 후에 동작하는 다중사이클 또는 번역된 디코더(144)로 구성되는 것으로 생각할 수 있다. 고정된 매핑 하드웨어 번역기와 프로그램가능한 매핑 하드웨어 번역기는, 광범위한 종류의 서로 다른 방식으로 제공될 수 있으며, 추상적인 면에서 그들의 서로 다른 기능을 유지하면서, 상당한 공통된 하드웨어를 공유할 수 있다. 이들 모든 서로 다른 가능성들은 본 명세서에 기재된 기술 내에 포함된다.
도 12는 가상 메모리 페이지 경계(204)에 걸쳐있는 2개의 32 비트 명령어(200, 202)를 나타낸 것이다. 다른 페이지 크기가 가능하기는 하지만, 이것은 1Kb 페이지 경계일 수 있다.
제 1 명령어(200)는 가상 메모리 시스템 내부에 적절히 매핑된 가상 메모리 페이지 내에 존재한다. 제 2 명령어(202)는 이 단계에서는 가상 메모리 시스템 내부에 매핑되지 않은 가상 메모리 페이지 내에 놓인다. 따라서, 첫 번째 바이트가 명령어(200) 내에 놓이고 두 번째 바이트가 명령어(202) 내에 놓인 2 바이트 가변 길이 명령(206)는 그것의 두 번째 바이트와 관련된 프로페치 중단을 가질 것이다. 예를 들어, 명령어 정렬된 명령만을 지원하는 종래의 프리페치 중단 처리 메카니즘은 이와 같은 상황을 처리할 수 없으며, 예를 들면 실제로 중단을 일으키는 이 가변 길이 명령 워드(206)의 두 번째 바이트를 포함하는 명령어(202)에 초점을 맞추기 보다는, 가변 길이 명령(206)의 첫 번째 바이트를 포함하는 명령어(200)의 페칭을 검사하고 복구하고자 할 수 있다.
도 13은 도 12에 도시된 형태의 프리페치 중단을 처리하는 메카니즘을 포함하는 자바 바이트코드를 처리하는 데이터 처리 시스템 내부의 명령 파이프라인(208)의 일부를 나타낸 것이다. 명령 버퍼는 32 비트 명령어를 각각 기억하는 2개의 명령어 레지스터(210 및 212)를 구비한다. 자바 바이트코드들은 각각 8 비트의 길이를 갖고, 제로 또는 그 이상의 오퍼랜드 값을 수반한다. 멀티플렉서 그룹(214)은 디코딩하고자 하는 현재의 자바 바이트코드 명령의 첫 번째 바이트의 어드레스를 나타내는 현재의 자바 바이트코드 포인터 위치에 따라 명령어 레지스터들(210 및 212) 내에서 적절한 바이트들을 선택하는 역할을 한다.
각각의 명령어 레지스터들 210 및 212의 각각과 관련하여, 각각의 명령어 어드레스 레지스터들(216, 218)과 프리페치 중단 플래그 레지스터들(220, 222)이 존재한다. 이들 관련된 레지스터들은, 이 명령어가 메모리 시스템으로부터 프리페치되었을 때 프리페치 중단이 발생하였는지에 무관하게, 그들이 관련된 명령어의 어드레스를 각각 기억한다. 이 정보가 보통 파이프라인의 더 아래쪽에서 필요하므로, 이 정보는 명령어 그 자체와 함께 파이프라인을 따라 전달된다.
멀티플렉서들(224, 226, 228)은 필요에 따라 입력 버퍼 배치가 바이패스될 수 있도록 한다. 이와 같은 형태의 연산은 위에서 설명하였다. 간략을 기하기 이해, 명령 파이프라인(208)에는 전술한 명령 파이프라인의 모든 특징부가 도시되어 있지 않다는 것을 알 수 있다. 마찬가지로, 전술한 명령 파이프라인은 명령 파이프라인(208)의 모든 특징부를 나타내고 있지 않다. 실제로, 시스템에는 2가지 예시된 명령 파이프라인에 도시된 특징부들의 조합이 설치될 수 있다.
명령 파이프라인(208)의 바이트코드 디코딩 스테이지 내부에서, 바이트코드 디코더(230)는 적어도 멀티플렉서(224)로부터의 자바 바이트코드, 선택적으로는 멀티플렉서(226 및 228)로부터의 1개 또는 2개의 오퍼랜드 바이트에 응답하여, 디코딩된 자바 바이트코드에 대응하는 처리를 수행하기 위해 파이프라인에 있는 또 다른 스테이지로 전달하기 위한 매핑된 명령(들) 또는 대응하는 제어신호를 발생한다.
도 12에 도시된 형태의 프리페치 중단이 발생하면, 자바 바이트코드 그 자체가 유효한 동안에는, 그것을 따르는 오퍼랜드 값들이 유효하지 않으며, 프리페치 중단이 복구되지 않는 한, 정확한 연산이 일어나지 않는다. 바이트코드 예외 발생기(232)는 레지스터들(216 및 218)로부터의 명령어 어드레스들 뿐만 아니라, 레지스터들(220 및 222)로부터의 프리페치 중단 플래그들에 응답하여, 도 12에 예시된 형태의 상황의 발생을 검출한다. 바이트코드 예외 발생기(232)가 이와 같은 상황을 검출하면, 바이트코드 예외 발생기는 바이트코드 디코더(230)에 의해 발생되기 보다는 바이트코드 예외 발생기 그 자체에 의해 발생된 명령 또는 제어신호를 다음 스테이지로 멀티플렉서(234)가 발생하도록 시킨다. 바이트코드 예외 발생기(232)는, 하드웨어가 이 자바 바이트코드를 해석하도록 하기 보다는, 중단되고 있는 자바 바이트코드를 에뮬레이션하는 ARM32 비트 코드 단편의 실행을 기동시킴으로써, 도 12의 프리페치 중단 상황의 검출에 응답한다. 따라서, 프리페치 중단을 겪은 가변 길이의 자바 명령(206)은 그 자체가 실행되지 않으며, 그 대신에 32 비트 ARM 명령의 시퀀스로 교체된다. 이 명령을 에뮬레이션하는데 사용된 ARM 명령은 1개 이상의 오퍼랜드 바이트들을 로딩할 때 데이터 중단을 겪기 쉬우며, 이들 데이터 중단은 이들 바이트들이 원래 제 2 명령어(202)의 일부로서 프리페치되었을 때 프리페치 중단이 발생한 것과 동일한 이유로 발생하고, ARM 32 비트 코드 단편의 실행중에 추가적인 프리페치 및 데이터 중단이 발생할 수도 있다. 이들 모든 중단은 ARM 명령 실행중에 발생하므로, 기존의 중단 예외 처리기 루틴을 사용하여 정확하게 처리된다.
이에 따라, 바이트코드를 페치할 때 발생하는 프리페치 중단이 억제된다(즉, ARM 코어로 전달되지 않는다). 그 대신에, ARM 명령 시퀀스가 실행되고, 이들 ARM 명령으로 발생하는 중단은 기존의 메카니즘을 사용하여 처리되므로, 문제를 일으키는 바이트코드를 뛰어넘게 된다. 바이트코드를 중단으로 교체하는데 사용된 에뮬레이션하는 ARM 명령을 실행한 후에, 바이트코드의 실행이 재개될 수 있다.
바이트코드 그 자체가 프리페치 중단을 겪으면, 프리페치 중단으로 표시된 ARM 명령이 ARM 파이프라인의 나머지 부분으로 전달된다. 이 명령이 파이프라인의 실행 스테이지에 도달하면, 이것은 프리페치 중단 예외가 발생하도록 하는데, 이것은 ARM 명령에 대한 프리페치 중단을 처리하는 완전히 표준적인 방법이다.
바이트코드가 프리페치 중단을 겪지 않고, 도 12에 도시된 것과 같이 그것의 오퍼랜드 중의 1개 이상이 프리페치 중단을 겪으면, 이 바이트코드에 대한 소프트웨어 코드 단편이 호출된다. 코드 단편이 호출되도록 하는 ARM 파이프라인의 나머지 부분에 전달되는 ARM 명령은 프리페치 중단으로 표시되지 않으므로, 이들 명령이 파이프라인의 실행 스테이지에 도달하면 정상적으로 실행된다.
도 14는 도 12에 도시된 형태의 상황을 검출하기 위해 바이트코드 예외 발생기(232)에 의해 사용될 수 있는 형태의 논리 표현식을 나타낸 것이다. 도 13에 도시된 스윙 버퍼의 어떤 절반부(블록 210, 216, 220은 1개의 절반부를 구성하는 한편, 도 13에 점선으로 나타낸 것과 같이 블록 212, 218, 222는 나머지 절반부를 구성한다)가 현재 제 1 명령어(도 12의 200)를 갖고 있더라도, 1개의 절반부는 "Half1"으로 표시하고, 제 2 명령어(도 12의 202)를 갖는 스윙 버퍼의 나머지 절반부는 "Half2"로 표시한다. PA(Hafl1)은 블록 220 및 222의 어느 것이든 Hafl1의 내용을 의미하며, Hafl2에 대해서도 마찬가지이다.
따라서, 도 12에서 설명한 상황의 표시자들은 PA(Hafl1)이 거짓이고, PA(Hafl2)가 참이며, 바이트코드와 함께 그것의 오퍼랜드가 2개의 스윙버퍼 절반부들 사이의 경계에 걸쳐있다(그곳에 표시된 페이지 경계가 존재한다는 사실은 단지 이것이 일반적으로 2개의 PA() 값이 다를 수 있기 위한 요구조건이기 때문이다).
스윙버퍼 절반부들 각각이 한 개의 워드를 기억하고 하드웨어 지원 바이트코드들이 2개의 오퍼랜드의 최대값으로 제한되는 설계들과 같은 바람직한 설계에서, 바이트코드와 함께 그것의 오퍼랜드들이 경계에 걸치는지 여부를 판정하는 공식은 다음과 같다:
((number of operands=1) AND (bcaddr[1:0]=11))
OR ((number of operands = 2) AND (bcaddr[1]=1))
때, bcaddr은 바이트코드의 어드레스이다. 이것은 도 14에 나타낸 것과 같은 논리 표현식이 유도될 수 있도록 한다.
메모리 페이지 경계의 소정의 거리 내에서 시작하는 가변 길이 명령 등의 프리페치 중단을 식별하는 다른 기술이 사용될 수 있다.
도 15는 자바 바이트코드 해석과 관련된 지원 코드의 구조를 개략적으로 나타낸 것이다. 이것은 위에서 설명한 도면과 유사하지만, 이 경우에는 바이트코드 예외 이벤트에 의해 기동되는 바이트코드 예외 처리 코드 단편들을 가리키는 포인터들을 포함시킨 것을 나타낸 것이다. 따라서, 각각의 바이트코드는 그것의 연산을 에뮬레이션하는 연계된 ARM 코드 단편을 갖는다. 더구나, 발생될 수 있는 각각의 바이트코드 예외는 ARM 예외 처리 코드의 관련된 부분을 갖는다. 도시된 경우에 있어서, 바이트코드 프리페치 중단 처리 루틴(236)은 바이트코드 예외 발생기(232)에 의해 전술한 형태의 프리페치 중단의 검출시에 기동되도록 주어진다. 이와 같은 중단 처리 코드(236)는, 그것의 기동을 일으킨 가변 길이 명령의 시작시에 바이트코드를 식별한 후, 코드 단편들의 집합에 있는 이 바이트코드에 대한 대응하는 에뮬레이션 코드 단편을 불러냄으로써 동작한다.
도 16은 바이트코드 예외 발생기(232)의 동작과 후속하는 처리를 개략적으로 나타낸 흐름도이다. 스텝 238은, 도 14의 수식이 참인지 여부를 판정하는 역할을 한다. 이 수식이 거짓이면, 이 처리과정이 종료한다.
스텝 238이 도 12에 도시된 형태의 상황을 표시하면, 바이트코드 예외 발생기(232)에 의해 바이트코드 프리페치 중단 예외가 개시되도록 기동하는 스텝 246이 실행된다. 바이트코드 예외 발생기(232)는 간단히 ARM 코드 바이트코드 프리페치 중단 처리기(236)의 실행을 기동할 수 있다. 중단 처리기(236)는, 스텝 248에서 가변 길이 명령을 시작하는 바이트코드를 식별하는 역할을 하며, 스텝 250에서 이 식별된 바이트코드를 에뮬레이션하는 ARM 명령의 코드 단편의 실행을 기동한다.
프리페치 중단을 처리하는 전술한 메카니즘은 4개 이하의 오퍼랜드(즉, 전체 5 이하의 바이트)가 존재하는 상황에서 잘 동작하지만, 그렇지 않으면, 바이트코드와 그것의 오퍼랜드가 제 2 버퍼를 오버플로우할 수도 있다. 실제로, 하드웨어 가속 메카니즘을 제공하는 것이 바람직한 바이트코드들은 모두 0, 1 또는 2개의 오퍼랜드를 가지며, 나머지 바이트코드들은 주로 그들의 복잡성으로 인해 모든 경우에 소프트웨어로 처리된다.
도 17은 복수의 사용자 모드 프로세스들(302, 304, 306, 308)을 제어하는 운용체계(300)를 나타낸 것이다. 운용체계(300)는 감시자 모드에서 동작하며, 다른 프로세서들(302, 304, 306, 308)은 감시자 모드에서 동작하는 운용체계(300)보다 시스템의 구성 제어 파라미터들에 대해 더 적은 접근권한을 갖는 사용자 모드에서 동작한다.
도 17에 도시된 것과 같이, 프로세서 302 및 308은 각각 서로 다른 자바 가상머신과 관련된다. 각각의 이들 자바 가상머신들(302, 308)은 바이트코드 번역 매핑 데이터(310, 312)와 구성 레지스터 데이터(314, 316)로 이루어진 그 자신의 구성 데이터를 갖는다. 실제로는, 한 세트의 자바 가속 하드웨어가 프로세서 302 및 308 모두를 실행하기 위해 제공되지만, 이들 서로 다른 프로세스가 자바 가속 하드웨어를 사용하고 있을 때, 이들 각각은 이 하드웨어가 그들의 관련된 구성 데이터 310, 312, 314, 316과 함께 구성되는 것을 필요로 한다. 따라서, 운용체계(300)가 이 하드웨어를 사용한 이전의 프로세서와 다른 자바 가속 하드웨어를 사용하는 프로세서로 실행을 전환하면, 자바 가속 하드웨어가 재초기화 및 재구성되어야 한다. 운용체계(300)는 자바 가속 하드웨어 자체의 이와 같은 재초기화 및 재구성을 실행하지 않지만, 자바 가속 하드웨어와 관련된 구성 무효 지시자를 무효 상태로 설정함으로써 이것이 행해져야만 한다는 것을 표시한다.
도 18은 네이티브 명령 세트(예를 들면, ARM 명령 세트)와 이와 관련된 자바 가속 하드웨어(322)를 갖는 프로세서 코어들 구비한 데이터 처리 시스템(318)을 개략적으로 도시한 것이다. 메모리(324)는 ARM 명령 또는 자바 바이트코드의 형태를 가질 수 있는 컴퓨터 프로그램 코드를 기억한다. 자바 바이트코드의 경우에는, 이들 자바 바이트코드들을 ARM 명령의 스트림(또는 ARM 명령에 대응하는 제어신호)으로 해석하는 역할을 하는 자바 가속 하드웨어(322)를 통과한 후, 프로세서 코어(320)에 의해 실행될 수 있다. 자바 가속 하드웨어(322)는, 자바 바이트코드를 실행하는 것이 바람직한 각각의 자바 가상머신에 대해 프로그래밍을 필요로 하는 바이트코드 번역 테이블(326)을 구비한다. 더구나, 그것의 구성을 제어하기 위해 구성 데이터 레지스터(328)와 운용체계 제어 레지스터(330)가 설치된다. 운용체계 제어 레지스터(330) 내부에 포함된 것은, 설정되었을 때 자바 가속 하드웨어(322)의 구성이 유효한 것을 나타내고, 설정이 해제되었을 때, 그것의 무효하다는 것을 나타내는 플래그 CV의 형태를 갖는 구성 유효 지시자이다.
자바 가속 하드웨어(322)는 자바 바이트코드를 실행하고자 할 때, 구성 유효 지시자에 응답하여, 구성 유효 지시자가 무효 형태를 갖는 자바 가속 하드웨어(332)에 대한 구성 데이터와 일치하면, 구성 무효 예외를 기동한다. 구성 무효 예외 처리기는 프리페치 중단 처리기에 대해 전술한 것과 유사한 방식으로 제공된 ARM 코드 루틴일 수 있다. 구성 예외가 기동되고, 새로운 유효 구성 데이터가 실제로 제 위치에 기록된 후에, 구성 데이터가 유효하다는 것을 나타내는 형태로 구성 유효 지시자를 설정하는 하드웨어 메카니즘이 자바 가속 하드웨어(33) 내에 설치된다. 구성 데이터가 실제로 기록되기 전에, 구성 유효 지시자를 이와 같은 방식으로 설정하는 것은 직관적이 아닌 것처럼 생각되지만, 이와 같은 접근방법은 구 성 데이터의 설정을 통한 일부의 프로세서 스와핑으로 일어날 있는 문제를 해소할 수 있다는 점에서 상당한 이점을 갖는다. 그후, 구성 예외 루틴은, 필요에 따라 전술한 것과 같은 바이트코드 번역 테이블과 다른 구성 데이터 레지스터 값들(328)을 기록함으로써, 그것이 일치하는 자바 가상머신에 대해 필요한 구성 데이터를 설정한다. 구성 예외 코드는, 다른 작업을 자바 가속 하드웨어(322)가 떠맡기 전에, 구성 데이터의 기록이 완료하도록 보장해야만 한다.
도 19는 운용체계(300)의 동작을 개략적으로 나타낸 것이다. 스텝 322에서, 운용체계는 프로세스 전환을 검출하는 것을 기다린다. 프로세스 전환이 검출되면, 스텝 334는 새로운 프로세스가 자바 가속 하드웨어(322)(전술한 것과 같이, 제이젤로도 불린다)를 사용하는 것인지 여부를 판정한다. 자바 가속 하드웨어(322)가 사용되지 않으면, 처리가 스텝 336으로 진행하여, 스텝 339로 진행하여 실행이 새로운 프로세스로 건네지기 전에, 자바 가속 하드웨어(322)가 디스에이블된다. 자바 가속 하드웨어(322)가 사용되면, 처리가 스텝 338로 진행하여, 불러낸 새로운 프로세스가 운용체계(300)에 의해 기록된 자바 가속 하드웨어(322)의 기억된 현재 소유자와 동일한지 여부에 대한 판정이 행해진다. 소유자가 변경되지 않았으면(즉, 새로운 프로세스가 자바 가속 하드웨어(322)를 사용한 최종 프로세스와 사실상 동일하면), 처리가 스텝 337로 진행하여, 스텝 339로 진행하기 전에 자바 가속 하드웨어(322)가 인에이블된다. 새로운 프로세스가 기억된 현재 소유자가 아닌 경우에는, 처리가 스텝 340으로 진행하여, 자바 가속 하드웨어(322)의 현재 구성이 유효하지 않다는 것을 표시하도록 구성 유효 지시자가 설정된다. 이것이 이와 같은 구성 변 경을 관리하는 운용체계(300)의 책임의 한계이며, 구성 데이터의 실제 갱신은 그 자체가 그 자신의 예외처리 메카니즘으로 동작하는 자바 가속 하드웨어(322)에 대한 작업으로 남겨진다.
스텝 340 후에, 실행제어의 전달이 스텝 337로, 그후 스텝 339로 건네지기 전에, 스텝 342는 기억된 현재 소유자를 새로운 프로세서로 갱신하는 역할을 한다.
도 20은 자바 가속 하드웨어(322)에 의해 수행되는 동작을 나타낸 것이다. 스텝 344에서, 자바 가속 하드웨어(33)는 실행하려는 바이트코드를 수신하는 것을 기다린다. 바이트코드가 수신되면, 하드웨어는, 구성 유효 지시자가 스텝 346을 이용하여 자바 가속 하드웨어(322)의 구성이 유효하다는 것을 표시하는지를 검사한다. 구성이 유효하면, 처리가 스텝 348로 진행하여, 수신된 바이트코드를 실행한다.
구성이 무효이면, 처리가 스텝 350으로 진행하여, 자바 가속 하드웨어(322)가 하드웨어 메카니즘을 사용하여 구성이 유효하다는 것을 나타내도록 구성 유효 지시자를 설정한다. 이것은, 필요할 때 예외 처리기 내부의 프로그램 명령에 의해 행해질 수도 있다. 스텝 352는 구성 무효 예외를 기동하는 역할을 한다. 구성 무효 예외 처리기는, 코드 단편들을 가리키는 포인터들의 테이블과, 이 경우에서와 같은 경우에는, 명령의 소프트웨어 에뮬레이션, 프리페치 중단(이들 두가지는 이미 위에서 설명하였다), 또는 구성 예외 등의 관련된 예외의 각각을 처리하는 해당하는 코드 단편들의 조합으로 제공될 수 있다.
스텝 354는 구성 무효 예외를 이루는 ARM 코드를 실행하는 역할과, 자바 가 속 하드웨어(322)에 필요한 구성 데이터를 기록하는 역할을 한다. 이와 같은 ARM 코드는 프로그램가능한 번역 테이블(326) 뿐만 아니라 다른 구성 레지스터들(330)을 채우기 위한 코프로세서 레지스터 기록물들의 시퀀스의 형태를 취할 수 있다. 스텝 354 다음에, 스텝 356은 다시 자바 바이트코드 프로그램으로 점프하여, 원래의 바이트코드의 실행을 재시도한다.
프로세스 전환이 스텝 354 또는 스텝 358 중에 발생하면, 지금까지의 구성 설정이 다른 프로세스에 의해 무효로 될 수 있으며, 구성 유효 지시자가 운용체계에 의해 소거될 수 있다. 도 20의 과정에서, 이것은 344-346-350-352-354 루프를 다시 돌도록 하는데, 즉 재구성이 시작위치에서 재시도되게 한다. 바이트코드가 결국 실제 실행되면, 구성이 유효한 것으로 보장된다.
도 21은 부동소수점 서브시스템을 더 포함하는 도 1에 도시된 데이터 처리 시스템을 나타낸 것이다. 미처리된 부동소수점 연산이 발생하면, 부동소수점 서브시스템은 ARM 코드로 l처리된 부동소수점 연산을 처리하는 메카니즘을 제공한다.
이와 같은 서브시스템의 예로는 영국, 캠브리지의 ARM 리미티드에서 제조된 VFP 소프트웨어 에뮬레이터를 들 수 있다. VFP 소프트웨어 에뮬레이터 시스템의 경우에, 부동소수점 연산을 실행하는데 사용될 수 있는 하드웨어가 존재하지 않으므로, 모든 부동소수점 연산은 미처리된 부동소수점 연산으로 취급된다. 따라서, 모든 부동소수점 연산은 ARM 코드로 VFP의 거동을 에뮬레이션하기 위해 제공된 메카니즘을 사용하여 처리된다.
이와 같은 시스템의 경우에, 미처리된 부동소수점 연산은 정확한데, 즉 미처 리된 부동소수점 연산의 검출점이 미처리된 부도 소수점 연산의 발생점과 동일하다.
도 22는 부동소수점 연산 레지스터와 미처리된 연산 상태 플래그를 더 포함하는 도 1 및 도 21에 도시된 데이터 처리 시스템을 나타낸 것이다.
이와 같은 서브시스템의 예로는 영국, 캠브리지의 ARM 리미티드에서 제조된 VFP 하드웨어 시스템을 들 수 있다. VFP 하드웨어 시스템의 경우에, 특정한 형태의 부동소수점 연산만이 미처리된 부동소수점 연산으로 취급되고, 나머지 부분은 VFP 하드웨어에 의해 처리된다.
미처리된 부동소수점 연산을 겪을 수 있는 연산의 종류로는 다음을 포함한다:
- 제로값으로 나누는 것
- NaN을 포함하는 연산
- 무한대를 포함하는 연산
- 비정규화 수를 포함하는 연산.
이와 같은 시스템의 경우에, 미처리된 부동소수점 연산이 부정확할 수도 있는데, 즉 미처리된 부동소수점의 검출점이 미처리된 부동소수점 연산의 발생점과 반드시 같지 않다.
미처리된 VFP 연산은, VFP 코프로세서가, 일반적으로 ARM 명령 스트림의 일부를 구성할 수 있으며 도 1에 도시된 바이트코드 번역기의 존재하에서는 ARM 및 VFP 명령의 조합으로 번역된 바이트코드의 결과값이 될 수 있는 VFP 명령을 수용하기를 거부할 때 발생한다.
미처리된 VFP 연산이 ARM 명령 스트림의 일부로서 발생한 경우에, 미처리된 VFP 연산을 처리하는 ARM 메카니즘은, 미정의된 명령 예외를 발생하여 미정의된 명령 벡터 상에 설치된 미정의된 명령 처리를 실행하는 것이다.
VFP 소프트웨어 에뮬레이터 시스템의 경우에, 모든 VFP 연산은 미처리된 VFP 연산으로 취급되고, 동일한 ARM 메카니즘이 적용되며, 미정의된 명령 예외가 발생되고, 미정의된 명령 처리기가 실행된다.
미처리된 VFP 연산이 ARM 명령 스트림의 일부로서 발생한 경우에, 미정의된 명령 처리기는, 이 명령 스트림을 조사함으로써, 미처리된 VFP 연산을 일으킨 명령이 다른 형태의 미정의된 명령이 아니라 사실은 VFP 명령이었다는 것을 알 수 있으며, 미정의된 명령 처리기가 특권 모드에서 실행되므로, VFP 코프로세서에서 필요한 내부 상태를 추출하기 위해 필요한 코프로세서 명령을 생성하여, 소프트웨어로 필요한 명령어를 완료할 수 있다. 미정의된 명령 처리기는 미처리된 연산을 처리하기 위해 ARM 명령 스트림에서 식별된 명령와 VFP의 내부 상태 모두를 사용하게 된다.
수많은 VFP 구현에서, 미처리된 연산을 일으키는 명령은 미처리된 연산이 검출되었을 때 실행되고 있었던 명령과 동일하지 않을 수 있다. 미처리된 연산은, 이전에 발생되고, 다음의 ARM 명령와 병렬로 실행되는 명령에 의해 발생될 수 있지만, 이것은 미처리된 상태에 부딪치게 된다. VFP는 다음의 VFP 명령을 수용하는 것을 거부함으로써 이것을 신호로 알리고, VFP 미정의된 명령 처리기에 입력되도록 하여, 이 처리기가 VFP에게 질의를 하여, 미처리된 연산의 원래의 이류를 찾게 된다.
제이젤이 VFP 서브시스템을 포함하는 시스템에 통합되면, 다음 사항이 적용된다:
- VFP 명령과 직접적인 대응관계를 갖는 신호 세트를 사용하여 코어 내부에서 직접 해당하는 VFP 명령을 발생함으로써, 자바 부동소수점 명령이 번역된다.
- VFP가 미처리된 연산과 마주치는 경우에, VFP는 미처리된 연산 상태의 신호를 보낼 수 있다.
- 제이젤은 미처리된 연산신호를 가로채, 이 신호가 코어로 전송되지 않도록 하며, AR< 명령 스트림에 있는 VFP 명령이 부정확한 연산 신호를 보내는 경우에 발생할 수 있는, 미정의된 명령 처리기가 실행되지 않도록 한다. 그 대신에, 제이젤은 제이젤 VM 지원 코드에 의해 처리되는 제이젤 VFP 예외를 발생한다.
VM 지원 코드는, 이와 같은 제이젤 VFP 예외와 마주치면, VFP '비연산' 명령, 즉 FMRX Rd, FPSCR 명령 등과 같이 제이젤 상태를 원래대로 유지하는 VFP 명령을 실행해야 한다. 이것은, VFP 하드웨어를 지원 코드와 동기시키고, 이 경우에는 미처리된 연산을 마주쳤을 때 전송되어야 하는 미처리된 연산 상태 플래그와 연계하여 부동소수점 연산 레지스터에 의해 표시된 VFP 연산의 연산을 완료한다. 연산이 완료되면, 미처리된 연산 상태 플래그가 소거된다.
이와 같은 접근방법은, 참조를 위해 그것의 전체내용이 본 명세서에 통합된 2000년 10월 5일자 출원된 공동출원중인 영국 특허출원 번호 0024402.0에 개시된 것과 같이, 제이젤이 내린 명령 시퀀스들이 재시작가능하다는 사실을 이용한다. 상기한 문헌에 개시된 기술과 이 기술을 연계하여 사용하면, 미처리된 연산이 재시작되도록 하는 VFP 명령의 발생을 일으키는 명령이 허용된다.
도 23은 각각의 자바 부동소수점 연산에 대해, 자바 바이트코드 번역기가 내리는 대응하는 VFP 명령을 나타낸 것이다. 발생된 VFP 명령만이 도시되어 있으며, 자바 바이트코드 번역기는 VFP 명령과 연계하여 추가적인 ARM 명령(들)을 내릴 수 있다는 점에 주목하기 바란다. 제이젤 바이트코드 번역기는 부동소수점 값들을 로딩하거나 기억하기 위해 추가적인 VFP 로드들과 기억장치들을 발생할 수도 있다.
도 24는 명령의 시퀀스 또는 'dmul' 바이트코드와 그 다음의 'dcmpg' 바이트코드로 이루어진 자바 바이트코드들의 시퀀스에 대해 제이젤 바이트코드 번역기에 의해 내려질 수 있는 명령에 대응하는 신호들을 나타낸 것이다. 배정도 레지스터들 D0, D1 및 D2가 각각 자바 실행 스택의 위에서 세 번째, 위에서 두 번째 및 가장 위의 성분을 유지하고, 바이트코드 시퀀스의 정부 결과값이 정수 레지스터 R0에 놓여지는 것이 예측될 때, (dmul, dcmpg) 바이트코드 시퀀스를 실행하고자 한다면, 예시된 시퀀스가 발생하게 된다.
도 25, 도 27, 도 29 및 도 30은 번역된 명령 시퀀스의 다양한 지점에서 미처리된 부동소수점 연산이 일어날 때의 연산 순서를 나타낸 것이다. 도 25 및 도 29는 미처리된 부동소수점 연산이 FMULD 명령에 의해 일어날 때의 연산 순서를 나타낸 것이다. 도 27 및 도 30은 미처리된 부동소수점 연산이 FCMPD 명령에 의해 일어날 때의 연산 순서를 나타낸 것이다. 도 25 및 도 27은 미처리된 부동소수점 연산의 신호가 정확하지 않을 때의 연산 순서를 나타낸 것이다. 도 29 및 도 30은 미처리된 부동소수점 연산의 신호가 정확할 때의 연산 순서를 나타낸 것이다.
알 수 있는 것과 같이, 다음과 같은 4개의 가능한 이벤트 시퀀스가 존재한다:
1) 도 25: 부정확한 미처리된 연산 검출. 미처리된 연산의 신호를 보내는 자바 바이트코드는 미처리된 연산을 일으키는 자바 바이트코드와 동일하지 않다.
2) 도 27: 부정확한 미처리된 연산 검출. 시스템이 미처리된 연산 검출을 사용한다는 사실에도 불구하고, 미처리된 연산의 신호를 보내는 자바 바이트코드가 그것을 일으키는 자바 바이트코드와 동일하다. 이것은 두 번째 자바 바이트코드 'dcmpg'가 한 개의 자바 바이트코드에 대해 2개의 VFP 명령을 발생하기 때문인데, 이들 중에서 첫 번째 것은 미처리된 연산을 일으키고, 두 번째 것은 그것의 신호를 보낸다.
3) 도 29: 정확한 미처리된 연산 검출. 미처리된 연산의 신호를 보내는 자바 바이트코드가 그것을 일으키는 자바 바이트코드와 동일하다.
4) 도 30: 정확한 미처리된 연산 검출. 미처리된 연산의 신호를 보내는 자바 바이트코드가 그것을 일으키는 자바 바이트코드와 동일하지만, 미처리된 연산을 실제로 일으키고 신호를 보낸 'dcmpg' 바이트코드의 실행의 결과로써, 2개의 VFP 명령 중에서 어느 것이 발생하였는지를 알지 못한다.
이 기술과 함께 전술한 재시작 기술을 조합하는 것은 이들 가능한 모든 이벤트들의 시퀀스가 정확하게 처리될 수 있도록 한다.
도 26 및 도 28은 도 25 및 도 27에 각각 도시된 연산 시퀀스에 대응하는 미처리된 연산이 발생한 직후의 시점에서의 부동소수점 연산 레지스터와 미처리된 연산 상태 플래그를 나타낸 것이다.
마찬가지로 자바 바이트코드 해석 시스템에 대해 기술한 2000년 10월5일자 출원된 동시 계류중인 영국 특허출원 0024399.8, 0024402.0, 0024404.6 및 0024396.4와, 2000년 11월 20일자 출원된 영국 특허출원 0028249.1과, 2000년 12월 7일자 출원된 미국 특허출원 09/731,060을 참조하기 바란다. 이들 동시 계류중인 출원의 발명내용은 참조를 위해 본 명세서에 포함된다.

Claims (60)

  1. 제 1 명령 세트와 1개 이상의 추가 명령 세트로부터의 프로그램 명령의 제어하에서 데이터를 처리하는 장치에 있어서,
    상기 제 1 명령 세트의 프로그램 명령의 실행시에 일어나는 미처리된 연산을 검출하도록 동작하는 미처리 연산 검출기(238)와,
    상기 미처리된 연산을 검출하였을 때, 상기 1개 이상의 추가 명령 세트 중 적어도 1개의 추가 명령 세트의 1개 이상의 명령을 사용하여 상기 제 1 명령 세트의 명령의 에뮬레이션을 기동하도록 동작하는 미처리 연산 처리기(250)와,
    상기 제 1 명령 세트의 명령의 에뮬레이션시에 일어나는 임의의 추가의 미처리 연산을 처리하도록 동작하는 상기 1개 이상의 추가 명령 세트의 예외 처리 메카니즘(236)을 구비한 것을 특징으로 하는 데이터 처리장치.
  2. 제 1항에 있어서,
    상기 미처리 연산 검출기는 명령어의 미처리된 페치를 검출하도록 동작하는 페치 중단 검출기인 것을 특징으로 하는 데이터 처리장치.
  3. 제 1항에 있어서,
    상기 미처리 연산 검출기는 미처리된 부동소수점 연산을 검출하도록 동작하는 미처리 부동소수점 연산 검출기인 것을 특징으로 하는 데이터 처리장치.
  4. 제 1항, 제 2항 또는 제 3항 중 어느 한 항에 있어서,
    상기 제 1 명령 세트는 가변 길이 명령 세트이고, 상기 1개 이상의 추가 명령 세트 중 적어도 1개의 추가 명령 세트는 고정 길이 명령 세트인 것을 특징으로 하는 데이터 처리장치.
  5. 제 1항, 제 2항 또는 제 3항 중 어느 한 항에 있어서,
    상기 제 1 명령 세트는 가변 길이 명령 세트이고, 상기 1개 이상의 추가 명령 세트 모두는 고정 길이 명령 세트인 것을 특징으로 하는 데이터 처리장치.
  6. 제 4항에 있어서,
    실행되는 프로그램 명령을 포함하는 고정 길이 명령어를 페치하도록 동작하는 명령 페처를 구비하고, 상기 가변 길이 명령 세트로부터의 적어도 일부의 프로그램 명령은 1개 이상의 명령어에 걸쳐있는 것을 특징으로 하는 데이터 처리장치.
  7. 제 6항에 있어서,
    상기 미처리 연산 검출기는, 가변 길이 명령의 일부를 포함하는 두 번째 또는 다음의 명령어에 해당하는 명령어의 미처리된 페치를 검출하였을 때, 상기 가변 길이 명령을 중단하고, 1개 이상의 고정 길이 명령을 사용하여 상기 가변 길이 명령의 에뮬레이션을 기동하도록 동작하는 페치 중단 검출기인 것을 특징으로 하는 데이터 처리장치.
  8. 제 6항에 있어서,
    상기 미처리 연산 검출기는, 상기 가변 길이 명령이 메모리 페이지 경계를 교차하는 것으로 판정된 경우에 명령어의 미처리된 페치를 검출하였을 때, 상기 가변 길이 명령을 중단하고, 1개 이상의 고정 길이 명령을 사용하여 상기 가변 길이 명령의 에뮬레이션을 기동하도록 동작하는 페치 중단 검출기인 것을 특징으로 하는 데이터 처리장치.
  9. 제 6항에 있어서,
    상기 미처리 연산 검출기는, 상기 가변 길이 명령이 메모리 페이지 경계의 종료 위치의 일정한 수의 바이트 내에서 시작하는 것으로 판정되고, 상기 일정한 수의 바이트가 제 1 명령 세트로부터의 프로그램 명령의 제어하에서 상기 데이터 처리장치에 의해 처리된 가장 길이가 긴 가변 길이 명령보다 작은 경우에 명령어의 미처리된 페치를 검출하였을 때, 상기 가변 길이 명령을 중단하고, 1개 이상의 고정 길이 명령을 사용하여 상기 가변 길이 명령의 에뮬레이션을 기동하도록 동작하는 페치 중단 검출기인 것을 특징으로 하는 데이터 처리장치.
  10. 제 3항에 있어서,
    복수의 부동소수점 연산이 상기 제 1 명령 세트의 단일 명령의 실행중에 실행될 수 있으며, 상기 복수의 부동소수점 연산 중 일부가 미처리된 부동소수점 연산을 잠재적으로 발생시키고, 상기 미처리 연산 검출기는 상기 복수의 부동소수점 연산 중 일부에 의해 발생되는 미처리된 부동소수점 연산을 검출하도록 동작하는 것을 특징으로 하는 데이터 처리장치.
  11. 제 3항 또는 제 10항에 있어서,
    상기 미처리 연산 검출기는, 미처리된 부동소수점 연산을 일으키는 상기 제 1 명령 세트의 명령의 실행시에 미처리된 부동소수점 연산을 즉시 검출하지 않고, 그 대신에 상기 제 1 명령 세트의 후속 명령의 실행시에 미처리된 부동소수점 연산을 검출하며, 상기 미처리 연산 검출기는 상기 후속 명령을 중단하고 1개 이상의 고정 길이 명령을 사용하여 상기 후속 명령의 에뮬레이션을 기동하도록 동작하는 것을 특징으로 하는 데이터 처리장치.
  12. 제 11항에 있어서,
    상기 후속 명령이 부동소수점 연산을 일으킬 때, 상기 미처리 연산 검출기가 미처리된 부동소수점 연산만을 검출하는 것을 특징으로 하는 데이터 처리장치.
  13. 제 11항에 있어서,
    상기 미처리 연산 처리기가 미처리된 부동소수점 연산이 발생한 것을 판정할 수 있도록 하는 발생 지시자를 더 구비한 것을 특징으로 하는 데이터 처리장치.
  14. 제 11항에 있어서,
    미처리된 부동소수점 연산을 일으킨 부동소수점 연산의 판정을 가능하게 하는 연산 지시자를 더 구비한 것을 특징으로 하는 데이터 처리장치.
  15. 제 11항에 있어서,
    상기 미처리 연산 처리기는, 상기 제 1 명령 세트의 상기 명령을 에뮬레이션하기 전에, 상기 미처리된 연산을 처리하기 위해 기존 메카니즘을 사용하는 것을 특징으로 하는 데이터 처리장치.
  16. 제 15항에 있어서,
    상기 미처리 연산 처리기는 고정 길이의 부동소수점 명령을 실행하고, 상기 고정 길이의 부동소수점 명령의 실행은 상기 미처리된 연산을 처리하기 위해 기존의 메카니즘을 사용하는 효과를 가지는 것을 특징으로 하는 데이터 처리장치.
  17. 제 1항, 제 2항, 제 3항 또는 제 10항 중 어느 한 항에 있어서,
    상기 1개 이상의 추가 명령 세트는 상기 프로그램 명령을 실행하는 프로세서 코어의 네이티브 명령 세트인 것을 특징으로 하는 데이터 처리장치.
  18. 제 1항, 제 2항, 제 3항 또는 제 10항 중 어느 한 항에 있어서,
    상기 제 1 명령 세트는 해석된 명령 세트인 것을 특징으로 하는 데이터 처리장치.
  19. 제 1항, 제 2항, 제 3항 또는 제 10항 중 어느 한 항에 있어서,
    상기 제 1 명령 세트는 자바 바이트코드 명령을 포함하는 것을 특징으로 하는 데이터 처리장치.
  20. 제 1항, 제 2항, 제 3항 또는 제 10항 중 어느 한 항에 있어서,
    상기 미처리된 연산 후에 실행을 재시작하는 재시작 논리를 더 구비하고,
    상기 데이터 처리장치는 상기 복수의 명령 세트 중 1개의 명령 세트의 명령에 대응하는 1개 이상의 번역기 출력신호의 세트의 시퀀스를 발생하여, 상기 복수의 명령 세트의 적어도 1개의 명령을 표시하도록 동작하고, 각각의 시퀀스는 상기 시퀀스 내부의 최종 연산이 실행될 때까지 입력 변수들에 어떤 변화도 행해지지 않도록 하는 시퀀스이며,
    미처리된 연산의 발생후에, 상기 복수의 명령 세트의 적어도 1개의 명령을 표시하는 연산의 시퀀스를 실행하는 동안,
    (i) 상기 시퀀스의 최종 연산의 실행을 개시하기 전에 상기 미처리된 연산이 발생하면, 상기 재시작 논리가 상기 시퀀스의 첫 번째 연산에서 실행을 재시작하고,
    (ii) 상기 시퀀스의 최종 연산의 실행을 개시한 후에 상기 미처리된 연산이 발생하면, 상기 재시작 논리가 상기 시퀀스에 뒤따르는 다음 명령에서 실행을 재시작 하는 것을 특징으로 하는 데이터 처리장치.
  21. 제 1 명령 세트와 1개 이상의 추가 명령 세트로부터의 프로그램 명령의 제어하에서 데이터를 처리하는 방법에 있어서,
    상기 제 1 명령 세트의 프로그램 명령의 실행시에 일어나는 미처리된 연산을 검출하는 단계(238)와,
    상기 미처리된 연산을 검출하였을 때, 상기 1개 이상의 추가 명령 세트 중 적어도 1개의 추가 명령 세트의 1개 이상의 명령을 사용하여 상기 제 1 명령 세트의 상기 명령의 에뮬레이션을 기동하는 단계(250)와,
    상기 1개 이상의 추가 명령 세트의 예외 처리 메카니즘을 사용하여 상기 제 1 명령 세트의 상기 명령의 에뮬레이션시에 일어나는 임의의 추가의 미처리 연산을 처리하는 단계를 포함하는 것을 특징으로 데이터 처리방법.
  22. 제 21항에 있어서,
    상기 검출단계는 명령어의 미처리된 페치를 검출하는 것을 특징으로 하는 데이터 처리방법.
  23. 제 21항에 있어서,
    상기 검출단계는 미처리된 부동소수점 연산을 검출하는 것을 특징으로 하는 데이터 처리방법.
  24. 제 21항, 제 22항 또는 제 23항 중 어느 한 항에 있어서,
    상기 제 1 명령 세트는 가변 길이 명령 세트이고, 상기 1개 이상의 추가 명령 세트 중 적어도 1개의 추가 명령 세트는 고정 길이 명령 세트인 것을 특징으로 하는 데이터 처리방법.
  25. 제 21항, 제 22항 또는 제 23항 중 어느 한 항에 있어서,
    상기 제 1 명령 세트는 가변 길이 명령 세트이고, 상기 1개 이상의 추가 명령 세트 모두는 고정 길이 명령 세트인 것을 특징으로 하는 데이터 처리방법.
  26. 제 24항에 있어서,
    실행되는 프로그램 명령을 포함하는 고정 길이 명령어를 페치하는 단계를 구비하고, 상기 가변 길이 명령 세트로부터의 적어도 일부의 프로그램 명령은 1개 이상의 명령어에 걸쳐있는 것을 특징으로 하는 데이터 처리방법.
  27. 제 26항에 있어서,
    가변 길이 명령의 일부를 포함하는 두 번째 또는 다음의 명령어에 해당하는 명령어의 미처리된 페치를 검출하였을 때, 상기 가변 길이 명령을 중단하고, 1개 이상의 고정 길이 명령을 사용하여 상기 가변 길이 명령의 에뮬레이션을 기동하는 것을 특징으로 하는 데이터 처리방법.
  28. 제 26항에 있어서,
    상기 가변 길이 명령이 메모리 페이지 경계를 교차하는 것으로 판정된 경우에 명령어의 미처리된 페치를 검출하였을 때, 상기 가변 길이 명령을 중단하고, 1개 이상의 고정 길이 명령을 사용하여 상기 가변 길이 명령의 에뮬레이션을 기동하는 것을 특징으로 하는 데이터 처리방법.
  29. 제 26항에 있어서,
    상기 가변 길이 명령이 메모리 페이지 경계의 종료 위치의 일정한 수의 바이트 내에서 시작하는 것으로 판정되고, 상기 일정한 수의 바이트가 처리된 가장 길이가 긴 가변 길이 명령보다 작은 경우에 명령어의 미처리된 페치를 검출하였을 때, 상기 가변 길이 명령을 중단하고, 1개 이상의 고정 길이 명령을 사용하여 상기 가변 길이 명령의 에뮬레이션을 기동하는 것을 특징으로 하는 데이터 처리방법.
  30. 제 23항에 있어서,
    복수의 부동소수점 연산이 상기 제 1 명령 세트의 단일 명령의 실행중에 실행될 수 있으며, 상기 복수의 부동소수점 연산 중 일부가 미처리된 부동소수점 연산을 잠재적으로 발생시키고, 상기 미처리 연산 검출기는 상기 복수의 부동소수점 연산 중 일부에 의해 발생되는 미처리된 부동소수점 연산을 검출하도록 동작하는 것을 특징으로 하는 데이터 처리방법.
  31. 제 23항 또는 제 30항에 있어서,
    상기 검출은, 미처리된 부동소수점 연산을 일으키는 상기 제 1 명령 세트의 명령의 실행시에 미처리된 부동소수점 연산을 즉시 검출하지 않고, 그 대신에 상기 제 1 명령 세트의 후속 명령의 실행시에 미처리된 부동소수점 연산을 검출하여, 상기 후속 명령을 중단하고, 1개 이상의 고정 길이 명령을 사용하여 상기 후속 명령의 에뮬레이션을 기동하는 것을 특징으로 하는 데이터 처리방법.
  32. 제 31항에 있어서,
    상기 후속 명령이 부동소수점 연산을 일으킬 때, 상기 검출은 미처리된 부동소수점 연산만을 검출하는 것을 특징으로 하는 데이터 처리방법.
  33. 제 31항에 있어서,
    상기 미처리 연산 처리기가 미처리된 부동소수점 연산이 발생한 것을 판정할 수 있도록 하는 발생 지시자를 더 구비한 것을 특징으로 하는 데이터 처리방법.
  34. 제 31항에 있어서,
    미처리된 부동소수점 연산을 일으킨 부동소수점 연산의 판정을 가능하도록 지시자를 설정하는 단계를 더 포함하는 것을 특징으로 하는 데이터 처리방법.
  35. 제 31항에 있어서,
    상기 미처리된 연산의 처리는, 상기 제 1 명령 세트의 상기 명령을 에뮬레이션하기 전에, 상기 미처리된 연산을 처리하기 위해 기존 메카니즘을 사용하는 것을 특징으로 하는 데이터 처리방법.
  36. 제 35항에 있어서,
    상기 미처리된 연산의 처리는 고정 길이의 부동소수점 명령을 실행하고, 상기 고정 길이의 부동소수점 명령의 실행은 상기 미처리된 연산을 처리하기 위해 기존의 메카니즘을 사용하는 효과를 가지는 것을 특징으로 하는 데이터 처리방법.
  37. 제 21항, 제 22항, 제 23항 또는 제 30항 중 어느 한 항에 있어서,
    상기 1개 이상의 추가 명령 세트는 상기 프로그램 명령을 실행하는 프로세서 코어의 네이티브 명령 세트인 것을 특징으로 하는 데이터 처리방법.
  38. 제 21항, 제 22항, 제 23항 또는 제 30항 중 어느 한 항에 있어서,
    상기 제 1 명령 세트는 해석된 명령 세트인 것을 특징으로 하는 데이터 처리방법.
  39. 제 21항, 제 22항, 제 23항 또는 제 30항 중 어느 한 항에 있어서,
    상기 제 1 명령 세트는 자바 바이트코드 명령을 포함하는 것을 특징으로 하는 데이터 처리방법.
  40. 제 21항, 제 22항, 제 23항 또는 제 30항 중 어느 한 항에 있어서,
    상기 복수의 명령 세트 중 1개의 명령 세트의 명령에 대응하는 1개 이상의 번역기 출력신호의 세트의 시퀀스를 발생하여, 상기 복수의 명령 세트의 적어도 1개의 명령을 표시하는 단계를 더 포함하고, 각각의 시퀀스는 상기 시퀀스 내부의 최종 연산이 실행될 때까지 입력 변수들에 어떤 변화도 행해지지 않도록 하는 시퀀스이며,
    미처리된 연산의 발생후에, 상기 복수의 명령 세트의 상기 적어도 1개의 명령을 표시하는 연산의 시퀀스를 실행하는 동안,
    (i) 상기 시퀀스의 최종 연산의 실행을 개시하기 전에 상기 미처리된 연산이 발생하면, 상기 재시작 논리가 상기 시퀀스의 첫 번째 연산에서 실행을 재시작하고,
    (ii) 상기 시퀀스의 최종 연산의 실행을 개시한 후에 상기 미처리된 연산이 발생하면, 상기 재시작 논리가 상기 시퀀스에 뒤따르는 다음 명령에서 실행을 재시작 하는 것을 특징으로 하는 데이터 처리방법.
  41. 데이터 처리장치를 제어하여, 제 1 명령 세트와 1개 이상의 추가 명령 세트로부터의 프로그램 명령의 제어하에서 데이터를 처리하는 컴퓨터 프로그램을 저장한 컴퓨터 판독가능한 저장 매체에 있어서,
    상기 제 1 명령 세트의 명령의 실행시에 일어나는 미처리된 연산을 검출하였을 때, 상기 1개 이상의 추가 명령 세트 중 적어도 1개의 추가 명령 세트의 1개 이상의 명령을 사용하여, 상기 미처리된 연산을 일으킨 상기 명령의 에뮬레이션을 기동하도록 동작하는 미처리 연산 처리기 논리(250)와,
    상기 제 1 명령 세트의 상기 명령의 상기 에뮬레이션시에 일어나는 임의의 추가의 미처리 연산을 처리하도록 동작하는 상기 1개 이상의 추가 명령 세트의 예외 처리 논리(236)를 포함하는 것을 특징으로 컴퓨터 프로그램을 저장한 컴퓨터 판독가능한 저장 매체.
  42. 제 41항에 있어서,
    상기 미처리된 연산은 명령어의 미처리된 페치인 것을 특징으로 하는 컴퓨터 프로그램을 저장한 컴퓨터 판독가능한 저장 매체.
  43. 제 41항에 있어서,
    상기 미처리된 연산은 1개 이상의 미처리된 부동소수점 연산인 것을 특징으로 하는 컴퓨터 프로그램을 저장한 컴퓨터 판독가능한 저장 매체.
  44. 제 41항, 제 42항 또는 제 43항 중 어느 한 항에 있어서,
    상기 제 1 명령 세트는 가변 길이 명령 세트이고, 상기 1개 이상의 추가 명령 세트 중 적어도 1개의 추가 명령 세트는 고정 길이 명령 세트인 것을 특징으로 하는 컴퓨터 프로그램을 저장한 컴퓨터 판독가능한 저장 매체.
  45. 제 41항, 제 42항 또는 제 43항 중 어느 한 항에 있어서,
    상기 제 1 명령 세트는 가변 길이 명령 세트이고, 상기 1개 이상의 추가 명령 세트 모두는 고정 길이 명령 세트인 것을 특징으로 하는 컴퓨터 프로그램을 저장한 컴퓨터 판독가능한 저장 매체.
  46. 제 44항에 있어서,
    실행되는 프로그램 명령을 포함하는 고정 길이 명령어가 페치되고, 상기 가변 길이 명령 세트로부터의 적어도 일부의 프로그램 명령은 1개 이상의 명령어에 걸쳐있는 것을 특징으로 하는 컴퓨터 프로그램을 저장한 컴퓨터 판독가능한 저장 매체.
  47. 제 46항에 있어서,
    가변 길이 명령의 일부를 포함하는 두 번째 또는 다음의 명령어에 해당하는 명령어의 미처리된 페치를 검출하였을 때, 상기 가변 길이 명령을 중단하고, 1개 이상의 고정 길이 명령을 사용하여 상기 가변 길이 명령의 에뮬레이션을 기동하는 것을 특징으로 하는 컴퓨터 프로그램을 저장한 컴퓨터 판독가능한 저장 매체.
  48. 제 46항에 있어서,
    상기 가변 길이 명령이 메모리 페이지 경계를 교차하는 것으로 판정된 경우에 명령어의 미처리된 페치를 검출하였을 때, 상기 가변 길이 명령을 중단하고, 1개 이상의 고정 길이 명령을 사용하여 상기 가변 길이 명령의 에뮬레이션을 기동하는 것을 특징으로 하는 컴퓨터 프로그램을 저장한 컴퓨터 판독가능한 저장 매체.
  49. 제 46항에 있어서,
    상기 가변 길이 명령이 메모리 페이지 경계의 종료 위치의 일정한 수의 바이트 내에서 시작하는 것으로 판정되고, 상기 일정한 수의 바이트가 처리된 가장 길이가 긴 가변 길이 명령보다 작은 경우에 명령어의 미처리된 페치를 검출하였을 때, 상기 가변 길이 명령을 중단하고, 1개 이상의 고정 길이 명령을 사용하여 상기 가변 길이 명령의 에뮬레이션을 기동하는 것을 특징으로 하는 컴퓨터 프로그램을 저장한 컴퓨터 판독가능한 저장 매체.
  50. 제 43항에 있어서,
    복수의 부동소수점 연산이 상기 제 1 명령 세트의 단일 명령의 실행중에 실행될 수 있으며, 상기 복수의 부동소수점 연산 중 일부가 미처리된 부동소수점 연산을 잠재적으로 발생시키고, 상기 미처리 연산 검출기는 상기 복수의 부동소수점 연산 중 일부에 의해 발생되는 미처리된 부동소수점 연산을 검출하도록 동작하는 것을 특징으로 하는 컴퓨터 프로그램을 저장한 컴퓨터 판독가능한 저장 매체.
  51. 제 43항 또는 제 50항에 있어서,
    미처리된 연산의 검출은, 미처리된 부동소수점 연산을 일으키는 상기 제 1 명령 세트의 명령의 실행시에 미처리된 부동소수점 연산을 즉시 검출하지 않고, 그 대신에 상기 제 1 명령 세트의 후속 명령의 실행시에 미처리된 부동소수점 연산을 검출하여, 상기 후속 명령을 중단하고, 1개 이상의 고정 길이 명령을 사용하여 상기 후속 명령의 에뮬레이션을 기동하는 것을 특징으로 하는 컴퓨터 프로그램을 저장한 컴퓨터 판독가능한 저장 매체.
  52. 제 51항에 있어서,
    상기 후속 명령이 부동소수점 연산을 일으킬 때, 미처리된 연산의 검출은 미처리된 부동소수점 연산만을 검출하는 것을 특징으로 하는 컴퓨터 프로그램을 저장한 컴퓨터 판독가능한 저장 매체.
  53. 제 51항에 있어서,
    상기 미처리 연산 처리기가 미처리된 부동소수점 연산이 발생한 것을 판정할 수 있도록 하는 발생 지시자를 더 구비한 것을 특징으로 하는 컴퓨터 프로그램을 저장한 컴퓨터 판독가능한 저장 매체.
  54. 제 51항에 있어서,
    미처리된 부동소수점 연산을 일으킨 부동소수점 연산의 판정을 가능하도록 가능하게 하는 연산 지지자 논리를 더 구비한 것을 특징으로 하는 컴퓨터 프로그램을 저장한 컴퓨터 판독가능한 저장 매체.
  55. 제 51항에 있어서,
    상기 미처리 연산 처리기 논리는, 상기 제 1 명령 세트의 상기 명령을 에뮬레이션하기 전에, 상기 미처리된 연산을 처리하기 위해 기존 메카니즘을 사용하는 것을 특징으로 하는 컴퓨터 프로그램을 저장한 컴퓨터 판독가능한 저장 매체.
  56. 제 55항에 있어서,
    상기 미처리 연산 처리기 논리는 고정 길이의 부동소수점 명령을 실행하고, 상기 고정 길이의 부동소수점 명령의 실행은 상기 미처리된 연산을 처리하기 위해 기존의 메카니즘을 사용하는 효과를 가지는 것을 특징으로 하는 컴퓨터 프로그램을 저장한 컴퓨터 판독가능한 저장 매체.
  57. 제 41항, 제 42항, 제 43항 또는 제 50항 중 어느 한 항에 있어서,
    상기 1개 이상의 추가 명령 세트는 상기 프로그램 명령을 실행하는 프로세서 코어의 네이티브 명령 세트인 것을 특징으로 하는 컴퓨터 프로그램을 저장한 컴퓨터 판독가능한 저장 매체.
  58. 제 41항, 제 42항, 제 43항 또는 제 50항 중 어느 한 항에 있어서,
    상기 제 1 명령 세트는 해석된 명령 세트인 것을 특징으로 하는 컴퓨터 프로그램을 저장한 컴퓨터 판독가능한 저장 매체.
  59. 제 41항, 제 42항, 제 43항 또는 제 50항 중 어느 한 항에 있어서,
    상기 제 1 명령 세트는 자바 바이트코드 명령을 포함하는 것을 특징으로 하는 컴퓨터 프로그램을 저장한 컴퓨터 판독가능한 저장 매체.
  60. 제 41항, 제 42항, 제 43항 또는 제 50항 중 어느 한 항에 있어서,
    상기 미처리된 연산후에 실행을 재시작하는 재시작 논리를 더 구비하고,
    상기 데이터 처리장치는 상기 복수의 명령 세트 중 1개의 명령 세트의 명령에 대응하는 1개 이상의 번역기 출력신호의 세트의 시퀀스를 발생하여, 상기 복수의 명령 세트의 적어도 1개의 명령을 표시하도록 동작하고, 각각의 시퀀스는 상기 시퀀스 내부의 최종 연산이 실행될 때까지 입력 변수들에 어떤 변화도 행해지지 않도록 하는 시퀀스이며,
    미처리된 연산의 발생후에, 상기 복수의 명령 세트의 상기 적어도 1개의 명령을 표시하는 연산의 시퀀스를 실행하는 동안,
    (i) 상기 시퀀스의 최종 연산의 실행을 개시하기 전에 상기 미처리된 연산이 발생하면, 상기 재시작 논리가 상기 시퀀스의 첫 번째 연산에서 실행을 재시작하고,
    (ii) 상기 시퀀스의 최종 연산의 실행을 개시한 후에 상기 미처리된 연산이 발생하면, 상기 재시작 논리가 상기 시퀀스에 뒤따르는 다음 명령에서 실행을 재시작하는 것을 특징으로 하는 컴퓨터 프로그램을 저장한 컴퓨터 판독가능한 저장 매체.
KR1020037015480A 2001-05-31 2002-02-26 다중 명령 세트 시스템에서의 미처리된 연산 처리 KR100864891B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB0113197A GB2376098B (en) 2001-05-31 2001-05-31 Unhandled operation handling in multiple instruction set systems
GB0113197.8 2001-05-31
PCT/GB2002/000858 WO2002097609A2 (en) 2001-05-31 2002-02-26 Unhandled operation handling in multiple instruction set systems

Publications (2)

Publication Number Publication Date
KR20040005992A KR20040005992A (ko) 2004-01-16
KR100864891B1 true KR100864891B1 (ko) 2008-10-22

Family

ID=9915615

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020037015480A KR100864891B1 (ko) 2001-05-31 2002-02-26 다중 명령 세트 시스템에서의 미처리된 연산 처리

Country Status (13)

Country Link
US (1) US7162611B2 (ko)
EP (1) EP1402360B1 (ko)
JP (1) JP3732198B2 (ko)
KR (1) KR100864891B1 (ko)
CN (1) CN100524220C (ko)
AU (1) AU2002234762A1 (ko)
DE (1) DE60210613T2 (ko)
GB (1) GB2376098B (ko)
IL (2) IL158791A0 (ko)
MY (1) MY127346A (ko)
RU (1) RU2287178C2 (ko)
TW (1) TWI242159B (ko)
WO (1) WO2002097609A2 (ko)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4485198B2 (ja) * 2001-09-12 2010-06-16 株式会社ルネサステクノロジ Javaアクセラレータを備えたプロセッサシステム
GB2402764B (en) * 2003-06-13 2006-02-22 Advanced Risc Mach Ltd Instruction encoding within a data processing apparatus having multiple instruction sets
CN1969009A (zh) * 2004-06-18 2007-05-23 第一毛织株式会社 阻燃热塑性树脂组合物
US7167971B2 (en) 2004-06-30 2007-01-23 International Business Machines Corporation System and method for adaptive run-time reconfiguration for a reconfigurable instruction set co-processor architecture
US9183011B2 (en) * 2006-10-31 2015-11-10 Oracle America Inc. Method and system for runtime environment emulation
CN101853148B (zh) * 2009-05-19 2014-04-23 威盛电子股份有限公司 适用于微处理器的装置及方法
JP5565228B2 (ja) * 2010-09-13 2014-08-06 ソニー株式会社 プロセッサ
US8914615B2 (en) 2011-12-02 2014-12-16 Arm Limited Mapping same logical register specifier for different instruction sets with divergent association to architectural register file using common address format
WO2013101124A1 (en) 2011-12-29 2013-07-04 Intel Corporation Packed data operation mask comparison processors, methods, systems, and instructions
US9710266B2 (en) * 2012-03-15 2017-07-18 International Business Machines Corporation Instruction to compute the distance to a specified memory boundary
WO2013139015A1 (en) * 2012-03-22 2013-09-26 Intel Corporation Hybrid emulation and kernel function processing systems and methods
JP6064993B2 (ja) * 2012-03-30 2017-01-25 日本電気株式会社 演算処理装置、その演算処理方法、及び演算処理プログラム
WO2016145498A1 (pt) * 2015-03-13 2016-09-22 Universidade Estadual De Campinas - Unicamp Método e sistema para emulação de instruções e execução de código legado
CN110750303B (zh) * 2019-09-25 2020-10-20 支付宝(杭州)信息技术有限公司 基于fpga的流水线式指令读取方法及装置

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6021265A (en) 1994-06-10 2000-02-01 Arm Limited Interoperability with multiple instruction sets

Family Cites Families (48)

* 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
US5781750A (en) * 1994-01-11 1998-07-14 Exponential Technology, Inc. Dual-instruction-set architecture CPU with hidden software emulation mode
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
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
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
US6014723A (en) * 1996-01-24 2000-01-11 Sun Microsystems, Inc. Processor with accelerated array access bounds checking
US6038643A (en) 1996-01-24 2000-03-14 Sun Microsystems, Inc. Stack management unit and method for a processor having a stack
WO1997027536A1 (en) * 1996-01-24 1997-07-31 Sun Microsystems, Inc. Instruction folding for a stack-based machine
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
US6026845A (en) * 1996-04-24 2000-02-22 Bighorn Valve, Inc. Flow, split Venturi, axially-rotated valve
US5905893A (en) * 1996-06-10 1999-05-18 Lsi Logic Corporation Microprocessor adapted for executing both a non-compressed fixed length instruction set and a compressed variable length instruction set
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
US6052530A (en) * 1996-10-09 2000-04-18 Hewlett-Packard Co. Dynamic translation system and method for optimally translating computer code
US6606743B1 (en) * 1996-11-13 2003-08-12 Razim Technology, Inc. Real time program language accelerator
US5953741A (en) * 1996-11-27 1999-09-14 Vlsi Technology, Inc. Stack cache for stack-based processor and method thereof
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
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
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
WO1999018484A2 (en) * 1997-10-02 1999-04-15 Koninklijke Philips Electronics N.V. A processing device for executing virtual machine instructions
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
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
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
US6631514B1 (en) * 1998-01-06 2003-10-07 Hewlett-Packard Development, L.P. Emulation system that uses dynamic binary translation and permits the safe speculation of trapping operations
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
US6480952B2 (en) * 1998-05-26 2002-11-12 Advanced Micro Devices, Inc. Emulation coprocessor
US6163764A (en) * 1998-10-12 2000-12-19 Intel Corporation Emulation of an instruction set on an instruction set architecture transition
US6332215B1 (en) 1998-12-08 2001-12-18 Nazomi Communications, Inc. Java virtual machine hardware for RISC and CISC processors
US6338134B1 (en) * 1998-12-29 2002-01-08 International Business Machines Corporation Method and system in a superscalar data processing system for the efficient processing of an instruction by moving only pointers to data
US7275246B1 (en) * 1999-01-28 2007-09-25 Ati International Srl Executing programs for a first computer architecture on a computer of a second architecture
US6297434B1 (en) * 1999-08-11 2001-10-02 Jose Mario Martello Wedge adjustable bridge for stringed instruments
US6718539B1 (en) * 2000-12-22 2004-04-06 Lsi Logic Corporation Interrupt handling mechanism in translator from one instruction set to another

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6021265A (en) 1994-06-10 2000-02-01 Arm Limited Interoperability with multiple instruction sets

Also Published As

Publication number Publication date
DE60210613D1 (de) 2006-05-24
AU2002234762A1 (en) 2002-12-09
EP1402360B1 (en) 2006-04-12
RU2003137828A (ru) 2005-05-27
WO2002097609A2 (en) 2002-12-05
DE60210613T2 (de) 2007-02-08
US7162611B2 (en) 2007-01-09
CN100524220C (zh) 2009-08-05
US20020188826A1 (en) 2002-12-12
GB2376098B (en) 2004-11-24
IL158791A (en) 2008-07-08
CN1522404A (zh) 2004-08-18
MY127346A (en) 2006-11-30
EP1402360A2 (en) 2004-03-31
IL158791A0 (en) 2004-05-12
TWI242159B (en) 2005-10-21
JP2004538556A (ja) 2004-12-24
GB2376098A (en) 2002-12-04
JP3732198B2 (ja) 2006-01-05
RU2287178C2 (ru) 2006-11-10
WO2002097609A3 (en) 2003-12-31
KR20040005992A (ko) 2004-01-16
GB0113197D0 (en) 2001-07-25

Similar Documents

Publication Publication Date Title
KR100816781B1 (ko) 다중 명령어 세트를 사용한 데이터 처리
US5944841A (en) Microprocessor with built-in instruction tracing capability
JP3615770B2 (ja) アドレスされた構成部分の思索の失敗を検出するメモリ・コントローラ
JP2610104B2 (ja) 命令オペレーション・コードの検査装置及び方法
US7089539B2 (en) Program instruction interpretation
JP2001507151A (ja) 先進のマイクロプロセッサのためのゲート格納バッファ
JP2001504957A (ja) 先進のプロセッサにおけるメモリ・データ・エリアシング方法および装置
KR100864891B1 (ko) 다중 명령 세트 시스템에서의 미처리된 연산 처리
JP3776132B2 (ja) マイクロプロセッサの改良
US20240061682A1 (en) Load chunk instruction and store chunk instruction
US6907515B2 (en) Configuration control within data processing systems
JP3621116B2 (ja) 先進のプロセッサのための変換メモリ保護装置
US20070156386A1 (en) Linearization of page based memory for increased performance in a software emulated central processing unit
JP3654913B2 (ja) 一時的にターゲット・プロセッサの状態を保持する装置を備えたホスト・マイクロプロセッサ
JP3652956B2 (ja) エミュレーション装置

Legal Events

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

Payment date: 20120924

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20130926

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20140923

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20150918

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20160921

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20170919

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20180918

Year of fee payment: 11