KR100623403B1 - 가상 머신 명령을 처리하기 위한 데이터 처리 장치 - Google Patents

가상 머신 명령을 처리하기 위한 데이터 처리 장치 Download PDF

Info

Publication number
KR100623403B1
KR100623403B1 KR1019997004831A KR19997004831A KR100623403B1 KR 100623403 B1 KR100623403 B1 KR 100623403B1 KR 1019997004831 A KR1019997004831 A KR 1019997004831A KR 19997004831 A KR19997004831 A KR 19997004831A KR 100623403 B1 KR100623403 B1 KR 100623403B1
Authority
KR
South Korea
Prior art keywords
instructions
instruction
preprocessor
subroutine
virtual machine
Prior art date
Application number
KR1019997004831A
Other languages
English (en)
Other versions
KR20000069240A (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 KR20000069240A publication Critical patent/KR20000069240A/ko
Application granted granted Critical
Publication of KR100623403B1 publication Critical patent/KR100623403B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • G06F9/4486Formation of subprogram jump address
    • 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/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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • 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/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • G06F9/3879Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
    • 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/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • 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
    • 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
    • G06F9/45516Runtime code conversion or optimisation
    • 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/461Saving or restoring of program or task context

Landscapes

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

Abstract

전처리기는 메모리와 처리기 코어 사이에 기능적으로 삽입된다. 전처리기는 메모리, 및 처리기 코어에 공급된 원시 명령들을 생성하는 것들로부터 자바 명령들과 같은 가상 머신 명령들을 페치한다. 특정 가상 명령에 응답하여, 전처리기는 처리기 코어에 원시의 서브루틴으로의 점프 명령을 공급하고, 처리기 코어가 서브루틴으로부터 리턴하는 때를 모니터하고, 그후 생성된 원시 명령들을 공급하는 것을 재개한다. 본 발명은 또한, 서브루틴을 호출하고 처리기로 하여금 호출하기 전에 가상 머신 명령들에 대한 호출 콘텍스트를 하이 레벨 언어의 서브루틴에 대한 호출 콘텍스트로 변환하도록 하는 특정 명령을 갖는 처리기를 제공한다.
메모리, 처리기 코어, 전처리기, 가상 머신 명령, 원시 명령

Description

가상 머신 명령을 처리하기 위한 데이터 처리 장치{Data processing device for processing virtual machine instructions}
본 발명은 청구항 제 1 항의 전제부에 기술된 바와 같은 데이터 처리 장치에 관한 것이다.
이러한 처리 장치는 동일한 양수인에게 양도되었고 동일한 발명자에 의한 미공개된 유럽 특허 출원 제 97203033.2(PHN 16542)호에 공지되어 있다. 이러한 특허 출원은 본원에 참조로서 포함된다.
처리기 코어는 일반적으로 원시 명령 세트(native instruction set)로부터만의 명령들을 실행할 수 있다. 여러 가지 이유로, 이러한 처리기 코어는 이 원시 명령 세트와 다른 명령 세트로 표현된 프로그램들을 처리할 수 있는 것이 바람직하다. 이런 방식에서, 표준 처리기 코어는 상이한 처리기 코어, 예를 들어, 자바 명령들을 실행하기 위한 코어에 의해 처리를 에뮬레이트하기 위하여 하드웨어 변경없이 사용될 수 있다. 프로그램이 표현되지만 처리기 코어가 실행할 수 있는 명령의 원시 명령 세트가 아닌 다른 명령 세트를 가상 머신 명령 세트라고 한다.
통상적으로, 가상 머신 명령 세트로부터의 명령들의 처리는, 처리기 코어에 의해 실행되는 해석 프로그램에 의해 실현된다. 이것은 미국 특허 번호 제 4,443,865 호에 개시되어 있다. 각 가상 머신 명령에 대하여, 해석 프로그램은 원시 명령들로 표현된 대응하는 실행 프로그램을 포함한다. 해석기는 처리기 코어로 하여금 메모리로부터 가상 머신 명령을 판독하게 하고, 가상 머신 명령에 대한 실행 프로그램의 어드레스를 선택하게 하며, 처리기 코어의 제어를 실행 프로그램에 전달하도록 한다. 해석기에 의한 이러한 처리는 직접적인 실행보다 본질적으로 느린데, 이는 처리기 코어가 실행 프로그램들의 어드레스들을 선택하는데 처리 사이클을 소비하고, 실행 프로그램의 기능적 임무들을 수행하기 위해 필요한 처리 사이클들 외에 제어를 전달하는데 처리 사이클을 소비하기 때문이다.
유럽 특허 출원 제 97203033.2 호는, 가상 처리 명령 세트로 표현된 프로그램들이 처리되는 속도를 향상시킨다. 이것은 메모리와 처리기 코어 사이에 전처리기를 부가함으로써 달성된다. 전처리기는 특정 머신 명령의 기능을 나타내는 하나 이상의 원시 명령들을 각각의 특정 가상 머신 명령에 저장한다. 전처리기는 메모리로부터 가상 머신 명령을 판독하고, 가상 머신 명령에 대해 규정된 원시 명령 또는 명령들을 선택하고, 이들 명령 또는 명령들을 실행을 위해 처리기 코어에 공급한다. 처리기 코어는, 가상 머신 명령에 의해 규정된 기능을 수행하는 원시 명령들을 실행한다. 이러한 원시 명령들에 대한 클럭 사이클 사이에서 처리기 코어가 적당한 원시 명령들을 선택하기 위하여 부가적인 명령들을 실행하는데 어떠한 처리기 코어 클럭 사이클도 사용되지 않는다.
또한, 유럽 특허 출원 제97203033.2호의 처리 장치는 전처리기에 의한 번역없이 메모리로부터 원시 명령들을 실행할 수 있다. 이것은 처리기 코어에 의해 발행된 명령 어드레스에 기초하여 행해지고, 전처리기는 처리기 코어에 의해 발행된 명령 어드레스가 규정된 어드레스 범위에 있을 때만 번역된 원시 명령들을 제공할 것이며, 그렇지 않으면 어드레스된 위치의 메모리 내용이 처리기 코어에 공급된다.
일반적으로는 만족스럽지만 전처리기에 의한 가상 머신 명령들의 번역은 가상 머신 명령들의 의미의 정의 융통성을 감소시키고 몇몇 가상 머신 명령들이 처리기에 과도한 메모리를 요구한다는 것이 발견되었다.
본 발명의 목적은 메모리와 처리기 코어간에 보다 융통성이 있는 전처리기를 가진 데이터 처리 장치를 제공하는 것이다.
본 발명에 따른 데이타 처리 장치는 청구항 제 1 항의 특징부를 특징으로 한다. 따라서, 선택된 가상 머신 명령(추가의 가상 머신 명령)에 응답하여, 전처리기는, 처리기 코어로 하여금 국부적으로 저장된 원시 명령들을 처리기 코어에 공급하는 대신 메모리로부터의 원시 서브루틴을 실행하도록 한다. 이런 방식으로, 전처리기는 번역된 명령들의 연속적인 실행 및 원시 서브루틴 실행의 혼합에 의해 가상 머신 프로그램을 제공한다. 서브루틴 호출들에 의한 가상 명령들을 처리하는 것은, 처리기 코어 대신 전처리기가 추가의 가상 명령으로부터 원시 서브루틴 호출 명령을 생성하는 것을 제외하고는 통상의 해석기 처리 가상 명령들과 유사하다. 이런 방식으로, 처리기 코어의 처리 사이클들이 최소로 손실된다.
원시 서브루틴으로부터 리턴할 때, 전처리기는 번역된 원시 명령들을 처리기 코어에 공급하는 것을 재개한다. 리턴을 검출하기 위해 전처리기는, 예를 들어, 처리기 코어에 의해 발행된 명령 어드레스들을 모니터할 수 있다.
본 발명에 따른 처리 장치의 실시예에서, 전처리기는 하이 레벨 언어로부터 컴파일된 서브루틴을 호출하는 것을 가능하게 한다. 가상 머신 명령들은 제 1 변수 저장 규정(a first arguement storage convention)에 의해 규정된 바와 같은 저장 위치들에서 변수들을 발견하는 것을 예상한다. 하이 레벨 언어 컴파일러들은, 서브루틴을 호출할 때 종종 "콘텍스트(context)"의 존재를 추측한다. 이 콘텍스트는, 다수의 규정된 레지스터들과 같은 특정의 소정 저장 위치들 및/또는 스택 포인터 레지스터에 의해 지시된 메모리 위치들에 저장된 서브루틴에 대한 변수들을 포함한다. 이 저장 위치들의 정의는 제 2 변수 저장 규정에 의해 결정되고, 이러한 규정은 하이 레벨 언어에서 모든 서브루틴들에 대해 균일한 방식으로 저장 위치들을 규정한다.
일반적으로, 이 제 2 저장 규정은, 예를 들어, 특정 레지스터들이 변수들에 대한 위치들로서 규정되지 않기 때문에, 하이 레벨 언어에 의해 사용된 제 1 변수 저장 규정과는 상이할 것이다.
이러한 하이 레벨 언어들로부터 컴파일된 서브루틴들을 이용하기 위하여, 본 발명은 청구항 제 3 항에 따른 데이터 처리 장치를 제공한다. 전처리기가 원시 명령들을 처리기 코어에 발행할 때, 전처리기는 실제로 제어를 서브루틴에 전달하기 전에 제 1 저장 규정(가상 머신 명령들의 변수들에 사용됨)에 의해 규정된 저장 위치들에서 제 2 변수 저장 규정에 의해 규정된 저장 위치들로 변수들을 처리기 코어가 전달하게 하도록 제어를 이러한 서브루틴에 전달하도록 한다.
일반적으로, 본 발명은 청구항 제 7 항에 따른 데이터 처리 장치에 관한 것이다. 이런 장치에서, 처리기는 하나의 변수 저장 규정에 따라 저장된 변수들을 이용하는 가상 머신 명령 같은 명령을 실행할 수 있다. 특정 명령을 만날 때, 처리기는 서브루틴을 호출하기 전에 변수들을 다른 저장 규정에 의해 미리 설정된 저장 위치들로 이동시킴으로써 응답한다.
본 발명의 이들 및 다른 장점들은 다음 상세한 설명 및 도면을 사용하여 비제한적인 예에 의해 예시된다.
도 1a 내지 도 1d는 처리 장치에서 전처리기를 배치하는 가능한 4개의 구조적 대안을 도시하는 도면.
도 2는 가상 머신 명령을 일련의 원시 명령들로 번역하기 위한 번역 테이블을 도시하는 도면.
도 3은 전처리기의 동작 실시예의 흐름도.
도 4는 변수들의 전달을 위한 흐름도.
도 1a 내지 도 1d는 처리 장치에 전처리기를 배치하는 4개의 가능한 구조적 대안들을 도시한다. 처리 장치의 이들 주요 구성요소들은 명령 메모리(120), 처리기 코어(112) 및 전처리기(130)이다. 전처리기(130)는 페치 유닛(fetch unit)(134), 변환기(132) 및 공급 유닛(136)의 기능적 직렬 연결이다.
도 1a에서 처리 장치의 주요 구성요소들은 PI 버스와 같은 일반적인 주변 상호접속 버스(140)를 통하여 상호접속된다. 전처리기(130)는 버스상 주변에 있다. 전처리기(130)는 어드레스들의 소정 범위가 전처리기에 할당되는 경우 메모리 매핑 주변부로서 작동할 수 있다. 버스(140) 상에서 이 범위의 어드레스를 갖는 명령에 대한 요청을 발행하는 처리기 코어(112)에 응답하여, 전처리기(130)는 버스(140)상에 원시 명령을 발행한다. 요청시, 전처리기(130)는 버스(140)를 통해 명령 메모리(120)로부터 가상 머신 명령을 페치한다.
도 1b 및 도 1c에서, 전처리기(130)는 처리기 코어(112)와 명령 메모리(120) 사이에 전기적으로 위치된다. 이 경우, 전처리기(130)는 명령 메모리(120)로부터의 원시 명령과 가상 머신 명령을 구별할 필요가 있다. 따라서, 이 구조들은 명령 메모리(120)에 저장된 원시 명령들의 실행을 지연시킬 수 있다. 간략히 하기 위하여, 도 1에 도시된 모든 소자들을 도 1b 내지 도 1d에 반복하여 도시하지는 않는다.
도 1d에서, 전처리기(130)는 처리기(110)에 내장된다. 전처리기(130)는 바람직하게 처리기(110)의 명령 캐시(cache)(116)와 처리기 코어(114) 사이에 위치된다. 이 구조는 최적 성능을 위하여 허용되지만, 도 1a 내지 도 1c의 구조들과는 달리 처리기(110)에 내부 변화를 요구한다.
처리기 코어는 소위 "원시"(코어 특정) 명령들의 소정 세트로부터 원시 명령들을 실행하도록 구성된다. 이것은 메모리에 접속될 때 원시 명령들의 프로그램들을 실행하기 위해 필요한 모든 것을 포함함을 의미한다. 예를 들어, 명령 및 데이터 포트를 가질 것이고, 오퍼랜드들을 저장하기 위한 레지스터들, 명령 포인터 레지스터(프로그램 카운터), 오퍼랜드들을 처리하거나 프로그램 카운터를 조정(예를 들어, 점프)하기 위한 기능 소자들, 데이터 포트를 접속하는 데이터 경로들, 레지스터들과 기능 소자들, 및 원시 명령들의 처리를 제어하기 위한 명령 디코딩 회로들을 포함한다. 내장된 소프트웨어를 실행하기 위한 적당한 예는 마이크로프로세서의 MIPS PR3001범위에 사용된 것과 같은 RISC형 코어이다.
동작시, 명령 메모리(120)는 스택 머신용 명령들과 같은 가상 머신 명령들을 저장한다. 이러한 가상 명령들의 예로는 자바 바이트 코드들이 있다. 처리기 코어의 원시 명령들은 가상 머신의 가상 머신 명령들과는 다르다. 그 자체에 의한 처리기 코어(112)는 명령 메모리(120)에 저장된 가상 머신 명령들을 직접 실행할 수 없다. 명령을 요청하는 처리기 코어(112)에 응답하여, 전처리기(130)는 원시 명령을 발행한다. 원시 명령을 생성할 수 있기 위해서는, 전처리기(130)는 가상 머신 명령 카운터를 유지한다(이 카운터는, 예를 들어, 전처리기(130)로부터 코어(112)로 전달된 명령들에 의해 갱신 및/또는 판독되는 경우 전처리기 또는 처리기 코어의 레지스터(도시되지 않음)에 위치된다). 전처리기(130)는 페치 유닛(134)을 사용하여 가상 머신 명령 카운터에 의해 지정된 어드레스에서 명령 메모리(120)로부터 가상 머신 명령을 페치한다.
전처리기(130)는 명령 메모리(120)로부터 페치된 가상 머신 명령을 적어도 하나의 원시 명령으로 변환하기 위한 변환기(132)를 포함한다. 일반적으로, 가상 머신 명령은 일련의 원시 명령들로 변환된다. 전처리기(130)는 실행시 처리기 코어(112)에 일련의 원시 명령들을 공급하기 위한 공급 유닛(136)을 더 포함한다. 가상 머신 프로그램을 실행할 때, 처리기 코어(112)는 실제로 전처리기(130)에 의해 발생된 원시 프로그램을 실행한다. 일반적으로 명령 메모리(120)의 다음 명령이 다음에 실행될 처리기 코어에 의해 요청되는 것을 처리기 코어(112)의 명령 포인터가 가리킬 때, 명령 포인터는 다음 원시 명령이 요청되는 것만을(또는 이전 명령을 다시 공급하는 것) 전처리기(130)에 나타낸다. 처리기 코어(112)는 가상 머신 명령 또는 가상 머신 명령 포인터의 (명확한) 인식을 가지지 못한다.
또한, 명령 메모리(120)가 원시 명령들을 포함한다는 것이 인식될 것이다. 이러한 원시 명령들은, 예를 들어, 시스템을 초기화하기 위하여 사용되거나, 드라이버들 또는 내장된 소프트웨어 애플리케이션들의 특별한 부분들과 같은 어떤 소프트웨어 모듈들이 최적의 성능을 위한 원시 명령들로 컴파일되도록 하는데 사용된다.
전처리기(130)는, 가상 머신 명령으로부터 유도된 변환된 원시 명령들을 공급하는지 처리기 코어(112)가 원시 명령들과 같은 메모리로부터의 명령들을 실행하도록 하는지를 결정한다. 전처리기(130)는 여러 방식으로 이러한 결정을 구현할 수 있다. 예를 들어, 전처리기(130)는 처리기 코어(112)에 의해 발행된 명령 어드레스들을 모니터할 수 있다. 발생된 명령 어드레스가 소정 범위 내에 있으면, 전처리기(130)는 변환된 명령들을 처리기 코어(112)에 공급할 것이다. 발행된 명령 어드레스가 소정 범위 밖에 있으면, 발행된 명령 어드레스에 의해 어드레스되는 메모리(120) 위치의 내용은 원시 명령으로서 처리기 코어로 전달된다. 가상 머신 명령들의 처리 동안 소정 범위 내의 프로그램 카운터를 유지하기 위하여, 전처리기(120)는 처리기 코어(112)의 프로그램 카운터가 소정 범위의 끝에 도달할 때마다 소정 범위의 시작으로의 점프 명령을 공급할 수 있다.
전처리기(130)에 변환된 명령들을 공급하기 위한 결정에 대한 다른 메카니즘은 명령의 현재 종류(가상 머신 명령/원시 명령)를 나타내는 특정 레지스터를 사용할 수 있다. 이 경우 레지스터의 내용을 변화시키기 위한 명령은 종류 변화가 발생할 때마다 실행될 필요가 있다.
처리기 코어(112)가 명령 캐시를 포함하는 처리기의 일부일 때, 전처리기(130)와 가상 처리기 코어(112) 사이의 명령 캐시를 사용하는 것이 바람직하다. 이런 방식으로, 명령 캐시와 처리기 코어(112) 모두를 통합하는 처리기의 설계는 전처리기(130)와 협력하도록 변화될 필요는 없다. 이 경우, 전처리기(130)는 새로운 캐시 라인이 요청될 때 캐시에 대한 시간에서 하나 이상의 변환된 명령들을 케이스 라인에 공급한다. 전처리기는 실제 실행에 앞서 명령들을 변환하고 캐시에 의해 미리 페치하기 위해 레지스터에 준비시 연속하는 변환된 명령들을 배치하기 위하여 통상적인 파이프라인 메카니즘(pipe-lining mechanism)을 사용할 수 있다.
또한, 전처리기와 처리기 코어(112) 사이에 명령 캐시가 존재하는 경우, 전처리기(130)는 처리기 코어(112)가 전처리기(130)로부터 명령을 수신하는 대신 명령 캐시로부터 "오래전" 변환된 명령들을 페치하지 않는 것을 보장할 필요가 있다. 이것은 명령 포인터 어드레스가 소정 범위 내에 있고 전처리기(130)가 소정 범위의 명령 포인터를 유지하기 위하여 처리기 코어(122)에 점프 명령들을 발행할 때 가상 머신 명령들이 공급되도록 하는 것을 보장한다. 변환된 명령들의 실행을 결정하기 위해 사용된 소정 범위의 명령 어드레스들이 충분히 크다면, 즉, 처리기 코어의 명령 포인터가 동일 어드레스로 리턴하기 전에 많이 명령 캐시의 적어도 캐시 크기만큼 큰 명령들이 겹쳐 쓰여진다.
명령 메모리(120)로부터 페치된 가상 머신 명령을 적어도 하나의 원시 명령으로 변환하기 위하여 변환기(132)가 사용된다. 예로서, 정수 덧셈(0x60)을 위한 자바 바이트 코드(가상 머신 명령)는 스택의 2개의 상부 요소들을 더하고, 스택으로부터 2개의 상부 요소들을 제거하여 스택에 그 합을 푸시(push)한다. 이 가상 머신 명령은, $tosp가 스택의 제 1 빈 위치(스택의 상부)를 가리키는 레지스터인 경우, MIPS 처리기(32-비트 머신)에 대한 명령들(원시 명령들)의 다음 시퀀스로 변환될 수 있다.
lw $a0, 4($tosp) // 레지스터 $a0에서 스택의 상부 요소를 로드
lw Sal, 8($tosp) // $a1에서 스택의 제 2 요소를 로드
add $a0, $a1, $a0 // $a0과 $a1을 더함, 합을 $a0에 배치
addi $tosp, $tosp, 4 // 하나의 요소만큼 스택을 낮춤
sw $a0, 4($tosp) // 스택의 새로운 상부에 합을 저장
바람직하게, 변환기(132)는 일련의 원시 명령들로 가상 머신 명령을 변환하기 위한 테이블을 포함한다. 일차원 테이블은 테이블의 각 셀이 하나의 대응하는 가상 머신 명령에 대한 일련의 원시 명령들을 포함하는 경우 사용될 수 있다. 셀 번호는 대응하는 가상 머신 명령의 값에 해당할 수 있다. 예로서, 자바 정수 덧셈(0x60)에 대한 원시 명령들의 시퀀스는 셀 96(=16진법으로 0x60)에 배치될 수 있다. 원시 명령들의 시퀀스의 길이는 여러 가상 머신들에 대해 상당히 변화할 수 있기 때문에, 바람직하게 시퀀스들은 시퀀스들이 임의의 확실한 셀 구조없이 서로 이어서 테이블에 배치된다.
도 2는 암시적인 셀 경계들이 점선을 사용하여 표시되는, 도 2에 사용하기 위한 번역 테이블(200)을 도시한다. 가상 머신 명령에 대한 시퀀스를 배치하기 위하여, 코드 인덱스 테이블(210)이 사용될 수 있으며, 그것은 각 가상 머신 명령(VMI 1 내지 VMI N)에 대하여 번역 테이블(200)의 대응 시퀀스의 시작 포인트를 나타낸다. VMI 3에 대응하는 번역 테이블(200)의 셀에 대하여, 원시 명령(NI 1 내지 NI M)의 관련 시퀀스(220)가 도시된다.
변환기(132)가 가상 머신 명령(I)을 수신할 때, 변환기는 I와 동일한 형태의 명령이 처리될 때마다 실행되어야 하는 원시 명령들의 시퀀스의 시작 포인트를 검색하기 위하여, 코드 인덱스 테이블(210)을 액세스하기 위한 인덱스로서 가상 머신 명령(I)을 사용한다. 결과적으로, 변환기(132)는 제 1 원시 명령을 판독하기 위하여 코드 인덱스 테이블(210)로부터 검색된 코드 인덱스에 의해 지시된 제 1 어드레스에서 번역 테이블(200)을 액세스한다. 이 제 1 원시 명령은 공급 유닛(136)을 통해 처리기 코어(112)에 공급된다. 결과적으로, 변환기는 가상 머신 명령(I)을 실행하기 위하여 사용된 추가의 원시 명령들을 판독하기 위하여 제 1 어드레스 다음 어드레스들에서 번역 테이블(200)을 액세스한다. 예를 들어, 번역 테이블(200)의 종료 엔트리에 의해 지시된 모든 이들 명령들이 판독되었을 때, 처리는 후속하는 가상 머신 명령에 대해 반복된다.
다른 변환 예에서 자바 바이트 코드 바이푸시(bipush) n(바이트 n을 부호 확장하고 스택의 상부에 결과를 배치하기 위해 사용됨)을 위해 제공된다. 이 가상 머신 명령은 2개의 바이트(0x16 및 n)로 구성되며, 여기서, 첫번째 바이트는 연산 동작을 나타내고 두번째 바이트는 파라미터 n을 제공한다. 명령은 다음 원시 MIPS 명령들의 시퀀스로 변환될 수 있다.
ori $a0, $0, n /* 상수 n을 갖는 레지스터 $a0 로드 */
sll $a0, $a0, 24 /* 24비트 만큼 왼쪽으로 시프트 */
sra $a0, $a0,24 /* 오른쪽으로의 산술적 시프트, 마지막 최우측
비트를 반복함으로써, 부호 확장을 유발함 */
sw $a0, $0 ($tosp) /* 스택의 새로운 상부에 결과 저장 */
addi $tosp, -4 /* 스택 크기 증가 */
이 예는 가상 머신 명령이 파라미터화될 수 있는 것을 예시하며, 여기서, 연산 코드는 적어도 하나의 오퍼랜드에 이어진다. 유익하게, 변환기(132)는 원시 명령들이 전체 코드 또는 명령 스켈레톤(skeleton)에 의해 표현되는 번역 테이블(200)을 포함한다. 예로서, 명령 addi $tosp, -4(이전 예의 시퀀스의 최종 명령)는 변수 부분을 포함하지 않고, 테이블에 4바이트 엔트리로서 전부 배치될 수 있다. 명령 ori $a0, $0, n(이전 예의 시퀀스의 제 1 명령)은 변수 부분을 포함하고, 스켈레톤으로서 테이블에 배치되고, 변수 부분(n)을 명시하지 않는다. 바람직하게, 명령 스켈레톤에 대한 테이블의 엔트리는 전체 명령(예를 들어, MIPS 처리기에 대해 4바이트)과 같은 폭이고, 균일한 테이블을 허용한다. 원시 명령 스켈레톤의 지정되지 않은 부분이 어떻게 채워지는가를 나타내기 위하여 부가 정보가 테이블(또는 개별적인 테이블(들))에 배치될 수 있다. 유익하게, 마이크로 프로그래밍은 지정되지 않은 부분들을 채우기 위해 사용된다. 다른 정보는 마이크로 코드를 포함하거나 나타낼 수 있다. 전체 원시 명령에 대한 구조와 동일한 구조(폭 및 구성)를 명령 스켈레톤에 대해 사용하는 것은 유익하다는 것을 알 수 있다. 그러나, 다른 구조들이 사용될 수도 있다.
가상 머신이 스택형 머신이면, 바람직하게 스택 또는 스택의 적어도 상부 요소들은 처리기 코어(112)의 레지스터들에 매핑된다. 이런 방식으로, 메모리 스택(가상 머신 스택을 가짐)은 레지스터 스택에 매핑된다(예를 들어, 스택의 매우 높은 위치들에 대한 어드레스들을 증가시킨 메모리 위치들 또는 스택의 매우 높은 위치들에 대한 어드레스들을 감소시킨 메모리 위치들, 및 스택의 매우 높은 위치들에 대한 어드레스들을 증가시킨 레지스터 위치들 또는 스택의 매우 높은 위치들에 대한 어드레스들을 감소시킨 레지스터 위치들을 사용함).
레지스터 $r1, $r2 및 $r3이 메모리 스택의 3개의 연속하는 요소들을 포함하고(여기서, 처음에 $r1은 메모리 스택의 제 1 빈 위치에 대응하고, $r2는 메모리 스택의 상부를 포함하고, $r3는 메모리 스택의 제 2 요소를 포함함), 자바 바이트 코드 바이푸시 n이 원시 MIPS 명령들의 다음 시퀀스로 변환될 수 있다고 가정하자.
ori $r1, $0, n
sll $r1, $r1, 24
sra $r1, $r1, 24
유사하게, $r2가 자바 바이트 코드의 상부이면, 명령 iadd는 다음과 같이 변환될 수 있다.
add $r3, $r2, $r3
이 경우, 전처리기(130)는 스택의 상부를 저장하는 레지스터(예를 들어, $r2)를 가리키는 포인터를 유지한다. 가상 머신 명령이 번역될 때, 전처리기는 레지스터에 대한 참조들이 스택의 상부에 대한 이 포인터의 내용에 따라 적응되는 원시 명령들을 생성한다. 포인터는 가상 명령에 따라 갱신된다. 예를 들어, 바이푸시 명령 하나의 아이템이 스택에 부가된 후, 실시예의 바이푸시 명령이 다음 바이푸시 명령에 이어지면 스택의 상부가 $r1이 되어, 이 다음 바이푸시 명령 $r0의 번역시 명령 $r0는 원시 명령들(ori $r0, $0, n'/ sll $r0, $r0, 24/ sra $r0, $r0, 24)에서 $r1 대신 사용된다. 유사하게, 자바 바이크 코드 명령 iadd 후 스택은 하나 이하의 아이템을 포함하여, 실시예의 iadd 명령이 바이푸시 명령에 이어지게 되어, 스택 상부가 $r3이 되고, 다음 바이푸시 명령의 번역시 $r2는 원시 명령들(ori $r2, $0, n'/ sll $r2, 24/sra $r2, $r2, 24)에서 $r1 대신 사용된다.
논리적으로, 전처리기(130)는 명령 메모리(120)에서 현재(또는 다음) 가상 머신 명령을 가리키는 독립적인 가상 머신 명령 포인터를 관리한다. 처리기 코어(112)는 자체 명령 포인터(프로그램 카운터)를 가지며 그 프로그램 카운터에 기초하여 명령 어드레스들을 발행한다. 전처리기(130)가 활성화될 때, 통상 이 명령 어드레스들은 각 가상 머신 명령들이 실행되는 것을 선택하기 위하여 사용되지 않는다. 이 경우, 처리기 코어의 프로그램 카운터는 부분적으로 과다하다. 처리기 코어(112)의 프로그램 카운터 및 그의 명령 페치 메카니즘은, 처리기 코어(112)가 그 자체적으로 원시 프로그램들을 실행하기 위하여 설계된 표준 코어이기 때문에 처리기 코어(112)에 존재하고, 전처리기는 선택적으로 부가된다.
가상 머신 명령들의 정규 처리동안, 처리기 코어(112)에 의해 발행된 명령 어드레스들의 값은 각 명령들을 선택하기에 부적절하다. 대신, 전처리기(130)는, 가상 머신 명령이 로딩되어 처리기 코어(112)에 전처리기(130)의 가상 머신 명령에 대해 저장된 원시 머신 명령들을 공급하는 것을 결정하기 위하여 자체의 가상 머신 명령 포인터를 사용한다. 이 저장된 원시 머신 명령들은 통상 처리기 코어의 프로그램 카운터 값 변화를 유발하는 점프, 브랜치 등의 명령들을 포함하지 않는다.
그러나, 본 발명에 따라, 전처리기(130)는 "서브루틴으로 점프" 명령(또는 그와 등가의 명령)을 처리기 코어(112)에 공급함으로써 몇몇 특정 가상 머신 명령들에 응답한다. 이 명령의 점프 타켓 어드레스는 원시 명령들의 서브루틴 시작을 포함하는 명령 메모리(120)의 위치를 가리킨다. 서브루틴 명령으로의 점프에 응답하여, 처리기 코어(112)는 점프 타켓 어드레스로부터 명령 어드레스들을 발행하고, 메모리(120)로부터 서브루틴을 만드는 원시 명령들을 수신하며, 전처리기(130)의 간섭없이 이 명령들을 실행하기 시작한다. 서브루틴의 실행동안 전처리기(130)는 변환된 명령들을 발행하는 것을 중지하며, 단순히 서브루틴으로의 본래의 점프에 해당하는 서브루틴으로부터 리턴이 발생하는지 결정하기 위하여 처리기 코어(112)의 동작을 모니터한다. 전처리기(130)가 서브루틴으로부터 이러한 리턴을 검출하면, 전처리기(130)는 가상 머신 명령들에 따라 원시 명령들의 발행을 재개한다.
도 3은 전처리기(130) 동작의 실시예의 흐름도를 도시한다. 흐름도는 간략화를 위하여 순차적인 단계들의 루프를 도시한다. 실제로 단계들은 파이프라인화될 수 있다. 즉, 루프의 하나 이상의 반복들로부터의 단계들이 동시에 실행될 수 있다. 흐름도의 제 1 단계(30)에서, 전처리기(130)는 가상 머신 프로그램 카운터를 증가시킨다. 흐름도의 제 2 단계(31)에서, 전처리기(130)는 가상 머신 프로그램 카운터에 의해 지적된 가상 머신 명령을 페치한다. 제 3 단계(32)에서, 전처리기(130)는 가상 머신 명령에 대한 임의의 원시 명령들이 있는지를 검사한다. 만약 없다면, 흐름도는 제 1 단계(30)로부터 흐름도를 계속하고, 만약 있다면 전처리기(130)는 제 4 단계(33)에서 계속한다. 제 4 단계(33)에서, 전처리기(130)는 원시 서브루틴이 호출되었는지 그렇지 않은지를 검사한다. 호출되지 않았다면, 전처리기(130)는 처리기 코어(130)에 원시 명령을 공급하고 남겨진 가상 머신 명령에 대한 임의의 다른 원시 명령들인지를 알아내기 위하여 제 3 단계(32)에서 계속되는 제 5 단계(34)를 실행한다.
제 4 단계(33)에서 원시 서브루틴이 호출되어야 한다는 것을 전처리기(130)가 결정하면, 전처리기(130)는 적당한 서브루틴 호출 명령을 처리기 코어(112)에 공급하는 제 6 단계(35)로 진행한다. 그 후에, 전처리기(130)가 제 7 단계(36)에서 처리기 코어의 동작을 모니터하고 처리기 코어(112)가 서브루틴으로부터 리턴되었는지의 여부를 제 8 단계(37)에서 결정한다. 전처리기(130)는 처리기 코어(112)가 서브루틴으로부터 리턴될 때까지 처리기 코어(112)의 동작을 모니터하는 것을 유지한다. 그래서, 전처리기는 제 3 단계(32)로 리턴한다.
처리기 코어(112)의 동작을 모니터링하는 유익한 방법은 처리기 코어(112)에 의해 발행된 명령 어드레스들을 것을 관찰하는 것이다. 이 경우, 전처리기(130)는, 변환된 명령들을 처리기 코어(112)에 공급하거나 처리기 코어(112)가 원시 명령들을 실행할 수 있도록 하는지를 검출하기 위하여 처리기 코어(112)에 의해 발행된 명령 어드레스를 사용한다. 예를 들어, 변환된 명령들은 발행된 어드레스가 소정 범위에 있을때만 공급된다. 이 경우, 처리기 코어(112)에 의해 발행된 명령 어드레스는 서브루틴 명령으로의 점프가 발행될 때 이 소정 범위내에 있을 것이다. 점프 타켓 어드레스는 소정 범위 밖에 있어 메모리(120)로부터 원시 명령들의 실행을 유발하고, 서브루틴으로부터의 리턴시 처리기 코어(112)에 의해 발행된 명령 어드레스는 소정 범위로 리턴하며 전처리기(130)가 변환된 명령들을 공급하는 것을 재개하도록 한다.
물론, 서브루틴의 원시 명령들을 실행하는 변환된 명령들을 공급하는중 스위치는 다양한 다른 방식으로 실행될 수 있다. 예를 들어, 서브루틴을 시작하기 위한 서브루틴으로의 점프 대신 점프를 사용할 수 있고 서브루틴의 끝에서 소정 범위 어디든 다시 점프를 실행할 수 있다. 이것은 서브루틴의 실행이 완료되었다는 것을 전처리기가 검출할 수 있도록 할 것이다.
바람직하게, 전처리기는 서브루틴들의 하나 이상의 어드레스들을 저장하기 위한 RAM 메모리를 사용한다. 이 경우, 가상 머신 명령들을 원시 명령들로 변환하기 위해 사용되는 원시 명령들의 테이블은, 선택된 명령들에 대해, 전처리기(130)가 처리기 코어(112) 및 포인터에 대한 원시의 서브루틴으로의 점프 명령을, 서브루틴으로의 점프 명령의 타켓 어드레스가 저장되는 RAM의 위치에 공급하여야 하는 것을 나타내는 엔트리를 포함할 수 있다. 이러한 엔트리와 만날 때, 전처리기(130)는 서브루틴으로의 점프 명령을 처리기 코어(112)에 공급할 것이고, 예를 들어, 타켓 어드레스는 이 명령으로 대체되거나 타켓 어드레스를 저장하는 RAM 위치에 대한 포인터를 사용하여 서브루틴으로의 점프 간접 명령을 사용한다.
타켓 어드레스를 저장하기 위한 RAM의 사용은 다른 하드웨어를 구성하지 않고 매우 빠르게 가상 머신 명령에 대해 실행되는 서브루틴을 변경하는 것을 가능하게 한다.
바람직하게, 전처리기(130)는 보다 복잡한 가상 머신 명령들을 실행하기 위하여 C 언어와 같은 하이 레벨 언어(HLL)로부터 컴파일된 원시 명령들의 서브루틴들을 사용하는 것을 가능하게 한다. 처리기 코어가 HLL 언어로부터 컴파일된 원시 명령들의 서브루틴을 실행하게 하는 것은 통상 서브루틴의 변수들이 처리기 코어에 대해 특정 방식으로 준비되는 것을 요구한다. 예를 들어, MIPS 처리기에서 서브루틴의 첫번째 4개의 변수들은 레지스터들(r4 내지 r7)에 존재할 것으로 기대된다. 유사하게, 결과들은 통상 특정 방식으로 유도된다. 예를 들어, MIPS 처리기에서 결과들은 레지스터들($r2, $r3)에서 유도된다. 서브루틴에 대한 리턴 어드레스는 특정 레지스터, 예를 들어, 레지스터($r31)에서 예상된다.
가상 머신 모델에서, 이 변수들 및 결과들은 가상 저장 위치들에 있고, 여기서, 전처리기는 물리적 레지스터들 및 메모리 위치들에 매핑한다. 그러나, 이 레지스터들 및 저장 위치는 HLL 서브루틴 호출들에 사용된 것과 다를 수도 있다.
따라서, 전처리기는, 하나 이상의 가상 머신 명령들에 응답하여 변수들이 HLL로부터 컴파일된 서브루틴을 호출할 것이 기대되는 저장 요소들에 가상 머신 스택의 위치들의 내용을 유지하는 저장 요소들로부터 처리기 코어가 정보를 전달하게 하는 처리기 코어에 전처리기가 원시 명령들을 우선 공급하도록 구성된다. 그후, 전처리기는 서브루틴에 제어를 전달하기 위하여 처리기 코어에 명령을 공급하고, 그 서브루틴으로부터 리턴한 전처리기는 가상 머신의 스택상 위치들의 내용을 유지하는 저장 요소들에 소정의 저장 요소들로부터 서브루틴의 결과들을 전달하기 위하여 처리기 코어에 원시 명령들을 공급한다. 바람직하게, 전처리기는 처리기 코어가 이런 방식으로 처리되는 가상 머신 명령들 중 적어도 하나에 응답하여 RAM 위치로부터 서브루틴의 어드레스를 페치하게 한다.
HLL 서브루틴의 변수들은 컴파일-시간 변수들 및 실행-시간 변수들 또는 이들의 혼합일 수 있다. 실행-시간 변수들은 프로그램 실행동안 계산된다. 따라서, 실행-시간 변수들은 프로그램이 컴파일될 때(즉, 컴파일-시간) 이용될 수 없다.
컴파일-시간에 변수가 이용 가능한 간단한 가상 머신 명령의 예로는 자바 바이트코드 '바이푸시 n'이 있다(여기서, n은 컴파일러에 의해 공급됨). 실행-시간 변수를 필요로 하는 가상 머신 명령의 예로는 자바 바이트코드 'iadd'가 있다(물론, 실제로 보다 복잡한 명령들에 대해서만 HLL 서브루틴들을 사용한다). 이 명령은 스택으로부터 2개의 정수 변수들을 더하여 그 결과를 스택상에 배치한다. 이 가상 머신 명령에 대한 하이 레벨 언어(예를 들어, C) 기능은 다음과 같이 정의될 수 있다.
int iadd(int a0, int a1)
{ return a0 + a1; }
MIPS 처리기에 대한 프로그래밍 규정은 레지스터들($r4 내지 $r7)에서 첫번째 4개의 변수들을 기대하고, 레지스터들($r2, $r3)에 결과들을 배치하기 위햐여 HLL로부터 컴파일된 서브루틴을 필요로 하며, 이어서 레지스터($r31)에 의해 지적된 어드레스를 리턴한다. HLL 컴파일러는 다음 MIPS 명령들의 시퀀스로 HLL iadd 함수를 번역한다.
add $r2, $r4, $r5
jr $r31
이 명령들은 변수들을 이용하고, 결과(add)를 제공하고 HLL 서브루틴으로부터 리턴하기 위하여 제공한다. HLL 서브루틴에 제어를 전달하기 전에, 전처리기는 실행-시간 데이터를 조작하여야 한다. 즉, 상기 기능에 대한 변수들은 함수 'iadd'를 호출하기 전에 프로그램 콘텍스트로부터 변수 레지스터들로 전달되어야 한다. 자바 가상 머신에 대하여, 이것은 자바 VM이 스택 상에 계산 값들을 배치하기 때문에 스택 값들을 조작할 것을 요구한다. 전처리기가 이러한 호출에 대하여 처리기 명령들을 생성하는 경우, MIPS 명령들의 다음 시퀀스를 생성할 수 있다.
lw $r4,4($sp) // 가상 머신 스택으로부터 변수들을 얻음
lw $r5,8($sp)
addi $sp,$sp,8
jalr $r31,iadd // HLL 서브루틴 호출
nop // MIPS 처리기 코어의 브랜치 지연 슬롯을 채움
sw $2,0($sp) // 스택상에 결과를 다시 배치함. addi $sp, $sp,-4
또한, 전처리기는 HLL 서브루틴에 의해 겹쳐 쓰여질 수 있는 저장 요소들로부터의 임의의 정보를 처리기 코어가 저장할 수 있도록 한다. 실제로, 레지스터들에 저장되는 가상 머신 스택 부분은 메모리, 바람직하게는 가상 머신 명령들의 정상적인 실행 동안(즉, HLL 서브루틴 실행 없이) 가상 머신 스택이 저장되는 위치들로 전달될 수 있다.
또한, HLL 서브루틴들은 종종 스택을 사용한다. 일반적으로, HLL 서브루틴들은 HLL 서브루틴이 호출되기 전 스택 상에 존재하는 것 "아래"의 스택의 내용을 변경하지 않는 것이 보장된다. 따라서, 실제로 HLL 서브루틴이 호출되기 전에 충분한 양의 스택 공간(성장하는 스택에 적당한 스택 포인터를 증가 또는 감소시킴으로써)을 보유한 후 필요하면 가상 머신 및 HLL 서브루틴에 대한 동일한 물리적 스택 및 스택 포인터 레지스터를 사용할 수 있다.
실행-시간 변수들을 필요로 하는 자바 바이트코드의 다른 예로는 'jsr n'이 있다('current+n' 위치에서 서브루틴으로의 점프). 이 가상 머신 명령에 대한 HLL 함수는 다음 호출 정의를 가질 수 있다(예를 들어, 파일을 포함한다).
void jsr(unsigned n, unsigned current);
이 함수에 대한 호출을 생성하는 전처리기는 MIPS 명령들의 다음 시퀀스를 처리기 코어에 공급할 수 있다.
ori $r4,$0,n
lui $r5,(current>>16)
ori $r5,$r5,(current&0xFF)
jalr $r31,jsr
nop
물론 이 변수 정보가 HLL 서브루틴에 의해 예상되는 저장 요소들로 가상 머신의 저장을 나타내는 위치들로부터 변수 정보를 전달하기 위한 메카니즘의 사용은 전처리기로 제한되지 않는다. 처리기 코어 내부, 또는 보다 일반적으로는 처리기 코어의 메카니즘 형태를 구현하여, 특정 명령에 응답하는 처리기가 HLL 서브루틴들에 의해 사용되는 표준 위치들에 정보를 전달하고 이러한 서브루틴으로 제어를 전달하도록 한다. 따라서, 정규 명령들에 응답하여, 처리기는 제 1 변수 저장 규정에 의해 규정된, 예를 들어 스택 포인터에 의해 지적된 위치들로부터 각 정규 명령에 대한 변수들을 취하고, 정규 명령의 함수를 실행하고, 통상의 저장 위치에 결과를 다시 기록하고, 다음 명령을 실행함으로써 저장 위치들로부터의 변수들을 이용한다. 특정 명령에 응답하여, 변수들이 전달되고, 실행될 다음 명령은 서브루틴의 엔트리 포인트이다.
도 4는 변수들의 전달을 구현하는 처리기 동작의 흐름도를 도시한다. 이 도면의 왼쪽에 정상 실행 루프가 있다. 제 1 단계(40)에서, 프로그램 카운터가 증가되고, 제 2 단계(41)에서 프로그램 카운터에 의해 지적된 명령이 페치되고, 제 3 단계(42)에서 이 명령이 특정 명령인지를 검사하고, 특정 명령이 아니라면 명령은 제 4 단계(43)에서 실행되고 처리기는 제 1 단계(40)로 리턴한다. 루프는 일련의 단계들로서 도시되지만, 루프의 몇몇 반복 단계들은 파이프라인으로 동시에 실행될 수도 있다. 명령의 실행동안, 처리기는 제 1 변수 저장 규정에 의해 규정된 바와 같은 위치들로부터 명령의 변수들을 판독한다.
제 3 단계(42)에서 명령이 특정의 것이 아니라는 것을 처리기가 발견하면, 처리기는 임의의 변수들이 있는지를 검사하기 위하여 제 5 단계를 실행한다. 만약 그렇다면, 처리기는 변수를 제 1 저장 규정에서 규정된 저장 위치에서 제 2 저장 규정의 대응하는 저장 위치로 이동시키기 위하여 제 6 단계(46)를 실행하고, 임의의 다른 변수들이 있는지를 검사하기 위하여 제 5 단계(45)로 리턴한다. 처리기가 남겨진 다른 변수들이 없다는 것을 제 5 단계(45)에서 결정하면, 처리기는 제 7 단계(47)의 서브루틴으로 제어를 전달한다. 처리기는 서브루틴(점선 단계 48로서 도시됨)을 실행한다. 흐름도가 전처리기(130)에 의해 실행되면, 전처리기(130)는 리턴이 검출될 때까지 이 단계에서 처리기 코어(112)를 모니터한다.
서브루틴으로부터의 리턴시, 처리기는 제 2 변수 규정에 의해 규정된 저장 위치들로부터 8 단계에서 제 1 변수 저장 규정에 의해 규정된 저장 위치들로 서브루틴의 결과들(만약, 있다면)을 전달한다. 그후, 처리기는 제 1 단계(40)에서 재개된다(제 1 단계를 건너뛸 수 있는 경우에는, 물론 프로그램 카운터는 서브루틴이 호출될 때 증가할 준비를 한다)

Claims (8)

  1. 데이터 처리 장치에 있어서,
    - 메모리;
    - 원시 명령 세트(native instruction set)를 갖는 처리기 코어;
    - 실행을 위해, 상기 원시 명령 세트에 속하는 원시 명령들을 상기 메모리에서 상기 처리기 코어로 전달하도록 구성된, 상기 메모리와 상기 처리기 코어 사이의 인터페이스를 포함하고,
    - 상기 인터페이스는, 상기 메모리로부터 가상 머신 명령들(virtual machine instructions)을 판독하고 상기 가상 머신 명령들을 상기 원시 명령 세트에 속하는 변환된 명령들로 변환하고 연속적인 실행을 위해 상기 변환된 명령들을 상기 처리기 코어에 공급하기 위한 전처리기를 포함하며,
    상기 전처리기는, 상기 메모리로부터 특정 형태의 추가의 가상 머신 명령을 판독하고 상기 추가의 특정 형태에 대해 규정된 타켓 어드레스를 검색하고 상기 처리기 코어로 하여금 상기 추가의 가상 머신 명령에 응답하여 상기 타켓 어드레스에 의해 지시되는 위치에서 상기 메모리에 위치된 상기 원시 명령들의 서브루틴을 실행하도록 구성되는 것을 특징으로 하는, 데이터 처리 장치.
  2. 제 1 항에 있어서,
    상기 전처리기는 상기 서브루틴의 완료를 검출하기 위해 상기 처리기 코어를 모니터하고, 완료 검출시 상기 처리기 코어에 명령들을 공급하는 것을 재개하는, 데이터 처리 장치.
  3. 제 2 항에 있어서,
    상기 전처리기는, 상기 처리기 코어에 의해 발행된 명령 어드레스들이 미리 결정된 범위 내에 있는지를 모니터하고, 상기 서브루틴의 명령 어드레스 범위는 상기 미리 결정된 범위 밖에 놓이고, 제어를 상기 서브루틴에 전달한 후, 상기 처리기 코어가 상기 미리 결정된 범위 내의 명령 어드레스를 발행할 때, 상기 전처리기는 상기 서브루틴의 완료를 검출하는, 데이터 처리 장치.
  4. 제 1 항에 있어서,
    상기 전처리기는 상기 추가의 가상 명령에 응답하여 서브루틴 호출 콘텍스트를 생성하기 위하여 예비(preparatory) 원시 명령들을 상기 처리기 코어에 공급하고, 이어서 제어를 상기 서브루틴에 전달하도록 하기 위한 원시 명령을 발행하는, 데이터 처리 장치.
  5. 제 4 항에 있어서,
    상기 가상 머신 명령들은 제 1 변수 저장 규정(argument storage convention)에 의해 규정된 저장 위치들에 저장된 변수들을 이용하고, 상기 서브루틴 호출 콘텍스트는 제 2 변수 저장 규정에 의해 규정된 저장 위치들에 저장된 서브루틴의 하나 이상의 변수들을 포함하고, 제 1 및 제 2 오퍼랜드 저장 규정은 서로 다른 저장 위치들을 결과하고, 상기 예비 원시 명령들은 상기 제 1 변수 저장 규정에 따라 위치된 오퍼랜드들을 상기 제 2 변수 저장 규정에 따른 위치들로 이동시키기 위한 명령들을 포함하는, 데이터 처리 장치.
  6. 삭제
  7. 처리기를 포함하는 데이터 처리 장치로서,
    상기 처리기는 제 1 명령들을 포함하는 명령 세트를 갖고, 각각의 제 1 명령은 상기 처리기로 하여금 상기 명령 세트로부터 바로 이어지는 명령을 실행하기 전에 각 동작을 실행하도록 하고, 상기 동작들 각각은 제 1 변수 저장 규정에 의해 규정된 저장 위치들에 저장된 하나 이상의 변수들을 각각 이용하고,
    상기 명령 세트는 또한 상기 처리기로 하여금 제 2 변수 저장 규정에 의해 규정된 저장 위치들에 저장된 하나 이상의 변수들을 이용하는 서브루틴으로 점프하도록 하는 특정 명령을 포함하고, 상기 처리기는 상기 특정 명령에 응답하여 상기 하나 이상의 변수들을 상기 제 1 변수 저장 규정에 의해 규정된 저장 위치들에서 상기 제 2 변수 저장 규정에 의해 규정된 저장 위치들로 전달하는, 데이터 처리 장치.
  8. 제 7 항에 있어서,
    상기 처리기는 상기 특정 명령에 응답하여 미리 결정된 위치로부터 상기 서브루틴의 어드레스를 판독하고, 상기 하나 이상의 변수들을 전달한 후 상기 어드레스에 대한 제어를 전달하는, 데이터 처리 장치.
KR1019997004831A 1997-10-02 1998-09-24 가상 머신 명령을 처리하기 위한 데이터 처리 장치 KR100623403B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
EP97203033.2 1997-10-02
EP97203033 1997-10-02
EP98200967.2 1998-03-27
EP98200967 1998-03-27
PCT/IB1998/001478 WO1999018486A2 (en) 1997-10-02 1998-09-24 Data processing device for processing virtual machine instructions

Publications (2)

Publication Number Publication Date
KR20000069240A KR20000069240A (ko) 2000-11-25
KR100623403B1 true KR100623403B1 (ko) 2006-09-13

Family

ID=26146920

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019997004831A KR100623403B1 (ko) 1997-10-02 1998-09-24 가상 머신 명령을 처리하기 위한 데이터 처리 장치

Country Status (6)

Country Link
US (1) US6298434B1 (ko)
EP (1) EP1019794B1 (ko)
JP (1) JP3816961B2 (ko)
KR (1) KR100623403B1 (ko)
DE (1) DE69839913D1 (ko)
WO (1) WO1999018486A2 (ko)

Families Citing this family (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6513156B2 (en) * 1997-06-30 2003-01-28 Sun Microsystems, Inc. Interpreting functions utilizing a hybrid of virtual and native machine instructions
US6397242B1 (en) 1998-05-15 2002-05-28 Vmware, Inc. Virtualization system including a virtual machine monitor for a computer with a segmented architecture
US8631066B2 (en) 1998-09-10 2014-01-14 Vmware, Inc. Mechanism for providing virtual machines for use by multiple users
US7516453B1 (en) * 1998-10-26 2009-04-07 Vmware, Inc. Binary translator with precise exception synchronization mechanism
US6332215B1 (en) * 1998-12-08 2001-12-18 Nazomi Communications, Inc. Java virtual machine hardware for RISC and CISC processors
EP1316014A1 (en) * 2000-08-31 2003-06-04 Koninklijke Philips Electronics N.V. System for executing virtual machine instructions
GB2367654B (en) 2000-10-05 2004-10-27 Advanced Risc Mach Ltd Storing stack operands in registers
US20020069402A1 (en) * 2000-10-05 2002-06-06 Nevill Edward Colles Scheduling control within a system having mixed hardware and software based instruction execution
GB2367653B (en) 2000-10-05 2004-10-20 Advanced Risc Mach Ltd Restarting translated instructions
KR20020028814A (ko) 2000-10-10 2002-04-17 나조미 커뮤니케이션즈, 인코포레이티드 마이크로코드 엔진을 이용한 자바 하드웨어 가속기
GB2369464B (en) 2000-11-27 2005-01-05 Advanced Risc Mach Ltd A data processing apparatus and method for saving return state
US7076771B2 (en) 2000-12-01 2006-07-11 Arm Limited Instruction interpretation within a data processing system
US7873814B1 (en) 2000-12-22 2011-01-18 Lsi Corporation Microcode based hardware translator to support a multitude of processors
US6990567B1 (en) * 2000-12-22 2006-01-24 Lsi Logic Corporation Use of internal general purpose registers of a processor as a Java virtual machine top of stack and dynamic allocation of the registers according to stack status
JP2004519027A (ja) * 2001-01-30 2004-06-24 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 主プロセッサと命令経路コプロセッサとの同期化
CN1231837C (zh) * 2001-04-11 2005-12-14 皇家菲利浦电子有限公司 带有分支机构的仿真协处理器
GB2376099B (en) * 2001-05-31 2005-11-16 Advanced Risc Mach Ltd Program instruction interpretation
GB2376097B (en) 2001-05-31 2005-04-06 Advanced Risc Mach Ltd Configuration control within data processing systems
GB2376098B (en) 2001-05-31 2004-11-24 Advanced Risc Mach Ltd Unhandled operation handling in multiple instruction set systems
GB2376100B (en) * 2001-05-31 2005-03-09 Advanced Risc Mach Ltd Data processing using multiple instruction sets
US8769508B2 (en) 2001-08-24 2014-07-01 Nazomi Communications Inc. Virtual machine hardware for RISC and CISC processors
EP1446718A2 (en) * 2001-09-25 2004-08-18 Koninklijke Philips Electronics N.V. Software support for virtual machine interpreter (vmi) acceleration hardware
WO2003036467A1 (en) * 2001-10-25 2003-05-01 Koninklijke Philips Electronics N.V. Low overhead exception checking
FR2837294A1 (fr) * 2002-03-12 2003-09-19 Koninkl Philips Electronics Nv Dispositif pour accelerer l'interpretation d'un programme en langage interprete
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
EP1502196A4 (en) * 2002-05-02 2008-04-02 Sarvega Inc SYSTEM AND METHOD FOR TRANSFORMING XML DOCUMENTS USING STYLE SHEETS
US7086034B2 (en) * 2002-06-28 2006-08-01 Canon Kabushiki Kaisha Method, program, and storage medium for acquiring logs
GB0215033D0 (en) * 2002-06-28 2002-08-07 Critical Blue Ltd Instruction set translation method
US7131118B2 (en) * 2002-07-25 2006-10-31 Arm Limited Write-through caching a JAVA® local variable within a register of a register bank
EP1387250B8 (en) * 2002-07-31 2012-02-29 Texas Instruments Inc. Processor that accomodates multiple instruction sets and multiple decode modes
US7747989B1 (en) 2002-08-12 2010-06-29 Mips Technologies, Inc. Virtual machine coprocessor facilitating dynamic compilation
WO2004053684A2 (en) * 2002-12-12 2004-06-24 Arm Limited Processing activity masking in a data processing system
GB2399897B (en) * 2003-03-26 2006-02-01 Advanced Risc Mach Ltd Memory recycling in computer systems
GB2405958A (en) * 2003-08-20 2005-03-16 Macrovision Europ Ltd Code obfuscation and controlling a processor by emulation
GB2412192B (en) * 2004-03-18 2007-08-29 Advanced Risc Mach Ltd Function calling mechanism
US7930526B2 (en) 2004-03-24 2011-04-19 Arm Limited Compare and branch mechanism
US7802080B2 (en) 2004-03-24 2010-09-21 Arm Limited Null exception handling
US7424596B2 (en) * 2004-03-31 2008-09-09 Intel Corporation Code interpretation using stack state information
EP1622009A1 (en) * 2004-07-27 2006-02-01 Texas Instruments Incorporated JSM architecture and systems
KR100725386B1 (ko) 2004-09-25 2007-06-07 삼성전자주식회사 가상 머신 어플리케이션을 실행하는 방법 및 그 방법을이용한 디지털 방송 수신기
US7734895B1 (en) * 2005-04-28 2010-06-08 Massachusetts Institute Of Technology Configuring sets of processor cores for processing instructions
US7913243B2 (en) * 2005-06-21 2011-03-22 International Business Machines Corporation Method and system for generating and applying patches to a computer program concurrently with its execution
GB2435116B (en) 2006-02-10 2010-04-07 Imagination Tech Ltd Selecting between instruction sets in a microprocessors
US8584109B2 (en) * 2006-10-27 2013-11-12 Microsoft Corporation Virtualization for diversified tamper resistance
US8839225B2 (en) 2008-01-23 2014-09-16 International Business Machines Corporation Generating and applying patches to a computer program code concurrently with its execution
US9003377B2 (en) 2010-01-07 2015-04-07 Microsoft Technology Licensing, Llc Efficient resumption of co-routines on a linear stack

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1997027537A2 (en) * 1996-01-24 1997-07-31 Sun Microsystems, Inc. A processor for executing instruction sets received from a network or from a local memory

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3735363A (en) * 1971-04-07 1973-05-22 Burroughs Corp Information processing system employing stored microprogrammed processors and access free field memories
JPS56152049A (en) * 1980-04-25 1981-11-25 Toshiba Corp Microprogram control system
US4443865A (en) 1981-10-26 1984-04-17 Allen-Bradley Co. Processor module for a programmable controller
US4785393A (en) * 1984-07-09 1988-11-15 Advanced Micro Devices, Inc. 32-Bit extended function arithmetic-logic unit on a single chip
US4754393A (en) * 1984-12-21 1988-06-28 Advanced Micro Devices, Inc. Single-chip programmable controller
JP3602857B2 (ja) * 1991-04-23 2004-12-15 株式会社日立製作所 多機種対応型情報処理システム、および、方法
GB9526129D0 (en) * 1995-12-21 1996-02-21 Philips Electronics Nv Machine code format translation
US6125439A (en) * 1996-01-24 2000-09-26 Sun Microsystems, Inc. Process of executing a method on a stack-based processor
US6009261A (en) * 1997-12-16 1999-12-28 International Business Machines Corporation Preprocessing of stored target routines for emulating incompatible instructions on a target processor

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1997027537A2 (en) * 1996-01-24 1997-07-31 Sun Microsystems, Inc. A processor for executing instruction sets received from a network or from a local memory

Also Published As

Publication number Publication date
JP2001508909A (ja) 2001-07-03
JP3816961B2 (ja) 2006-08-30
WO1999018486A3 (en) 1999-06-24
EP1019794B1 (en) 2008-08-20
DE69839913D1 (de) 2008-10-02
EP1019794A2 (en) 2000-07-19
WO1999018486A2 (en) 1999-04-15
KR20000069240A (ko) 2000-11-25
US6298434B1 (en) 2001-10-02

Similar Documents

Publication Publication Date Title
KR100623403B1 (ko) 가상 머신 명령을 처리하기 위한 데이터 처리 장치
US11422837B2 (en) Virtual machine coprocessor for accelerating software execution
US6349377B1 (en) Processing device for executing virtual machine instructions that includes instruction refeeding means
US7873814B1 (en) Microcode based hardware translator to support a multitude of processors
AU2004200608B2 (en) Extreme pipeline and optimized reordering technology
US5530964A (en) Optimizing assembled code for execution using execution statistics collection, without inserting instructions in the code and reorganizing the code based on the statistics collected
US7685404B2 (en) Program subgraph identification
US6205578B1 (en) Interpreter for stack-based languages
US20070288909A1 (en) Hardware JavaTM Bytecode Translator
US20020066083A1 (en) Java virtual machine hardware for RISC and CISC processors
US6256784B1 (en) Interpreter with reduced memory access and improved jump-through-register handling
Probst Dynamic binary translation
US6718539B1 (en) Interrupt handling mechanism in translator from one instruction set to another
US6691306B1 (en) Use of limited program space of general purpose processor for unlimited sequence of translated instructions
US6260191B1 (en) User controlled relaxation of optimization constraints related to volatile memory references
US6990567B1 (en) Use of internal general purpose registers of a processor as a Java virtual machine top of stack and dynamic allocation of the registers according to stack status
KR950006617B1 (ko) 프로그램 동작시에 프로그램 유닛의 연결 방법 및 장치
US7647489B2 (en) Function calling mechanism with embedded index for a handler program and an embedded immediate value for passing a parameter
US7653527B2 (en) Runtime selection of code variants in a multiprogram computer hardware emulation system
Zhou et al. SCIL processor—a CIL processor for embedded systems
Säntti et al. Java Co-Processor for Embedded Systems
Gunnarsson et al. Porting the gnu c compiler to the thor microprocessor
Craig Implementation Techniques
Rodeheffer Apiary: Software Tools for Beehive v2

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: 20090902

Year of fee payment: 4

LAPS Lapse due to unpaid annual fee