KR20010072477A - 가상 머신 환경에서 네이티브 코드를 변환하고 실행하는방법 및 장치 - Google Patents

가상 머신 환경에서 네이티브 코드를 변환하고 실행하는방법 및 장치 Download PDF

Info

Publication number
KR20010072477A
KR20010072477A KR1020017001898A KR20017001898A KR20010072477A KR 20010072477 A KR20010072477 A KR 20010072477A KR 1020017001898 A KR1020017001898 A KR 1020017001898A KR 20017001898 A KR20017001898 A KR 20017001898A KR 20010072477 A KR20010072477 A KR 20010072477A
Authority
KR
South Korea
Prior art keywords
virtual machine
native code
computer
native
memory access
Prior art date
Application number
KR1020017001898A
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 KR20010072477A publication Critical patent/KR20010072477A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • 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/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • 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/45529Embedded in an application, e.g. JavaScript in a Web browser

Abstract

포인터 검사, 스레드 제어, 및 다른 유용한 특성을 가지도록 하기 위해 가상 머신 환경에서 네이티브 코드를 변환하고 실행하는 방법 및 장치가 제공된다. 가상 머신 임플리멘테이션의 디버깅은 보다 독립적인 플랫폼 및 스레드 관리 및 스케줄링에 대한 제어를 허용하고, 네이티브 코드에서의 메모리 액세스 에러 식별을 제공하는 네이티브 코드의 바이너리 변환을 통해 보다 용이하게 된다. 네이티브 코드가 가상 머신 환경내에서 수행되는 경우, 네이티브 코드는 중간 형식으로 변환된다. 상기 중간 형식은 메모리 액세스 및 블록킹 시스템 호출이 발생되는 경우 처리되어 결정된다. 유효성 체크는 각각의 호출에 의해 액세스되는 메모리부가 허용된 범위내에 있는 지를 결정하기 위해 메모리 액세스 호출로 삽입된다. 상기 네이티브 코드와 연관된 메모리 액세스 에러의 다른 소스들 및 와일드 포인터는 이와 같이 식별된다. 블록킹 시스템 호출은 비-블록킹 변수로 대체되고, 산출 동작은 시스템 호출 및 루프로 삽입된다.
수정된 네이티브 코드 구현 메모리 액세스 유효성 체크 및 비-블록킹 시스템 호출은 네이티브 코드에 의해 정의된 루틴을 수행하기 위해 가상 머신에 의해 컴파일되고 인터프리팅된다. 상기 수정된 네이티브 코드는 다른 스레드를 방해하지 않기 때문에, 스레트 스케줄링은 기초가되는 운영 시스템보다는 가상 머신에 의해 관리될 수 있으며, 협동 스케줄링이 수행될 수 있다.

Description

