KR20010080525A - 가상 머신 명령들의 최적화된 바이트코드 인터프리터 - Google Patents

가상 머신 명령들의 최적화된 바이트코드 인터프리터 Download PDF

Info

Publication number
KR20010080525A
KR20010080525A KR1020017006400A KR20017006400A KR20010080525A KR 20010080525 A KR20010080525 A KR 20010080525A KR 1020017006400 A KR1020017006400 A KR 1020017006400A KR 20017006400 A KR20017006400 A KR 20017006400A KR 20010080525 A KR20010080525 A KR 20010080525A
Authority
KR
South Korea
Prior art keywords
bytecodes
bytecode
execution
virtual machine
interpreter
Prior art date
Application number
KR1020017006400A
Other languages
English (en)
Inventor
리카르디파비오
Original Assignee
요트.게.아. 롤페즈
코닌클리케 필립스 일렉트로닉스 엔.브이.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 요트.게.아. 롤페즈, 코닌클리케 필립스 일렉트로닉스 엔.브이. filed Critical 요트.게.아. 롤페즈
Publication of KR20010080525A publication Critical patent/KR20010080525A/ko

Links

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/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/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
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/451Stack data

Landscapes

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

Abstract

본 발명은 바이트코드를 기초로하는 언어의 가상 머신 인터프리터에서, 인터프리팅된 프로그램들을 최적화하는 방법에 관한 것으로, 단일 명령 코드들의 원래의 열을 상기 매크로 명령 코드들의 새로운 열로 대체함으로써 상기 가상 머신을 매크로 명령 코드들로 동적으로 재구성하는 수단을 포함한다. 가상 머신 인터프리터는 바이트코드들을 명령 코드들의 실행 어드레스들로 변환하기 위한 명령 코드들의 실행 어드레스들을 포함하는 번역 테이블로 인해 간접 스레디스 인터프리터로서 코딩된다. 응용 : 어떤 바이트코드를 기초로하는 프로그래밍 언어를 이용하는 내장 시스템, 인터액티브 비디오 전송들을 위한 셋탑 박스.

Description

