KR20120083803A - 가상머신을 위한 추가코드 생성장치 및 방법 - Google Patents
가상머신을 위한 추가코드 생성장치 및 방법 Download PDFInfo
- Publication number
- KR20120083803A KR20120083803A KR1020110005144A KR20110005144A KR20120083803A KR 20120083803 A KR20120083803 A KR 20120083803A KR 1020110005144 A KR1020110005144 A KR 1020110005144A KR 20110005144 A KR20110005144 A KR 20110005144A KR 20120083803 A KR20120083803 A KR 20120083803A
- Authority
- KR
- South Korea
- Prior art keywords
- code
- interpreter
- bytecode
- byte
- virtual machine
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
- G06F9/4552—Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/4555—Para-virtualisation, i.e. guest operating system has to be modified
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
소프트웨어 실행환경으로 적시 컴파일러(Just-in-Time Compiler)를 사용하는 가상머신에서 적시 컴파일러(JITC)가 할당된 코어의 유휴 시간을 활용해 미리 머신 코드(machine code)를 생성하여 인터프리터(Interpreter)의 부하를 줄여 인터프리터(Interpreter)의 코드 수행 성능이 향상되고, 어플리케이션을 수행하는 멀티코어 시스템의 활용도를 높인다.
Description
소프트웨어 실행환경으로 적시 컴파일러(Just-in-Time Compiler)를 사용하는 가상머신(Virtual Machine)와 관련된다.
가상머신(Virtual Machine)은 어플리케이션을 서로 상이한 CPU와 메모리를 가지는 기기에서 수행하기 위한 기술이다.
고수준의 언어로 작성된 코드는 스크립트 형태 혹은 하드웨어 비종속적인 중간코드 형태로 배포된다. 이러한 형태로 배포된 코드는 다양한 기기에 미리 설치된 가상머신(VM)의 해석기 혹은 기계어 변환기 등을 이용하여 수행된다.
이러한 대표적인 가상머신(VM)으로는 휴대폰, 디지털 텔레비전 등에서 주로 사용하는 자바(JAVA) 가상머신(VM)과 웹을 통해서 코드가 전달되는 자바 스크립트, 달빅(DALVIC) 가상머신(VM) 등이 있다.
휴대폰, 디지털 텔레비전 등 각종 내장형 기기와 서버, 데스크탑 등에서 가상머신(VM)을 통해 다양한 어플리케이션이 수행된다.
이러한 다양한 환경에서 수행하기 위해 일반적으로 가상머신(VM)의 실행 코드로서 바이트코드(byte code)를 배포한다. 배포된 바이트코드(byte code)는 인터프리터(Interpreter)를 통해 수행하게 된다.
그러나, 인터프리터(Interpreter)는 머신 코드(machine code)를 수행하는 것 보다 느리다는 문제점을 가지고 있고, 이를 해결하기 위한 방법이 적시 컴파일러(Just-in-Time Compile) 기법이다.
적시 컴파일러(JITC)는 수행 중인 바이트코드(byte code)를 머신 코드(machine code)로 컴파일하여 이를 가상머신(VM)의 코드 캐쉬(code cache)에 저장하고, 컴파일 된 바이트코드(byte code)를 수행할 때에는 저장된 머신 코드(machine code)를 활용하는 것이다.
적시 컴파일러(JITC) 기법 중 추적 방식은 가상머신(VM)의 수행 중에 바이트코드(byte code)의 특정 위치부터 수행되는 경로(path)를 추적하여 일정 길이의 바이트코드 구간(trace)에 대해 머신 코드(machine code)를 생성하는 것이다.
바이트코드 구간(Trace)은 자주 수행되는 경로(path)의 특정 바이트코드의 라인을 시작점으로 정하고 이로부터 일정 길이의 구간까지로 설정된다. 이러한 바이트코드 구간(Trace)은 적시 컴파일러(JITC)에서 많은 시간이 소비되거나 지나치게 많은 머신 코드(machine code)가 생성되는 것을 방지한다.
만약, 인터프리터(Interpreter)와 적시 컴파일러(JITC)가 멀티코어 시스템 상의 서로 다른 코어에서 별도의 쓰레드(thread)로 동작하는 경우, 추적 방식을 사용하게 되면 인터프리터(Interpreter)에서 바이트코드(byte code)를 수행하면서 컴파일 할 대상이 되는 바이트코드 구간(trace)를 찾을 때까지, 적시 컴파일러(JITC)에서는 아무런 동작을 수행하지 않게 된다.
즉, 멀티코어 시스템에서 적시 컴파일러(JITC)가 할당된 코어가 유휴상태로 방치되는 경우가 발생하게 된다.
멀티코어 시스템 환경에서 가상머신(VM)은 적시 컴파일러(JITC)가 할당된 코어의 유휴 시간에 바이트코드 그룹(trace)을 자체적으로 찾아 머신 코드(machine code)를 생성할 수 있다.
본 발명의 일 양상에 따른 추가코드 생성장치는 바이트코드(byte code)가 수행되는 논리흐름을 나타내는 추적 정보를 수집하는 정보수집부 및 바이트코드가 컴파일되고 있지 않는 경우, 수집된 추적 정보를 이용하여 머신 코드(machine code)로 컴파일될 바이트코드 구간을 결정하는 코드결정부를 포함한다.
또한, 코드결정부에서 결정된 바이트코드 구간을 머신 코드로 컴파일하는 컴파일러를 더 포함한다.
또한, 인터프리터와 컴파일러는 서로 다른 코어에서 동작할 수 있다.
또한, 정보수집부는 인터프리터에서 수행하고 있는 바이트코드의 경로(path)를 탐색하여 추적 정보를 수집한다.
또한, 추적 정보는 인터프리터에서 바이트코드가 수행되는 횟수를 포함할 수 잇다.
또한, 코드결정부는 추적 정보에 포함된 바이트코드가 수행되는 횟수를 이용하여 인터프리터에서 수행되는 바이트코드 중에서 임계값 이상으로 수행되는 바이트코드 라인의 시작점을 설정하고, 설정된 시작점으로부터 소정길이까지의 구간을 컴파일될 바이트코드 구간으로 결정한다.
본 발명의 일 양상에 따른 추가코드 생성방법은 바이트코드(byte code)가 수행되는 논리흐름을 나타내는 추적 정보를 수집하는 단계, 바이트코드가 컴파일되고 있는지 확인하는 단계 및 컴파일되고 있지 않은 경우, 수집된 추적 정보를 이용하여 머신 코드(machine code)로 컴파일될 바이트코드 구간을 결정하는 단계를 포함한다.
본 발명의 다른 일 양상에 따른 추가코드 생성방법은 인터프리터에서 결정된 바이트코드 구간이 존재하는지 확인하는 단계, 인터프리터에서 결정된 바이트코드 구간이 존재하지 않는 경우, 인터프리터에서 수행되는 바이트코드 중에서 임계값 이상으로 수행되는 바이트코드 라인의 시작점을 설정하고, 설정된 시작점으로부터 소정길이까지의 구간을 컴파일될 바이트코드 구간으로 결정하는 단계 및 결정된 바이트코드 구간을 머신 코드로 컴파일하는 단계를 포함한다.
가상머신(VM)을 이용하여 어플리케이션을 수행하는 환경에서 멀티코어 시스템의 활용도를 높인다.
머신 코드(machine code) 생성이 증가하여 적시 컴파일러(JITC)를 통해 가속을 할 수 있는 구역이 늘어나고 가상머신(VM)의 성능이 향상된다.
적시 컴파일러(JITC)가 할당된 코어의 유휴 시간을 활용해 미리 머신 코드(machine code)를 생성하여 인터프리터(Interpreter)의 부하를 줄여 인터프리터(Interpreter)의 코드 수행 성능이 향상된다.
어플리케이션의 수행 코드에 대한 수정 없이, 가상머신(VM)의 시스템만을 수정하여 적시 컴파일러(JITC)가 자체적으로 머신 코드(machine)를 생성한다.
도 1은 본 발명의 일 실시예에 따른 추가코드 생성장치가 구현된 가상머신(Virtual Machine)을 나타낸 도면이다.
도 2는 본 발명의 일 실시예에 따른 추가코드 생성장치의 세부구성을 나타낸 블록도이다.
도 3은 본 발명의 일 실시예에 따른 추가코드 생성장치의 동작과정을 나타낸 도면이다.
도 4는 본 발명의 일 실시예에 따른 도 1의 구조를 갖는 추가코드 생성장치를 통한 추가코드 생성방법을 나타낸 흐름도이다.
도 5는 본 발명의 일 실시예에 따른 도 3의 구조를 갖는 추가코드 생성장치를 통한 추가코드 생성방법을 나타낸 흐름도이다.
도 2는 본 발명의 일 실시예에 따른 추가코드 생성장치의 세부구성을 나타낸 블록도이다.
도 3은 본 발명의 일 실시예에 따른 추가코드 생성장치의 동작과정을 나타낸 도면이다.
도 4는 본 발명의 일 실시예에 따른 도 1의 구조를 갖는 추가코드 생성장치를 통한 추가코드 생성방법을 나타낸 흐름도이다.
도 5는 본 발명의 일 실시예에 따른 도 3의 구조를 갖는 추가코드 생성장치를 통한 추가코드 생성방법을 나타낸 흐름도이다.
이하, 첨부된 도면을 참조하여 본 발명의 일 양상을 상세하게 설명한다.
도 1은 본 발명의 일 실시예에 따른 추가코드 생성장치가 구현된 가상머신(Virtual Machine)을 나타낸 도면이다.
도 1을 참조하면, 가상머신(VM)은 인터프리터(Interpreter, 101), 적시 컴파일러(JITC, 102), 코드 캐쉬(Code Cache, 103) 및 추가코드 생성장치(100)를 포함한다.
인터프리터(101)는 가상머신(VM)의 실행 코드로서 배포된 바이트코드(byte code)를 수행한다.
적시 컴파일러(102)는 수행 중인 바이트코드(byte code)에 대한 머신 코드(machine code)를 생성(컴파일)하고, 코드 캐쉬(103)는 생성된 머신 코드(machine code)를 저장한다.
가상머신(VM)에서 컴파일 된 구간의 바이트코드를 다시 수행할 경우가 발생하면 해당 구간의 바이트코드에 대하여 생성된 머신 코드(machine code)를 활용하게 된다.
즉, 가상머신(VM)은 반복적으로 수행하는 바이트코드의 특정 구간에 대하여 머신 코드(machine code)로 컴파일해 둘 필요성을 가지게 되어, 이러한 특정 구간을 바이트코드 구간으로 결정하여 바이트코드 구간을 컴파일러를 통하여 머신 코드로 컴파일한다.
추가코드 생성장치(100)는 인터프리터(102)가 바이트코드를 수행하고 있는 동안, 바이트코드(byte code)가 수행되는 논리흐름을 나타내는 추적 정보를 수집한다.
또한, 추가코드 생성장치(100)는 수집된 추적 정보를 이용하여 적시 컴파일러(102)를 통해 머신 코드(machine code)로 생성될 필요가 있는 바이트코드 구간(trace)을 결정한다.
인터프리터(101), 적시 컴파일러(102), 코드 캐쉬(103) 및 추가코드 생성장치(100)를 포함하는 가상머신(VM)이 멀티코어 시스템 상에서 동작되는 경우에는 가상머신(VM)의 인터프리터(101) 및 적시 컴파일러(102)는 서로 다른 코어에 할당되어 수행될 수 있다.
인터프리터(101)와 적시 컴파일러(102)가 서로 다른 코어에 할당되어 수행되는 경우, 인터프리터(101)에서 컴파일 할 대상이 되는 바이트코드 구간(trace)을 적시 컴파일러(102)로 전달해 줄 때까지 적시 컴파일러(102)는 동작하지 않는 대기상태를 유지한다.
즉, 적시 컴파일러(102)가 할당된 코어는 유휴상태로 있게 된다.
추가코드 생성장치(100)는 적시 컴파일러(102)가 동작하지 않는 대기상태로 있을 경우, 추가코드 생성장치(100)에서 결정한 바이트코드 구간(trace)을 적시 컴파일러(102)에 전달하여 바이트코드 그룹(trace)을 머신 코드(machine code)로 컴파일을 수행하도록 함으로써, 유휴상태에 있는 코어를 동작시킨다.
도 2는 본 발명의 일 실시예에 따른 추가코드 생성장치의 세부구성을 나타낸 블록도이다. 도 2를 참조하면, 추가코드 생성장치(100)는 정보수집부(201) 및 코드결정부(202)를 포함한다.
정보수집부(201)는 바이트코드(byte code)를 수행하고 있는 인터프리터(Interpreter)로부터 바이트코드(byte code)가 수행되는 논리흐름을 나타내는 추적 정보를 수집한다.
정보수집부(201)는 인터프리터에서 수행되는 바이트코드의 경로(path)를 추적함으로써, 수행되는 바이트코드의 논리적 순서, 바이트코드의 수행 횟수 등을 포함하는 추적 정보를 획득할 수 있다.
코드결정부(202)는 정보수집부(201)에서 수집된 추적 정보를 이용하여 머신 코드(machine code)를 생성할 필요가 있는 바이트코드 구간(trace)을 결정한다. 예컨대 추적 정보에 포함된 바이트코드가 수행되는 횟수를 이용하여 인터프리터에서 수행되는 바이트코드 중에서, 임계값 이상 수행되는 바이트코드의 라인을 시작점으로 설정하고, 설정된 시작점으로부터 소정길이까지의 구간을 바이트코드 구간으로 결정할 수 있다.
코드결정부(202)는 추적 정보에 포함된 바이트코드의 논리적 순서에 따라 소정길이의 구간으로 바이트코드를 묶을 수 있고, 묶여진 바이트코드들의 수행 횟수 등을 고려하여 머신 코드로 생성하여 처리되면 시스템의 처리속도 등에 유효한 것으로 판단되는 묶여진 바이트코드를 바이트코드 구간(trace)으로 결정한다.
추가코드 생성장치(100)는 적시 컴파일러(JITC)가 대기상태에 있는 동안에 코드결정부(202)에서 생성된 바이트코드 구간을 전달하고, 전달된 바이트코드 구간은 적시 컴파일(JITC)에서 머신 코드(machine code)로 컴파일된다.
도 3은 본 발명의 일 실시예에 따른 추가코드 생성장치의 동작과정을 나타낸 도면이다.
도 3을 참조하면, 추가코드 생성장치는 서로 다른 코어에 할당된 인터프리터(300) 및 적시 컴파일러(310), 그리고 코드 캐쉬(320) 사이에서 수행된다.
도 3에 도시된 본 발명의 일 양상에 따른 추가코드 생성장치는 정보수집부(301) 및 코드결정부(311)를 포함하고 있으며, 정보수집부(301)는 인터프리터(300)의 외부에, 코드결정부(311)는 적시 컴파일러(310)의 내부에 구현된 형태를 나타낸 것이다.
인터프리터(300)는 바이트코드(byte code)를 수행하면서 머신 코드(machine code)를 생성할 필요가 있는 바이트코드 구간(trace)을 선정하여 인터프리터(300)의 내부에 존재하는 Trace recorder에 저장한다.
Trace recorder에 저장된 바이트코드 구간(trace)은 적시 컴파일러(310)의 Work Queue(312)에 전달되어 저장된다.
Work Queue(312)에 저장된 바이트코드 구간(trace)은 적시 컴파일러(310) 내의 컴파일러(313)에서 머신 코드(machine code)로 컴파일되고, 머신 코드(machine code)는 코드 캐쉬(320)에 저장된다.
코드 캐쉬(320)에 저장된 머신 코드(machine code)는 인터프리터(300)에서 해당 바이트코드를 수행하고자 할 경우 인터프리터(300)에 반환되고, 반환된 머신 코드(machine code)가 인터프리터(300)에서 수행될 수 있다.
인터프리터(300)가 바이트코드(byte code)를 수행하고 있는 동안, 정보수집부(301)는 인터프리터(300)에서 수행되고 있는 바이트코드(byte code)의 경로(path)를 탐색하여 바이트코드(byte code)가 수행되는 논리흐름을 나타내는 추적 정보를 수집한다.
정보수집부(201)는 인터프리터에서 수행되는 바이트코드의 경로(path)를 추적함으로써, 수행되는 바이트코드의 논리적 순서, 바이트코드의 수행 횟수 등을 포함하는 추적 정보를 획득할 수 있다.
코드결정부(311)는 정보수집부(201)에서 수집한 추적 정보에 포함된 바이트코드(byte code)가 수행되는 횟수를 이용하여 인터프리터(300)에서 수행되는 바이트코드(byte code) 중에서, 임계값 이상 수행되는 바이트코드 라인의 시작점으로부터 소정길이까지의 구간을 바이트코드 구간(trace)으로 결정한다.
임계값 및 소정길이는 가상머신이 동작하는 시스템의 상태, Work Queue(312) 및 코드 캐쉬(320)의 용량 등을 고려하여 선정될 수 있다.
코드결정부(311)에서 바이트코드 구간을 결정하는 과정은 인터프리터(300)에서 바이트코드를 수행하는 과정에서 바이트코드 구간trace)을 선정하는 것과 유사한 과정으로 구현되는 것이나, 인터프리터(300)에서와 같이 실제로 바이트코드를 수행하는 것이 아니라 인터프리터(300)에서 바이트코드가 수행되는 과정에서 도출되는 바이트코드의 op코드를 분석하여 경로(path)를 탐색하는 과정을 통하여 구현될 수 있다.
코드결정부(311)에서 생성된 바이트코드 구간(trace) 역시, 인터프리터(300)에서 선정된 바이트코드 구간(trace)과 동일하게 Work Queue(312)에 저장되고, 적시 컴파일러(310) 내의 컴파일러(313)를 통하여 머신 코드(machine code)로 컴파일된다.
코드결정부(311)에서 생성된 바이트코드 구간(trace)을 컴파일한 머신 코드(machine code)는 코드 캐쉬(320)에 저장되고, 저장된 머신 코드(machine code)에 해당하는 바이트코드가 인터프리터(300)에서 수행되고자 하는 경우, 인터프리터(300)는 코드 캐쉬(320)로부터 머신 코드(machine code)를 전달받아 머신 코드(machine code)를 바이트코드 대신에 수행한다.
다만, 코드결정부(311)는 적시 컴파일러(310)가 대기상태 즉, 적시 컴파일러(310)가 할당된 코어가 유휴상태에 있을 경우에만 바이트코드 구간(trace)을 결정하여 Work Queue(312)로 전달한다.
인터프리터(300)와 적시 컴파일러(310)가 모두 동작 중인 상태에서는 인터프리터(300)를 통하여 바이트코드 구간(trace)이 계속 선정될 수 있어 적시 컴파일러(310) 역시 계속 동작상태를 유지할 가능성이 있다.
적시 컴파일러(310)가 계속 동작되는 상황에서 코드결정부(311)가 바이트코드 구간(trace)를 결정하여 적시 컴파일러(310)로 전달하는 것은 적시 컴파일러(310)의 부하를 가중시키게 되고, 결국 가상머신이 구동되는 멀티코어 시스템의 성능에 악영향을 주게 된다.
도 4는 본 발명의 일 실시예에 따른 도 1의 구조를 갖는 추가코드 생성장치를 통한 추가코드 생성방법을 나타낸 흐름도이다.
먼저, 추가코드 생성장치는 바이트코드(byte code)를 수행하고 있는 인터프리터(Interpreter)로부터 추적 정보를 수집한다(401).
인터프리터가 바이트코드를 수행하고 있는 동안, 추가코드 생성장치는 인터프리터에서 수행되고 있는 바이트코드의 경로(path)를 탐색하여 바이트코드(byte code)가 수행되는 논리흐름을 나타내는 추적 정보를 수집한다.
추가코드 생성장치는 인터프리터에서 수행되는 바이트코드의 경로(path)를 추적함으로써, 수행되는 바이트코드의 논리적 순서, 바이트코드의 수행 횟수 등을 포함하는 추적 정보를 획득할 수 있다.
추가코드 생성장치는 적시 컴파일러(JITC)가 바이트코드 구간을 머신 코드로 컴파일하고 있는지 확인한다(402). 즉, 적시 컴파일러가 동작상태에 있는지를 확인하는 것이다.
확인 결과, 컴파일하고 있지 않는 경우 즉, 적시 컴파일러가 동작하지 않는 대기상태에 있는 경우, 추가코드 생성장치는 수집된 추적 정보를 이용하여 머신 코드(machine code)를 생성할 필요가 있는 바이트코드 구간을 결정한다(403).
추가코드 생성장치는 추적 정보에 포함된 바이트코드의 논리적 순서에 따라 소정길이의 구간으로 바이트코드를 묶을 수 있고, 묶여진 바이트코드들의 수행 횟수 등을 고려하여 머신 코드로 생성하여 처리되면 시스템의 처리속도 등에 유효한 것으로 판단되는 묶여진 바이트코드를 바이트코드 구간(trace)으로 결정한다.
다음으로, 추가코드 생성장치에서 생성된 바이트코드 구간은 적시 컴파일러를 통하여 머신 코드로 생성(컴파일)된다(404).
만약, 적시 컴파일러가 동작하고 있는 경우(402) 또는 추가코드 생성장치에서 생성된 바이트코드 구간이 머신 코드로 컴파일이 완료된 경우(404)에는 401단계부터 반복하여 수행할 수 있다.
또한, 추적정보를 수집하는 단계(401)는 인터프리터에서 수행되고 있는 바이트코드의 경로(path)를 탐색하여 바이트코드(byte code)가 수행되는 논리흐름을 나타내는 추적 정보를 수집할 수 있다.
여기에서, 추적 정보는 인터프리터에서 바이트코드가 수행되는 횟수를 포함할 수 있으며, 이 경우 바이트코드 구간을 결정하는 단계(403)는 추적 정보에 포함된 바이트코드가 수행되는 횟수를 이용하여 인터프리터에서 수행되는 바이트코드 중에서, 임계값 이상 수행되는 바이트코드의 라인을 시작점으로 설정하고, 설정된 시작점으로부터 소정길이까지의 구간을 바이트코드 구간으로 결정할 수 있다.
임계값 및 소정길이는 가상머신이 동작하는 시스템의 상태 등을 고려하여 선정될 수 있다.
도 5는 본 발명의 일 실시예에 따른 도 3의 구조를 갖는 추가코드 생성장치를 통한 추가코드 생성방법을 나타낸 흐름도이다.
먼저, 추가코드 생성장치는 인터프리터(Interpreter)에서 생성된 바이트코드 구간(trace)이 존재하는지 확인한다(501).
바이트코드 구간이 존재하는지 확인하는 과정은 인터프리터의 Trace recorder 또는 적시 컴파일러의 Work Queue에 저장된 바이트코드 그룹이 존재하는지를 통하여 판단할 수 있다.
확인결과(501) 인터프리터에서 선정된 바이트코드 구간이 존재하지 않는 경우, 추가코드 생성장치의 그룹생성부(311)는 추가코드 생성장치의 정보수집부(301)에서 수집된 추적 정보를 이용하여 바이트코드 구간을 결정한다(502).
추가코드 생성장치의 정보수집부(301)에서 수집한 추적 정보는 바이트코드(byte code)가 수행되는 논리흐름을 나타내는 것으로 인터프리터에서 바이트코드가 수행되는 횟수를 포함할 수 있다.
추가코드 생성장치의 코드결정부(311)는 정보수집부(301)에서 수집된 추적 정보에 포함된 인터프리터에서 바이트코드가 수행되는 횟수를 이용하여 인터프리터에서 수행되는 바이트코드 중에서, 임계값 이상 수행되는 바이트코드의 라인을 시작점으로 설정하고, 설정된 시작점으로부터 소정길이까지의 구간을 바이트코드 구간으로 결정할 수 있다.
임계값 및 소정길이는 가상머신이 동작하는 시스템의 상태, Work Queue(312) 및 코드 캐쉬(320)의 용량 등을 고려하여 선정될 수 있다.
추가코드 생성장치에서 결정된 바이트코드 구간은 적시 컴파일러(310) 내의 컴파일러(313)를 통하여 머신 코드로 생성(컴파일)된다.(503).
다음으로, 인터프리터에서 바이트코드를 수행하고 있는 경우 즉, 인터프리터가 동작상태를 유지하고 있는 경우, 추가코드 생성장치는 인터프리터를 통하여 선정된 바이트코드 구간이 존재하는지 확인하는 단계(501)부터 다시 수행하게 된다(504).
그러나, 인터프리터에서 바이트코드를 수행하지 않고 있는 경우 즉, 인터프리터의 동작이 종료된 경우, 적시 컴파일러의 동작도 종료될 것이므로, 추가코드 생성장치도 동작이 종료된다(504).
한편, 본 발명의 실시 예들은 컴퓨터로 읽을 수 있는 기록 매체에 컴퓨터가 읽을 수 있는 코드로 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록 매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록 장치를 포함한다.
컴퓨터가 읽을 수 있는 기록 매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플로피디스크, 광 데이터 저장장치 등을 포함한다. 또한, 컴퓨터가 읽을 수 있는 기록 매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어, 분산 방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수 있다. 그리고 본 발명을 구현하기 위한 기능적인(functional) 프로그램, 코드 및 코드 세그먼트들은 본 발명이 속하는 기술 분야의 프로그래머들에 의하여 용이하게 추론될 수 있다.
이상에서 본 발명의 실시를 위한 구체적인 예를 살펴보았다. 전술한 실시 예들은 본 발명을 예시적으로 설명하기 위한 것으로 본 발명의 권리범위가 특정 실시 예에 한정되지 아니할 것이다.
100 추가코드 생성장치
101 인터프리터
102 적시 컴파일러
103 코드 캐쉬
101 인터프리터
102 적시 컴파일러
103 코드 캐쉬
Claims (15)
- 바이트코드(byte code)가 수행되는 논리흐름을 나타내는 추적 정보를 수집하는 정보수집부; 및
바이트코드가 컴파일되고 있지 않는 경우, 수집된 추적 정보를 이용하여 머신 코드(machine code)로 컴파일될 바이트코드 구간을 결정하는 코드결정부;를 포함하는 가상머신을 위한 추가코드 생성장치. - 제 1 항에 있어서,
상기 코드결정부에서 결정된 바이트코드 구간을 머신 코드로 컴파일하는 컴파일러;를 더 포함하는 가상머신을 위한 추가코드 생성장치. - 제 2 항에 있어서, 상기 컴파일러는
바이트코드를 수행하는 인터프리터와 서로 다른 코어에서 동작하는 가상머신을 위한 추가코드 생성장치. - 제 1 항에 있어서, 상기 정보수집부는
인터프리터에서 수행되는 바이트코드의 경로(path)를 탐색하고, 탐색된 경로에 기초하여 추적 정보를 수집하는 가상머신을 위한 추가코드 생성장치. - 제 1 항에 있어서, 상기 추적 정보는
인터프리터에서 바이트코드가 수행되는 횟수를 포함하는 가상머신을 위한 추가코드 생성장치. - 제 5 항에 있어서, 상기 코드결정부는
추적 정보에 포함된 바이트코드가 수행되는 횟수를 이용하여 인터프리터에서 수행되는 바이트코드 중에서 임계값 이상으로 수행되는 바이트코드 라인의 시작점을 설정하고, 설정된 시작점으로부터 소정길이까지의 구간을 컴파일될 바이트코드 구간으로 결정하는 가상머신을 위한 추가코드 생성장치. - 제 2 항에 있어서,
바이트코드를 수행하는 인터프리터와 상기 코드결정부는 서로 다른 코어에서 동작하며,
상기 코드결정부는 상기 컴파일러가 유휴 상태에 있는 동안에 바이트코드 구간을 결정하는 가상머신을 위한 추가코드 생성장치. - 제 2 항에 있어서,
바이트코드를 수행하는 인터프리터에서 결정된 바이트코드 구간 또는 상기 코드결정부에서 결정된 바이트코드 구간을 컴파일한 머신 코드를 저장하는 코드 캐쉬(code cache);를 더 포함하는 가상머신을 위한 추가코드 생성장치. - 바이트코드(byte code)가 수행되는 논리흐름을 나타내는 추적 정보를 수집하는 단계;
바이트코드가 컴파일되고 있는지 확인하는 단계; 및
컴파일되고 있지 않은 경우, 수집된 추적 정보를 이용하여 머신 코드(machine code)로 컴파일될 바이트코드 구간을 결정하는 단계;를 포함하는 가상머신을 위한 추가코드 생성방법. - 제 9 항에 있어서,
결정된 바이트코드 구간을 머신 코드로 컴파일하는 단계;를 더 포함하는 가상머신을 위한 추가코드 생성방법. - 제 9 항에 있어서, 상기 수집하는 단계는
인터프리터에서 수행되는 바이트코드의 경로(path)를 탐색하고, 탐색된 경로에 기초하여 추적 정보를 수집하는 가상머신을 위한 추가코드 생성방법. - 제 9 항에 있어서, 상기 추적 정보는
인터프리터에서 바이트코드가 수행되는 횟수를 포함하는 가상머신을 위한 추가코드 생성방법. - 제 12 항에 있어서, 상기 결정하는 단계는
추적 정보에 포함된 바이트코드가 수행되는 횟수를 이용하여 인터프리터에서 수행되는 바이트코드 중에서 임계값 이상으로 수행되는 바이트코드 라인의 시작점을 설정하고, 설정된 시작점으로부터 소정길이까지의 구간을 컴파일될 바이트코드 구간으로 결정하는 가상머신을 위한 추가코드 생성방법. - 인터프리터에서 결정된 바이트코드 구간이 존재하는지 확인하는 단계;
인터프리터에서 결정된 바이트코드 구간이 존재하지 않는 경우, 인터프리터에서 수행되는 바이트코드 중에서 임계값 이상으로 수행되는 바이트코드 라인의 시작점을 설정하고, 설정된 시작점으로부터 소정길이까지의 구간을 컴파일될 바이트코드 구간으로 결정하는 단계; 및
결정된 바이트코드 구간을 머신 코드로 컴파일하는 단계;를 포함하는 가상머신을 위한 추가코드 생성방법. - 제 14 항에 있어서,
인터프리터에서 바이트코드를 수행하고 있는 경우, 상기 확인하는 단계부터 반복 수행하는 단계;를 더 포함하는 가상머신을 위한 추가코드 생성방법.
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020110005144A KR20120083803A (ko) | 2011-01-18 | 2011-01-18 | 가상머신을 위한 추가코드 생성장치 및 방법 |
US13/271,465 US9792132B2 (en) | 2011-01-18 | 2011-10-12 | Code generator and method for generating extra code for a virtual machine |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020110005144A KR20120083803A (ko) | 2011-01-18 | 2011-01-18 | 가상머신을 위한 추가코드 생성장치 및 방법 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20120083803A true KR20120083803A (ko) | 2012-07-26 |
Family
ID=46491725
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020110005144A KR20120083803A (ko) | 2011-01-18 | 2011-01-18 | 가상머신을 위한 추가코드 생성장치 및 방법 |
Country Status (2)
Country | Link |
---|---|
US (1) | US9792132B2 (ko) |
KR (1) | KR20120083803A (ko) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5901267B2 (ja) * | 2011-10-21 | 2016-04-06 | キヤノン株式会社 | 情報処理装置およびその制御方法、並びにプログラム |
US9110751B2 (en) * | 2012-02-13 | 2015-08-18 | Microsoft Technology Licensing, Llc | Generating and caching software code |
US20150186168A1 (en) * | 2013-12-30 | 2015-07-02 | Unisys Corporation | Dedicating processing resources to just-in-time compilers and instruction processors in a dynamic translator |
FR3105853B1 (fr) * | 2019-12-31 | 2023-01-06 | Proton World Int Nv | Système embarqué |
FR3105854B1 (fr) * | 2019-12-31 | 2024-07-19 | St Microelectronics Rousset | Système embarqué |
CN111768183B (zh) | 2020-08-31 | 2024-04-19 | 支付宝(杭州)信息技术有限公司 | 一种执行智能合约的方法、区块链节点和存储介质 |
CN111770204B (zh) | 2020-08-31 | 2021-10-22 | 支付宝(杭州)信息技术有限公司 | 一种执行智能合约的方法、区块链节点和存储介质 |
CN111768184A (zh) * | 2020-08-31 | 2020-10-13 | 支付宝(杭州)信息技术有限公司 | 一种执行智能合约的方法及区块链节点 |
CN111770202B (zh) | 2020-08-31 | 2021-10-29 | 支付宝(杭州)信息技术有限公司 | 一种执行智能合约的方法、区块链节点和存储介质 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6317872B1 (en) * | 1997-07-11 | 2001-11-13 | Rockwell Collins, Inc. | Real time processor optimized for executing JAVA programs |
US6170083B1 (en) * | 1997-11-12 | 2001-01-02 | Intel Corporation | Method for performing dynamic optimization of computer code |
US20020147969A1 (en) * | 1998-10-21 | 2002-10-10 | Richard A. Lethin | Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method |
EP1316014A1 (en) * | 2000-08-31 | 2003-06-04 | Koninklijke Philips Electronics N.V. | System for executing virtual machine instructions |
JP2004529413A (ja) * | 2001-02-12 | 2004-09-24 | トリメディア テクノロジーズ インコーポレイテッド | 最適化された動的バイトコードインタプリタ |
US7210127B1 (en) * | 2003-04-03 | 2007-04-24 | Sun Microsystems | Methods and apparatus for executing instructions in parallel |
US8752056B2 (en) * | 2007-12-03 | 2014-06-10 | International Business Machines Corporation | Running native code across single or multi-core hybrid processor achitecture |
-
2011
- 2011-01-18 KR KR1020110005144A patent/KR20120083803A/ko not_active Application Discontinuation
- 2011-10-12 US US13/271,465 patent/US9792132B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US9792132B2 (en) | 2017-10-17 |
US20120185833A1 (en) | 2012-07-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20120083803A (ko) | 가상머신을 위한 추가코드 생성장치 및 방법 | |
US10324741B2 (en) | Speeding up dynamic language execution on a virtual machine with type speculation | |
RU2668973C2 (ru) | Отладка машинного кода путем перехода от исполнения в собственном режиме к исполнению в интерпретируемом режиме | |
EP2281236B1 (en) | Just-ahead-of-time compilation | |
JP4003830B2 (ja) | マルチプロセッシング環境における透過動的最適化のための方法およびシステム | |
US8522222B2 (en) | Tracing just-in-time compilation with pointers to local variables | |
US7080366B2 (en) | Dynamic compiler and method of compiling code to generate dominant path and to handle exceptions | |
CA2672337C (en) | Compiler instrumentation infrastructure to facilitate multiple pass and multiple purpose dynamic analysis | |
US6973644B2 (en) | Program interpreter | |
KR100643268B1 (ko) | 자바 가상 머신의 성능을 향상시키는 방법 및 상기 방법에의해 동작되는 시스템 | |
EP3084598B1 (en) | Execution guards in dynamic programming | |
Bebenita et al. | Trace-based compilation in execution environments without interpreters | |
US10466988B2 (en) | Systems and methods for automatic computer code parallelization | |
US8056061B2 (en) | Data processing device and method using predesignated register | |
KR20060110971A (ko) | 자바 가상 머신의 명령어 수행 방법 및 그 장치 | |
JP2012038231A (ja) | バイナリコードを最適化するコンパイル方法、及びそのコンパイラシステム、並びにコンピュータ・プログラム | |
JP3992102B2 (ja) | コンパイラ装置、コンパイル方法、コンパイラプログラム、及び記録媒体 | |
JP5719278B2 (ja) | 情報処理装置、プロファイル対象決定プログラム及び方法 | |
US20120005460A1 (en) | Instruction execution apparatus, instruction execution method, and instruction execution program | |
KR20120064446A (ko) | 컴퓨팅 시스템 상의 바이트코드의 분기 처리 장치 및 방법 | |
US9262186B2 (en) | Code rearranger and method for rearranging code for a virtual machine | |
Park et al. | Concurrent JavaScript parsing for faster loading of Web apps | |
Kyle et al. | Efficiently parallelizing instruction set simulation of embedded multi-core processors using region-based just-in-time dynamic binary translation | |
JP2009009253A (ja) | プログラム実行方法、プログラム、およびプログラム実行システム | |
US8762973B2 (en) | Information processing apparatus, method of controlling information processing apparatus, and program for executing intermediate code instructions |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E601 | Decision to refuse application |