KR20040039412A - 가상 머신 해석기 가속 하드웨어용 소프트웨어 지원 - Google Patents
가상 머신 해석기 가속 하드웨어용 소프트웨어 지원 Download PDFInfo
- Publication number
- KR20040039412A KR20040039412A KR10-2004-7004331A KR20047004331A KR20040039412A KR 20040039412 A KR20040039412 A KR 20040039412A KR 20047004331 A KR20047004331 A KR 20047004331A KR 20040039412 A KR20040039412 A KR 20040039412A
- Authority
- KR
- South Korea
- Prior art keywords
- instructions
- virtual machine
- processor
- primitive
- executing
- Prior art date
Links
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
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
소프트웨어 트랩 방법론을 지원하는 가상 머신 명령들을 처리하기 위한 시스템 및 방법에 관한 것이다. 응용 프로그래밍 인터페이스(API)는 가상 머신 하드웨어로부터의 재귀적 가상 머신 명령들의 처리를 제거하고 대신에 소프트웨어를 사용하여 재귀적 가상 머신 명령들을 처리하는 소프트웨어 트랩들을 위한 부가적 기능성을 규정한다. 부가적 기능성은, 가상 머신 명령들이 CPU 레지스터들에 접근하여 필요에 따라 변수들의 값들을 검색하고 수정하는 것을 가능하게 하는 재귀적 가상 머신 명령들을 처리하기 위한 콘텍스트의 구성, 재귀적 가상 머신 명령들의 처리가 완료시의 구성된 콘텍스트의 해제, 및 비재귀적 가상 머신 명령들을 처리하기 위한 가상 머신으로의 제어의 복귀를 포함한다.
Description
컴퓨터 프로그래밍 언어들은 컴퓨터가 수행하기 위한 명령들을 표현하는 인간 해독 가능 소스 코드로 구성되는 응용들을 생성하는데 사용된다. 그러나, 컴퓨터가 명령들을 따를 수 있기 전에, 소스 코드는 컴퓨터 해독 가능한 2진 기계 코드(machine code)로 되어야 한다.
C, C++, 또는 코볼과 같은 프로그래밍 언어는 통상적으로 소스 코드로부터 어셈블리 언어를 생성하고, 이어서 기계 코드로 변환된 기계어(machine language)로 어셈블리 언어를 번역하는 컴파일러를 사용한다. 따라서, 소스 코드의 최종 번역은 실행 시간 이전에 발생한다. 상이한 컴퓨터들은 상이한 기계어들을 요구하므로, 예를 들면 C++로 기록된 프로그램은 프로그램이 기록되어 있는 특정 하드웨어 플랫폼 상에서만 실행될 수 있다.
해석형 프로그램 언어들은 다중 하드웨어 플랫폼들 상에서 실행될 수 있는소스 코드를 갖는 응용들을 생성시키도록 설계된다. 자바(JAVA)TM는 "바이트코드" 또는 "가상 기계어"로서 공지된 중간 언어로 실행 시간 전에 변환된 소스 코드를 생성함으로써 플랫폼 독립성을 성취하는 해석형 프로그래밍 언어이다. 실행 시간에, 바이트코드는 미국 특허 제4,443,865호에 개시된 바와 같이 해석기 소프트웨어를 경유하여 플랫폼 적합형 기계 코드로 번역된다. 각각의 바이트코드를 해석하기 위해, 해석기 소프트웨어는 "페치, 디코딩 및 디스패치"(FDD) 연산들의 시리즈를 수행한다. 각각의 바이트코드 명령에 대해 해석기 소프트웨어는 원시 중앙 처리 장치(CPU) 명령들에 표현된 대응 실행 프로그램을 포함한다. 해석기 소프트웨어는 CPU가 메모리로부터 가상 머신 명령을 페치하거나 판독하고, 바이트코드 명령을 위한 실행 프로그램의 CPU 접근을 디코딩하고, CPU의 제어를 그 실행 프로그램에 전달함으로써 디스패치하게 한다. 해석 프로세스는 시간 소비적일 수 있다.
PCT 특허 출원 WO9918484호에 개시된 바와 같이, 메모리와 CPU 사이에 프로세서[가상 머신 해석기(VMI)]를 부가하는 것은 가상 머신 명령들의 처리를 향상시킨다. 본질적으로, 가상 머신은 물리적 구조체가 아니라, VM 또는 CPU 내에 저장된 대응 원시 기계어 명령들을 선택함으로써 하드웨어 플랫폼을 위한 바이트코드를 해석하는 독립 운영 환경이다. 다음, 원시 명령들은 하드웨어 플랫폼의 CPU에 공급되어 연속적으로 실행된다. 통상적인 가상 머신은 FDD 연산들의 시리즈를 수행하기 위해 바이트코드당 20 내지 60 사이클들의 처리 시간(바이트코드의 품질 및 복잡도에 따라)을 필요로 한다.
처리 시간의 부가의 감소들이 PCT 특허 출원 WO9918484호 및 WO9918486호에 개시된 바와 같이 하드웨어 가속기를 구현함으로써 성취될 수 있다. 먼저, VMI는 메모리로부터 바이트코드를 판독(페치)한다. 다음, VMI는 페치된 바이트코드의 (디코드들)의 다수의 특성들을 탐색한다. VMI에 의해 접근된 특성들 중 하나는 바이트코드가 단순한지 또는 복잡한지의 여부를 나타내고, 이는 VMI가 하드웨어에서 바이트코드를 번역할 수 있는지의 여부를 결정한다. VMI는 단순한 자바TM바이트코드들을 원시 CPU 명령들의 특정화 및 최적화된 시퀀스로 번역하고, 이어서 이들은 CPU에 의해 페치되어 실행된다. CPU가 명령을 실행하는 동안, VMI는 다음의 바이트코드를 CPU 명령들로 페치하고 번역한다. VMI는 1 내지 4 사이클들로 단순 바이트코드들을 처리할 수 있다. 그의 특성들이 바이트코드가 복잡하다는 것을 나타내면, VMI는 원시 CPU 명령들의 일반적 시퀀스를 생성하고, 이에 의해 해석 및 실행을 위한 소프트웨어로 복잡성 바이트코드를 지향시키는 "소프트웨어 트랩(software trap)"을 구현한다. 복잡성 바이트코드와 조우할 때, VMI는 대응 원시 함수를 실행하라는 기계 코드 명령들, 즉 CPU 내에 존재하는 기계 코드 서브루틴을 발행한다. 이에 따라, CPU는 이전의 바이트코드 번역들의 결과로서 VMI에 의해 생성된 원시 명령들의 실행을 중단하고 복잡성 바이트코드에 의해 호출되는 원시 함수를 실행한다. VMI는 출력 버퍼로부터의 갱신된 페칭을 검출하도록 대기하고 이어서 바이트코드들의 시퀀스의 번역을 재개한다. 명령마다의 복잡성 바이트코드들을 번역하는 대신에 존재하는 원시 함수들에 접근하지만, VMI는 각각의 소프트웨어트랩(5 내지 20 사이클들)의 VMI가 다른 바이트코드의 CPU 실행과 동시에 발생하기 때문에 거의 0 사이클들로 FDD의 효과를 감소시킨다.
바이트코드들의 시퀀스를 해석하는 동안, 가상 머신은 "재귀적인" 복잡성 바이트코드와 조우될 수도 있다. 재귀적 바이트코드들(RBC들)을 실행시에 문제점이 발생하는데, 이는 각각의 RBC가 결과적으로 메소드 호출(method call)을 초래하는 원시 함수를 호출하기 때문이다(즉, VMI가 자바 바이트코드들의 다른 시퀀스를 위해 재활성화됨). 따라서, 다른 시퀀스로부터 바이트코드들을 디코딩하기 위해, RBC에 의해 호출된 원시 함수는 CPU 레지스터들에 저장된 변수들의 값에 접근해야 한다. 원시 함수들은 통상적으로(항상은 아님), 이하에 "프리앰블들(preambles)" 및 "포스트앰블들(postambles)"이라 칭하는 명령들의 표준 집합들을 포함한다. 표준 프리앰블은 서브루틴이 실행되기 전에 몇몇 또는 모든 CPU 레지스터들의 콘텐트를 세이브하도록 설계된다. 세이브된 콘텐트의 몇몇은 원시 함수의 실행 중에 수정되어야 할 수도 있는 변수들(가상 머신을 재활성화하기 위한 스택 포인터 및 복귀 주소와 같은)의 값들에 관련된다. 그러나, 이들 변수들은, RBC 메소드 호출이 CPU 레지스터들에 접근하는데 필요한 기계보다는 프로그래밍 언어의 소스 코드에 한정되기 때문에, 통상적으로 RBC에 의해 의도된 원시 함수 내에 접근 가능하지 않을 수 있다. 더욱이, RBC 메소드 호출은 CPU 레지스터들에 접근할 수 없기 때문에, 표준 서브루틴 포스트앰블은 CPU 레지스터들로 RBC 메소드 호출 복귀에 의해 수정되어 있는 변수들의 값을 기록할 수 없다. 달리 말하면, 귀납적인 바이트코드에 의해 호출된 서브루틴은, RBC 서브루틴이 콘텐트 설정의 결핍(프리앰블 또는 포스트앰블이 없음)에 기인하여 또는 호출된 원시 함수와 콘텐트 설정의 비호환성의 관계에 기인하여 CPU 레지스터들에 저장된 변수들에 접근할 수 없다. RBC 서브루틴들을 위한 변수들의 값을 기록하고 수정하도록 어셈블리 언어를 생성하는 핸드 코딩된(hand-coded) 소프트웨어를 구현함으로써 이 문제점에 접근하는 것이 가능하지만, 이 접근은 복잡한 개발 노력을 필요로 한다.
매우 용이한 구현성을 가지면서 재귀적 바이트코드들에 의해 의도된 명령들을 정확하고 효율적으로 실행하는 프로그래밍 언어들 해석 시스템에 대한 요구가 존재한다.
본 발명은 일반적으로 컴퓨터 프로그래밍 언어들에 관한 것이고, 보다 구체적으로는 가상 머신 언어의 번역 및 실행에 관한 것이다.
도 1은 본 발명의 환경의 예시적인 실시예의 기능적 요소들을 도시하는 블록도.
도 2는 예시적인 바이트코드 처리 시퀀스를 도시하는 도면.
도 3은 본 발명의 예시적인 실시예에 따른 방법의 흐름도.
도 4는 본 발명의 예시적인 실시예에 수반된 연산들의 상대적인 타이밍을 도시하는 타임라인.
도 5는 본 발명의 대안적인 실시예에 수반된 연산들의 상대적인 타이밍을 도시하는 타임라인.
본 발명은 재귀적 바이트코드에 의해 호출된 원시 함수들을 실행하고 이들을 위한 프리앰블 및 포스트앰블을 공급하는 특정 함수를 규정함으로써 상술한 요구들을 충족시킨다. 프리앰블 및 포스트앰블은 원시 함수들과 연관된 임의의 표준 프리앰블들 및 포스트앰블들을 무효화하거나 수정하고, 원시 함수들이 접근 가능하게 하고 필요한 CPU 레지스터들의 콘텐트를 수정한다. 대안적인 실시예들에서, 특정 함수들은 프로세서 메모리로부터 페치되거나 임의의 복잡성 바이트코드를 위해 생성될 수 있다. 본 발명은 이에 의해 소프트웨어 트랩의 구현 또는 "VMI 가속 하드웨어" 방법론을 단순화하면서 정확성 및 속도를 유지한다.
보다 구체적으로는, 본 발명은 응용 프로그램 인터페이스(API)의 형태의 VMI 지원을 제공한다. VMI가 바이트코드들의 시퀀스를 해석하고 실행하면서 재귀적 바이트코드와 조우하면, 본 발명의 VMI 지원 소프트웨어는 부가적 프리앰블 및 부가적 포스트앰블을 갖는 재귀적 바이트코드에 의해 호출된 상위 레벨 서브루틴을 요약한다. 본 발명의 부가적 프리앰블은 서브루틴이 호출될 때 CPU 레지스터들에 포함된 변수들의 값들을 조작하고, 이에 의해 CPU가 이들 값들을 호출된 서브루틴 내에 접근 가능한 변수들로 기록하게 한다. 표준 서브루틴 포스트앰블의 실행 후에, 본 발명의 부가적 포스트앰블은 CPU가 수정된 변수들의 값들을 페치하고 이 값들을 CPU 레지스터들 내에 기록하게 한다. 따라서, 수정된 변수들은, CPU가 후속의 바이트코드 번역들로부터 발생하는 원시 명령들의 실행을 재개할 때 가용화될 수 있다.
간략하게는, 본 발명은 본 발명의 예시적인 실시예에서 자바TM프로그래밍 언어에 의해 생성되는 가상 머신 명령들을 처리하기 위한 방법들 및 시스템들을 포함한다. 프로그래밍 레벨에서, 자바TM소스 코드는 중간 언어 호출 바이트코드로 컴파일된다. 바이트코드는 프로세서에 의한 실행을 위해 가상 머신에 의해 해석될 수 있는 가상 머신 명령들로 구성된다. 본 발명의 예시적인 실시예에 따르면, 실행 시간에 가상 머신(예시적인 실시예에서, VMI)이 초기화된다. 모든 소프트웨어 트랩들을 위한 입구 주소들을 포함하는 테이블이 컴파일되고, 여기서 소프트웨어 트랩들은 VM 하드웨어로부터의 특정 복잡성 바이트코드들의 처리를 제거하고 대신에 소프트웨어를 사용하여 복잡성 바이트코드들을 처리한다. 각각의 바이트코드의 특성들을 위한 적절한 처리 방법론에 따라 바이트코드들을 분류하는 파라미터들이 초기화된다. 예를 들면, 바이트코드들은 단순성, 복잡성, 또는 재귀적(RBC)으로서특징화될 수도 있다. 재귀적 바이트코드는 바이트코드들의 제2 시퀀스에서 하나 이상의 바이트코드들을 실행할 수도 있는 서브루틴을 호출하고 이어서 바이트코드들의 제1 시퀀스로 복귀되는 바이트코드들의 제1 시퀀스에서의 가상 머신 명령이다. 재귀적 자바 바이트코드들의 예들은 INVOKESTATIC 및 NEW이다. RBC들을 처리하도록 구성된 이들 소프트웨어 트랩들은 적절한 프리앰블들 및 포스트앰블들을 갖는다.
VMI는 바이트코드들의 시리즈 각각을 하나 이상의 원시 명령들로 번역하도록 진행된다. RBC가 조우될 때, VMI는 바이트코드들의 시퀀스의 번역을 일시 중지하고 적절한 소프트웨어 트랩을 경유하여 RBC를 처리한다. 일반적으로, 소프트웨어 트랩은 RBC의 가상 머신 명령들에 대응하는 원시 함수(들)를 검색한다. 본 발명의 응용 프로그래밍 인터페이스(API)는, 프리앰블을 실행하고, RBC에 대응하는 원시 함수를 호출하고, 포스트앰블을 실행하는 적절한 서브루틴을 규정한다. 프리앰블은 RBC에 의해 호출된 원시 함수(들)의 실행 전에 실행된다. 포스트앰블은 RBC에 의해 호출된 원시 함수(들)의 실행 후, 및 RBC 원시 함수(들)의 임의의 RETURN 명령문 이후에 실행된다. RBC에 의해 호출된 서브루틴이 표준 프리앰블 및/또는 표준 포스트앰블을 포함하면, 본 발명의 프리앰블은 무효화되고 통상적으로 표준 프리앰블의 실행 전에 실행되고, 본 발명의 포스트앰블은 무효화되고 통상적으로 표준 포스트앰블의 실행 후에 실행된다. 대안적으로, 본 발명의 프리앰블 및 포스트앰블은 표준 프리앰블 또는 표준 포스트앰블 각각에 포함된 하나 이상의 명령들을 물리적으로 수정하거나 무효화할 수도 있다. 본 발명의 예시적인 실시예의 양태에따르면, 프리앰블은 RBC에 의해 호출된 서브루틴에 접근 가능한 변수들에 값들을 기록한다. 본 발명의 포스트앰블은 변수들을 포함하는 CPU 레지스터들로 복귀된 호출 서브루틴에 의해 수정된 변수들의 값들을 기록한다. 다음, API에 의해 규정된 서브루틴은 바이트코드들의 시퀀스의 VMI에서의 해석의 재개를 개시하고, 이는 다른 RBC가 조우될 때 또는 번역 프로세스가 다른 방식으로 종결될 때까지 계속될 것이다. 대안적으로, API에 의해 규정된 서브루틴은 VMI 콘텍스트로의 원시 연산들 접근을 제공하도록 필요에 따라 프리앰블들 및 포스트앰블들을 실행할 수도 있다- 예를 들면, 원시 처리 전에 제1 프리앰블이 개시되고, 방법의 실행 전에 제1 포스트앰블이 처리되고, 방법의 실행 후에 다른 프리앰블 및 원시 처리 후에 최종 프리앰블이 완료된다.
VMI 번역은 C RETURN 명령문과 같은 코드를 사용하여 재개된다. 그러나, 본 발명의 예시적인 실시예에서, RBC에 의해 발행된 C RETURN 명령문은, RBC를 처리하기 위한 환경으로서 구성된 CPU의 영역들을 해제하고 VMI 실행을 바이트코드들의 시퀀스 내의 위치로, 예를 들면 가장 최근에 번역된 RBC의 바로 다음의 위치로 복귀시키는 재개 서브루틴에 의해 증대된다.
본 발명의 다른 양태는 자바TM과 같은 해석형 언어로부터의 가상 머신 명령들을 실행하기 위한 시스템이다. 시스템은 프로세서(CPU) 및 프리프로세서(VMI), 명령 메모리, 번역기(JVM), 및 응용 프로그래밍 인터페이스(API)를 포함한다. 프로세서는 이하에 원시 명령들이라 칭하는 하드웨어 특정 명령들을 실행하도록 구성되고 내장된다. 프리프로세서는 예를 들면 명령 메모리로부터의 바이트코드를 페치하고 이 바이트코드를 원시 CPU 명령들로 번역하도록 구성된 VMI와 같은 가상 머신이다. 특성 형태들의 바이트코드에서, API는, 변수들이 바이트코드에 의해 표현된 원시 CPU 명령들에 접근 가능하도록 CPU 레지스터들로부터의 값들을 변수들로 기록하고, 바이트코드에 의해 표현된 원시 CPU 명령들에 따라 변수들의 값들을 수정하도록 구성된다. 본 발명의 예시적인 실시예에서, API는 바이트코드에 의해 호출된 서브루틴의 실행 전에 프리앰블을 실행 후에 포스트앰블을 구현하는 서브루틴을 규정한다. 프리앰블은 CPU 레지스터들로부터의 값들을 호출된 서브루틴에 접근 가능한 변수들에 기록한다. 바이트코드에 의해 표현된 명령들을 실행한 후에, API는 포스트앰블 서브루틴을 실행함으로써 이에 따라 변수들의 값들을 수정한다.
다양한 형태들의 바이트코드들을 처리하도록 본 발명의 API와 조합된 소프트웨어 트랩 방법론을 구현하는 것이 가능하지만, 본 발명의 예시적인 실시예는 재귀적 바이트코드들의 처리에 관한 것이다.
본 발명은 선 마이크로시스템스(Sun Microsystems)에 의해 제조된 JVM들과 같은 가상 머신들을 사용하여 자바TM바이트코드를 실행하는 시스템들에서 구현될 수 있다. 그러나, 본 발명은 마이크로소프트 가상 머신과 같은 다른 자바TM가상 머신들을 사용하여 또한 구현될 수 있고, 또한 비주얼 베이직, 디베이스, 베이직, 및 MSIL(마이크로소프트 중간 언어)와 같은 다른 해석용 언어들을 실행하는 시스템들에 적용 가능하다.
본 발명의 부가의 목적들, 장점들 및 신규한 특징들은 이어지는 설명에서 부분적으로 설명될 것이고, 이하의 고찰시에 당 기술 분야의 숙련자들에게 부분적으로 더욱 명백해질 것이고, 또는 본 발명의 실시에 의해 학습될 수도 있다.
이제, 유사한 도면 부호들은 유사한 부품들을 나타내는 첨부 도면들에 도시되어 있는 본 발명의 예시적인 실시예를 상세히 참조하면, 도 1은 본 발명의 환경의 예시적인 실시예의 블록도이다. 환경의 기본 부품들은, 모두 시스템 버스(160)에 의해 접속되어 있는 프로세서(110), 프리프로세서(120), 및 명령 메모리(150)를 구비하는 하드웨어 플랫폼(100)이다. 프리프로세서(120)는 적어도 하나의 테이블(130) 및 번역기(140)를 구비한다. 하드웨어 플랫폼(100)은 통상적으로, 중앙 처리 장치(CPU), 기본 주변 장치들, 및 운영 체제(OS)를 구비한다. 본 발명의프로세서(110)는 MIPS, ARM, IntelTMx86, PowerPCTM, 또는 SPARC형 마이크로프로세서와 같은 CPU이고, 이하에 원시 명령들이라 칭하는 하드웨어 특정 명령들을 실행하도록 구성되고 내장된다. 본 발명의 예시적인 실시예에서, 번역기(140)는 선 마이크로 시스템스에 의한 KVM과 같은 자바TM가상 머신(JVM)이다. 예시적인 실시예의 프리프로세서(120)는 WO9918486호에 개시된 가상 머신 해석기(VMI)인 것이 바람직하고, 명령 메모리로부터 바이트코드를 페치하고 바이트코드를 원시 CPU 명령들로 해석하도록 구성된다. VMI(120)는 버스(160) 상의 주변 장치이고, 미리 결정된 범위의 CPU 주소들이 VMI(120)에 할당된 경우 메모리 맵 주변 장치로서 기능할 수도 있다. VMI(120)는 명령 메모리(150) 내의 현재의(또는 다음의) 가상 머신 명령을 나타내는 독립적인 가상 머신 명령 포인터를 관리한다. 명령 메모리(150)는 예를 들면, 자바TM바이트코드(170)와 같은 가상 머신 명령들을 포함한다.
VMI(120)는, 대부분의 바이트코드들(170)을 원시 CPU 명령들의 최적 시퀀스들로 번역함으로써 자바TM바이트코드(170)의 해석을 가속화한다. 그러나, VMI(120)는 소프트웨어 트랩을 실행함으로써 복잡성 바이트코드들(170)을 처리하기 위한 소프트웨어 솔루션을 구현한다. 본 발명은 일반적으로 재귀적 바이트코드(RBC)(230)로서 공지된 특정 형태의 복잡성 바이트코드를 목표로 하는 소프트웨어 트랩들의 실행을 증대하기 위한 시스템들 및 방법들에 관한 것이다. 도 2는 바이트코드들(170)의 제1 시리즈(210)에서의 RBC(230)의 해당 처리가 바이트코드들(170)의 제2 시리즈(220)에서의 바이트코드들(170)의 처리 및 시리즈(210)에서의 바이트코드들(170)의 처리로의 후속의 복귀를 발생시키는, RBC(230)의 한정적인 특징을 도시한다. 따라서, RBC(230)의 실행은 "방법"으로서 공지된 바이트코드 서브루틴을 초래한다. 시리즈(210)가 시리즈(220)와 동일하면, 시리즈(210)는 "재귀적 바이트코드"에 상당하지 않는 용어인 "재귀적 방법"을 구성한다. 본 발명은 소프트웨어 트랩들의 일반적인 구조의 규정을 포함하는 API를 규정함으로써 RBC들(230)을 처리하는 소프트웨어 트랩들의 일반적인 연산을 지원한다.
본 발명에 따르면, 도 3을 참조하면, 실행 시간에 VMI(120)의 번역 제어 레지스터들을 설정하는 것을 포함하는 프로세스인, VMI(120)가 초기화된다. 모든 소프트웨어 트랩들을 위한 입구 주소들을 포함하는 테이블(130)이 컴파일된다. VMI가 바이트코드의 특성들에 따라 각각의 바이트코드를 처리하는 것을 가능하게 하는 파라미터들이 초기화된다. 바이트코드가 복잡성일 때, VMI는 적절한 소프트웨어 트랩을 경유하여 바이트코드를 처리한다. 본 발명에 따르면, RBC들(230)을 처리하도록 구성된 이들 소프트웨어 트랩들은, 함께 소프트웨어 트랩을 형성하는 원시 명령들의 일반적인 시퀀스의 부분으로서, 적절한 프리앰블들 및 포스트앰블들에 관련된다. 프리앰블들 및 포스트앰블들은 VMI(120)에 의해 생성될 수도 있지만, 예시적인 실시예에서는 프로세서 메모리에 저장되고, 인스턴스화(instantiated)되어 그로부터 실행된다. 대안적으로, 프리앰블들 및 포스트앰블들은 VMI 내의 테이블들(130)에 저장될 수 있다. 따라서, API 구현에서, 시스템 초기화시에 각각의 RBC 소프트웨어 트랩 입구점은 원시 서브루틴("PPA 서브루틴")으로의 지점으로프로그램된다. PPA 서브루틴은 프리앰블 및 포스트앰블의 실행을 포함하고, RBC에 의해 호출된 원시 함수(들)로의 점프들을 포함하도록 인스턴스화 되어 있다.
본 발명의 연산의 예로서, VMI(120)는 바이트코드들(170)의 시리즈(210)의 각각을 하나 이상의 원시 명령들로 번역하도록 진행된다. 이제, 도 2를 참조하면, 바이트코드들(B0 내지 B2)은 비재귀적이므로, VMI(120)는 명령 메모리(150)로부터 단순히 B0 내지 B2를 페치하고, 각각의 바이트코드(170)를 위해 규정된 원시 명령 또는 명령들을 선택하고, 실행을 위해 프로세서(110)에 명령(들)을 공급한다. Bn은, 그의 실행이 제2 시퀀스(220)로부터 하나 이상의 바이트코드들(여기서, Bo 내지 Bs)의 실행을 초래할 수도 있는 RBC(230)이다. 자바에서, 메소드 호출들은 항상 제1 바이트코드에서 시퀀스에 진입하지만, 다른 언어들은 명령 시퀀스를 따라 다른 위치들에서의 진입이 허용되지 않을 수 있는 기술적인 이유는 없다는 것을 주목하라. 제2 시퀀스(220)에서의 바이트코드들의 실행 후에, Bs는 바이트코드 실행이 제1 시퀀스(210)에서의 소정 부분에서 계속되도록 하는 RETURN 바이트코드이다. 자바 방법은 Bs가 시퀀스(220)의 최종 바이트코드가 아니라는 것으로 표시된 바와 같이 다수의 출구점들(RETURN 바이트코드들)을 가질 수 있다. Bs 후에, 실행은 통상적으로 Bn+1에서 제1 시퀀스(210)에서 계속되지만, 이는 반드시 그래야 할 필요는 없다.
도 3의 블록 310에 도시한 바와 같이, VMI(120)는 각각의 바이트코드(170)를 페치하도록 블록 320에서의 처리 전에 가상 머신 카운터를 증분한다. 블록 330에서, VMI(120)는 바이트코드(170)가 "단순성"인지의 여부, 즉 바이트코드(170)를 위한 적어도 하나의 원시 명령을 구성하는 하드웨어 번역이 존재하는지의 여부를 바이트코드(170)의 특성들로부터 결정함으로써, 바이트코드(170)를 디코딩한다. 바이트코드(170)를 위한 하드웨어 번역이 존재하면, 방법은 블록 370으로 진행하고 이에 따라 단순성 바이트코드를 처리한다. 바이트코드170)를 위해 존재하는 하드웨어 번역이 없으면, 바이트코드(170)는 복잡성이다. 블록 340에서, VMI는 복잡성 바이트코드를 위한 원시 명령들의 적절한 일반적인 시퀀스를 식별하는 테이블(140) 내의 파라미터들에 대해 바이트코드(170)를 테스트한다. VMI(120)는 바이트코드들(170)의 시퀀스(210)의 번역을 일시 중지하고, 그의 주소가 테이블(140) 내에 위치되어 있는 적절한 소프트웨어 트랩을 구성하는 일반적인 시퀀스에 따라 복잡성 바이트코드를 처리한다. 소프트웨어 트랩은 통상적으로, 명령마다의 바이트코드(170)에 의해 표현되는 서브루틴을 해석하기보다는, 바이트코드(170)에 대응하는 원시 함수를 검색하고 CPU(110)로 원시 함수를 디스패치함으로써 복잡성 바이트코드를 처리한다. 본 발명의 응용 프로그래밍 인터페이스(API)는 RBC들을 처리하도록 구현된 바와 같은 소프트웨어 트랩 방법론을 증대하는데 필요한 기능성을 규정하고 기능성이 어떻게 접근되는지를 규정하는 명세이다. 바이트코드(170)가 블록 380에서 가정된 바와 같이 재귀적이지 않으면, 블록 340에서 식별된 바와 같은 적절한 소프트웨어 트랩에 따라, 제어가 블록 368에서와 같이 VMI로 복귀될 때까지 원시 연산들이 블록 384에서 처리된다. 바이트코드(170)가 블록 350에서 가정된 바와 같이 재귀적이면, 본 발명의 API는, RBC(230에 의해 표현된 원시 함수가 서브루틴의 실행에 필요한 변수들의 값들을 포함하는 CPU(110) 내의 레지스터들에 접근할 수 있도록 RBC(230)를 위한 환경을 구성하는 적절한 PPA 서브루틴(360)을 규정한다. 필요한 변수들은 일정한 풀, 스택, 로컬들, 및 프로그램 코드에 대한 포인터들을 포함할 수도 있다. API에 의해 규정된 PPA 서브루틴(360)은, CPU가 블록 364에서 RBC(230)에 대응하는 원시 연산들의 처리를 개시하기 전에 블록 362에서 프리앰블을 실행한다. 원시 연산은 원시 콘텍스트 접근 함수가 블록 364에서 조우될 때까지 계속되어 VMI의 재활성화를 초래한다. VMI의 파라미터들은 RETURN 바이트코드가 임의의 잔류하는 원시 처리의 재개(블록 366)를 초래할 때까지 블록 365에서 방법(220을 처리하기 위해 변경된다. 원시 처리 중에 다른 RETURN 바이트코드를 조우되면 블록 367에서 포스트앰블을 실행하는 PPA 서브루틴으로 제어를 전환시키고, 블록 368에서 제어는 PPA 서브루틴(360)의 실행이 완료된 후에 새로운 파라미터들에 따라 처리를 위해 VMI로 복귀된다. 적절한 PPA 서브루틴(360)의 주소가 테이블(140)에 저장되고, 재귀적인 바이트코드들(170)을 처리하도록 구성된 소프트웨어 트랩에 대응한다. 프리앰블은 RBC(230)에 의해 호출된 원시 연산들(원시 처리)의 실행 전에 실행된다. 표준 프리앰블이 RBC(230)에 의해 호출된 원시 함수와 연관되면, 본 발명의 프리앰블은 원시 함수와 연관된 표준 프리앰블을 무효화하거나 수정하도록 실행된다. 포스트앰블은 RBC(230)에 의해 호출된 원시 함수의 실행 후에 실행된다. 유사하게, 본 발명의 포스트앰블은 RBC 원시 함수 내의 C RETURN 명령문 후에, RBC에 의해 호출된 원시 함수와 연관된 표준 포스트앰블(표준 포스트앰블이 존재하는 경우)을 무효화하거나 수정하도록 실행된다.
본 발명의 예시적인 실시예의 양태에 따르면, 프리앰블은 스택 포인터와 같은 특정 바이탈 포인터들(vital pointer)을 표현하는 변수들의 값들을 기록하고, 이에 의해 RBC(230)에 의해 호출된 원시 함수에 포인터들을 접근 가능하게 한다. 예를 들면, RBC(230)에 의해 호출된 원시 함수의 콘텍스트로의 접근을 제공하기 위해, 다수의 함수들이 정의된다:
void*vmi_bcc(void*jfp);
void*vmi_object(void*jfp);
void*vmi_jsp(void*jfp);
void*vmi_cpd(void*jfp);
void*vmi_cpt(void*jfp);
void*vmi_bcc(void*jfp);
유사하게, 이하의 함수들이 일정 풀로의 접근을 제공한다:
<t>vmi_cpdEntry(void*jfp, unsigned n, <t>)
unsigned char vmi_cptEntry(void*jfp, unsigned n)
이하의 함수들은 현재 및 다음의 바이트코드(170)로의 접근을 제공한다:
unsigned char vmi_bc(void*jfp, n)
unsigned char vmi_shortPar(void*jfp, n)
unsigned char vmi_3bytePar(void*jfp, n)
unsigned char vmi_wordPar(void*jfp, n)
이하의 함수는 자바TM스택을 접근하는데 사용된다:
(t)vmi_stkEntry(void*jfp, n, <t>)
이제, 도 4를 참조하면, VMI의 활성 번역(자바 바이트코드 처리) 기능성이 자바 가상 머신(JVM) 표준에 의해 규정된다. 도 4는 가상 바이트코드 처리 타임라인을 표현하고, 여기서 간격들 T0 내지 T12는 반드시 동일해야할 필요는 없는 임의의 시간 주기들을 표현한다. 간격 T0 동안 VMI는 재귀적 바이트코드(RBC)(230)가 조우될 때까지 인터페이스로서 본 발명의 API를 사용하여 바이트코드들(170)을 번역한다. 도 2의 가상 다이어그램을 상호 참조하면, VMI는 바이트코드들(B0 내지 B2)을 처리하고 이어서 Bn을 조우한다. RBC(230)(Bn)는, (API에 의해 나타낸 바와 같은) 적절한 RBC 소프트웨어 트랩이 식별되고 대응 PPA 서브루틴이 실행될 때 간격 T1에서 제어가 원시 처리로 통과되게 하다. 간격들 T2 내지 T10에서, 소프트웨어 트랩은 RBC(230)에 의해 호출된 원시 함수들을 실행하여, 프리앰블에 의해 초기화된 콘텍스트에 접근한다(간격 T4에서). 간격들 T3 및 T4의 처리사이클[RBC(230)에 특정화된 원시 연산들 및 콘텍스트 접근 함수들의 호출]은 필요하다면 예를 들면 간격들 T5 및 T6에서 반복된다. 원시 함수는 최종적으로 간격 T7에서 VMI를 재활성화하는 원시 콘텍스트 접근 함수를 초래한다(가능하면 무수히 많은 원시 실행 사이클들 후에). VMI는 RETURN 바이트코드(Bs)가 간격 T7에서 조우될 때까지 새로 호출된 방법을 위한 바이트코드들[가상 바이트코드들(Bo 내지 Br)]을 활성적으로 처리하고, 원시 함수 처리로 제어를 복귀시킨다. 간격 T8에서, 제어는 VMI(120) 하드웨어에 의해 또는 소프트웨어에 의해 암시적으로 VMI(120)로부터 원시 처리로 복귀된다(API를 경유하여 및 C 프로그래밍 언어 RETURN 명령문과 같은 코드를 경유하여 성취됨). 원시 처리는, 프리앰블이 간격 T11에서 실행되도록 다른 C RETURN 명령문이 PPA 서브루틴으로 제어를 전달할 때, 간격 T10을 통해 계속된다. 본 발명의 포스트앰블은, 제어가 시간 간격 T12에서 VMI(120)(가상 바이트코드 Bn+1에서)으로 복귀되기 전에, 변수들을 포함하는 CPU 레지스터들로 다시 RBC 서브루틴에 의해 수정된 변수들의 값들을 기록한다. 도 5에 도시된 대안적인 실시예에 따르면, 프리앰블들 및 포스트앰블들은 새로 호출된 방법[예시적인 바이트코드들(Bo 내지 Bs)]을 처리하는데 필요한 콘텍스트 변화들을 유효화하도록 실행될 수도 있다- 예를 들면, 원시 처리 전에 제1 프리앰블이 간격 T1에서 개시되고, 방법 전에 제1 포스트앰블은 T9 내지 T11에서 처리되고, 방법의 실행 후에 다른 프리앰블은 간격 T12에서, 및 원시 처리 후에 간격 T16에서의 최종 프리앰블이 완료된다.
도 3을 재차 참조하면, 블록 368에서 API에 의해 규정된 PPA 서브루틴(360)은 또한 바이트코드들(170)의 시퀀스(210)의 VMI(120) 내의 번역의 재개를 개시하도록 구성된다. 제어는 VMI(120)에 의해 또는 API 구현에 의해 암시적으로 VMI(120)로부터 원시 처리로 되고 따라서 하드웨어 또는 소프트웨어에서 구현된다. 본 재개 루틴의 소프트웨어 구현들은 일반적으로 원시 함수에 포함되는 C 프로그래밍 언어 RETURN 명령문과 같은 코드를 경유하여 성취된다. 원시 처리로부터 복귀된 후, 콘텍스트는 예를 들면 제어가 VMI(120)로 통과 복귀될 수 있도록 "vmi_freeFrame"에 의해 파괴된다. 콘텍스트의 파괴는 RBC(230)를 처리하기 위한 환경으로서 구성된 CPU(110)의 영역들을 해제하고 VMI(120) 번역을 바이트코드들(170)의 시퀀스(210) 내의 위치로, 예를 들면(반드시는 아님) 가장 최근에 번역된 RBC(230)의 바로 다음의 위치로 복귀시킨다.
제어가 블록 310에서 VMI(120)로 복귀될 때, 가상 머신 카운터는 증분되고 VMI(120)는 다음의 바이트코드(170)를 페치한다. 따라서, 다른 RBC(230)가 조우되거나 번역 프로세스가 다른 방식으로 종결될 때까지(예를 들면, VMI가 다른 복잡한 바이트코드와 조우하거나 처리할 바이트코드들이 소멸됨) VMI(120)에 의한 번역이 계속될 수 있다.
상기의 견지에서, 본 발명은 재귀적 가상 머신 명령들의 정확하고 효율적인 처리를 위한 방법의 구현을 용이하게 하기 위해, 가상 머신 명령들을 처리하기 위한 소프트웨어 트랩 접근을 지원하기 위한 시스템 및 방법을 제공하는 것을 이해할 수 있을 것이다. 또한, 상기 설명은 본 발명의 예시적인 실시예들에만 관련하고,이하의 청구범위에 규정된 바와 같은 본 발명의 정신 및 범위로부터 일탈하지 않고 다양한 변경들이 수행될 수도 있다는 것을 이해해야 한다.
Claims (12)
- 가상 머신 명령들을 처리하는 방법에 있어서,특정 집합의 특징들을 갖는 가상 머신 명령들의 부분 집합을 식별하는 파라미터들을 초기화하는 단계;상기 가상 머신 명령들의 상기 식별된 부분 집합의 요소가 조우될(encountered) 때까지 프로세서에 의해 실행 가능한 원시 명령들로 상기 가상 머신 명령들의 범위를 번역하는 단계;상기 가상 머신 명령들의 상기 식별된 부분 집합의 요소와 조우할 때 상기 가상 머신 명령들의 범위의 번역을 일시 중지하는 단계;인터페이스를 구현하는 단계; 및상기 원시 프로세서 명령들의 집합을 실행하는 단계를 포함하고,상기 인터페이스는:상기 가상 머신 명령들의 상기 식별된 부분 집합의 상기 요소에 의해 표현된 상기 원시 프로세서 명령들을 실행하기 전에 프리앰블을 실행하고,상기 가상 머신 명령들의 상기 식별된 부분 집합의 상기 요소에 의해 표현된 명령들에 대응하는 상기 프로세서로부터의 원시 함수들을 검색하고,상기 검색된 원시 명령들을 실행하고,상기 가상 머신 명령들의 상기 식별된 부분 집합의 상기 요소에 의해 표현된 상기 원시 명령들을 실행한 후에 포스트앰블을 실행하고,상기 가상 머신 명령들의 범위의 상기 가상 머신에서의 번역을 재개하고, 상기 가상 머신 명령들의 상기 식별된 부분 집합의 다른 요소가 조우될 때까지 실행을 계속하는 원시 프로세서 명령들의 집합을 규정하는, 가상 머신 명령들을 처리하는 방법.
- 제1 항에 있어서,한 방법을 구성하는 검색된 원시 명령들의 실행 전에 포스트앰블을 실행하는 단계로서, 상기 포스트앰블은 상기 방법을 실행하는데 필요한 콘텍스트 변화들을 실시하도록 상기 프로세서의 레지스터들내의 변수들의 값들을 수정하는 원시 명령들을 포함하는, 상기 포스트앰블 실행 단계; 및한 방법을 구성하는 검색된 원시 명령들의 실행 후에 프리앰블을 실행하는 단계로서, 상기 프리앰블은 상기 프로세서내 레지스터들로부터의 값들을 상기 방법이 실행된 후에 실행된 상기 원시 명령들에 접근 가능한 변수들로 기록하는 원시 명령들을 포함하는, 상기 프리앰블 실행 단계를 더 포함하는, 가상 머신 명령들을 처리하는 방법.
- 제1 항에 있어서, 상기 프리앰블 및 상기 포스트앰블은 상기 가상 머신에 의해 생성되는, 가상 머신 명령들을 처리하는 방법.
- 제1 항에 있어서, 상기 프리앰블 및 상기 포스트앰블은 프로세서 메모리로부터 검색되는, 가상 머신 명령들을 처리하는 방법.
- 제1 항에 있어서, 상기 프리앰블은 상기 프로세서내 레지스터들로부터의 값들을 상기 가상 머신 명령들의 상기 식별된 부분 집합에 의해 표현된 명령들에 접근 가능한 변수들로 기록하는 원시 명령들을 포함하는, 가상 머신 명령들을 처리하는 방법.
- 제1 항에 있어서, 상기 포스트앰블은 상기 프로세서의 레지스터들내 상기 가상 머신 명령들의 상기 식별된 부분 집합에 의해 표현된 명령들에 따라 상기 프로세서의 레지스터들내의 변수들의 값들을 수정하는 원시 명령들을 포함하는, 가상 머신 명령들을 처리하는 방법.
- 제1 항에 있어서, 상기 프리앰블 및 상기 포스트앰블은 상기 가상 머신 명령들의 상기 식별된 부분 집합의 상기 요소와 연관된 충돌하는 명령들을 무효화하는, 가상 머신 명령들을 처리하는 방법.
- 제1 항에 있어서, 상기 프리앰블 및 상기 포스트앰블은 상기 가상 머신 명령들의 상기 식별된 부분 집합의 상기 요소와 연관된 충돌하는 명령들을 수정하는, 가상 머신 명령들을 처리하는 방법.
- 제1 항에 있어서, 재개 서브루틴을 개시하는 단계를 더 포함하고,상기 재개 서브루틴은:상기 프리앰블 및 포스트앰블에 의해 접근된 상기 프로세서의 레지스터들을 해제하는 단계; 및상기 가상 머신 명령들의 범위 내의 위치에서 번역을 재개하도록 상기 머신에 지시하는 단계를 포함하는, 가상 머신 명령들을 처리하는 방법.
- 가상 머신 명령들을 처리하는 방법에 있어서,중앙 처리 장치 내의 환경을 구성하는 단계;원시 프로세서 명령들의 집합을 규정하는 인터페이스를 구현하는 단계; 및상기 원시 프로세서 명령들의 집합을 실행하는 단계를 포함하고,상기 원시 프로세서 명령들의 집합은:상기 가상 머신 명령들에 의해 표현된 상기 원시 프로세서 명령들을 실행하기 전에 프리앰블을 실행하는 단계;상기 가상 머신 명령들에 의해 표현된 명령들에 대응하는 상기 프로세서로부터의 원시 함수들을 검색하는 단계;상기 검색된 원시 명령들을 실행하는 단계;상기 가상 머신 명령들에 의해 표현된 상기 원시 명령들을 실행한 후에 포스트앰블을 실행하는 단계; 및상기 구성된 환경을 해제하는 단계를 포함하는, 가상 머신 명령들을 처리하는 방법.
- 가상 머신 명령들을 처리하는 장치에 있어서,원시 명령 집합을 가지며 원시 명령들을 실행하도록 구성된 프로세서(110);상기 가상 머신 명령들을 저장하도록 구성된 명령 메모리(150);상기 명령 메모리(150)로부터 가상 머신 명령들을 페치하도록 구성되고 상기 페치된 가상 머신 명령들을 상기 프로세서에 의해 실행 가능한 원시 명령들로 번역하도록 구성된 가상 머신인 프리프로세서(120); 및상기 명령 메모리(150)와 상기 프로세서(110) 사이의 인터페이스로서, 상기 가상 머신 명령들에 의해 표현된 명령들에 접근 가능한 상기 프로세서 유닛(100) 내의 변수들의 레지스터 값들을 기록하고, 상기 가상 머신 명령들에 의해 표현된 명령들에 대응하는 원시 서브루틴 호출을 발행하고, 상기 가상 머신 명령들에 따라 상기 변수들의 값들을 수정하고, 상기 프리프로세서로 제어를 되돌리는 서브루틴을 개시하도록 구성된, 상기 인터페이스를 포함하는, 가상 머신 명령들을 처리하는 장치.
- 가상 머신 명령들에 의해 호출된 원시 프로세서 서브루틴을 실행하기 위한 방법에 있어서,상기 호출된 서브루틴을 실행하기 전에 원시 명령들의 프리앰블 집합을 실행하는 단계로서, 상기 프리앰블은 상기 프로세서내 레지스터들로부터의 값들을 상기호출된 서브루틴에 접근 가능한 변수들로 기록하도록 구성되는, 상기 프리앰블 집합을 실행하는 단계; 및상기 호출된 서브루틴을 실행한 후에 원시 명령들의 포스트앰블 집합을 실행하는 단계로서, 상기 포스트앰블은 상기 호출된 서브루틴에 따라 상기 프로세서의 레지스터들의 변수들의 값들을 수정하도록 구성되는, 상기 포스트앰블 집합을 실행하는 단계를 포함하는, 가상 머신 명령들에 의해 호출된 원시 프로세서 서브루틴을 실행하기 위한 방법.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP01402455 | 2001-09-25 | ||
EP01402455.8 | 2001-09-25 | ||
PCT/IB2002/003695 WO2003027842A2 (en) | 2001-09-25 | 2002-09-06 | Software support for virtual machine interpreter (vmi) acceleration hardware |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20040039412A true KR20040039412A (ko) | 2004-05-10 |
Family
ID=8182889
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR10-2004-7004331A KR20040039412A (ko) | 2001-09-25 | 2002-09-06 | 가상 머신 해석기 가속 하드웨어용 소프트웨어 지원 |
Country Status (7)
Country | Link |
---|---|
US (1) | US7210140B2 (ko) |
EP (1) | EP1446718A2 (ko) |
JP (1) | JP2005504376A (ko) |
KR (1) | KR20040039412A (ko) |
CN (1) | CN1295605C (ko) |
AU (1) | AU2002329560A1 (ko) |
WO (1) | WO2003027842A2 (ko) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1313012A1 (en) * | 2001-11-15 | 2003-05-21 | Texas Instruments France | Java DSP acceleration by byte-code optimization |
US7747989B1 (en) | 2002-08-12 | 2010-06-29 | Mips Technologies, Inc. | Virtual machine coprocessor facilitating dynamic compilation |
US9020801B2 (en) | 2003-08-11 | 2015-04-28 | Scalemp Inc. | Cluster-based operating system-agnostic virtual computing system |
EP1622009A1 (en) * | 2004-07-27 | 2006-02-01 | Texas Instruments Incorporated | JSM architecture and systems |
US7685635B2 (en) * | 2005-03-11 | 2010-03-23 | Microsoft Corporation | Systems and methods for multi-level intercept processing in a virtual machine environment |
JP2006344017A (ja) * | 2005-06-09 | 2006-12-21 | Hitachi Ltd | センサネットワークシステム及びセンサネットワークのデータ処理方法 |
US8327353B2 (en) * | 2005-08-30 | 2012-12-04 | Microsoft Corporation | Hierarchical virtualization with a multi-level virtualization mechanism |
KR101349805B1 (ko) | 2006-01-25 | 2014-01-10 | 엘지전자 주식회사 | 트랩 메커니즘을 이용한 장치관리 스케줄링 방법 및 그단말 |
CN100464302C (zh) * | 2006-04-20 | 2009-02-25 | 联想(北京)有限公司 | 虚拟机系统及其显卡访问方法 |
CN100456229C (zh) * | 2006-09-30 | 2009-01-28 | 北京深思洛克软件技术股份有限公司 | 虚拟硬件系统及基于虚拟硬件系统的指令执行方法 |
US8683453B2 (en) * | 2006-11-30 | 2014-03-25 | Motorola Mobility Llc | System for overriding interpreted byte-code with native code |
KR101407629B1 (ko) * | 2007-06-04 | 2014-06-13 | 더 보드 오브 리젠츠 오브 더 유니버시티 오브 텍사스 시스템 | 자바 변환 가속 장치 및 방법 |
CN101470635B (zh) * | 2007-12-24 | 2012-01-25 | 联想(北京)有限公司 | 一种多虚拟处理器同步调度的方法及计算机 |
US9389839B2 (en) | 2008-06-26 | 2016-07-12 | Microsoft Technology Licensing, Llc | Safe code for signature updates in an intrusion prevention system |
US8286164B2 (en) * | 2009-08-07 | 2012-10-09 | International Business Machines Corporation | Secure recursive virtualization |
US20110153909A1 (en) * | 2009-12-22 | 2011-06-23 | Yao Zu Dong | Efficient Nested Virtualization |
US9594578B2 (en) * | 2012-02-28 | 2017-03-14 | Red Hat, Inc. | Hardware implementation of a virtual machine interpreter |
US9836316B2 (en) * | 2012-09-28 | 2017-12-05 | Intel Corporation | Flexible acceleration of code execution |
US10498763B2 (en) * | 2017-08-31 | 2019-12-03 | International Business Machines Corporation | On-demand injection of software booby traps in live processes |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4253145A (en) * | 1978-12-26 | 1981-02-24 | Honeywell Information Systems Inc. | Hardware virtualizer for supporting recursive virtual computer systems on a host computer system |
US6199095B1 (en) * | 1996-01-29 | 2001-03-06 | Compaq Computer Corporation | System and method for achieving object method transparency in a multi-code execution environment |
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 |
JP4018158B2 (ja) * | 1997-10-02 | 2007-12-05 | コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ | 可変命令セットコンピュータ |
DE69839913D1 (de) * | 1997-10-02 | 2008-10-02 | Koninkl Philips Electronics Nv | Datenverarbeitungsgerät zur verarbeitung von befeh |
US6314445B1 (en) * | 1998-08-03 | 2001-11-06 | International Business Machines Coproration | Native function calling |
US6385764B1 (en) * | 1999-01-29 | 2002-05-07 | International Business Machines Corporation | Method and apparatus for improving invocation speed of Java methods |
-
2002
- 2002-09-06 KR KR10-2004-7004331A patent/KR20040039412A/ko not_active Application Discontinuation
- 2002-09-06 JP JP2003531316A patent/JP2005504376A/ja active Pending
- 2002-09-06 CN CNB028187008A patent/CN1295605C/zh not_active Expired - Fee Related
- 2002-09-06 WO PCT/IB2002/003695 patent/WO2003027842A2/en not_active Application Discontinuation
- 2002-09-06 EP EP02765210A patent/EP1446718A2/en not_active Withdrawn
- 2002-09-06 AU AU2002329560A patent/AU2002329560A1/en not_active Abandoned
- 2002-09-20 US US10/247,913 patent/US7210140B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN1295605C (zh) | 2007-01-17 |
CN1596398A (zh) | 2005-03-16 |
US7210140B2 (en) | 2007-04-24 |
AU2002329560A1 (en) | 2003-04-07 |
US20030061254A1 (en) | 2003-03-27 |
WO2003027842A2 (en) | 2003-04-03 |
JP2005504376A (ja) | 2005-02-10 |
EP1446718A2 (en) | 2004-08-18 |
WO2003027842A3 (en) | 2004-06-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7210140B2 (en) | Software support for virtual machine interpreter (VMI) acceleration hardware | |
EP4099153B1 (en) | Extending a virtual machine instruction set architecture | |
US10635415B2 (en) | Run-time interception of software methods | |
US6651080B1 (en) | Techniques for implementing pluggable virtual machines | |
JP3615770B2 (ja) | アドレスされた構成部分の思索の失敗を検出するメモリ・コントローラ | |
US6907519B2 (en) | Systems and methods for integrating emulated and native code | |
US8196120B2 (en) | Computer emulator employing direct execution of compiled functions | |
US7957952B2 (en) | Translation block invalidation prehints in emulation of a target system on a host system | |
EP1457881A1 (en) | A reconfigurable binary translator | |
US20100050165A1 (en) | Methods and apparatus to support mixed-mode execution within a single instruction set architecture process of a virtual machine | |
JP2008123545A (ja) | 複数の命令セットを用いるデータ処理 | |
JP2000347871A (ja) | スタブ/アダプタ自動生成器 | |
US7124407B1 (en) | Method and apparatus for caching native code in a virtual machine interpreter | |
US7065755B2 (en) | Method and apparatus for removing class initialization barriers from shared compiled methods | |
US20170116017A1 (en) | Import mechanism for hardware intrinsics | |
JP2002366367A (ja) | プログラム命令解釈 | |
RU2287178C2 (ru) | Обработка необработанной операции в системах с множеством наборов команд | |
JP5129904B2 (ja) | 実行時における関数の実行性能を増大させるための方法、計算機システム、実行時における関数の実行性能を増大させるための、コンピュータプログラムを格納するコンピュータ読み取り可能媒体 | |
JP2001519955A (ja) | 先進のプロセッサのための変換メモリ保護装置 | |
US6654778B1 (en) | Method and apparatus for avoiding function activation and interpretation overhead for calls to selected java methods in a java virtual machine interpreter | |
US6738976B1 (en) | Method, system, and apparatus to minimize exception handling overhead from invoked functions | |
US20030093456A1 (en) | Low overhead exception checking | |
Wielemaker | SWI-Prolog 3.2 | |
Thomas | Exceptional Mite: simple yet flexible non-local exits in a binary-portable VM |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E601 | Decision to refuse application |