가상 머신 명령들의 최적화된 바이트코드 인터프리터{Optimized bytecode interpreter of virtual machine instructions}
프로그램머가 볼 수 있는 스택(stack)들을 갖는 바이트코드를 기초로 하는 언어들은 컴파일러들을 위한 중간 언어들(intermediate languages)로, 또한, 기계로부터 독립적인 실행 가능 프로그램 표현들로 보급되어 있다. 그들은 네트워크 컴퓨팅을 위한 중요한 장점들을 제공한다. Piumanta 및 F. Riccardi의 ACM SIGPLAN'98 프로그래밍 언어 설계 및 실행 협회(PLDI; Conference on Programming Language Design and Implementation), Montreal, Canada, 1998년 6월 17일, 페이지 291 내지 300의 논문 "Optimizing direct threaded code by selective in-lining"은 상술된 바와 같이 개시부에 인터프리팅된 프로그램들을 최적화하기 위한 기법을 개시하고 있다. VM 인터프리터(interpreter)로 인하여 프로그램들을 인터프리팅하는데 가상 머신(VM; virtual machine)이 이용된다. VM은 특히 이 아키텍처를 위해 컴파일된 응용들이 실행되는 가상 프로세서의 아키텍처를 표현하는 소프트웨어 실행이다. 가상 프로세서/머신의 명령들은 바이트코드(bytecode)들로 불린다. VM 인터프리터는 바이트코드들의 실행 메카니즘을 표현하는 VM의 일부이다. 바이트코드들은 VM 인터프리터에 의해 인터프리팅된다. 바이트코드들의 실행 메카니즘은 일반적으로 스위치 케이스 블록(switch case bloc)을 갖는 무한 루프로서 실행된다. 인용된 논문에 기술된 기술은 직접 스레디드 인터프리터(direct threaded interpreter)들에 적용된다. 스레디드 코드 인터프리터들은 바이트코드들을 한줄씩 실행한다. 각 바이트코드 번역은 다음 바이트코드의 레퍼런스(reference)를 포함한다. 그러므로, 스레디드 인터프리터에 의해 실행에 따른 바이트코드 번역은 무한 루프를 포함하지 않는다. 스레디드 인터프리터들이 성능상의 장점을 제공하더라도, 그들은 너무 느리고, 대부분의 내장 시스템들(embedded systems)에게나 편리할 너무 큰 메모리를 요구한다. 직접 스레디드 코드 인터프리터에서, 상기 인용된 논문에 기술된 바와 같이, VM 바이트코드들은 각 바이트코드가 다음 바이트코드의 실행으로 직접 점프할 수 있게 그 실행 어드레스로 표현된다. 테이블은 번역 동작전에 그것을 위하여 응용의 각 바이트코드의 어드레스들을 초기화하고, 바이트코드 번역이 발생할 때, 바이트코드 실행들의 물리적 어드레스들로 빠르게 액세스할 수 있다. 테이블은 바이트코드에서 다른 하나로의 스위칭을 허용한다. 직접 스레디드 인터프리터들은 그들이 코드 확장을 포함하는 것보다 빠르다. 바이트코드들을 직접 스레디드 코드들로 변환하여, 코드 크기는 대략 150%까지 증가한다. 이는 명령 코드들이 그 실행 코드의 어드레스들로대체되기 때문이다. 일반적으로, 어드레스들은 4바이트를 필요로 하는 반면에, 명령 코드들은 1바이트만을 필요로 한다. 그러므로, 직접 스레디드 인터프리터들은 메모리 소모를 증가시켜, 내장 시스템에 매우 적합치 않다.
본 발명은 인터프리팅된 프로그램들의 최적화된 실행 시간에 관한 것이다. 특히, 자신을 새로운 매크로 명령 코드들(macro operation codes)로 동적으로 재구성하는 가상 머신에 의해 인터프리팅된 프로그램들을 최적화하기 위한 방법에 관한 것이다. 본 발명은 어떤 바이트코드를 기초로 하는 프로그래밍 언어에 적용된다.
도 1은 본 발명에 따른 방법의 특징을 도시하는 블록도.
도 2는 본 발명의 바람직한 실시예에 따른 방법의 특징을 도시하는 블록도.
도 3은 본 발명에 따른 수신기의 일예를 도시하는 개요도.
본 발명의 목적은 내장 시스템에 매우 편리한 인터프리터 프로그램들의 실행시간을 최적화하기 위한 방법을 제공하는 것이다. 그러한 시스템들예컨대, 인공위성(satellite) 또는 디지털 비디오 수신기로 내장된 케이블 전송 시스템들은 종종 셋탑 박스로 불린다. 그러나, 본 발명은 또한 바이트코드들 기초로 하는 프로그래밍 언어에 근거하는 명령 시스템의 어떤 제품에 적용된다. 본 발명은 또한 메모리 및 CPU 자원들을 절약하게 하고, 시스템의 성능을 향상시킬 수 있다.
본 발명에 따라, 바이트코드를 기초로하는 언어의 가상 머신 인터프리터에서 인터프리팅된 프로그램들을 최적화하는 방법이 기술되고, 가상 머신은 단일 바이트코드들의 열을 대체하는 새로운 매크로 바이트코드들(또는 opcodes)로 자신을 동적으로 재구성하고, 가상 머신 인터프리터는 바이트코드들을 그의 실행 코드들로 번역하기 위해 스레디드 코드 인터프리터로서 코딩된다. 본 발명에 따른 스레디드 코드 인터프린터는 바이트코드를 번역하는 동안 그것을 위하여 바이트코드들의 실행 어드레스들을 포함하는 레퍼런스로 인하여 간접 스레디드 코드 인터프리터로서 코딩된다.
본 발명을 실행하는데 임의로 이용될 수 있는, 본 발명의 부가적인 특징들은 도면을 참조로 이후 기술되는 명백해질 것이다.
본 발명은 어떤 바이트코드를 기초로 하는 언어에 응용할 수 있는 새로운 실행 시간의 최적화 방법을 자바 언어를 일예로 하여 더욱 상세히 설명할 것이다.
저스트-인-타임(JIT; Just-In-Time) 컴파일러들에 의해 사용된 통상의 접근법은 자바 가상 머신(VM) 인터프리터를 전부 버리고, 그 실행에 앞서 원시 기계 코드(native machine code)(저스트-인-타임으로 명칭)로 적용의 바이트코드를 인터프리팅한 것이다. 이 프로세스는 최초의 응용을 이해하는 것을 의미이고, 더 편리한 원시 형태로 이를 다시 표현하는 것을 포함한다. 이는 성능을 달성하는데 효율적인 방법일수도 있지만, 바이트코드를 기초로 하는 언어가 원시 코드보다 더 치밀하기 때문에 한편으로는 매우 큰 메모리 소모를 가져오고, 목표 머신위에 자바 바이트코드들을 재배치하는 것이 쉬운 일이 아니기 때문에 다른 한편으로는 큰 CPU(Central Processing Unit) 자원들의 소모를 가져온다.
본 발명은 또한 어떤 종류의 동적 코드 생성(dynamic code generation)에 기초하지만, 응용의 자바 바이트코드를 원시 기계 코드로 변환하키는 것을 목적으로 하지 않으나, 다소 응용의 특정 바이트코드 열들의 실행에 자바 VM을 동적으로 적응시킨다. 이와 같이, 최초 응용의 자바 바이트코드가 보존되는 반면, VM는 동적으로 새로운 바이트코드들 또는 그 실행 능률을 개선하는 명령 코드들(opcodes)이 된다.
이 접근법에는 여러 가지 이점들이 있다; 즉,
실행 가능한 코드의 크기는 증가하지 않는다 : 응용은 메모리 효율적인 자바의 바이트코드화된 표현으로 남겨진다.
VM의 실행 메커니즘들은 경제적이다 : 하나의 실행 메커니즘이 있다. 그 결과, 응용을 실행하는 VM은 그 크기를 감소하고, 그 신뢰성을 개선하는데 기여하는 다중 코드 표현들로 처리되진 않을 것이다.
코드 생성 기술은 오히려 간단하다 : VM 최적기(optimizer)는 매우 단순한 구조를 갖고, 응용의 바이트코드 분석은 매우 적은 CPU 자원들을 사용하는 원패스 테이블로 구동된 프로시저(one-pass table-driven procedure)이며, 이는 직접 새로운 바이트코드들의 합성(synthesis)을 구동한다.
이 특성들은 본 발명을 사용하는 응용들에 적합하다. 본 발명에 따른 최적화 기술의 기본은“종래”응용들의 카테고리에 대한 인터프리터의 매우 기초적인 메커니즘들의 비용에 관한 연구에 있다. 응용의 프로파일의 관련성은 직면하게될 수도 있는 여러 가지 최적화 기술들로부터 도달할 수 있는 잠재적인 이익에 있다. 목표가 삽입된 응용들에 있기 때문에, "종래의" 응용들은 예컨대 제어 응용들, 그래피컬 유저 인터페이스들(graphical user interfaces) 등으로 정의될 수 있는 것이다.
목표 응용들이 기초가 되는 VM(목표 머니퓰레이터(object manipulations))에의해 제공되는 원시 상태에 매핑된다고 추측한다. 그러므로, 그들은 VM의 실행 메커니즘들의 일반 개량에서 보다 근본적인 코드 변환으로부터의 큰 이익은 없을 것이다. VM의 효율을 개선시킬 방법을 이해하기 위하여, Amdhal의 법칙을 사용하였다. Hennessy 및 Patterson에 의해 공인된 버전에서, Amdhal의 법칙은 다음과 같이 표현된다 : "어떤 빠른 실행 모드를 사용하여 얻어지는 성능 개선은 더 빠른 모드가 사용될 때의 일부분에 의해 제한된다", 또는 합성적으로 : "빠른 일반 경우로 한다"
인터프린터의 성능은 실행 가능 코드를 위해 선택되는 표현과 바이트코드들을 디스페치(dispatch)하기 위해 메커니즘에 의존한다. 실행 비용을 줄이기 위해 제 1 접근법은 디스페치하는 명령의 비용을 줄인다. 왜냐하면, 인터프린터의 본질이 메커니즘을 디스페치하는 그 명령이기 때문이다. 소위 순수 바이트코드 인터프리터(pure bytecode interpreter)로 불리는 종래의 인터프리터는 프로시저 시뮬레이션(processor simulation)과 같이 실행된다 : 큰 스위치 스테이트먼트는 그들의 실행들에 명령들을 디스페치하면서, 무한 루프에 놓여 있다. 그러므로, 순수 바이트코드 인터프리터의 내부 루프는 매우 단순하다 : 다음 바이트코드를 페치하고 스위치 스테이트먼트를 이용하여 실행을 디스페치한다. 인터프리터는 연속 바이트코드들을 디스페치하도록 스위치 스테이트먼트를 포함하는 무한 루프이고, 무한 루프의 개시에 제어가 반대로 통과하도록 스위치를 중단함으로써 다음 바이트코드로 제어를 통과시킨다. 다음 명령들의 세트는 종래의 종래의 바이트코드 인터프리터의 실행을 설명한다.
Loop (
Op = *pc++;
Switch (op) {
Case op_1 :
// op_1's implementation
break;
Case op_2 :
// op_2's implementation
break;
// op_3's implementation
break;
...
}
컴파일러가 루프의 끝에 내재하는 점프를 통하여 브레이크들(breaks)에서 점프 연결들 그 시작 뒤에서 최적화된다라고 가정하면, 이 접근법과 관련되는 오버헤드들은 다음과 같다 :
명령 포인터 pc를 증가,
메모리로부터 다음 바이트코드를 페치,
스위치에 대한 논의에서 여분의 범위 검사,
테이블에서 목적 케이스 라벨의 어드레스를 페치,
그 어드레스로 점프,
또한, 각 바이트코드의 끝에서 :
다음 바이트코드를 페치하도록 루프의 시작에서 뒤로 점프.
명령을 디스페치하는 비용의 경우에서, 스위치 스테이트먼트의 실제의 실행과 같은 모든 다른 자원들의 비효율을 무시하고 디스페치하는 명령의 비용 경우에서, 2 메모리 액세스들과 플러스 2 브렌치들로 이루어진다. 즉, 2 메모리 액세스들에서 하나는 다음 명령의 값을 검색하고, 하나는 명령 실행의 어드레스를 검색한다. 플러스 2 브렌치들(branches)에서 하나는 바이트코드의 실행으로 점프하고, 다른 하나는 루프의 개시에서 뒤로 간다. 점프들은 현 아키텍처들의 대부분의 값비싼 명령들 사이에 있다.
순수 바이트코드 인터프리터들은 기록하고 이해하기 쉽다. 또한, 그들은 크게 이식 가능하지만 약간은 느리다. 대부분의 바이트코드들이 단순한 동작들을 수행하는 경우, 이전에 설명한 예와 같이, 대부분의 실행 시간은 디스페치를 수행할 때에 소모된다. 실제로, 메커니즘의 실제 비용을 알기 위하여, 그것은 단일 바이트코드의 실행 비용과 비교되어야 한다. 자바 바이트코드들은 매우 낮은 레벨의 의미들을 가지며, 그 실행은 종종 진부하다. 그러므로, 가장 일반적으로 실행된 바이트코드들은 실제로 그 메커니즘을 디스페치하는 것보다 고가는 아니다.
본 발명에 따른 효율의 제 1 개선은 이하 명령들의 세트로 설명된 바와 같은 간접 스레디드 코드의 채택이다 :
Op_1_lbl:
// op_1's implementation
goto opcode_table (*pc++);
Op_2_lbl:
// op_2's implementation
goto opcode_table (*pc++);
Op_3_lbl:
// op_3's implementation
goto opcode_table (*pc++);
여기서, Op_1_lbl, Op_2_lbl 및 Op_3_lbl은 VM 인터프리터에 의해 인터프리팅된 3개의 다른 명령 코드들을 나타낸다.
이러한 실행에 따라, 소위 간접 스레디드 코드라 불리는 VM은 간접 스레디드 코드 인터프리터로 코딩된다. 바이트코드 번역동안에, 다음 바이트코드의 어드레스가 분석된다. opcode_table로 표시되는 레퍼런스 테이블은 바이트코드들 실행 어드레스들을 포함한다. 레퍼런스 테이블은 포인터(*pc++)의 인덱스에 의해 액세스된다. 각 바이트코드 번역을 위하여, 다음 바이트코드의 어드레스는 다음 바이트코드에서 점프하기 위해 검색된다. 각 바이트코드 실행이 다음 바이트코드 실행으로 직접 점프하는 방법에서, 우리는 하나의 브렌치, 외부 루프, 및 스위치 스테이트먼트의 실행의 불필요한 비효율(범위 검사 및 디폴트 케이스 조종)을 절약했다.
본 발명의 바람직한 실시예에 따라, 번역은 바이트코드를 기초로하는 언어 VM 설명서의 이용되지 않은 바이트코드들을 개발함으로써 실행된다.
도 1의 블록도는 바이트코드 즉, 바이트코드 바이푸시(bytecode bipush)를 번역하는 본 발명의 방법의 주요 단계들을 간접 스레디드 코드 인터프리터를 사요하여 원시 명령들로 요약한다.
단계 K0=BIPUSH ; 스택상에 1/2 워드를 넣는 것으로 이루어진 바이트코드 바이푸시를 번역하는 방법을 시작, 여기서 1/2 워드는 바이푸시 매개변수(par)이다.
단계 K1=PAR ; 바이푸시 매개변수를 검색(par)
단계 K2=PUT ; 스택상에 바이푸시 매개변수를 넣음
단계 K3= GOTO ; 다음 바이트코드의 실행의 어드레스를 포함하는 레퍼런스 테이블 opcode_table을 조사함으로써 다음 바이트코드로 감(goto opcode_table(*pc)).
그 자체에 의한 스레디드 코드의 채택은 VM의 수행을 두배로 할 수 있다. 그러나, 다음에서 보는 바와 같이 그것은 또한 다른 흥미있는 최적화 기회들을 제공할 수 있다. 자바의 바이트코드들의 통계 분석은 평균적으로 대략 모든 5 내지 6 명령들에 관하여 브렌치가 있다는 것을 보여준다. 어떠한 현 CPU에서, 브랜치들은 본질적으로 고가의 명령들이다. 왜냐하면, 그들은 파이프라인 스텔들(pipeline stalls) 및/또는 트리거 외부 버스 활동을 유발하기 때문이다. 게다가, 루프 언롤링(loop unrolling) 또는 인라인링(in-lining)이라고 불리는 방법에 있어서, 그것에 관하여 실제로 행할 수 있는 것이 많지 않다. 코드를 원시 표현으로 다시 컴파일할 때조차, 아직까지 제어 스테이트들이 그곳에 있을 것이다.
예보되지 않은 브랜치 스테이트먼트들의 효과로서, 하이엔드의 워크스테이션들에서 객체 중심 응용들을 위한 CPU 사용에 관한 최근의 연구는 CPU가 파이프라인 스텔들로부터 회복되고, 메인 메모리(캐시 미시스(cache misses))로부터 데이터와 명령들을 위해 대기하도록 그 클록 사이클들의 70% 만큼 소모할 수 있다는 것을 보여준다. 부가적으로, 내장된 시스템에서 이용가능한 CPU들은 매우 작은 캐시들, 동적 브렌치 예보를 위한 어떤 하드웨어 지원이 아니라, 어떤 L2 캐시들도 갖고 있지 않은 낮고 및/또는 폭이 좁은 메모리 인터페이스들을 통상적으로 가지고 있다. 이들 부가적인 제한들은 CPU 사용 및 성능을 더 저하시킬 것이다.
자바 바이트코들은 2가지 범주들로 분리될 수 있다 :
단일 명령 코드들(로드, 저장, 연산 및 제어 스테이트먼트들) 및
복합 명령 코드들(메모리 관리, 동기, 등).
단일 바이트코드들은 전형적으로 디스페칭 메커니즘보다 덜 고가이다. 복합 바이트코드들은 대신에 훨씬 고가이며, 디스페칭 비용은 바이트코드 실행 비용의 총 비용의 최소 부분만을 나타낸다. 단일 바이트코드들은 또한 복합 바이트코드들보다 휠씬 자주 실행되고, 클래시컬 자바 인터프리터가 정말로 유용한 무엇을 행하는 것보다 대부분의 그 시간을 바이트코드를 디스페칭하는데 쓰는 것을 의미한다. 이와같이, 복합 바이트코드들을 위하는 것보다 단일 바이트코드를 위해 디스페칭 비용을 줄이는데 결정적으로 효과적일 것이다라고 추측한다.
또한, 바이트코드들을 간접 스레디드 코드로 번역하는 것은 임의의 변환들을 실행 가능한 코드가 되게 하는 기회를 제공한다. 그러한 변환은 바이트코드들의 공통의 열들을 검출하고, 그들을 단일 스레디드 "매크로 코드"로 번역하는 것이다.이 매크로 코드는 원래의 바이트코드들의 전체 열의 작업을 수행한다. 그러므로, 본 발명의 바람직한 실시예에 따라서, 어떤 동등한 "매크로 코드들"에 의해 단일 바이트코드의 열들을 대체하는 것이 제시된다. 예컨대, 인용된 논문에 있는 바와 같이, 바이트코드들 "푸시 문자, 푸시 변수, 가산, 저장 변수"은 간접 스레디드 코드에서 단일의 "가산-문자 대 변수" 매크로 코드로 변역될 수 있다. 그런 최적화는 효과적이다. 왜냐하면, 그들이 원래의 바이트코드들로 암시되지만 매크로 코드내에서 삭제된 다중 디스페치들의 오버헤드를 회피하기 때문이다. N 원래의 바이트코드들의 열로부터 번역된 단일 매크로 코드은 실행 시간에 N-1 바이트코드 디스페치들을 회피한다. 매크로 코드를 만드는 방법에 대한 보다 상세한 것은 인용한 논문에서 발견할 수 있다. 그러한 매크로 코드들은 다음의 기준을 만족할 것이다 :
매크로들은 단일 바이트코드들의 열에서 만들어져야 한다. 왜냐하면, 복잡 바이트코드들의 디스페칭 비용을 줄일 점이 없기 때문이다.
매크로들은 브레치 목표들을 가능한 브렌치 목표들인 명령들을 포함해서는 안된다. 그렇지 않으면, VM 실행 메커니즘을 급격하게 바꿔야 할 것이다. 매크로 그자체는 브렌치 목표가 될 수 있다.
매크로들은 제어 스테이트먼트들 또는 방법 콜들로 끝나야 한다. 왜냐하면, 원시 브렌치의 비용이 디스페치 명령의 그것과 동등하기 때문이다.
실행의 단순함을 위하여, 매크로의 최대 길이는 약 15 바이트코드가 되어야 한다. "내츄얼(natural)"은 평균적으로 4 내지 5 바이크코드들의 매크로 길이가 된다. 이들 기중에서 그러한 매크로 열들을 구성하는 것은 매우 적은 -또한 구속된-CPU 시간이 걸리기 때문에 매우 간단하다. 방법'의 바이트코드의 단일 스캔은 실로 충분하고, 대부분의 분석은 테이블로 구현될 수 있고, 단일 바이트코드를 기초로 한다.
바람직한 실시예의 특정 대안에 따라, 사용하지 않은 바이트코드들이 매우 적은(평균적으로 30 내지 40) 두 개의 바이트 표현인 어카운트를 사용하는 것은 새로운 매크로 명령을 표현하는 새로운 바이트코드들에 사용될 수 있다. 원래의 열의 오퍼랜드들은 새로운 열 이후 바로 모이며, 그것은 가상 머신의 프로그램 카운터를 증가시킴으로써 쉽게 접근할 수 있게 된다.
프로세스가 조사되면, 매크로들은 스레디드 코드 인터프리터를 위한 컴파일러에의해 생성된 2진 코드를 함께 간단히 자르고 붙임으로써 만들어질 수 있다. 매크로들은 스레딩 디스페처에 의해 표준 바이트코드들로 간주될 수 있다.
도 2는 본 발명에 따른 가상 머신의 바람직한 실시예를 요약한다. VM은 VM 인터프리터에 의해 인터프리팅된 바이트코드들을 포함하는 프로그램을 로딩하도록 실행된다. 방법의 주요 단계들은 다음과 같다 :
단계 K0= INIT : 바이트코드들을 포함하는 프로그램들을 로딩함으로써 VM에 의해 실행되는 절차를 최기화,
단계 K1= OPCODE : 인터프리팅될 바이트코드들을 검색,
단계 K2= MACRO : 단일 바이트코드의 열을 매크로 바이트코드들로 대체,
단계 K3= TRANS : 도 1에 도시된 바와 같이 간접 스레디드 인터프리터 방법을 이용하는 매크로 바이트코드의 인터프리테이션,
단계 K4= RES : 결과를 얻는, 방법의 끝.
실제 자바 응용들의 실행 기록등에서 수행된 통계 분석은 종래의 매크로 길이가 4 내지 5 바이트코드들인 것을 보여주고, 코드 변환후, 매크로들이 잔존 바이트코드들보다 종종 5회 이상 실행될 수 있다는 것을 보여준다. 잔존 바이트코드들은 실행이 단지 인라이닝 및 브렌치 목표 분석을 고려하여 뒤에 남은 그의 가치가 되기에는 너무 복잡하다. 따라서, 전체 바이트코드 디스페칭 비용은 4의 인자보다 더 줄어들 수도 있다. 디스페칭 비용이 전체 실행 비용의 약 50%로 구성된다면, 이는 본 발명을 사용함으로써 상당히 줄어들 수 있다.
본 발명은 어떤 부가적인 장점들을 나타낸다. 또한, 프로세서 브렌치 명령들은 약 5의 인자로 줄어들 수 있다. 실행될 코드가 직선화되기 때문에, 프로세서의 파이프라인 및 메모리 서브시스템의 성능은 상당히 향상될 수도 있다. 실제 이득은 파이프라인 스텔의 비용을 위한 프로세서의 아키텍처와 캐시 라인 필의 비용을 위한 메모리 서브시스템 아키텍처에 의존한다. 대부분의 내장된 응용들과 같은 "메모리 채널지드(memory challenged)" 시스템들, 이들 비용들은 매우 높게 결정적으로 감소된 가치이다. 잔여의 디스페칭 비용은 기본적으로 자바 코드로 존재하는 제어 스테이트먼트들에 의존한다. 바이트코드를 클래식컬 동적 리컴파일레이션과 같은 2진 코드로 완전히 번역하기 위해, 브렌치 스테이트먼트들은 실행 가능 코드에서 소개되어야 한다. 이는 남은 잔여 디스페치들과 같은 비용을 더 많거나 적게 할 것이다.
매크로들의 장점들중 하나는 그들이 바이트코드들의 일잔적인 열이라는 것과, 그러한 열들중 하나가 또다른 프로세스의 문맥에서 또는 심지어 같은 프로세스에서 발견될 수 있는 가능성이 매우 높다는 것이다. 자바 바이트코드들을 위한 테스트가 있다. 매크로들의 중요부가 재생될 수 있다는 것이 발견된다. 그러므로, 재생 인자들을 고려하여, 매크로 코드 실행에 의해 이용된 메모리 풋프린트(memorty footprint)가 감소될 수도 있다. 2진 코드에 대한 완전한 번역은 많은 메모리로서 적어도 두 번 소모될 것이고, 아마 보잘 것 없는 수행 장점을 실행 이점을 갖게 될 것이다. 이를테면, 그것이 2의 다른 인자에 의해 예정된 비용에 더 자라지는 것이 가능하다고 추측하면서, 속도에 있어서 총 주목할 만한 증가는 매우 작을 것이다. 가장 유사하게는, 메모리 풋프린트의 배가에 대한 가치 트래이딩은 없다.
매크로들의 다른 장점은 그들이 표준 바이트코드 디스페칭 메커니즘에서 어떤 충돌도 가지고 있지 않다는 것이다. 이미 존재하는 VM에 또 다른 실행 메커니즘을 부가할 필요는 없다. 컴파일되고 컴파일되지 않은 프로세스들 사이를 구별할 어떤 필요도 없고, 원시 코드 인터페이스들의 예언과 오버헤드를 순환할 필요도 없다.
자바 같은 개체 지향 언어들은 코드의 매우 적은 유닛들의 존재에 의해 특징된다. 자바 프로세스들은 또한, 인라이닝하기가 매우 어려운데, 이는, 이들이 거의 항상 잠재적으로 다형적이기 때문이다. 그러므로, 최적의 컴파일러가 근원적인 프로세서 아키텍쳐상의 프로세스 실행 의미들을 더 양호하게 맵핑할 수 있더라도, 프리앰블의 오버헤드와 2진 번역 프로세서들의 결론은 어떠한 장점도 억제하지 않을 것이다.
실행 효율을 개선하기 위해, 스택 캐칭 기법(stack catching technique)이 사용될 수 있으며, 이 기법은 메모리 액세스들의 수를 상당히 감소시키면서, 프로세서의 레지스터 파일내부의 자바 스택의 제 1의 3개의 위치들을 유지한다. 이 기법은 목표 프로세서가 스택 머신 그자체라는 사실을 이용한다. 원래의 바이트코드 실행들은 동일한 프로세서 명령 열들 치환된다. 통상의 번역 표와 간단한 비용 함수(메모리 레퍼런스들의 수)를 사용함으로써, 매우 빠르고 효율적인 편집 기술이 달설될 수 있다. 메모리 입력/출력의 비용 감소에 대해서는, 본 발명의 다른 대체 실시예에 따라 일예로서 자바의 경우로 지금부터 설명한다.
자바는 스택-기초 언어들이다: 바이트코드들은 메모리를 사용하여 상호 통신한다. 모든 단일 바이트코드 실행은 적어도 하나의 메모리 액세스를 포함하며, 이 메모리 엑세스는 매우 고가이다. 고려하면, 예를 들어 다음의 간단한 표현이 있다:
C=a+b;
스택 기초 언어에서 이것은 다음과 같이 번역된다:
Push a 1 판독, 1 기록
Push b 1 판독, 1 기록
Add 2 판독, 1 기록
Store c 1 판독, 1 기록
이들은 9개의 메모리 액세스 동작들을 나타낸다. 최소의 내장 상태의 CPU는 단지 3개의 메모리 액세스들과 동일할 수 있다. 모뎀 프로세서 아키텍쳐에서의 사실을 고려하면, 메모리 기준들은 가장 고가의 동작들 중에 하나이며, 이는 최적의이상적인 필드이다. 적은 부차적인 코딩 효과로, 자바 바이트코드들의 버전은 외부 메모리를 통한는 것 대신에 머신 레지스터들을 통해 데이터 교환을 실행할 수 있다. 스트랜드들(strands)라고 불리는 이러한 특정의 바이트코드들로부터 시작하고 2 이상의 인자들에 의해 매크로내에서 메모리 액세스들의 수를 감소시키면서, 매크로들이 생성될 수 있다.
"매크로이저(macroizer)" 및 바이트코드 "스탠디파이어(standifier)"의 실행은 코드의 매우 많은 라인들을 필요로하지 않는다. 예를 들어, C 코드의 약 몇 길로라인들에 대하여, 인터프린터의 루프의 부분적인 재기록이 추정될 수 있다. 어셈블리의 몇 라인들만이 간접 스레디드 코드 디스패처의 실행에 대해 필요하고, "스탠디파이어"에는 수백이 필요하다.
실행 시간의 테스트들 및 측정들이 이루어져서, 바이트코드 분석 및 새로운 매크로 바이트코드들의 생성에 대해 시간 소비를 고려하지 않아도된다. 그럼에도 불구하고, 실행 시간은 본래의 코드 프로파일러를 사용하여 측정된다. 웹 브라우즈같은 대규모 애플리케이션을 실행할 때, "매크로이제이션(macroization)"에 대한 전체 시간 소비가 전체 실행 시간의 매우 적은 비율로 한정되어 유지된다.
본 발명에 따른 수신기의 일예가 도2에 도시되어 있고, 이것은 인터액티브 비디오 전송을 위한 셋탑 박스 수신기(20)이다. 상기 수신기는, 케이블 전송 채널(23)을 통해 비디오 전송기(24)로부터 엔코딩된 신호를 수신하고 비디오 디스플레이(25) 상에 디스플레이될 전송된 데이터를 복원하기 위해 수신된 신호를 디코딩하기 위해, 예를 들어 MPEG2(Moving Pictures Experts group, ISO/IEC 13818-2)권고사항과 호환성이 있는 디코드를 포함한다. 셋탑 박스의 기능들은 바이트코드 현재의 자바같은 인터프리팅된 언어를 실행하는 시스템을 사용하여 실행된 효율적인 소프트웨어가 될 수 있다. 이 시스템은 주 프로세서 CPU, 및 주 프로세서 CPU가 도1 또는 2에 도시된 바와 같은 본 발명에 따른 방법들을 실행하도록 하기 위한 명령들을 나타내는 소프트웨어 코드 부분들을 저장하기 위한 메모리 MEM를 포함한다.
본 발명의 다른 실시예에 따라, 셋탑 박스(20)는 수신된 신호의 일부로서 바이트코드들을 포함하는 자바 애플리케이션들을 수신할 수 있다. 이 경우, 셋탑 박스는 원격지의 전송자로부터 수신된 바이트코드 기초 프로그램들을 로딩하기 위한 로더를 포함한다.

Claims (8)

  1. 바이트코드를 기초로 한 언어의 가상 머신 인터프리터에서 인터프리팅된 프로그램들의 최적화하는 방법에 있어서,
    상기 가상 머신은 원래의 단일 바이트코드들의 열을 새로운 매크로 바이트코드들 열로 대체시킴으로써 자신을 동적으로 재구성하고, 가상 머신 인터프린터가 바이트코드들을, 현재의 바이트코드의 번역동안, 다음 바이트코드로 점프할 수 있도록 다음 바이트코드의 실행의 어드레스가 검색되기 위하여 상기 바이트코드들의 실행의 어드레스들에 대한 레퍼런스들을 갖는 레퍼런스 테이블을 포함하는, 실행 코드로 변역하기 위한 스레디드 코드 인터프리터(threaded code interpreter)로 코딩되는, 인터프리팅된 프로그램의 최적화 방법.
  2. 제 1 항에 있어서,
    상기 원래 열들의 바이트코드들은 상기 새로운 매크로 명령 코드들의 열 뒤에 그룹화되는 인터프리팅된 프로그램의 최적화 방법.
  3. 제 1 항 또는 제 2 항에 있어서,
    상기 가상 머신 인퍼프리터는 미리 결정된 바이트코드들의 세트를 포함하고, 이중 어떤것들은 사용되지 않으며, 상기 새로운 매크로 명령 코드들의 열은 상기 사용되지 않은 바이트코드들를 이용함으로써 실행되는 인터프리팅된 프로그램 최적화 방법.
  4. 제 3 항에 있어서,
    상기 비사용된 바이트코드들은 적어도 2 바이트 표현으로 인코딩되는 인터프리팅된 프로그램의 최적화 방법.
  5. 인터프리팅된 프로그램들을 최적화하는 방법에 있어서,
    바이트코드를 기초로하는 언어를 위한 가상 머신에서,
    상기 바이트코드들을 포함하는 프로그램들의 로딩에 의한 초기화 단계,
    단일 바이트크드들의 열들을 매크로 코드들로의 대체 단계,
    상기 바이트코드들을, 현재의 바이트코드의 번역동안, 다음 바이트코드로 점프할 수 있도록 다음 바이트코드의 실행의 어드레스가 검색되기 위하여 상기 바이트코드들의 실행의 어드레스들에 대한 레퍼런스들을 갖는 레퍼런스 테이블을 포함하는, 실행 코드로 번역하기 위한 간접 스레디드 인터프리터를 이용하는 상기 매크로 바이트코드들의 인터프리테이션 단계를 포함하는, 인터프리팅된 프로그램의 최적화 방법.
  6. 메모리로 로딩되는 컴퓨터 프로그램 제품에 있어서,
    청구항 제 1 항 내지 5 항중 어느 한 항에 따른 방법을 프로세서로 실행시키는 명령들의 세트를 포함하는 컴퓨터 프로그램 제품.
  7. 전송 신호들을 수신하기 위한 수신기에 있어서,
    상기 수신기는 청구항 제 1 항 내지 5항중 어느 한 항에 따른 방법을 프로세서로 실행시키는 명령들을 나타내는 소프트웨어 코드 부분들을 저장하기 위한 프로세서(CPU) 및 메모리(MEM)를 포함하는 수신기.
  8. 청구항 제 1 항 내지 5 항중 어느 한 항에 청구된 방법을 실행하기 위한 명령들을 포함하는 컴퓨터 프로그램을 청구항 제 7항에 청구된 바와 같은 수신기로 다운로딩하는데 이용가능한 방법.
KR1020017006400A 1999-09-21 2000-09-13 가상 머신 명령들의 최적화된 바이트코드 인터프리터 KR20010080525A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP99402309 1999-09-21
EP99402309.1 1999-09-21
PCT/EP2000/008976 WO2001022213A2 (en) 1999-09-21 2000-09-13 Optimized bytecode interpreter of virtual machine instructions

Publications (1)

Publication Number Publication Date
KR20010080525A true KR20010080525A (ko) 2001-08-22

Family

ID=8242118

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020017006400A KR20010080525A (ko) 1999-09-21 2000-09-13 가상 머신 명령들의 최적화된 바이트코드 인터프리터

Country Status (5)

Country Link
EP (1) EP1183598A2 (ko)
JP (1) JP2003510681A (ko)
KR (1) KR20010080525A (ko)
CN (1) CN1173262C (ko)
WO (1) WO2001022213A2 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100597413B1 (ko) * 2004-09-24 2006-07-05 삼성전자주식회사 자바 바이트코드 변환 방법 및 상기 변환을 수행하는 자바인터프리터
KR100678912B1 (ko) * 2005-10-18 2007-02-05 삼성전자주식회사 메소드 바이트코드 해석 방법 및 상기 방법에 의해동작하는 시스템

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6996813B1 (en) 2000-10-31 2006-02-07 Sun Microsystems, Inc. Frameworks for loading and execution of object-based programs
US7096466B2 (en) 2001-03-26 2006-08-22 Sun Microsystems, Inc. Loading attribute for partial loading of class files into virtual machines
US7543288B2 (en) 2001-03-27 2009-06-02 Sun Microsystems, Inc. Reduced instruction set for Java virtual machines
US6957428B2 (en) 2001-03-27 2005-10-18 Sun Microsystems, Inc. Enhanced virtual machine instructions
FR2828296B1 (fr) * 2001-08-03 2003-12-12 Trusted Logic Procede de compression de code objet interprete par factorisation d'expressions arborescentes
US7228533B2 (en) 2001-08-24 2007-06-05 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for performing programming loops
US7039904B2 (en) 2001-08-24 2006-05-02 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for storing values into local variables
US6988261B2 (en) 2001-08-24 2006-01-17 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions in Java computing environments
US7058934B2 (en) 2001-08-24 2006-06-06 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for instantiating Java objects
FR2829252B1 (fr) * 2001-08-30 2004-10-01 Gemplus Card Int Compression d'un programme en langage intermediaire
EP1308838A3 (en) * 2001-10-31 2007-12-19 Aplix Corporation Intermediate code preprocessing apparatus, intermediate code execution apparatus, intermediate code execution system, and computer program product for preprocessing or executing intermediate code
US7275240B2 (en) * 2003-01-08 2007-09-25 Microsoft Corporation Method and system for recording macros in a language independent syntax
CN100356326C (zh) * 2003-03-21 2007-12-19 清华大学 基于操作栈记录的恢复的Java线程迁移的方法
WO2011008856A2 (en) * 2009-07-14 2011-01-20 Unisys Corporation Systems, methods, and computer programs for dynamic binary translation in an interpreter
CN102662830A (zh) * 2012-03-20 2012-09-12 湖南大学 一种基于动态二进制翻译框架的代码复用攻击检测系统
CN110262533B (zh) * 2019-06-25 2021-06-15 哈尔滨工业大学 一种基于分层任务网络规划模块化可重构卫星自重构的方法、装置及计算机存储介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5778232A (en) * 1996-07-03 1998-07-07 Hewlett-Packard Company Automatic compiler restructuring of COBOL programs into a proc per paragraph model

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100597413B1 (ko) * 2004-09-24 2006-07-05 삼성전자주식회사 자바 바이트코드 변환 방법 및 상기 변환을 수행하는 자바인터프리터
KR100678912B1 (ko) * 2005-10-18 2007-02-05 삼성전자주식회사 메소드 바이트코드 해석 방법 및 상기 방법에 의해동작하는 시스템

Also Published As

Publication number Publication date
WO2001022213A3 (en) 2001-11-29
WO2001022213A2 (en) 2001-03-29
JP2003510681A (ja) 2003-03-18
EP1183598A2 (en) 2002-03-06
CN1173262C (zh) 2004-10-27
CN1347525A (zh) 2002-05-01

Similar Documents

Publication Publication Date Title
KR20010080525A (ko) 가상 머신 명령들의 최적화된 바이트코드 인터프리터
US8185882B2 (en) Java virtual machine hardware for RISC and CISC processors
Shi et al. Virtual machine showdown: Stack versus registers
US6968546B2 (en) Debugging support using dynamic re-compilation
US7502910B2 (en) Sideband scout thread processor for reducing latency associated with a main processor
US7877741B2 (en) Method and corresponding apparatus for compiling high-level languages into specific processor architectures
US5742802A (en) Method and system for efficiently mapping guest instruction in an emulation assist unit
US5790825A (en) Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions
US7487330B2 (en) Method and apparatus for transferring control in a computer system with dynamic compilation capability
US8621443B2 (en) Processor emulation using speculative forward translation
US6327702B1 (en) Generating a compiled language program for an interpretive runtime environment
Hoogerbrugge et al. A code compression system based on pipelined interpreters
EP1385090A2 (en) Program code conversion for variably sized registers
US7823140B2 (en) Java bytecode translation method and Java interpreter performing the same
JPH11296381A (ja) 仮想マシン及びコンパイラ
US8769508B2 (en) Virtual machine hardware for RISC and CISC processors
US5898850A (en) Method and system for executing a non-native mode-sensitive instruction within a computer system
JP2001034483A (ja) メタデータをコード化するためのオペコードの番号付け
US7168076B2 (en) Facilitating efficient join operations between a head thread and a speculative thread
KR100577366B1 (ko) 이종의 자바 메소드를 실행하는 방법 및 장치
US20100218174A1 (en) Dynamic compiling and loading at runtime
KR20010040742A (ko) 인터프리터 프로그램을 실행하는 방법
US20040054993A1 (en) Hybrid mechanism for more efficient emulation and method therefor
Rau Levels of representation of programs and the architecture of universal host machines
US6453463B1 (en) Method and apparatus for providing finer marking granularity for fields within objects

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application