가상 머신 환경에서 네이티브 코드를 변환하고 실행하는 방법 및 장치{Method and apparatus of translating and executing native code in a virtual machine environment}
선 마이크로시스템즈에 의해 개발된 자바 프로그램 언어는 다른 프로그램 언어들에 비해 "한번 쓰여지면 어디에서도 실행될 수 있는" 언어라는 장점을 가진다. 자바 프로그램 언어는 어플리케이션들 또는 바이트코드 클래스 파일의 형태로 설계되고, 분배되고, 실행되는 "애플릿(applets)"에 대해 실질적으로 플랫폼에 독립적인 메커니즘을 제공한다. 자바 가상 머신은 바이트코드들의 분석을 필수 플랫폼 의존적인 명령어 집합으로 처리하고, 따라서 자바 가상 머신을 포함하는 모든 컴퓨팅 플랫폼들이 동일한 바이트코드 클래스 파일을 실행할 수 있다. 자바 프로그램 언어에 의해 지원되지 않는 함수들이 필요할 때, 가상 머신내에서 실행하는 자바어플리케이션이 링크된 라이브러리에 구현된 네이티브 코드 함수들을 부를 수 있다. 네이티브 코드는 자바 프로그램이나 실행 요구사항에 종속적이지 않고, 따라서 덜 잘 제어된 실행 동작의 대가로 좀더 플래폼에 특유한 프로그래머빌리티를 제공한다. 자바 어플리케이션들과 애플릿들을 위한 처리 환경과, 네이티브 코드의 사용이 이하에서 좀더 상세히 설명된다.
처리 환경
자바 프로그램 언어는, 각 프로그램이 하나 이상의 오브젝트 클래스와 인터페이스를 가지는 객체-지향 프로그램 언어이다. 하나의 프로그램이 머신 의존적인 실행가능한 프로그램 코드로 컴파일되는 많은 프로그램 언어들과 달리, 자바 프로그램 언어로 쓰여진 클래스는 머신 독립적인 바이트코드 클래스 파일들로 컴파일된다. 각 클래스는 클래스 파일 포맷이라 불리는 플랫폼-독립적인 포맷의 코드와 데이터를 포함한다. 실행 매개체로서 기능하는 컴퓨터 시스템은 가상 머신(virtual machine)이라 불리는 프로그램을 포함하고, 이러한 가상 머신이 각 클래스의 코드를 실행하는 책임을 맡는다.
애플리케이션들은 독립형의 자바 어플리케이션으로서 또는 HTML(하이퍼텍스트 마크업 랭귀지) 문서의 애플릿 태그에 의해 확인되고 브라우저 어플리케이션에 의해 로드되는 자바 "애플릿"으로서 설계될 수 있다. 어플리케이션 또는 애플릿과 관련된 클래스 파일은 로컬 컴퓨팅 시스템 또는 네트워크상에서 액세스가능한 서버에 저장될 수 있다. 각 클래스는 자바 가상 머신에 로드되는데, 필요하다면 "클래스 로더"에 의해 로드된다.
클라이언트가 네트워크상의 서버로부터 클래스 파일들을 액세스하게 하기 위 해, 웹서버 어플리케이션은 URL(universal resource locators)을 포함하는 HTTP(하이퍼텍스트 전송 프로토콜) 요청에 대해 "웹페이지"로 불리는 HTML 문서로 응답하는 서버상에서 실행된다. 클라이언트 플랫폼상에서 실행되는 브라우저 어플리케이션이 HTML 문서(예를 들어, 웹서버에 URL을 보내는 것에 의해 HTML 문서를 요청하는 결과로서)를 수신할 때, 브라우저 어플리케이션은 HTML을 분석하고, 그것이 HTML 문서의 애플릿 태그를 만날 때 규정된 바이트코드 클래스 파일의 다운로드를 자동적으로 시작한다.
자바 애플릿의 실행동안 처음 참조될 때, 자바 애플릿의 클래스는 서버상에 저장된 네트워크 또는 로컬 파일 시스템으로부터 요구에 따라 로드된다. 가상 머신은 각 클래스 파일의 위치를 지정하고, 로드하고, 클래스 파일 포맷을 분석하고, 클래스의 다수의 콤포넌트들에 대해 메모리를 할당하고, 상기 클래스를 이미 로드된 다른 클래스들과 링크한다. 이러한 프로세스는 클래스내의 코드를 가상 머신에 의해 실행가능하게 만든다.
자바 어플리케이션과 애플릿은 종종 클래스 라이브러리를 이용한다. 클래스 라이브러리의 클래스들은 "네이티브 메쏘드(native method)"라 불리는 것을 포함할 수 있다. 애플리케이션과 애플릿은 때때로 상기 네이티브 메쏘드를 가지는 클래스를 포함할 수 있다. 네이티브 메쏘드는 키워드 "네이티브"와, 메쏘드의 이름과, 메쏘드의 리턴 타입과, 메쏘드에 전달되는 모든 파라미터를 규정한다. 자바 프로그램 언어로 쓰여진 "스탠다드 메쏘드"(넌-네이티브 메쏘드)와 대조적으로, 각 클래스내에는 네이티브 메쏘드에 대한 바디가 없다. 오히려, 네이티브 메쏘드의 루틴은 링크된 라이브러리를 지원하는 주어진 플랫폼에 특정한 링킹 설비를 이용하여 런타임시 가상 머신에서 주어진 클래스에 동적으로 링크되는 컴파일된 네이티브 코드(예를 들어, C 나 C++ 프로그램 언어로 작성되고 바이너리 형태로 컴파일된)에 의해 실행된다.
예를 들어, 솔라리스 또는 유닉스 환경에서, 네이티브 코드의 바이너리 형태를 포함하는 링크된 라이브러리는 ".so" 파일로서 작성된 "공유된 오브젝트" 라이브러리로 구현될 수 있다. 윈도우 환경에서, 상기 링크된 라이브러리는 ".dll" 파일로 작성된, 다이나믹하게 링크된(또는 다이나믹하게 로드가능한(dynamic loadable)) 라이브러리의 형태를 가질 수 있다. 네이티브 코드는 주어진 플랫폼의 특정화된 하드웨어(예, 디스플레이 하드웨어) 또는 소프트웨어(예, 데이터베이스 드라이버)와의 인터페이싱 등과 같이, 자바 프로그램 언어에 의해 지원되지 않는 다른 기능들을 수행하는데 사용될 수 있다. 네이티브 코드는 랜더링 등과 같이 계산적으로 강력한 기능들을 촉진하는데 사용될 수도 있다.
네이티브 메쏘드를 포함하는 클래스는 다음과 같이 각 링크된 라이브러리를 로드하는 호출을 또한 포함한다.
System.loadLibrary("Sample");
여기서, "Sample"은 호스트 오퍼레이팅 시스템(예, 유닉스, 윈도우 등)에 따라 "libSample.so" 또는 "Sample.dll"라는 이름의 파일에 일반적으로 저장된 링크된 라이브러리의 이름이다. 링크된 라이브러리는 일반적으로 관련된 클래스가 가상 머신내에서 인스턴스화될 때 로드된다.
네이티브 코드의 링크된 라이브러리는, 링크된 라이브러리가 클래스내의 네이티브 메쏘드의 메쏘드 서명을 인식하는 것을 가능하게 하기 위해, 관련된 클래스의 스터브(stub)와 헤더 정보를 가지고 컴파일된다. 네이티브 메쏘드의 구현은 링크된 라이브러리의 네이티브 코드 함수(C 함수와 같은)으로서 제공된다. 런타임시, 네이티브 메쏘드에 대해 호출이 행해질 때, 호출된 메쏘드(예를 들어, 네이티브 메쏘드 프레임을 네이티브 메쏘드 스택상으로 밀어넣는 것을 통해서)에 대응하는 링크된 라이브러리의 함수로 제어가 전달된다. 링크된 라이브러리내의 네이티브 코드는 함수를 수행하고, 자바 어플리케이션 또는 애플릿으로 다시 제어를 전달한다.
도 1은 처리 시스템의 컴파일과 런타임 환경을 예시한다. 컴파일 환경에서, 소프트웨어 개발자는 소스 파일(100)(예를 들어, 자바 프로그램 언어로)을 작성하고, 소스 파일은 데이터 구조, 메쏘드 구현, 다른 클래스의 참조를 포함하는 프로그래머가 판독가능한 클래스 정의들을 포함한다. 소스 파일(100)은 자바 컴파일러(101)에 제공되고, 자바 컴파일러는 소스 파일(100)을 자바 가상 머신에 의해 실행가능한 바이트코드를 포함하는 컴파일된 ".class" 파일(102)로 컴파일한다. 바이트코드 클래스 파일(102)은 서버에 (예를 들어, 임시 또는 영구 저장으로) 저장되고, 네트워크상에서 다운로드하는데 이용가능하다. 선택적으로, 바이트코드 클래스 파일(102)은 클라이언트 플랫폼상의 디렉토리에 지역적으로 저장될 수 있다.
자바 런타임 환경은, 바이트코드 클래스 파일을 실행할 수 있고, 실행시 필요할 때, 오퍼레이팅 시스템(109)에 대한 네이티브 오퍼레이팅 시스템("O/S") 호출을 실행할 수 있는 자바 가상 머신(JVM:105)을 포함한다. 자바 가상 머신(105)은 바이트코드 클래스의 머신 독립성과, 오퍼레이팅 시스템(109)의 플랫폼-의존적인 호출뿐만 아니라 하부 컴퓨터 하드웨어(110)의 머신-의존적인 명령어 집합사이에 추상화 레벨을 제공한다.
클래스 로더와 바이트코드 검증기("클래스 로더")(103)는 바이트코드 클래스 파일(102)을 로드하고 필요하다면 자바 가상 머신(105)으로 클래스 라이브러리(104)를 지원하는 책임이 있다. 클래스 로더(103)는 적절한 실행과 안전 규칙의 집행을 유지하기 위해 각 클래스 파일의 바이트코드를 검증한다. 런타임 시스템(108)의 환경내에서, 인터프리터(106)는 직접적으로 바이트코드를 실행하거나 또는 "just-in-time"(JIT) 컴파일러(107)가 바이트코드를 머신 코드로 변환하고, 따라서 그들은 하드웨어(110)의 프로세서 또는 프로세서들에 의해 실행될 수 있다. 예를 들어, 링크된 라이브러리(111)의 형태의 네이티브 코드는, 관련된 네이티브 메쏘드를 포함하는 클래스(예를 들어, 클래스 라이브러리(104)로부터의)가 가상 머신내에서 인스턴스화될 때, 로드된다.
가상 머신(105)의 런타임 시스템(108)은 범용 스택 구조를 지원한다. 이러한 범용 스택 구조가 하부 하드웨어(110)에 의해 지원되는 방법은 특정한 가상 머신 구현에 의해 결정되고, 바이트코드가 인터프리트되거나 또는 JIT 컴파일되는 방법에 반영된다. 런타임 시스템의 다른 요소들은 스레드 관리(예를 들어, 스케쥴리)와 가비지 컬렉션 메커니즘(garbage collection mechanism)을 포함한다.
도 2는 런타임 시스템(108)내에서 스택 구조를 지원하는 런타임 데이터 영역을 예시한다. 도 2에서, 런타임 데이터 영역(200)은 하나 이상의 스레드-기반의 데이터 영역(thread-based data areas)(207)을 포함한다. 각 스레드-기반의 데이터 영역(207)은 프로그램 카운터 레지스터(PC REG:208), 지역 변수 포인터 레지스터(VARS REG:209), 프레임 레지스터(FRAME REG:210), 오퍼랜드 스택 포인터 레지스터(OPTOP REG:211), 스택(212)(예를 들어, 스탠다드 메쏘드에 대한), 선택적으로 네이티브 메쏘드 스택(216)을 포함한다. 스택(212)은 오퍼랜드 스택(214)과 지역 변수(215)를 포함하는 하나 이상의 프레임(213)을 포함한다. 네이티브 메쏘드 스택(216)은 하나 이상의 네이티브 메쏘드 프레임(217)을 포함한다.
런타임 데이터 영역(200)은 또한 공유된 히프(heap:201)를 포함한다. 히프(201)는 모든 클래스 인스턴스와 어레이가 할당되는 메모리로부터의 런타임 데이터 영역이다. 공유된 히프(201)는 메쏘드 영역(202)을 포함하고, 상기 메쏘드 영역은 모든 스레드들사이에 공유된다. 메쏘드 영역(202)은 각 로드된 클래스 파일로부터 추출된 정보를 저장하는 하나 이상의 클래스-기반의 데이터 영역(203)을 포함한다. 예를 들어, 클래스-기반의 데이터 영역(203)은 상수 풀(constant pool:204)과, 필드 및 메쏘드 데이터(205)와, 메쏘드와 콘스트럭터의 코드(206)와 같은 클래스 구조를 포함할 수 있다.
가상 머신은 한번에 많은 실행의 스레드를 지원할 수 있다. 각 스레드는 그자신의 스레드-기반의 데이터 영역(207)을 가진다. 어느 시점에서도, 각 스레드는단일 메쏘드, 그 스레드에 대한 "현재 메쏘드"의 코드를 실행하고 있다. 만약 "현재 메쏘드"가 네이티브 메쏘드가 아니면, 프로그램 카운터 레지스터(208)는 현재 실행되고 있는 가상 머신 명령어의 주소를 포함한다. 만약 "현재 메쏘드"가 네이티브 메쏘드이면, 프로그램 마운터 레지스터(208)의 값은 정의되지 않는다. 프레임 레지스터(210)는 메쏘드 영역(202)에서 현재 메쏘드의 위치를 가리킨다.
각 스레드는 스레드와 같은 때에 형성된 사설 스택(private stack:212)을 가진다. 스택(212)은 스레드에 의해 불려내진 스탠다드 메쏘드와 관련된 하나 이상의 프레임(213)을 저장한다. 프레임(213)은 다이나믹 링킹을 수행하고, 메쏘드에 대한 값을 리턴하고, 예외를 처리할 뿐만 아니라, 데이터와 부분적 결과들을 저장하는데 사용된다. 스탠다드 메쏘드가 불러내질 때마다 새로운 프레임이 형성되어 스택에 넣어지며, 그것의 메쏘드가 완료될 때마다 현존하는 프레임은 스택으로부터 팝되고 파괴된다. 스레드에 의해 형성되는 프레임은 그 스레드에 대해 지역적이고, 일반적으로는 어떤 다른 스레드에 의해 직접적으로 참조될 수 없다.
유일하게 한 프레임인 현재 실행되는 메쏘드에 대한 프레임은 제어의 주어진 스레드의 어느 시점에서도 액티브하다. 이러한 프레임은 "현재 프레임"으로 불려지고, 그것의 메쏘드는 "현재 메쏘드"로 알려져 있다. 프레임은, 그것의 메쏘드가 또다른 메쏘드를 불러내거나. 또는 그것의 메쏘드가 완료될 때, 현재상태이기를 멈춘다. 메쏘드가 불려내질 때, 새로운 프레임이 형성되고, 제어가 새로운 메쏘드로 전달될 때 현재(current)가 된다. 메쏘드 리턴시에, 현재 프레임은 그것의 메쏘드 불러냄의 결과를 이전 프레임이 있다면 이전 프레임에 되돌린다. 이전 프레임이현재 프레임이 될 때, 현재 프레임은 무시된다.
각 프레임(213)은 그자신의 지역 변수들의 집합(215)과 그자신의 오퍼랜드 스택(214)을 가진다. 지역 변수 포인터 레지스터(209)는 현재 프레임의 지역 변수(215)를 포함하는 워드의 어레이의 베이스에 대한 포인터를 포함한다. 오퍼랜드 스택 포인터 레지스터(211)는 현재 프레임의 오퍼랜드 스택(214)의 탑을 포인트한다. 대부분의 가상 머신 명령어들은 현재 프레임의 오퍼랜드 스택으로부터 값을 취해서, 그 값에 연산을 하고, 그 결과를 동일한 오퍼랜스 스택에 리턴한다. 오퍼랜드 스택(214)은 메쏘드로 아규먼트(arguments)를 전달하고 메쏘드 결과를 수신하는데 사용된다.
네이티브 메쏘드 스택(216)은 네이티브 메쏘드를 지원하여 네이티브 메쏘드 프레임(217)을 저장한다. 각 네이티브 메쏘드 프레임은 스레드 실행 제어와, 메쏘드 아규먼트와, 스탠다드 메쏘드와 링크된 라이브러리에서 네이티브 코드 함수로 구현되는 네이티브 메쏘드사이에 전달되는 메쏘드 결과들에 대한 메커니즘을 제공한다.
네이티브 메쏘드(native methods)는 표준메쏘드(standard method)에서처럼 클래스내에 있기 보다는 연결라이브러리(linked library) 내에 있는 네이티브 코드에 의해 수행되기 때문에 네이티브 메쏘드는 자바 프로그램 언어 및 바이트코드 검증기(bytecode verifier)에 의하여 부과된 제한을 받지 않는다. 이것은 컴파일된 자바 어플리케이션과 애플릿들(Java application and applets)을 위한 바이트코드와는 달리 연결라이브러리에 있는 네이티브 코드는 런타임시에(at runtime) 체크되지 않는 바람직하지 않고 허용되지 않는 동작(behavior)일 수 있다는 것을 의미한다. 예를 들어, 네이티브 코드에서는 '와일드' 포인터("wild" pointers)(8개의 구성요소를 가지고 있는 배열에서 9번째 구성요소를 지정하는 것과 같이 포인터의 값이 금지된 범위를 벗어나는 포인터)의 발생과 부적절한 메모리 위치(즉, 제한되거나 범위를 벗어나는)를 지정하는(address) 메모리 엑세스 메커니즘의 사용으로 인한 메모리 엑세스 에러가 발생할 수 있다. 이렇게 네이티브 메쏘드의 사용은 주로 포인터의 사용에 의한 프로그램 범위에 관한 버그(a range of programming bugs)가 발생할 수 있고, 이로 인해 특정 가상 머신의 수행을 디버깅하는 것을 더욱 어렵게 하고 있다.
게다가, 네이티브 코드는 블럭킹 시스템 호출(blociking system call)(즉, 외부 동작(external event)이 발생할 때까지의 특정되지 않은 길이의 시간을 기다려야 할 지도 모르는 호출)을 포함하고 있을 수도 있다. 만약 가상 머신이 그 자신의 스레드(thread)관리와 스케줄링(scheduling)을 수행하는 경우에는 연결 라이브러리에 있는 네이티브 코드 함수에 의해 제어될 때 발생하는 블럭킹 시스템 호출은 전체 가상 머신의 수행을 막아버릴 수도 있다.
대부분의 가상 머신의 수행은 "네이티브 스레딩(native threading)"을 사용함으로 인해 네이티브 코드와 관련하여 문제되는 블럭킹 문제를 피하고 있다. 이것은 가상 머신 및 프로그램의 다중 스레드(multiple threads) 또는 가상 머신이 수행하는 프로그램(어플리케이션 및/또는 애플릿츠)이 UNIX의 스레드처럼 기반 플랫폼(underlying platform)의 스레드로서 수행된다는 것을 의미한다. 이러한구성(scheme)에서는 가상 머신의 스레드는 동시에 수행되어질 수 있다. 그러나, 네이티브 스레딩(native threading)이 사용되는 경우에는 가상 머신은 스레드 스케줄링에 대한 제어를 기반이 되는 운영시스템에 넘겨주어야 한다. 이렇게 네이티브 스레딩은 스레드 동작을 운영시스템과 하드웨어에 의존하도록 하게 된다. 네이티브 스레딩을 이용하는 경우에는 스레드 수행의 상대적인 시간(relative timing)은 운영시스템과 하드웨어 플랫폼에 따라 다르기 때문에, 가상 머신의 동작 중에 동시에 발생하는 관련된 버그들의 효과적인 디버깅은 어렵게 된다.
도 3a와 도 3b는 런타인 환경에서의 스레드 사용을 나타내는 블럭선도이다. 도 3a는 네이티브 스레딩을 사용하지 않는 가상 머신을 포함하고 있다. 도 3b는 네이티브 스레딩을 사용하는 가상 머신을 포함하고 있다.
도 3a에서 운영 시스템(109)는 하드웨어(110)의 상(on top of hardware)에서 수행되고, 가상머신(105)는 운영시스템(109) 상에서 실행된다. 가상 머신(105) 안에서는 애플릿 1(300)과 애플릿 2(301)과 같은 다중 어플리케이션 및/또는 애플릿들이 실행된다. 애플릿 1(300)과 애플릿 2(301)는 각각 하나 이상의 바이트코드 클래스 파일들로 구성되어 질 수 있다. 연결 라이브러리(302)는 애플릿 2에 연결되어 네이티브 메쏘드를 지원하게 된다. 라이브러리(302)는 연관된 네이티브 메쏘드를 포함하고 있는 애플릿 2의 클래스가 가상 머신(105) 내에서 구체화될 때 로딩되어어 연결되어진다. 라이브러리(302)의 네이티브 코드는 바로 운영 시스템(109) 상에서 실행되고, 이는 라이브러리 연결 기능 및 하드웨어(110)를 지원하게 된다.
다중 스레드의 실행은 가상 머신(105)안에서 이루어진다. 예를 들어 애플릿1이 T1과 T2의 2개의 스레드를, 애플릿 2이 T5와 T6의 2개의 스레드를, 가상 머신이 가비지 수집(garbage collection)과 같이 가상 머신의 프로세스를 수행하는 T3와 T4의 2개의 스레드를 가질 수 있다. 스레드 T1-T6는 가상 머신(105)내에 있는 가상머신(VM) 스레드 스케줄러(303)에 의하여 관리되고 스케줄된다. VM 스레드 스케줄러(303)은 우선순위와 시분할 메쏘드에 기초하여 예를 들면, T1-T6 중 어떤 스레드가 현재 가상 머신에서 실행되어야 하는 스레드인지 여부, 즉 TVM(thread of virtual machine)을 운영시스템 수준에서 결정한다.
자바 가상 머신은 전통적으로 "협동 스케줄링(cooperative scheduling)"을 보조하는데, 여기서 실행 스레드들은 일정한 간격(certain intervals) 또는 현재 실행중인 스레드와 관련하여 지연(delay)가 발생할 것 같은 때 프로세싱 자원을 다른 스레드에게 주게 된다(yield). 예를 들어, 높은 우선 순위가 주어지는 스레드는 이러한 산출 연산(yield operaition)을 이용하여 현재 스레드(current thread)가 될 수 있다. 프로세서 자원을 보내는(yield) 것은 표준 메쏘드에서는 명시적으로 프로그램되어 질 필요는 없다. 가상 머신은 일드(yields)를 메쏘드 호출(method calls)이나 내부루프(within loop)(즉, 역 브랜치(backward branches)일 때)와 같이 실행중의 적절한 순간에 인터프릿팅 프로세스나 컴파일된 코드에 삽입하여 협동 스케줄링을 할 수 있다.
운영시스템(109)는 어느 한 순간에 선택된 가상 머신 스레드(VTM)을 포함한 많은 스레드들을 제공할 수 있다. 예를 들어, 운영 시스템(109)는 다른 어플리케이션이나 운영시스템의 다른 프로세스를 보조하는 스레드 TA-TZ을 포함할 수 있다.운영시스템 스케줄러(304)는 스레드 TA-TZ들로부터 어떤 스레드가 주어진 시간에 기반 하드웨어에 의해 실행될지를 결정한다. 하드웨어(110)이 다중 프로세서를 지원하는 경우에 다중 스레드는 운영시스템 스케줄러(304)에 의해서 스케줄되어서 동시에 다른 프로세서에서 실행될 수 있다.
도 3a의 실시에서, 가상 머신 스레드(즉, T1- T6)는 실행제어권(execution control)을 연결 라이브러리(예를 들어 라이브러리 (302))에 전송하여 네이티브 메쏘드를 위한 함수를 수행할 수 있다. 예를 들어 스레드 T6는 도시된 바와 같이 라이브러리(302)의 네이티브 코드에 의해 지원되는 애플릿 2의 네이티브 메쏘드를 호출할 수 있다. 스레드 T6은 현재 가상 머신 스레드(TVM)로서 운영시스템(109)에 연결되어 있기 때문에 제어권(control)을 라이브러리(302)에 넘길수 있다. 가상 머신의 다른 스레드들은 스레드 T6이 공동 스케줄링에 의하여 일드(yield)할 때까지 대기하고 있어야 한다.
그러나, 라이브러리(302)로의 제어권의 전송은 가상 머신 실행 문제(virtual machine execution problems)를 야기할 수 있다. 가상 머신에서 실행되는 클래스들은 전통적으로 다른 클래스들의 메쏘드들(methods)만을 호출하며, 바로 시스템을 호출하지는 않는다. 그러나, 그 내부의 함수에 의존하는 네이티브 코드는 잦은 시스템으로의 호출을 하여 블럭을 야기한다. 네이티브 코드는 컴파일된 코드로서 독립적으로 실행되기 때문에, 가상 머신 인터프릿터와 컴파일러를 사용하지 않고(bypass), 제어권이 표준 메쏘드로 돌아올 때까지 협동 스케줄링을 수행할 수 없다. 따라서, 가상 머신은 네이티브 코드 프로그래머에 의존하여 네이티브 코드안에 yield() 호출을 명백히 제공하여야 한다.
만약 라이브러리(302)의 네이티브 코드가 파일을 다운로드 하기 위해 I/O 호출과 같이 블럭킹 시스템 호출을 하는 경우, 가상 머신의 스레드 T6 및 운영 시스템 수준의 스레드(TVM)은 시스템 호출이 완료될 때까지 즉, 다운로드가 끝날때까지 중지(block)될 것이다. 실행제어권이 라이브러리(302)의 네이티브 코드에 의해 관리될 때에는 전 가상 머신 실행도 역시 시스템 호출동안 중지된다. 블럭킹 시스템 호출이 완료되기까지 상대적으로 장시간이 걸리기 때문에, 가상 머신(109)의 모든 스레드들이 모두 중지(block)되는 것은 바람직하지 않다. 애플릿 1, 애플릿 2 및 가상머신(105)의 수행은 라이브러리(302)의 블럭킹 시스템 호출때문에 감소되게 된다. 이런 이유때문에 많은 가상 머신 장치(implementations)들은 도 3b에 도시된 바와 같이 네이티브 스레딩을 사용한다.
도 3b에서, 가상 머신 스레드 스케줄러(303)은 운영 시스템 수준에서 스레드로서 가상 머신의 다중 스레드들을 실행한다. 이러한 스레드들은 TVM1-TVMn으로 표시되어 진다. 가상 머신 스레드 스케줄러(303)은 어떤 가상머신 스레드들(T1-T6)이 주어진 시간에 OS 스레드인 TVM1-TVMn으로서 운영시스템(109)에 전달되는 지를 결정한다. 가상머신의 각 스레드가 기반 운영시스템(109)의 개별적인(individual) 스레드로 실행되는 극단적인 경우에는, 가상 머신(105)은 스레드 스케줄링을 위하여 가상머신 스케줄러(303)을 실행하는 것을 무시하고, 전적으로 OS 스레드 스케줄러(304)에 의존할 수 있다.
도 3b에 따르면 가상머신(105)에서 다중 스레드가 동시에 활성이 되는 것을허용해 준다. 이것은 라이브러리(302)의 네이티브 코드에 의한 블럭킹 시스템 호출이 완전히 가상머신(105)를 중지(block)시키지 않는다는 것을 의미한다. 오히려, 제어권을 라이브러리(302)에 전달하는 TVM1-TVMn 그룹 중의 하나의 스레드는 블럭되지만, 나머지 스레드들은 자유롭게 실행될 수 있다.
그러나, OS 또는 네이티브 스레드로서 가상 머신의 다중 스레드들을 실행시키는 것에 의해 가상 머신(105)는 가상 머신의 스레드의 스케줄링에 대한 제어권을 가상머신 스레드 스케줄러로부터 OS 스레드 스케줄러(304)로 효과적으로 넘길수 있다. VM 스레드 스케줄러(303)에 의하여 행해지는 제어권의 상대적인 결핍때문에 가상머신의 스레드 사이에서 동기화(synchfonization) 에러가 발생할 수 있다. 가상 머신(105)와 애플릿 1 및 애플릿 2가 다른 운영시스템(109) 및/또는 다른 시간 파라미터와 스케줄링 프로세스를 가진 다른 하드웨어(110)에서 실행될 때, 네이티브 스레딩의 OS 스레드 스케줄러(304)에 대한 의존성때문에 동기화 에러가 발생하지 않을 수도 있고, 다른 방식으로 발생할 수도 있다. 이렇게 에러들은 쉽게 되풀이 되지 않을 수 있고, 상기 시스템의 디버깅은 더욱 복잡해진다.
객체지향 프로그램
객체지향 프로그램 원칙의 일반적인 설명이 참조를 위하여 이하에 제공되어진다. 객체지향 프로그램은 컴퓨터 프로그램을 어떤 기본적인 빌딩 블럭들을 결함함으로써 만들고, 상기 빌딩블럭들간의 관계를 만드는 메쏘드이다. 객체지향 프로그램 시스템에서의 빌딩 블럭은 "객체"라고 불리워진다. 객체는 자료구조(하나 이상의 인스탄스 변수들)와 상기 자료를 이용하거나 영향을 주는 연산(메쏘드)을 묶은 프로그램 단위이다. 이렇게 객체는 자료와 자료에 수행되는 하나이상의 연산 또는 절차로 구성되어 있다. 자료와 연산을 조합하여 하나의(unitary) 빌딩 블럭으로 만드는 것을 인캡슐레이션이라고 한다.
객체는 메세지를 받으면 그 메쏘드의 하나를 수행하도록 지시되어진다. 메세지는 객체에게 어떤 메쏘드을 실행하라는 명령이거나 지시이다. 메세지는 메쏘드 선택(예를 들어 메쏘드 이름)과 0개 이상의 인자들로 구성된다. 메세지는 받는 객체에게 어떤 동작을 수행할 것인지를 지시한다.
객체지향 프로그램의 하나의 장점은 메쏘드을 호출하는 방법이다. 메세지가 객체에 보내지면, 상기 메세지는 객체에게 특정메쏘드을 어떻게 수행할지에 대해 지시할 필요가 없다. 단지 객체에게 상기 메쏘드을 수행할 것을 요구하기만 하면 된다. 이것은 프로그램 개발을 매우 간단하게 만든다.
객체지향 프로그램언어는 대부분 클래스 방식에 기초하고 있다. 클래스에 기초한 객체지향 프로그램의 한 예가 "smalltalk-80: The Language"(by Adele Goldberg and David Robson, published by Addison-Wesley Publishing Company, 1989)에 나타나 있다.
클래스는 전통적으로 양 분야(즉, 변수들)와 상기 클래스를 위한 메쏘드를 포함하고 있는 객체의 타입을 정의한다. 객체 클래스는 객체의 특별한 인스탄스를 생성하기 위하여 사용된다. 객체 클래스의 인스탄스는 변수들 및 클래스에 대하여 정의된 메쏘드를 포함한다. 동일한 클래스로부터 복수개의 인스탄스(multiple instances)가 하나의 객체 클래스로부터 생성될 수 있다. 상기 객체 클래스로부터생성되는 각 인스탄스는 같은 형식 또는 클래스라고 불리워진다.
상세히 설명하면, 종업원 객체 클래스는 "이름"과 "봉급"이라는 인스탄스 변수와 "봉급정하기"라는 메쏘드를 포함할 수 있다. 종업원 객체 클래스의 인스탄스들이 조직내의 각 종업원에 대하여 생성되거나 구체화될 수 있다. 각각의 객체 인스탄스는 "종업원" 타입이라고 불린다. 각각의 종업원 객체 인스탄스들은 "이름"과 "봉급"이라는 인스탄스 변수들과 "봉급정하기"라는 메쏘드를 포함한다. 각 종업원 객체 인스탄스에서의 "이름"과 "봉급" 변수에 관련된 값들은 조직내의 한 종업원의 이름과 봉급을 포함한다. 메세지는 어떤 종업원의 종업원 객체 인스탄스에 보내져 "봉급정하기" 메쏘드를 호출하여 종업원의 봉급(즉, 상기 종업원의 종업원 객체에 있는 "봉급" 변수)을 조정하게 된다.
클래스의 계층은 객체클래스정의가 하나 이상의 부클래스를 가질 수 있도록 정의되어질 수 있다. 부클레스는 부모(조부모 등)의 정의를 상속받는다. 계층내의 각 부클래스는 그의 부모 클래스로부터 특정된 동작에 더하거나 동작을 변경하게 된다. 일부의 객체지향 프로그램언어는 부클래스가 하나 이상의 부모클래스로부터 클래스 정의를 상속하는 다중 상속을 지원한다. 자바 언어와 같은 다른 프로그램 언어는 부클래스가 오직 하나의 부모 클래스의 정의만을 상속하는 단일 상속만을 지원한다. 자바 프로그램 언어는 상수와 추상 메서드 선언의 세트로 이루어진 "인터페이스"로 알려진 메커니즘을 제공한다. 객체 클래스는 인터페이스에 정의된 추상 메서드들을 실행한다. 단일 및 다중 상속은 모두 인터페이스에서 유효하다. 즉, 하나의 인터페이스는 하나 이상의 부모 인터페이스로부터 인터페이스정의를 상속받을 수 있다.
객체는 객체지향 프로그램 환경에서 관련된 코드와 변수를 포함하는 모듈을 일컫는 일반적인 용어이다. 소프트웨어 어플리케이션은 프로그램의 기능성이 객체를 이용하여 수행되는 객체지향 프로그램을 이용하여 작성되어 질 수 있다.
본 발명은 컴퓨터 시스템 분야, 좀더 구체적으로는, 가상 머신 런타임 환경에 관한 것이다.
솔라리스(Solaris), 선(Sun), 선 마이크로시스템즈(Sun Microsystems), 선 로고(Sun logo), 자바(Java), 및 모든 자바-기반 상표 및 로고는 미합중국과 다른 국가들에서 선 마이크로시스템즈 인코포레이티드의 상표 또는 등록된 상표이다.
도 1은 컴파일 및 실행 환경의 블록도.
도 2는 가상 머신의 하나의 실시예에 따른 실행시간 데이터 영역의 블록도.
도 3a는 링크된 라이버러리를 통해 구현된 네이티브 코드 및 다중 애플릿을 지원하는 가상 머신을 가지는 실행시간 환경의 블록도.
도 3b는 네이티브 스레드 동작을 사용하는 가상 머신을 가지는 런타임 환경의 블록도.
도 4는 본 발명에 따른 한 실시예에서 적절한 실행 환경을 제공할 수 있는 컴퓨터 시스템의 하나의 실시예의 블록도.
도 5는 본 발명의 하나의 실시예에 따른 이진 변환 프로세스의 흐름도.
도 6a는 본 발명의 일 실시예에 따른 하나의 블록의 네이티브 코드를 중간 형식으로 이진 변환하는 것을 도시하는 예시적인 실행 블럭의 일반적인 제어 흐름도.
도 6b는 본 발명의 일 실시예에 따라 수행된, 도 6a의 변형된 일반화된 제어 흐름도.
도 7은 본 발명의 일 실시예에 따라 네이티브 코드으 이진 변환을 구현하는 가상 머신을 가지는 컴퓨터 시스템의 블록도.
본 발명은 가상 머신 환경에서 네이티브 코드를 번역하고 실행하는 방법 및 장치에 관한 것이다. 이하에서는 많은 특정한 세부사항들이 본 발명의 실시예를 통하여 제시될 것이다. 그러나, 본 발명이 속하는 기술분야에서 통상의 지식을 가진자에게는 이러한 특정한 세부사항없이도 본 발명이 실시될 수 있으리라는 것은 명백하다. 한편, 본 발명을 불명료하게 하지 않기 위해서 잘 알려진 예들이 기재되지 않았다.
비록 자바 프로그램 언어와 자바 가상 머신에 대하여 설명되었지만, 본 발명은 네이티브 메쏘드 또는 함수를 포함하고 있는 어떠한 가상 머신 환경하에서 수행되어질 수 있다.
본 발명의 실시예는 도 4에 도시된 컴퓨터(400)과 같이 일반적인 목적의 컴퓨터 상에서 수행되는 컴퓨터가 판독가능한 코드의 형태 또는 컴퓨터상에서 구동되는 자바 런타임 환경에서 수행가능한 바이트코드 클래스 파일의 형태인 컴퓨터 소프트웨어로서 실행되어질 수 있다. 키보드(401)과 마우스(411)은 양방향 시스템 버스(418)에 연결되어진다. 상기 키보드와 마우스는 사용자의 입력을 컴퓨터 시스템에 소개하거나 사용자 입력을 프로세서(413)에 전달하기 위해 사용된다. 다른 적절한 입력장치가 마우스(411) 및 키보드(410)에 부가되거나 대체되어 사용되어질 수 있다. 양방향 시스템 버스(418)에 연결된 I/O(입/출력) 단위(419)는 프린터,A/V(오디오/비디오) I/O 등과 같은 I/O 소자들을 나타낸다
컴퓨터(400)은 키보드(410), 마우스(411) 및 프로세서(413)과 함께 양방향 시스템 버스(418)에 연결된 비디오 메모리(414), 주메모리(415) 및 대용량기억장치(412)를 포함한다. 대용량기억장치(412)는 자기, 광학 또는 자기 광학(magnetic optical) 저장 시스템 또는 어떤 다른 대용량 저장 기술과 같이 고정 및 탈착 가능한 미디어(media)를 포함한다. 버스(418)은 일예로 비디오 메모리(414) 또는 주 메모리(415)을 어드레싱하기 위한 어드레스 라인을 포함한다. 상기 시스템 버스(418)은 또한 일예로 프로세서(413), 주메모리(415), 비디오 메모리(414) 및 대용량기억장치(412)와 같은 소자들 사이에 데이터를 전달하기 위한 데이터버스를 포함한다. 선택적으로, 멀티플렉스 데이터/어드레스 라인들이 별개의 데이타 및 어드레스 라인에 대신하여 사용될 수 있다.
본 발명의 실시예에서 프로세서(413)은 680X0프로세서와 같은 모토롤라에서 제작된 마이크로프로세서이거나, 80X86, 펜티엄과 같은 인텔사에서 제작된 마이크로프로세서이거나, 선 마이크로시스템의 SPARC 마이크로프로세서이다. 그러나, 어떤 다른 적절한 마이크로프로세서 또는 마이크로컴퓨터도 사용되어질 수 있다. 주 메모리(415)는 다이나믹 랜덤 엑서스 메모리(DRAM)로 구성되어진다. 비디오 메모리(414)는 듀얼 포트 비디오 랜덤 엑세스 메모리이다. 비디오 메모리(414)의 한 포트는 비디오 증폭기(416)에 연결되어 진다. 비디오 증폭기(416)은 음극선관 래스터 모니터(cathode ray tube raster monitor)(417)를 구동하기 위해 사용되어진다. 비디오 증폭기(416)는 당업계에서는 잘 알려져 있고 다른 적절한 장치에 의해수행되어 질 수 있다. 이 회로는 비디오 메모리(414)에 저장되어 있는 픽셀 데이터를 모니터(417)에 의해 사용되기에 적합한 래스터 신호로 전환한다. 모니터(417)은 그래픽 이미지를 디스플레이하기에 적절한 모니터 타입이다. 선택적으로 비디오메모리는 평판 또는 액정표시(LCD) 또는 어떤 다른 적절한 데이터 표현 장치를 구동하기 위해 사용될 수 있다.
컴퓨터(400)는 또한 버스(418)에 연결된 통신 인터페이스(420)를 포함할 수 있다. 통신 인터페이스(420)는 네트워크 링크(421)를 통해 로컬 네트워크(422)로 양방향 데이터 통신 연결을 제공한다. 예컨대, 통신 인터페이스(420)가 통합 서비스 디지털 네트워크(ISDN) 카드 또는 모뎀이면, 통신 인터페이스(420)는 네트워크 링크(421)의 일부를 구성하는 전화 회선의 대응 형태에 대한 데이터 통신 연결을 제공한다. 통신 인터페이스(420)가 근거리 네트워크(LAN) 카드이면, 통신 인터페이스(420)는 네트워크 링크(421)를 통해 호환성 LAN으로 데이터 통신 연결을 제공한다. 통신 인터페이스(420)는 또한 케이블 모뎀 또는 무선 인터페이스일 수 있다. 임의의 이러한 구현에서, 통신 인터페이스(420)는 다양한 형태의 정보를 나타내는 디지털 데이터 스트림들을 전달하는 전기, 전자기 또는 광학 신호들을 송수신한다.
네트워크 링크(421)는 전형적으로 일이상의 네트워크들을 통해 다른 데이터 디바이스들로 데이터 통신을 제공한다. 예컨대, 네트워크 링크(421)는 로컬 네트워크(422)를 통해 로컬 서버 컴퓨터(423)로 또는 인터넷 서비스 공급자(ISP)(424)에 의해 동작된 데이터 장비로 연결을 제공할 수 있다. ISP(424)는 차례로 "인터넷"(425)으로 현재 일반적으로 참조된 월드 와이드 패킷(world wide packet) 데이터 통신 네크워크를 통해 데이터 통신 서비스를 제공한다. 로컬 네트워크(422) 및 인터넷(425)는 디지털 데이터 스트림들을 전달하는 전기, 전자기 또는 광학 신호들을 이용한다. 디지털 데이터를 컴퓨터(400)로 및 그로부터 전달하는, 다양한 네트워크들을 통한 신호들 및 네트워크 링크(421)상에 통신 인터페이스(420)를 통한 신호들은 정보를 전송하는 반송파들의 실례적인 형태들이다.
컴퓨터(400)는 네트워크(들), 네트워크 링크(421) 및 통신 인터페이스(420)를 통해 프로그램 코드를 포함하여, 메시지들을 전송하고 데이터를 수신할 수 있다. 인터넷 예에서, 원격 서버 컴퓨터(426)는 인터넷(425), ISP(424), 로컬 네트워크(422) 및 통신 인터페이스(420)를 통해 어플리케이션 프로그램을 위한 요구된 코드를 전송할 수 있다.
수신된 코드는 이후의 실행을 위해 대용량 기억장치(412) 또는 다른 비휘발성 기억장치에 수신 및/또는 저장될 때 프로세서(413)에 의해 실행될 수 있다. 이러한 방식에서, 컴퓨터(400)는 반송파의 형태로 어플리케이션 코드를 얻을 수 있다. 본 발명의 실시예에 따라서, 이러한 다운로드된 어플리케이션들의 실례들은 가상 머신, 클래스 로더, 클래스 바이트코드 파일들, 클래스 라이브러리들 및 본 명세서에 기술된 네이티브 코드를 변환하고 실행하기 위한 장치와 같이, 실행시간 환경의 일이상의 구성요소들을 포함한다.
어플리케이션 코드는 임의의 형태의 컴퓨터 프로그램 제품에 내장될 수 있다. 컴퓨터 프로그램 제품은 컴퓨터 판독가능 코드 또는 데이터를 저장하거나 전송하도록 구성된, 또는 컴퓨터 판독가능 코드 또는 데이터가 내장될 수 있는 매체를 구비한다. 컴퓨터 프로그램 제품들의 일부 예들은 CD-ROM 디스크들, ROM 카드들, 플로피 디스크들, 자기테잎들, 컴퓨터 하드 드라이브들, 네트워크상의 서버들 및 반송파들이다.
전술된 컴퓨터 시스템들은 단지 실례를 위한 것이다. 본 발명의 실시예는 가상 머신을 지원하는 내장형 디바이스들(예컨대, 웹 폰들 등) 및 "박형" 클라이언트 처리 환경들(예컨대, 네트워크 컴퓨터들(NC's) 등)을 포함하여, 임의의 형태의 컴퓨터 시스템 또는 프로그래밍 또는 처리 환경으로 구현될 수 있다.
네이티브 코드의 바이너리 변환
전술된 바와 같이, 가상 머신내에서 실행된 클래스들은 링크된 라이브러리내에 네이티브 코드 함수들에 의해 구현되는 네이티브 메쏘드들을 포함할 수 있다. 본 발명의 실시예에 따라서, 링크된 라이브러리의 네이티브 코드는 가상 머신의 구성요소들에 의해 처리되고 실행되어, 종래 기술의 네이티브 메쏘드의 실행 처리들에 비해 협력적 스케쥴링을 허용하고, 향상된 디버깅 능력을 제공한다. 네이티브 코드의 처리는 바이너리 변환 과정의 일부로서, "와일드" 포인터들에 의해 초래될 수 있는 듯한 메모리 액세스 버그들에 대한 체크 삽입을 포함하고, 블록킹 시스템의 대체는 비블록킹 변동들을 호출하여 네이티브 스레딩(threading)에 대한 요구없이 가상 머신에서 협력적 스케쥴링을 허용한다.
바이너리 변환은 전형적으로 디버깅 동작 동안에 가상 머신에서 인에이블되고, 정상 동작 동안에 디스에이블된다. 예컨대, 인에이블될 경우에,"SystemloadLibrary()" 호출은 가상 머신내 인터프리트 또는 컴파일 실행을 위해 특정 라이브러리의 바이너리 변환을 가져온다. 디스에이블될 경우에, 특정 라이브러리는 표준 방식으로 로드되고 링크된다. 또한, 일부 실시예들에서는 바이너리 변환이 디버깅 처리 동안만이 아니라 항상 수행되도록 할 수 있다.
도 5는 본 발명의 실시예에 따라 바이너리 변환을 수행하기 위한 방법의 순서도이다. 단계 500에서, 각각의 네이티브 코드는 링크된 라이브러리로부터 얻어진다. 이 단계는 예컨대, 각각의 클래스가 가상 머신내에서 변환될 경우에, 링크된 라이브러리의 소스 파일을 결정하고, 소스 파일로부터 네이티브 코드(즉, 머신 코드)의 이진 형태을 판독하는 것을 포함할 수 있다. 바이너리 변환은 또한 가상 머신에서 실행에 앞서 수행될 수 있다.
단계 501에서, 네이티브 코드의 이진 형태는 가상 머신의 바이너리 변환 요소에 의해, 바이트코드들, 추상적 구문 트리 또는 제어 순서도 등의 중간 형태로 변환된다. 바이트코드들은 예컨대, 자바 컴파일러(도 1의 구성요소(101))에 의해 생성된 표준 바이트코드들과 유사하게 구현될 수 있다. 추상적 구문 트리들 및 제어 순서도들은 트리 또는 그래프의 노드들과 같이 실행 동작을 명시하는 프로그램 실행의 표현들이다. 전형적으로, 중간 형태(또한, 본 명세서에서는 "변환된 형태"로 참조)는 메모리 액세스 포인트들 및/또는 호출들 및 브렌치 동작들의 식별을 간소화한 것이다.
단계 502에서, 메모리 액세스 호출들의 위치들이 결정되고, 메모리 액세스 호출이 제한된 또는 달리 경계들을 벗어난 메모리의 일부를 액세스하려고 시도한다면, 체크들이 실행 동안에 신호에 삽입된다. 신호는 예컨대, 에러 메시지를 디스플레이하고(예컨대, 다이얼로그 박스내), 에러를 로그 파일로 로깅하고, 선행 동작들의 예외 또는 일부 조합을 버리는 것을 포함할 수 있다. 따라서, 와일드 포인터들의 디버깅 및 네이티브 코드와 관련된 다른 메모리 액세스 디버그들은 발생할 때마다 각각의 불법 메모리 액세스 이벤트를 보고함으로써 실행 동안에 결정될 수 있다. 메모리 액세스 체크들의 일부에서, 네이티브 코드의 구성요소들에 의해 합법적으로 액세스가능한 메모리의 이들 부분들은 포인터 값들과의 비교를 위해 추적된다.
단계 503에서, 블록킹 시스템 호출들은 중간 형태로 식별되고, 가능할 경우에 시스템 호출들의 비블록킹 변형들이 삽입된다. 단계 504에서, "yield()" 함수들은 호출들 및 루프들에 삽입된다. 루프들을 위한 산출 포인트들(즉, yield() 함수들의 삽입을 위한 포인트들)은 예컨대, 백워드 브렌치 동작들에 근거하여 결정될 수 있다. 단계들 503 및 504의 영향은 가상 머신의 실행 및 임의의 실행중인 어플리케이션들 및/또는 애플릿들을 가능한 한 많이 네이티브 코드의 활성에 대한 의존성으로부터 자유롭게 한다는 것이다. 가상 머신의 다른 스레드는 네이티브 코드의 시스템 호출들에 의해 블록킹되지 않고, 산출 포인트들은 호출로 루프들내에 설정되어 다른 대기 스레드에 대한 처리 자원들을 산출한다. 따라서, 가상 머신은 모든 관련된 스레드의 협력 스케쥴링을 수행하도록 인에이블된다. 이 협력 스케쥴링은 동기화 또는 동시성 관련 버그들이 신뢰성있게 식별되고 기초적인 운영체제 및 하드웨어에 독립적으로 정정되도록 한다.
단계 505에서, 그 중간 또는 변환된 형태의 교정된 네이티브 코드는 가상 머신에 의해 컴파일되거나 인터프리트되어 그내에 함수들을 실행시킨다. 일부 실시예들에서, 추가적인 변환 단계가 중간 형태를 표준 인터프리터 및 JIT-컴파일러에 의해 인터프리테이션 또는 컴파일레이션에 적합한 바이트코드들로 변환하도록 수행될 수 있다. 네이티브 코드 함수들의 실행과 관련된 스레드의 스케쥴링은 가상 머신의 임의의 다른 인터프리트된 또는 컴파일된 처리와 같은 VM 스레드 스케쥴링 처리에 의해 제어될 수 있다. 메모리 액세스 체크들이 수행될 때, 위반이 로깅된다. 필요할 경우에, 개별적인 비동기 스레드는 추가적인 처리가 가상 머신에서 다른 스레드에 독립적으로 발생하도록 야기될 수 있다.
일부 실례들에서, 네이티브 코드는 단계 501에서 완전히 분해(parse)될 수 없다. 루틴의 시작 또는 컴퓨팅된 브렌치와 같은 코드의 어떤 면들은 변환된 코드가 단계 505단계에서 실행될 때(예컨대, 루틴이 실제로 호출될때)까지 알려질 수 없다. 이런 이유로, 변환 처리는 실행 동안에 결정된 새로운 정보에 근거하여 이전에 분해되지 않은 네이티브 코드를 분해하고 변환하기 위해(또는 이미 분해된 코드의 일부들을 재분해하기 위해), 이전 피드백 화살표(506)로 지시된 바와 같이, 단계 505로부터 단계 501로 리턴할 수 있다.
바이너리 변환을 수행하는 네이티브 메쏘드의 일반화된 중간 형태의 일예는 도 6a 및 도 6b에 예시되어 있다. 도 6a는 본 발명의 실시예에 따라 네이티브 코드의 블럭의 중간 형태로의 바이너리 변환을 예시하는 실행 블럭의 일반화된 제어 순서도이다. 도 6b는 본 발명의 실시예에 따라 변형이 수행된 도 6a의 일반화된제어 순서도를 예시한다. 이 실시예에서, 루프들내에 산출 포인트들의 식별은 백워드 브렌치 동작들의 발생에 근거한다.
예시된 동작들의 식별을 위해, 도 6a 및 도 6b에 대한 범례는 다음과 같다:
RD = 메모리 판독 동작(memory read operation)
WR = 메모리 기록 동작(memory write operation)
BR = 브렌치 동작(branch operation(예컨대, "if"))
MC = 메쏘드(함수) 호출(method(function) call)
BSC = 블록킹 시스템 호출(blocking system call)
OP = 다른 일반 동작(다양한)
CHK = 포인터 체크 동작(pointer check operation)
YLD = 산출 동작(yield operation)
NBSC = 비블록킹 시스템 호출(non-blocking system call)
FLAG = 신호 액세스 위반(signal access violation)
도 6a에서, 실행 블럭은 일반 동작(600)으로 시작하고, 판독 동작(603)이 뒤따른다. 판독 동작(603)은 이어서 일반 동작들(605,606 및 607)이 뒤따른다. 이후에, 일반 동작(607), 기록 동작(610)이 수행되고, 일반 동작들(612,613) 및 브렌치 동작(614)이 뒤따른다. 브렌치 동작은 일반 동작(616)으로 포워드로 이동하거나, 또는 일반 동작(606)으로 백워드로 분기한다. 일반 동작(616)으로부터, 메쏘드 호출(618)이 형성되고, 일반 동작(619), 블록킹 시스템 호울(621A) 및 일반 동작(622)이 뒤따른다.
바이너리 변환 과정에 대한 주요 동작들은 판독 동작(603), 기록 동작(610), 브렌치 동작(614), 메쏘드 호출(618) 및 블록킹 시스템 호출(621A)이며, 그 각각이 강조된다. 메모리 액세스 관련 동작들과 같이, 판독 동작(603) 및 기록 동작(610)은 포인터 체크들의 삽입을 위해 설정된다. 브렌치 동작(614) 및 메쏘드 호출(618)은 yield() 호출들의 삽입을 위해 설정된다. 블록킹 시스템 호출(621A)은 비블록킹 시스템 호출 변동에 의한 대체를 위해 설정된다.
도 6b에서, 도 6a의 실행 블럭의 중간 형태에 대한 변형이 예시되어 있다. 판독 동작(603)은 포인터 체크 동작(601), 브렌치 동작(602), 판독 동작(603) 및 플래그 동작(604)에 의해 대체된다. 체크 동작(601)은 포인터 값이 합법적 범위내에 있는지를 판단하고, 브렌치 동작(602)이 뒤따른다. 브렌치 동작(602)은 포인터가 유효하면 판독 동작(603)을 수행하고, 그렇지않으면 플래그 동작(604)를 수행하여 포인터 체크가 무효한 포인터를 나타내도록 시그널링한다. 동작들(603 및 604) 각각은 동작(605)에 선행한다.
기록 동작(610)은 전술된 판독 동작(603)을 위해 수행된 삽입과 유사한 체크 및 플래그 삽입에 따른다. 기록 동작(610)은 포인터 체크 동작(608), 브렌치 동작(609), 기록 동작(610) 및 플래그 동작(611)에 의해 대체된다. 체크 동작(608)은 포인터 값이 합법적 범위내에 있는지를 판단하고, 브렌치 동작(609)이 뒤따른다. 브렌치 동작(609)은 포인터가 유효하면 기록 동작(610)을 수행하고, 그렇지않으면 플래그 동작(611)을 수행하여 포인터 체크가 무효한 포인터를 나타내도록 시그널링한다. 동작들(610 및 611) 각각은 동작(612)에 선행한다.
백워드 브렌치 동작(614)은 동작(606)으로의 리턴 루프에 삽입된 산출 동작(615)을 갖는다. 삽입된 산출 동작(615)은 브렌치 동작(614)에 의해 형성된 루프가 한번 더 시작하기 전에, 다른 스레드가 프로세서 자원들을 얻을 기회를 허용한다. 이것은 긴 루프 회귀 처리가 프로세서 자원들의 다른 스레드를 빼앗지 않도록 하고, 협력적 스케쥴링을 증진시킨다. 마찬가지로, 산출 동작(617)은 메쏘드 호출(618) 이전에 삽입되어, 새로운 메쏘드가 현재 스레드에 의해 초기화되기 전에 필요할 경우에, 다른 스레드가 실행되도록 한다.
블록킹 시스템 호출(621A)은 비블록킹 시스템 호출(621B)에 의해 도 6b에서 대체된다. 선택적으로, 산출 동작(620)은 시스템 호출 이전에 삽입될 수 있다. 필요할 경우에, 비블록킹 시스템 호출(621B)은 새로운 비동기 스레드를 야기시켜, 변환된 함수의 활성을 독립적으로 실행된 스레드로서 실행할 수 있다. 가상 머신에 의해 인터프리트되거나 컴파일될 경우에, 도 6b의 교정된 실행 블럭은 종래 기술의 네이티브 메쏘드 실행에 비해 유효한 디버깅 및 스케쥴링 효과들을 제공한다.
도 7은 본 발명의 실시예에 따라 바이너리 변환을 구현하는 실행 시간 환경을 예시하는 블럭도이다. 도 7에서, 운영 체제(109)는 하드웨어(110)의 최상위를 실행하고, 가상 머신(105)은 운영 체제(109)의 최상위를 실행한다. 운영 체제(109)의 실행은 하드웨어(110)에 의해 지원된다. 도 3a 및 도 3b에서와 같이, 가상 머신(105) 및 운영 체제(109)는 각각 스레드 실행을 관리하기 위한 VM 스레드 스케쥴러(303) 및 OS 스레드 스케쥴러(304)를 구비한다. 부가적으로, 가상 머신(105)은 바이너리 변환 처리(701)를 포함한다.
가상 머신(105)내의 실행은 애플릿1(300) 및 애플릿2(301)와 같이, 다중 어플리케이션들 및/또는 애플릿들이다. 애플릿1 및 애플릿2는 각각 일이상의 바이트코드 클래스 파일들을 구비할 수 있다. 링크된 라이브러리 파일(LIB)(302)은 네이티브 메쏘드들을 지원하도록 애플릿2와 관련된다. 라이브러리 파일(302)의 네이티브 코드는 가상 머신(105)의 바이너리 변환 처리(701)에 의해 분해되고 변환되어 변환된 라이브러리(700)를 발생한다.
변환된 라이브러리(700)는 메모리 액세스 체크들, 산출들 및 비블록킹 호출 변동들을 포함하여 네이티브 코드의 중간 형태를 포함한다. 애플릿2의 네이티브 메쏘드가 스레드T6으로 칭해질 경우에, 변환된 라이브러리(700)는 가상 머신(105)내에서 인터프리트되거나 컴파일되어 소망의 함수를 실행한다. 변환된 라이브러리(700)의 중간 형태에 따라서, 변환된 라이브러리에 대한 인터프리팅 또는 컴파일링 처리는 애플릿1 및 애플릿2의 클래스들에 적용된 인터프리팅 또는 컴파일링 처리와 다를 수 있거나 그렇지 않을 수 있다. 그러나, 가상 머신(105)에 의한 변환된 라이브러리(700)의 일반 동작 및 그에 가해진 제어는 애플릿1 및 애플릿2에 대한 것과 일치한다. 일부 실시예들에서, 변환된 라이브러리(700)는 네이티브 메쏘드 스택(216)을 통해서 보다 스택(212)에서의 프레임들을 통해 스레드T6에서 처리될 수 있다. 효과적으로, 변환된 라이브러리(700)는 변환된 라이브러리(700)가 변경되지 않은 네이티브 코드의 결함없이 부가적인 표준 메쏘드들을 제공하고 있는 것처럼 실행할 수 있다.
링크된 라이브러리의 변환된 네이티브 코드 함수들이 운영 체제(109)를 통해실행된 개별적인 링크된 라이브러리 처리와 달리, 가상 머신(105)을 통해 실행되고, 블록킹 호출들이 변환된 라이브러리(700)내에 존재하지 않기 때문에, 협력적 스케쥴링이 VM 스레드 스케쥴러(303)에 의해 수행될 수 있다. 따라서, 도 3b에 구현된 바와 같은 네이티브 스레딩은 반드시 필요하지는 않다. 가상 머신(105)내 스레드 이벤트들의 동기화는 기초적인 운영 체제 및 하드웨어에 독립적이고, 디버깅은 운영 체제에 근거된 동시성 발행들의 고려없이 수행될 수 있다.
따라서, 가상 머신 환경에서 네이티브 코드를 변환하고 실행하는 방법 및 장치는 일이상의 특정 실시예들과 관련하여 기술되어졌다. 본 발명은 특허청구범위 및 그 동등물들의 완전한 범위에 의해 한정된다.

Claims (24)

  1. 컴퓨터 시스템에 있어서,
    라이브러리(library)의 네이티브 코드(native code)를 얻는 단계와,
    상기 네이티브 코드를 변환된 형식(translated form)으로 변환하는 단계와,
    상기 네이티브 코드의 상기 변환된 형식을 실행하는 단계를 포함하는 방법.
  2. 제1항에 있어서, 상기 네이티브 코드의 상기 변환된 형식을 실행하는 단계는 가상 머신(virtual machine)에서 수행되는 방법.
  3. 제1항에 있어서, 상기 변환된 형식에서 블록킹 시스템 호출(blocking system call)을 식별하는 단계와, 상기 블록킹 시스템 호출을 비-블록킹 시스템 호출로 대체하는 단계를 포함하는 방법.
  4. 제1항에 있어서, 상기 변환된 형식에서 메모리 액세스 오퍼레이션(memory access operation)을 식별하는 단계와, 상기 메모리 액세스 오퍼레이션에 메모리 액세스 위반(memory access violation)을 위한 체크(check)를 부가하는 단계를 더 포함하는 방법.
  5. 제1항에 있어서, 상기 변환된 형식에서 산출 포인트(yield point)를 식별하는 단계와, 상기 산출 포인트에 산출 함수를 삽입하는 단계를 더 포함하는 방법.
  6. 제5항에 있어서, 상기 산출 포인트를 식별하는 단계는 메쏘드 호출(method call)을 식별하는 단계를 포함하는 방법.
  7. 제5항에 있어서, 상기 산출 포인트를 식별하는 단계는 루프(loop)를 식별하는 단계를 포함하는 방법.
  8. 제7항에 있어서, 상기 루프를 식별하는 단계는 백워드 브랜치(backward branch)를 식별하는 단계를 포함하는 방법.
  9. 네이티브 코드를 변환 및 실행하기 위해 컴퓨터에 의해 판독 가능한 코드가 내장된 컴퓨터 사용가능 매체(computer usable medium)를 포함하며,
    상기 컴퓨터 사용가능 매체는 상기 컴퓨터가 라이브러리의 네이티브 코드를 얻고, 상기 네이티브 코드를 변환된 형식으로 변환하고, 상기 네이티브 코드의 상기 변환된 형식을 실행하도록 구성된 컴퓨터 프로그램 제품.
  10. 제9항에 있어서, 상기 프로그램 제품은 반송파(carrier wave)인 컴퓨터 프로그램 제품.
  11. 제9항에 있어서, 컴퓨터가 상기 변환된 형식을 실행하도록 구성된 상기 컴퓨터 판독가능 코드는 가상 머신이 상기 변환된 형식을 실행하도록 구성된 컴퓨터 프로그램 제품.
  12. 제9항에 있어서, 상기 컴퓨터 판독가능 매체는 컴퓨터가 상기 변환된 형식에서 블록킹 시스템 호출을 식별하고, 상기 블록킹 시스템 호출을 비-블록킹 시스템 호출로 대체하도록 구성된 컴퓨터 프로그램 제품.
  13. 제9항에 있어서, 상기 컴퓨터 판독가능 코드는 컴퓨터가 상기 변환된 형식에서 메모리 액세스 오퍼레이션을 식별하고, 상기 메모리 액세스 오퍼레이션에 메모리 액세스 위반에 대한 체크를 부가하도록 구성된 컴퓨터 프로그램 제품.
  14. 제9항에 있어서, 상기 컴퓨터 판독가능 코드는 컴퓨터가 상기 변환된 형식에서 산출 포인트를 식별하고, 상기 산출 포인트에서 산출 함수를 삽입하도록 구성된 컴퓨터 프로그램 제품.
  15. 제14항에 있어서, 상기 산출 포인트를 식별하도록 구성된 상기 컴퓨터 판독가능 코드는 컴퓨터가 메쏘드 호출을 식별하도록 구성된 컴퓨터 프로그램 제품.
  16. 제14항에 있어서, 상기 산출 포인트를 식별하도록 구성된 상기 컴퓨터 판독가능 코드는 컴퓨터가 루프를 식별하도록 구성된 컴퓨터 프로그램 제품.
  17. 제16항에 있어서, 컴퓨터가 상기 루프를 식별하도록 구성된 상기 컴퓨터 판독가능 코드는 컴퓨터가 백워드 브랜치를 식별하도록 구성된 컴퓨터 프로그램 제품.
  18. 라이브러리에서의 네이티브 코드에 의해 지원되는 네이티브 메쏘드를 포함하는 클래스(class)와,
    변환된 형식에서 상기 네이티브 코드를 실행하기 위해 구성되며, 상기 클래스를 처리하는 가상 머신을 포함하며, 상기 가상 머신은
    협동 스케줄링(cooperative scheduling)을 구현하는 스레드 스케줄러(thread scheduler)와,
    상기 네이티브 코드를 상기 변환된 형식으로 변환하기 위해 구성된 변환 처리부를 포함하는 장치.
  19. 제18항에 있어서, 상기 변환 처리부는 상기 변환 형식에서 블록킹 시스템 호출을 비-블록킹 시스템 호출로 대체하도록 구성된 장치.
  20. 제18항에 있어서, 상기 변환 처리부는 상기 변환된 형식에서 메모리 액세스 오퍼레이션에서 메모리 액세스 체크(memory access check)를 삽입하도록 구성된 장치.
  21. 제18항에 있어서, 상기 변환 처리부는 상기 변환된 형식에서 산출 포인터에서 산출 오퍼레이션을 삽입하도록 구성된 장치.
  22. 제21항에 있어서, 상기 산출 포인트는 호출과 연관된 장치.
  23. 제21항에 있어서, 상기 산출 포인트는 루프와 연관된 장치.
  24. 제23항에 있어서, 상기 산출 포인트는 상기 루프의 백워드 브랜치와 연관된 장치.
KR1020017001898A 1998-08-13 1998-08-10 가상 머신 환경에서 네이티브 코드를 변환하고 실행하는방법 및 장치 KR20010072477A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US09/134,073 1998-08-13
US09/134,073 US6282702B1 (en) 1998-08-13 1998-08-13 Method and apparatus of translating and executing native code in a virtual machine environment
PCT/US1999/018158 WO2000010081A2 (en) 1998-08-13 1999-08-10 Method and apparatus of translating and executing native code in a virtual machine environment

Publications (1)

Publication Number Publication Date
KR20010072477A true KR20010072477A (ko) 2001-07-31

Family

ID=22461658

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020017001898A KR20010072477A (ko) 1998-08-13 1998-08-10 가상 머신 환경에서 네이티브 코드를 변환하고 실행하는방법 및 장치

Country Status (8)

Country Link
US (1) US6282702B1 (ko)
EP (1) EP1104564B1 (ko)
JP (1) JP4880121B2 (ko)
KR (1) KR20010072477A (ko)
AT (1) ATE282854T1 (ko)
AU (1) AU5347499A (ko)
DE (1) DE69922015T2 (ko)
WO (1) WO2000010081A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100703743B1 (ko) * 2005-02-18 2007-04-05 삼성전자주식회사 문자 코드 변환 장치 및 방법

Families Citing this family (98)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6324685B1 (en) 1998-03-18 2001-11-27 Becomm Corporation Applet server that provides applets in various forms
DE69924857T2 (de) * 1998-10-10 2006-03-02 Transitive Ltd., Hanging Ditch Programm-kode-umwandlung
JP3470948B2 (ja) * 1999-01-28 2003-11-25 インターナショナル・ビジネス・マシーンズ・コーポレーション 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ
US6341338B1 (en) * 1999-02-04 2002-01-22 Sun Microsystems, Inc. Protocol for coordinating the distribution of shared memory
US6543011B1 (en) * 1999-07-15 2003-04-01 International Business Machines Corporation Method for event recording in java
US6854114B1 (en) * 1999-10-21 2005-02-08 Oracle International Corp. Using a virtual machine instance as the basic unit of user execution in a server environment
EP1109374A3 (de) * 1999-12-13 2001-06-27 TELEFONAKTIEBOLAGET LM ERICSSON (publ) Verfahren und Vorrichtung zur Durchführung von Netzwerkoperationen
US6738976B1 (en) * 1999-12-17 2004-05-18 Hewlett-Packard Development Company, L.P. Method, system, and apparatus to minimize exception handling overhead from invoked functions
US6484188B1 (en) * 1999-12-30 2002-11-19 Intel Corporation Optimization of garbage collection code in the context of raw native interface function calls in the java programming language
WO2001057654A2 (en) * 2000-02-07 2001-08-09 Insignia Solutions Plc Preprocessing of interfaces to allow fast call of native elements
US6813762B1 (en) * 2000-02-22 2004-11-02 Freescale Semiconductor, Inc. Method for processing program files in a programming language capable of dynamic loading
US6996829B2 (en) * 2000-02-25 2006-02-07 Oracle International Corporation Handling callouts made by a multi-threaded virtual machine to a single threaded environment
US7073033B2 (en) * 2000-02-25 2006-07-04 Oracle International Corporation Memory model for a run-time environment
AU2001255808A1 (en) * 2000-03-15 2001-09-24 Arc Cores, Inc. Method and apparatus for debugging programs in a distributed environment
US6802057B1 (en) 2000-05-03 2004-10-05 Sun Microsystems, Inc. Automatic generation of fortran 90 interfaces to fortran 77 code
US6986130B1 (en) 2000-07-28 2006-01-10 Sun Microsystems, Inc. Methods and apparatus for compiling computer programs using partial function inlining
US6910107B1 (en) 2000-08-23 2005-06-21 Sun Microsystems, Inc. Method and apparatus for invalidation of data in computer systems
US6754889B1 (en) * 2000-10-04 2004-06-22 Compuware Corporation Java automation, testing, and analysis
US7406681B1 (en) 2000-10-12 2008-07-29 Sun Microsystems, Inc. Automatic conversion of source code from 32-bit to 64-bit
US7103877B1 (en) * 2000-11-01 2006-09-05 International Business Machines Corporation System and method for characterizing program behavior by sampling at selected program points
US6775820B2 (en) * 2000-11-29 2004-08-10 International Business Machines Corporation Web based application re-coded for OS/2 compatibility
US20040205705A1 (en) * 2000-12-14 2004-10-14 International Business Machines Corporation System support code
US7080373B2 (en) * 2001-03-07 2006-07-18 Freescale Semiconductor, Inc. Method and device for creating and using pre-internalized program files
US7543288B2 (en) 2001-03-27 2009-06-02 Sun Microsystems, Inc. Reduced instruction set for Java virtual machines
US6993751B2 (en) * 2001-05-14 2006-01-31 Microsoft Corporation Placing exception throwing instructions in compiled code
US6934946B2 (en) * 2001-05-15 2005-08-23 Sun Microsystems, Inc. Lightweight native method invocation interface for java computing environments
US7082597B2 (en) * 2001-06-20 2006-07-25 Sun Microsystems, Inc. Representation of objects in a Java programming environment
US7036120B2 (en) * 2001-07-31 2006-04-25 Sun Microsystems, Inc. Two tier clusters for representation of objects in Java programming environments
US7228533B2 (en) * 2001-08-24 2007-06-05 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for performing programming loops
US7058934B2 (en) * 2001-08-24 2006-06-06 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for instantiating Java objects
US6778194B2 (en) * 2001-10-09 2004-08-17 International Business Machines Corporation Method, apparatus and computer program product for eliminating unnecessary dialog box pop-ups
US20030093508A1 (en) * 2001-10-18 2003-05-15 Seiko Epson Corporation System for installing and launching network applications
GB0125176D0 (en) * 2001-10-19 2001-12-12 Koninkl Philips Electronics Nv A method of compiling bytecode to native code
CN1575451A (zh) * 2001-10-25 2005-02-02 皇家飞利浦电子股份有限公司 降低额外开销的异常检测方法和装置
US20030088860A1 (en) * 2001-11-02 2003-05-08 Fu-Hwa Wang Compiler annotation for binary translation tools
CA2376327C (en) * 2002-03-12 2009-04-28 Ibm Canada Limited-Ibm Canada Limitee Executing native code in place of non-native code
US7039911B2 (en) * 2002-05-17 2006-05-02 Naturalbridge, Inc. Hybrid threads for multiplexing virtual machine
US6912617B2 (en) * 2002-07-17 2005-06-28 Sun Microsystems, Inc. Altering virtual machine execution parameters at runtime
US7234080B2 (en) * 2002-10-18 2007-06-19 Computer Associates Think, Inc. Locating potential sources of memory leaks
US7086048B1 (en) 2002-11-04 2006-08-01 Savaje Technologies, Inc. Method and apparatus for combining operating system resource data and application program resource data in a shared object
US7082600B1 (en) * 2002-11-04 2006-07-25 Savaje Technologies, Inc. Method and apparatus for integrating a computer application programming language runtime environment with an operating system kernel
US7051324B2 (en) * 2003-01-16 2006-05-23 International Business Machines Corporation Externalized classloader information for application servers
US7360206B1 (en) * 2003-03-13 2008-04-15 Network Appliance, Inc. Method for an interpreter to control a native function call based on a signature of the native function
US20040221272A1 (en) * 2003-04-30 2004-11-04 Gansha Wu Apparatus and methods for desynchronizing object-oriented software applications in managed runtime environments
US7818729B1 (en) * 2003-09-15 2010-10-19 Thomas Plum Automated safe secure techniques for eliminating undefined behavior in computer software
CA2442800A1 (en) * 2003-09-26 2005-03-26 Ibm Canada Limited - Ibm Canada Limitee Transforming locks in software loops
US7313820B2 (en) * 2003-12-29 2007-12-25 International Business Machines Corporation Method and system for providing an authorization framework for applications
US7917898B2 (en) * 2004-02-02 2011-03-29 Intel Corporation Methods and apparatus to provide a modular native method invocation system
US7788653B2 (en) * 2004-03-02 2010-08-31 Intel Corporation Apparatus and methods for performing generational escape analysis in managed runtime environments
US20070266370A1 (en) * 2004-09-16 2007-11-15 Myers Glenford J Data Plane Technology Including Packet Processing for Network Processors
US7685574B2 (en) * 2004-09-29 2010-03-23 Microsoft Corporation Constrained execution regions
KR100580071B1 (ko) 2004-10-05 2006-05-16 주식회사 팬택앤큐리텔 메모리 오류 검출방법
MY135555A (en) * 2004-12-14 2008-05-30 Axiomatic Solutions Sdn Bhd Compile time linking via hashing technique
US7581216B2 (en) * 2005-01-21 2009-08-25 International Business Machines Corporation Preserving platform independence with native accelerators for performance critical program objects
US7634768B2 (en) * 2005-02-17 2009-12-15 Intel Corporation Methods and apparatus to support mixed-mode execution within a single instruction set architecture process of a virtual machine
US7415701B2 (en) * 2005-02-17 2008-08-19 Intel Corporation Methods and apparatus to support mixed-mode execution within a single instruction set architecture process of a virtual machine
US7530059B2 (en) * 2005-02-18 2009-05-05 International Business Machines Corporation Method for inlining native functions into compiled java code
US7490320B2 (en) * 2005-02-18 2009-02-10 International Business Machines Corporation Method and apparatus for transforming Java Native Interface function calls into simpler operations during just-in-time compilation
US7562349B2 (en) * 2005-04-25 2009-07-14 Sap Ag Version adaptation interface for integration of different virtual machines
US20060253271A1 (en) * 2005-04-26 2006-11-09 Newisys, Inc. Method for facilitating transformation of multi-threaded process-oriented object code to event-based object code
DE102005026384A1 (de) * 2005-06-08 2006-12-14 Giesecke & Devrient Gmbh Validierung eines zur nativen Ausführung durch einen Prozessor eines Datenträgers vorgesehenen Programms
US20070016893A1 (en) * 2005-07-14 2007-01-18 International Business Machines Corporation Tracking resource usage by applications
AU2006292506B2 (en) * 2005-09-15 2010-04-22 Fourthwall Media, Inc Self-contained mini-applications system and method for digital television
US7769964B2 (en) * 2006-08-21 2010-08-03 Intel Corporation Technique to perform memory reference filtering
KR100790304B1 (ko) * 2006-11-10 2008-01-02 주식회사 대우일렉트로닉스 자바 가상 머신과 운영 체제의 스케줄링 실행방법
US8321849B2 (en) 2007-01-26 2012-11-27 Nvidia Corporation Virtual architecture and instruction set for parallel thread computing
US8918772B1 (en) * 2007-07-25 2014-12-23 Google Inc. Statically analyzing program correctness for a dynamic programming language
US20090070752A1 (en) * 2007-09-06 2009-03-12 International Business Machines Corporation Method and system for optimization of an application
US8185876B2 (en) * 2008-02-26 2012-05-22 International Business Machines Corporation Method and implementation for constructing of corrected java native code
US8266582B2 (en) * 2008-03-31 2012-09-11 Oracle America, Inc. Method for creating unified binary files
US20090249311A1 (en) * 2008-03-31 2009-10-01 International Business Machines Corporation Sharing a native module of compiled code using an abstraction module of interpreted code in a virtual machine environment
US9063765B2 (en) * 2008-04-28 2015-06-23 Kaazing Corporation System and methods for distributed execution of computer executable programs utilizing asymmetric translation
US8424082B2 (en) 2008-05-08 2013-04-16 Google Inc. Safely executing an untrusted native code module on a computing device
US9058483B2 (en) * 2008-05-08 2015-06-16 Google Inc. Method for validating an untrusted native code module
US9594670B2 (en) * 2008-07-03 2017-03-14 International Business Machines Corporation Managing software dependencies during software testing and debugging
US9176754B2 (en) 2008-07-16 2015-11-03 Google Inc. Method and system for executing applications using native code modules
US20100088686A1 (en) * 2008-10-06 2010-04-08 Microsoft Corporation Programming language with extensible syntax
US8302076B2 (en) 2008-11-12 2012-10-30 Landmark Graphics Corporation Systems and methods for improved parallel ILU factorization in distributed sparse linear systems
DE102009006882A1 (de) * 2009-01-30 2010-08-05 Advanced Micro Devices, Inc., Sunnyvale Anwendung plattformabhängiger Routinen in virtuellen Maschinen durch Einbetten einer nativen Codierung in Klassendateien
CN101539868B (zh) * 2009-04-10 2010-12-08 北京大学 一种虚拟机管理器的客户操作系统内核代码动态替换方法
FR2953612A1 (fr) * 2009-12-03 2011-06-10 Flexycore Procede de mise au point d'application logicielle, systeme et produit programme d'ordinateur correspondant.
US8959496B2 (en) * 2010-04-21 2015-02-17 Microsoft Corporation Automatic parallelization in a tracing just-in-time compiler system
US8813051B2 (en) * 2011-04-14 2014-08-19 International Business Machines Corporation Running multiple copies of native code in a Java Virtual Machine
US9183113B2 (en) 2011-09-29 2015-11-10 Oracle International Corporation Debugging analysis in running multi-user systems
US9027075B2 (en) * 2011-09-29 2015-05-05 Oracle International Corporation Enforcing security rules at runtime
CN102455938B (zh) * 2011-11-16 2013-04-24 中标软件有限公司 一种在mips版本的linux操作系统上运行windows应用软件的方法
US9043586B2 (en) 2011-12-20 2015-05-26 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Memory training results corresponding to a plurality of memory modules
US8782620B2 (en) * 2012-06-12 2014-07-15 International Business Machines Corporation Processing reified generics in object-based programming environments
US9122794B2 (en) 2012-10-30 2015-09-01 Oracle International Corporation System and method for debugging domain specific languages
US9274819B2 (en) * 2013-03-19 2016-03-01 Hewlett Packard Enterprise Development Lp Performing garbage collection using a virtual thread in operating system without kernel thread support
US9213530B2 (en) * 2013-08-15 2015-12-15 Oracle International Corporation Runtime memory throttling
US9146834B2 (en) 2013-08-22 2015-09-29 Oracle International Corporation Targeted cloud-based debugging
US9223550B1 (en) 2013-10-17 2015-12-29 Google Inc. Portable handling of primitives for concurrent execution
US9934128B2 (en) * 2013-11-14 2018-04-03 Red Hat, Inc. Dynamic per-method probing during runtime
US9542211B2 (en) * 2014-03-26 2017-01-10 Intel Corporation Co-designed dynamic language accelerator for a processor
US9348625B2 (en) * 2014-05-23 2016-05-24 Google Inc. Application access to native and bundled libraries
EP4002097B1 (en) 2016-03-11 2024-05-01 LZLabs GmbH Load module compiler
US11200048B2 (en) * 2020-05-14 2021-12-14 International Business Machines Corporation Modification of codified infrastructure for orchestration in a multi-cloud environment

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5313614A (en) 1988-12-06 1994-05-17 At&T Bell Laboratories Method and apparatus for direct conversion of programs in object code form between different hardware architecture computer systems
US5339422A (en) * 1991-03-07 1994-08-16 Digital Equipment Corporation System and method for jacketing cross-domain calls in a multi-code execution and debugging system within a multi-architecture environment
TW313282U (en) * 1991-03-07 1997-08-11 Digital Equipment Corp Apparatus for automatically interfacing call conventions between two dissimilar program units
US5428786A (en) * 1991-03-07 1995-06-27 Digital Equipment Corporation Branch resolution via backward symbolic execution
US5561785A (en) * 1992-10-29 1996-10-01 International Business Machines Corporation System for allocating and returning storage and collecting garbage using subpool of available blocks
JPH06231003A (ja) * 1993-02-05 1994-08-19 Sharp Corp 実行可能ファイルのデバッガ
JPH06242942A (ja) * 1993-02-15 1994-09-02 Nec Corp ソースコードレベルデバッグ装置
CA2131406C (en) * 1993-09-21 2002-11-12 David D'souza Preemptive multi-tasking with cooperative groups of tasks
JPH08161179A (ja) * 1994-12-09 1996-06-21 Hitachi Software Eng Co Ltd 一文実行方法
US6021272A (en) 1995-10-04 2000-02-01 Platinum Technology, Inc. Transforming and manipulating program object code
US5761477A (en) * 1995-12-04 1998-06-02 Microsoft Corporation Methods for safe and efficient implementations of virtual machines
JPH09171467A (ja) * 1995-12-21 1997-06-30 Nec Corp エミュレーション装置及びその方法
US5819067A (en) 1996-02-23 1998-10-06 Advanced Micro Devices, Inc. Computer system configured to translate a computer program into a second computer program prior to executing the computer program
US5805895A (en) * 1996-06-09 1998-09-08 Motorola, Inc. Method and apparatus for code translation optimization
US5946487A (en) * 1996-06-10 1999-08-31 Lsi Logic Corporation Object-oriented multi-media architecture
US5937187A (en) * 1996-07-01 1999-08-10 Sun Microsystems, Inc. Method and apparatus for execution and preemption control of computer process entities
US5923878A (en) * 1996-11-13 1999-07-13 Sun Microsystems, Inc. System, method and apparatus of directly executing an architecture-independent binary program
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
US5974256A (en) * 1997-09-29 1999-10-26 International Business Machines Corporation Method for translating graphical user interface (GUI) resource data into native java code

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100703743B1 (ko) * 2005-02-18 2007-04-05 삼성전자주식회사 문자 코드 변환 장치 및 방법

Also Published As

Publication number Publication date
DE69922015T2 (de) 2005-12-01
ATE282854T1 (de) 2004-12-15
WO2000010081A3 (en) 2000-06-15
EP1104564B1 (en) 2004-11-17
US6282702B1 (en) 2001-08-28
JP4880121B2 (ja) 2012-02-22
JP2002522844A (ja) 2002-07-23
AU5347499A (en) 2000-03-06
DE69922015D1 (de) 2004-12-23
WO2000010081A2 (en) 2000-02-24
EP1104564A2 (en) 2001-06-06

Similar Documents

Publication Publication Date Title
EP1104564B1 (en) Method and apparatus of translating and executing native code in a virtual machine environment
US5475845A (en) Wrapper system for interfacing an object-oriented application to a procedural operating system
EP0700538B1 (en) Object-oriented host system
US5473777A (en) Wrapper for enabling an object otented application to maintain virtual memory using procedural function calls
US5519867A (en) Object-oriented multitasking system
US6351778B1 (en) Object-oriented operating system
US7971194B1 (en) Programming language techniques for client-side development and execution
US6327701B2 (en) Method and apparatus for finding bugs related to garbage collection in a virtual machine
US6557023B1 (en) Method and apparatus for avoiding array class creation in virtual machines
US20040268301A1 (en) Adding new compiler methods to an integrated development environment
WO1995003578A1 (en) Object-oriented interprocess communication system
CN113656008A (zh) 用于模块化反射的限制性访问控制
JP2001518658A (ja) プラットフォームとアプリケーションとの間の互換性を評価する方法および装置
EP1752873A2 (en) Method and apparatus for providing support for introspection for local and anonymous classes
CA2434280A1 (en) Method and apparatus to guarantee type and initialization safety in multihreaded programs
US6675375B1 (en) Method and apparatus for optimized multiprocessing in a safe language
Corwin et al. MJ: a rational module system for Java and its applications
Pautet et al. GLADE users guide
Pautet et al. CORBA & DSA: Divorce or marriage?
Eaddy C# versus Java
WO2001009715A2 (en) A single-compiler architecture
EP0846288B1 (en) Portable object-oriented operating system
Ogel et al. Towards active applications: the virtual virtual machine approach
Schmidt Wrapper Facade
Binder Designing and Implementing a Secure, Portable, and Efficient Mobile Agent Kernel: The J-SEAL2 Approach

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid