KR20020085872A - 객체지향 컴퓨터 프로그램의 번역 및 실행방법 - Google Patents

객체지향 컴퓨터 프로그램의 번역 및 실행방법 Download PDF

Info

Publication number
KR20020085872A
KR20020085872A KR1020027002858A KR20027002858A KR20020085872A KR 20020085872 A KR20020085872 A KR 20020085872A KR 1020027002858 A KR1020027002858 A KR 1020027002858A KR 20027002858 A KR20027002858 A KR 20027002858A KR 20020085872 A KR20020085872 A KR 20020085872A
Authority
KR
South Korea
Prior art keywords
code
virtual processor
processor
class
source code
Prior art date
Application number
KR1020027002858A
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 KR20020085872A publication Critical patent/KR20020085872A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/47Retargetable compilers
    • 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/45508Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Hardware Redundancy (AREA)
  • Stored Programmes (AREA)
  • Information Transfer Between Computers (AREA)
  • Computer And Data Communications (AREA)

Abstract

객체 지향 프로그램을 원시코드로 번역하는 메소드는 먼저 제이코드 번역기(212)에 의해 장치 독립의 가상 프로세서 코드(213)로 번역된 후, 그 다음 원시 번역기(214)에 의해 원시코드(230)로 번역되는 2 단계 번역 프로세서를 포함한다. 이종 다중프로세서 환경에서, 상기 번역의 장치 독립의 부분은 중앙 서버에서 실행될 수 있으며 상기 장치 독립의 가상 프로세서 코드는 특정 클라이언트에 요구에 따라 분산된다. 그런 후 각 클라이언트는 원시코드로 변환을 완성하는 작은 프로세서 의존의 원시 번역기(214)를 실행하는 것만이 요구된다. 본 발명은 내장 시스템, 및 특히 이동전화 네트워크와 같은 이종 프로세서 시스템에 특별한 애플리케이션을 찾아내고 있다.

Description

객체지향 컴퓨터 프로그램의 번역 및 실행방법{Translating and Executing Object-Oriented Computer Programs}
객체지향 프로그래밍 언어의 공지된 예는 "자바(Java)"(썬 마이크로시스템즈사(Sun Microsystems Inc.)의 상표명)이다. "자바 구현"은 하나 이상의 클래스 파일로 이루어진 소프트웨어 애플리케이션을 실행되게 하는 소프트웨어 시스템이다. 이들 클래스 파일은 선 마이크로시스템즈사에 의해 공개된 것처럼, 어떤 버전의 표준 자바 가상장치 사양(standard Java Virtual Machine Specification)에 따라야 한다. 클래스 파일은 특정 클래스에 필요한 데이터와 프로그램 코드를 정의한다.
비록 약간의 상호적인 영향이 있을 지라도, 자바 구현은 개념상 두 부분으로 나뉠 수 있다:
·자바 가상장치(JVM). 이는 클래스 파일을 읽고 선(Sun)의 어떤 버전의 자바 가상장치 사양에 따르는 방식으로 그 안에 포함된 명령을 실행한다. 클래스에포함된 일부 명령들은 다른 클래스들의 데이터 또는 프로그램 코드를 참조할 수도 있으며; 또한 JVM은 클래스 간의 관계를 관리한다.
·자바 클래스 라이브러리(Java Class Library). 이는 썬의 자바 클래스 라이브러리 사양에 따르는 방식으로 작용하는 데이터와 프로그램 코드를 가지는 사전 정의된 클래스의 한 세트이다. 이들 라이브러리 클래스들은 실재 클래스 파일(real class file)들로서, 예를 들어 C 또는 어셈블러 프로그래밍 언어를 사용하는 것 이외의 방식으로 구현될 수 있는데, 그 경우 JVM은 그들의 데이터 및 프로그램 코드에 대한 참조가 실재 클래스 파일로부터 비롯된 클래스에 대한 참조와 동일한 메소드으로 작동한다는 것을 보장해야 한다.
클래스 파일에서 프로그램 코드는 자바 바이트코드(JBC), 또는 단순히 바이트코드로 알려진 명령 포맷이다. 클래스에서 각 메소드(method)는 자신의 바이트코드 순서를 가진다. 메소드에 대한 바이트코드는 JBC 명령의 순서로 이루어져 있다.
상기 JVM이 바이트코드를 실행하는데 사용하는 스킴(scheme)이 두 개 있다:
·인터프리터. 이러한 스킴에서, 상기 JVM은 인터프리터를 포함하는데, 이것은 차례로 각 JBC 명령을 검사하고, 그것을 해독하고, 그것이 요구하는 작동을 수행함으로써 바이트코드를 실행하는 프로그램 코드의 한 피스이다. 이러한 접근메소드는 이행하기가 가장 간단하나, 단 하나의 상기 JBC 명령을 해석하기 위해 인터프리터 프로그램의 많은 단계들이 요구되기 때문에 다른 메소드보다 더 느리다는 단점이 있다.
·컴파일러. 이러한 스킴에서, 상기 JVM은 바이트코드의 상기 JBC 명령을 실행하기 전에, 계속 실행되고 있는 CPU에 의해 인지되는 장치 코드 명령(원시 장치 코드)으로 변환한다. 이어서, 메소드에 대한 프로그램 코드를 실행하기 위해, 컴파일된 장치 코드가 대신 실행된다. 비록 이는 애플리케이션이 시작될 때 보다 오히려 애플리케이션을 준비하는 동안 행해질 수도 있지만, JBC 명령에서 장치 코드 명령으로의 초기 컴파일을 위한 제반 시간이다. 일단 컴파일이 행해지면, 메소드 프로그램 코드는 C와 같은 다른 전통적으로 컴파일된 언어와 필적할만한 속도로, 매우 빠르게 실행한다. 컴파일러 스킴의 특별한 경우는 저스트-인-타임 컴파일러(JIT)인데, 여기서 클래스에 대한 바이트코드는 그것이 처음 사용되기 바로 전에 컴파일된다. 몇몇 JVM은 두개의 스킴을 조합하여 사용하는데, 여기서는 여러번 실행되는 프로그램 코드만이 컴파일되고, 나머지는 해독된다.
연결(linking)은 하나의 클래스 C1에서 다른 하나의 클래스 C2(또는 C2에서 데이터나 메소드)로의 참조가 결정되는 프로세스이다. 만약 C2가 이미 로딩되어 있지 않다면, 그것은 로딩되고, 만약 컴파일러 스킴을 사용하면 컴파일되고, 자체 연결된다. 이어서, C1에서 C2(또는 C2에서 데이터나 메소드의 몇몇 아이템)로의 참조는 변경되어 이제 C2에서 참조되는 어떤 것이라도 그에 대한 직접적인 포인터가 있도록 한다.
선의 자바 가상 장치 사양은 연결 스킴의 범위를 고려한다:
·정적 연결: 애플리케이션의 모든 클래스의 로딩 및 연결은 애플리케이션이 준비될 때 수행된다. 이러한 스킴은 전형적으로 애플리케이션이 장치에 영구적으로 내장될 때 사용된다.
·다이나믹 로드 타임 연결(Dynamic load time linking): 먼저 C2(또는 일부 데이터 항목 또는 C2내 메소드)를 참조하는 또 다른 클래스가 로드될 때 클래스 C2가 로드된다.
·다이나믹 레이트 바인딩(Dynamic late binding): 먼저 C2(또는 일부 데이터 항목 또는 C2내 메소드)를 참조하는 JBC 명령이 실행될 때 클래스 C2가 로드된다.
작동시, 개별 클래스의 개별 메소드가 호출될 때, 요구된 개별 클래스는 JVM에이미 존재하고 있을 수도 있고 그렇지 않을 수도 있다. 만약 요구된 클래스가 존재하고 있지 않다면, 그 때는 그 클래스에 대한 클래스 파일이 먼저 JVM 외부로부터(예를 들어 디스크로부터 또는 네트워크로부터) 로드되고, 연결되며 JVM으로 초기화되어야만 한다. 그 다음, 요구된 메소드는 클래스에 대한 메소드의 리스트를 검사함으로써 발견될 수 있다. 일단 요구된 메소드가 발견되면, 그 메소드의 자바 바이트코드는 복귀(return) 명령을 만날때까지 실행되고, 그 결과 그 메소드는 종료되고 컨트롤은 메소드의 인보커(invoker)로 복귀된다. 메소드 호출은 또한 메소드에서 포함되지 않는 것을 버리는 예외로 종결될 수 있다.
도 1은 JVM이 JIT 컴파일러를 이용하는 전형적인 종래 기술의 실행을 예시하고 있다. JIT 컴파일러(120)는 사용되기 바로 전에 클래스 바이트코드(110)를 받아들이고, 그것을 특정한 프로세서에서 실행될 준비가 된 원시코드(130)로 번역한다. 클래스(140)의 나머지(또는 어쩌면 클래스의 전체)는 상기 원시코드(130)가 실행되는 동안 그것을 참조할 필요가 있는 경우 메모리에서 이용가능한 상태로 남아있다.
도 3은 다중 프로세서 환경에서 전형적인 종래 기술의 JVM 실행을 예시하고 있다. 서버(210)는 클라이언트 프로세서(230, 240)가 요구할 수도 있는 다양한 클래스의 바이트코드를 확보하기 위해 클래스 스토어(220)를 보유하고 있다. 이 예에서, 프로세서(230, 240)는 두가지 다른 타입 - 즉 각각 클라이언트 타입 1 및 클라이언트 타입 2이다. 상기 서버는 필요에 따라 250으로 전체 표시되어 있는 통신 네트워크를 가로질러 클라이언트(230, 240)로 클래스 파일을 공급한다. 각각의 클라이언트(230, 240)는 자신의 JIT, 각각 231, 241을 보유하여, 클래스 파일을 자신의 원시 코드의 버전에 대해 컴파일하고 자신의 원시 코드 스토어(232, 242)에 저장할 수 있도록 한다. 이어서 원시 코드는 각자의 클라이언트에 대해 실행될 수 있다.
상기 배열에 따른 한가지 문제점은 그것이 각각의 클라이언트에 대해 커다란 실행 환경을 요구한다는 것이다. JIT 컴파일러는 전형적으로 크고, 특히 클라이언트가 예를 들어 이동 전화로 이루어진 내장 시스템에서, 불가능하지 않지만 클라이언트에 대해 필수 공간을 제공하는 것은 어려울 수 있다. (도시되지 않은) 대안적인 접근방법은 서버에 대해 JIT 작성(compilation)을 수행하고 요구에 따라, 클라이언트들에게 각 클래스의 원시 버전을 공급할 것이다. 이는 각각의 클라이언트에 대한 공간이 덜 필요하지만, 그것은 서버에서 실질적인 부가 복잡성이라는 다른 결점들을 갖는다. 각 JIT는 프로세서에 의존적이기 때문에, 상기 서버는 그러한 배열에서 수행될 필요가 있을지 모르는 각 프로세서 형태에 대해 다른 JIT를 보유하여야 할 것이다.
그것은 고정된 네트워크에서 가능할지 모르지만, 예를 들어 많은 수의 다른전화와, 다른 형태와 제품이 끊임없이 서버에 접속되었다 끊겼다하는 이동 전화 시스템에서는 비현실적이다. 서버의 오너는 공지된 모든 형태의 이동 전화에 대해 JIT를 보유하고 시장에 나온 새로운 전화로서 이들 JIT를 보유하고 갱신하는 매우 어려운 임무를 가질 것이다. 그러한 이유로, 서버는 단순히 일반적인 클래스 스토어(220)를 보유하고, 각자의 클라이언트는 프로세서 의존의 번역을 맡는 것이 바람직하다. 하지만, 상기 언급된 바와 같이, 내장 시스템내에서 이용가능한 메모리가 제한적이기 때문에 실제로 실행하기는 어렵다는 것이 증명되었다.
본 발명은 일반적으로 객체지향 컴퓨터 프로그램을 번역(또는 번역 및 실행)하기 위한 컴퓨터 시스템 및 방법에 관한 것이다. 보다 상세하게는, 비록 배타적으로는 아니지만, 본 발명은 클래스 파일 형태로 코드가 제공되는 객체지향 프로그램과 관련되어 있다.
도 1은 JVM내에 종래 지트 컴파일러(JIT compiler)의 오퍼레이션을 예시하고 있다;
도 2는 본 발명의 바람직함 실시예의 2 단계 번역 프로세서를 예시하고 있다;
도 3은 전형적인 종래의 클라이언트/서버 시스템을 도시하고 있다;
도 4는 클라이언트/서버 시스템내에 본 발명의 바람직한 실시예의 오퍼레이션을 예시하고 있다;
도 5는 무선 네트워크내 본 발명의 오퍼레이션을 예시하고 있다; 그리고
도 6은 본 발명의 바람직한 실시예에 따른 바이트코드를 중간 가상 프로세서 코드로 번역의 어떤 형태를 예시하고 있다.
상기 언급된 선행 기술에 따른 몇가지 문제점을 최소한으로 줄이기 위한 것이 본 발명의 목적이다.
본 발명의 제 1 형태에 따르면,
(a) 프로그램 바이트코드를 가상 프로세서의 명령 세트를 사용하는 장치 의존의 가상 프로세서 코드로 번역하는 단계; 및
(b) 상기 가상 프로세서 코드를 물리적 프로세서의 명령 세트를 사용하는 원시 코드로 번역하는 단계를 포함하는 객체 지향 컴퓨터 프로그램을 번역하는 방법이 제공된다.
물론 본 명세서 및 청구항에서 용어 "코드"는 데이터를 포함하며, 이 코드는 자체적으로 프로그램의 일부분임이 이해될 것이다. 따라서, 제한없지는 않으나, 식 "코드"는 상수, 변수명 및 형태, 플래그(flags), 포인터, 객체 이름 등을 포함한다.
바람직한 실시예에서, 객체지향 컴퓨터 프로그램은 자바로 작성되고, 자바 가상머신(JVM)상에 구현되게 계획되고 있다.
그러나, 자바가 사용되거나 되지 않던지 간에 본 발명의 2단계 번역과정은 전체적으로 플랫폼 독립의 제 1 단계와 플랫폼 의존의 제 2 단계를 제공하고 있다. 상기 제 1 번역을 초래하는 상기 가상 프로세서 코드는 장치 독립적이므로 전적으로 휴대가능하다. 상기 가상 프로세서 코드를 새로운 플랫폼으로 번역하기 위한 새로운 번역기를 작성하는데 요구되는 작업은 상기 바이트코드 지트(JIT)를 새로운 플랫폼으로 포트하기 위해 요구되는 작업보다 매우 상당히 덜하다. 자바가 사용된 새로운 애플리케이션은 상기 가상 프로세서 코드에 대해 전혀 아무런 지식을 필요로 하지 않는 자바 유경험의 프로그래머에 의해 자바로 직접 작성될 수 있다. 상기 자바 프로세서 코드를 원시 코드로 번역하기 위한 새로운 원시 번역기는 모든 새로운 애플리케이션 프로그램을 필요로하지 않고 단지 상기 프로그램이 실행되는 모든 새로운 플랫폼만이 필요로 된다. 이는 상기 애플리케이션 프로그래머에게 상당한 시간을 절약하게 한다. 상기 원시 번역기는 각 프로세서의 공통 형태에 대해 용이하게 이용가능하게 될 것이므로, 애플리케이션 공급자는 단지 자신들의 애플리케이션이 실행되도록 계획한 상기 프로세서용 적절한 번역기만을 구매하면 된다: 대안으로서, 상기 원시 번역기는 자체적으로 일단의 사용자 장치와 함께 표준화로서 제공될 수 있다.
한 실시예에서, 본 발명은 특히 공통 애플리케이션이 서버 네트워크된 프로세서상에 실행되게 사용된다. 바이트코드로부터 가상 프로세서 코드로의 번역은 중앙 서버상에서 관리될 수 있으며, 이 중앙 서버는 또한 상기 가상 프로세서 클래스 파일의 검증을 제공한다. 각 클라이언트 프로세서는 수신된 가상 프로세서 코드를 자신의 독특한 원시코드의 다른 것들로 번역하는데 사용되는 자신의 원시 번역기를 보유한다. 상기 네트워크된 클라이언트 장치는 이종일 수 있으며, 이는 상기 장치가 다른 프로세서 형태를 사용할 수 있다는 것이다. 각 클라언트 장치는 자신의 프로세서 형태에 대해 적절한 원시코드로 번역되기 때문에, 이는 본 발명의 바람직한 실시예에서 문제가 되지 않는다.
이와 같은 배열로, 상기 서버는 단지 가상 프로세서 코드를 유지만 하는 것이 필요하다. 프로세서 또는 프로세서 형태가 네트워크된 클라이언트 장치상에 사용되는 것을 알거나 또는 관리할 필요가 없다.
구체적으로, 비록 이동식 휴대전화 네트워크의 분야에서만 아니라, 본 발명은 무선 통신(무선 클라이언트 네트워크)의 분야에서 특별한 응용을 가지는 것으로 예측된다. 본 발명의 일 바람직한 실시예에서, 각 이동전화상의 애플리케이션 소프트웨어는 전적으로 사용자에게 평이한 방식으로, 상기 중앙 서버로부터 가상 프로세서 코드내 필수적인 업데이트를 다운로딩함으로써 자동 업데이트될 것이다. 상기 다운로딩은 정규적 간격이거나 또는 요구시, 또는 예를 들면 사용자가 먼저 전화가 아직 제공하도록 프로그램되지 않은 어떤 특정 기능을 사용하려고 시도할 때 필수적일 수 있다. 유사한 접근은 휴대용 컴퓨터, 게임 콘솔, 카메라, 또는 네트워크된 또는 네트워크 가능한 어떠한 형태의 장치와 같은 (제한없이) 다른 네트워크된 장치로 취해질 수 있다. 일 실시예에서, 네트워크는 무선 네트워크를 구성하거나 또는 포함할 수 있는 반면에, 다른 실시예에서는 개인 또는 공적 고정 네트워크 또는 인터넷을 포함할 수 있다. 상기 클라이언트 장치가 무선 통신을 할 수 없는 곳에서, 요청에 따라 설비가 상기 클라이언트 장치를 상기 인터넷과 결합되게 제공될 수 있다. 이와 같은 방식으로, 본 발명은 내장된 장치의 광범위한 범위, 예를 들면, 카메라, 텔레비젼, 세척기, 모터차량, 또는 실재적으로 착상될 수 있는 컴퓨터 작동되는 어떤 다른 형태의 장치에 응용될 수 있다.
본 발명은 기술한 어떤 방법을 실행하기 위한 컴퓨터 시스템과, 데이타 캐리어상에 내장되든지 않든지 간에 해당하는 컴퓨터 프로그램으로 확장된다. 본 발명은 기술한 방법을 실행하기 위한 컴퓨터 프로그램을 대표하는 데이타 스트림으로 확장된다.
본 발명은 다양한 방식으로 실행될 수 있으며 예로서, 일 구체적인 실시예가 첨부도면에 대해 기술될 것이다;
상술한 도 1은 자바 가상머신(JVM)내 지트 컴파일러(JIT compiler)가 개별 프로세서 실행을 위해 프로세서 독립의(processor-indepedent) 바이트코드 (bytecode)를 프로세서 의존의(processor-depedent) 원시코드(native code)로 변역하는 방식을 도시하고 있다. 본 발명에서, 바이트코드를 원시코드로의 변환은 2개의 분리 단계로 일어난다.
1.클래스 파일로부터 중간 프로세서 독립의 형태로의 변환. 이는 가상 프로세서 또는 VP 코드로서 언급된다. 변환기 그자체는 바람직한 구현에서 "제이코드 번역기(jcode translator)"로 공지되어 있다.
2.중간 VP 형태로부터 원시 기계코드로의 변환. 상기 변환기는 "원시번역기(native translator)"로서 공지될 것이다.
도 2는 클래스 바이트코드로부터 원시코드로의 변역을 더 상세히 예시하고 있다. 상기 클래스 바이트코드(210)는 클래스 검사장치(class verifier)(211)에 의해 타당성이 먼저 검사되어 진다. 이는 개별 바이트코드 자체 뿐만 아니라 타당한 외부 및 내부 기준(reference)을 검사한다. 필요하다면 상기 클래스 검사장치는 부가적인 클래스를 로드하여 상기 외부 기준을 검사한다.
일단 상기 코드가 검사되고 나면, 하기에 보다 상세히 기술되는 바와 같이,상기 코드는 제이코드 번역기(212)로 전해져 VP 코드(213)로 변환된다. 그런 후 상기 VP 코드(213)는 원시번역기(214)에 의해 원시코드(230)로 변환된다.
상기 클래스 검사장치(211)와, 상기 제이코드 번역기(212)와 상기 VP 코드(213)는 모두 프로세서 독립적임을 인식하는 것이 중요하다. 단지 상기 원시번역기(214)와 물론 상기 최종 원시코드(230)만이 고유 프로세서(processor-specific)이다.
이종 다중 프로세서(heterogeneous multi-processor) 환경내에 바람직한 실시예의 사용이 도 4에 개략 도시되어 있다. 이는 도 3에 도시된 상응하는 종래 기술적 접근과 비교되어야만 한다.
도 4에서, 서버(410)는 통신 네트워크(450)를 통하여 (다른 프로세서를 갖는) 2개의 클라이언트(430,440)를 서브하고 있다. 모든 프로세서-독립 계산은 서버상에서 수행되며; 구체적으로, 상기 서버는 클래스 스토어(class store)(420)와, 클래스 검사장치(421)와, 제이코드 번역기(422)와 VP 스토어(VP store)(423)를 보유하고 있다. 상기 VP (프로세서-독립) 코드는, 필요시, 상기 네트워크(450)을 통해 상기 개별 클라이언트에 제공될 수 있다. 그리고 나서 상기 VP 코드는 개별 클라이언트 번역기(424,425)와 원시코드 스토어(432,442)에 저장된 상기 고유 프로세서에 대하여 적합한 원시코드에 의해 번역된다.
도 4에 도시된 바와 같이, 상기 서버상에 VP의 사용은 클래스 파일 및 제 1 작성 단계(VP 코드의 변환)의 검증이 상기 서버에 의해서만 일단 실행되도록 한다.그런 후, (상기 프로세서 형태에 따라 다른) 상기 원시 번역만이 실행전 클라이언트 장치에 의해 수행되지 않으면 않된다. 이와 같은 배열은 서버가 업데이트된 클래스의 사용을 원하는 개별 클라이언트의 세부사항에 대해 어떠한 것도 알 필요가 없이 상기 서버에 업데이트된 클래스를 제공하기가 용이하게 하여 준다. 업데이트된 클래스는 클래스 바이트코드에서 한번만 수정되어 지고나서는 VP로 한번만 번역되면 된다. 상기 VP는 상기 클라이언트 장치에 전송되며 필요에 따라 상기 원시코드로의 최종 번역은 최종 사용자에게 아주 투명한 방식으로 클라이언트에서 실행될 수 있다. 게다가, 새로운 형태의 클라이언트가 다른 원시코드를 필요로 하는 거래에 나타나는 경우에 상기 서버 또는 상기 VP 코드에 대한 어떤 수정도 필요하지 않다. 상기 클라이언트 제조업자는 단지 상기 클라이언트에게 적절한 원시번역기를 제공하며, 상기 장치는 서버에 어떤 수동적인 조정없이 작동해야만 한다.
도 5에 예시된 한가지 특정의 구현은 이동 전화 네트워크의 구현이다. 각각의 네트워크를 이용한 개개의 이동 전화(530,550)는 각각의 원시번역기(524,525) 및 원시코드 스토어(532,542)를 포함한다. 상기 전화의 기능을 업그레이드하는 것이 필요할 때, 업데이트된 VP 코드는 중앙서버(520)상의 VP 스토어(523)로부터 공급된다. 상기 업데이트된 VP 코드는 랜드-기반의 통신 네트워크(land-based communication network)(511)를 통해 무선 송신기(512)에 보내진다. 그런 후, 상기 코드는 패킷화되고 무선 링크(513)를 통해 개인 전화에 전해진다. 전송 받자마자, 상기 VP 코드는 자동적으로 원시코드로 번역되고 원시코드 스토어에 저장된다. 상기 전 공정은 전화 사용자에게 투명하거나; 또는 대안으로서, 상기 업데이트된 코드는 상기 무선 링크(513)를 통해 상기 전화 사용자로부터 특정의 요청을 받을 때보낼 수도 있다.
도 2를 다시 참조하면, 클래스 바이트코드(210)로부터 원시코드(230)로 2단계의 번역에 대해 더욱 세부적인 사항들이 주어질 것이다. 전술한 바와 같이, 상기 클래스 검사장치(211)는 타당성을 위해 상기 클래스 바이트코드를 검사한다. 상기 클래스 검사장치는 어떤 실시예에서는 상기 제이코드 번역기내에 합체될 수도 있으며, 이 경우 상기 클래스 바이트코드(210)는 화살표(240)로 도시된 바와 같이 상기 제이코드 번역기(212)에 직접 전해진다.
타당성을 실행하는 상기 자바 가상머신 및 상기 바이트코드 명령은 스택(stack) 기반이며, 이것은 오퍼랜드(operand)(숫자. 객체에 대한 포인터)가 스택상에 유지되고, 푸시된 마지막 항목이 먼저 팝오프(popped off)되는 것을 의미한다. 바이트코드 명령은 일반적으로 상기 스택으로부터 하나 또는 그 이상 오퍼랜드를 이동하고, 어떤 동작을 실행하며, 상기 스택상에 (있다면) 결과 오퍼랜드를 다시 푸시한다. 반면에, VP는 상기 VP 명령에 의해 직접 어드레스된 한 세트의 레지스터(register)를 갖는다는 점에서 레지스터 기반이다. 명령은 일반적으로 상기 명령에서 특정된 레지스터로부터 그 오퍼랜드를 받아, 어떤 동작을 수행하고, 그 결과 오퍼랜드(있다면)를 상기 명령에서 특정된 또 다른 하나의 레지스터에 둔다. 이 레지스터 기반의 구조는 VP가 아주 많은 수의 레지스터를 가지며, VP로 전환하는 어떤 시스템이 얼마나 많이 있는가에 대해 염려할 필요가 없을 정도로 충분히 많다는 것을 제외하고는, 대부분의 실재 프로세서와 아주 유사하다.
VP 명령은 대략적인 표현식(expression)에 근거한다. 단일 명령은 일반적으로 1개 또는 2개의 오퍼랜드를 가지고, 각 오퍼랜드는 상수, 레지스터 또는 표현식일 수 있다. 그래서 각 표현식은 1개 또는 2개의 오퍼랜드를 가지며, 오퍼랜드 각각은 상수, 레지스터 또는 표현식일 수 있다. 이러한 방식으로, 임의의 복잡한 명령이 구축될 수 있다.
이하게 어떻게 클래스 파일의 부분들이 변환되는지에 대하여 상세히 설명한다. 상기 설명에서는 용어 "픽스업(fixup)"을 사용하는데, 이것은 컴파일러의 출력 코드내 특정 포인트에 첨부된 데이터나 또는 상기 특정 포인트에서의 상기 코드 또는 데이타가 사용될 수 있기 전에 이들 특정 포인트에서의 코드 또는 데이타가 어떤 방식으로 변경될 필요가 있는 상기 자바 가상머신을 명령하는 데이터에 대한 작은 항목이다. 픽스업은 상기 원시코드가 또 하나의 다른 클래스, 또는 필드 또는 그 내에 있는 메소드에 대해 직접적인 참조를 얻을 수 있도록 원시명령 또는 데이터 항목을 변경하는데 사용된다.
자바 클래스 파일은 하기의 부분들로 구성되어 있다;
·이름대신에, 여기에 저장된 이름에 대한 참조가 있는 클래스 파일의 다른 부분에서 상수 및 이름을 포함한 상수 풀(constant pool).
·이 클래스와, 상위 클래스 및 어떤 직계 상위 인터페이스의 이름과 같은 정보.
·각 필드에 대한 정보를 갖는 필드 리스트.
·각 메소드에 대한 정보를 갖는 메소드 리스트. 이 정보는 코드부를 포함한다. 따라서 각 메소드에 대해 하나의 코드부가 있는 몇 개의 코드부가 있다
상기 자바 클래스 파일은 하기와 같은 VP 툴로 변환된다:
·데이터 툴. 그 이름에도 불구하고, 이는 상기 클래스에 의해 사용되기 위한 데이터와 아무관련 없다. 대신에 이름, 매개변수 및 모든 형태의 구성자, 필드, 메소드 및 클래스의 API를 구성하는 메소드 및 다른 엔트리(entities)를 포함하나 이들에 제한되지 않는 클래스에 대한 정보를 포함한다. 이를 위한 일반적인 사용은 반사(reflection)에 대한 것이다(즉, 자바 라이브러리(java library)에서 java.lang.reflect에 있는 기능). 반사는 프로그래머가 구성자(constructor), 필드, 메소드 및 클래스가 속하는 다른 엔트리를 열거하고 다루도록 하는 프로그램적인 인터페이스이다. 상기 데이터 툴은 또한 상기 클래스 파일이 이용가능하지 않거나 또는 상기 클래스 파일이 이미 번역된 상황에서, 상기 제이코드 번역기를 검사함으로써 사용된다. 상기 클래스가 VP로 작성된 곳에는, 어쨌든 클래스 파일이 없다.
·클래스 툴. 이는 (상기 클래스의 어떤 정적 데이터의 크기 및 상위 클래스 및 상위 인터페이스를 할당하기 위한 객체의 크기를 포함한) 상기 자바 가상머신에 의해 사용된 어떤 표시 정보(housekeeping information)와, 메소드가 전혀없거나, 또는 메소드의 일부, 또는 모두에 대한 코드를 포함한다.
·제로 또는 그 이상 메소드 툴. 상기 클래스 툴에 나타나지 않은 메소드는 자기 자신의 개별 툴을 갖는다. 자신의 툴에 메소드를 둘지의 결정은 상기 메소드의 크기와 같은 다수의 요인에 근거할 수 있다.
·픽스업 툴. 상기 픽스업 툴은 전형적으로 특정필드의 객체내에 오프셋을결정하는데 사용되는 상수 픽스업 값으로 복귀한다. 상기 툴은 픽스업 시에 호출되어 상기 오프셋을 제공하며, 바인더/링커는 이 오프셋을 사용하기를 원하는 코드에 패치시킨다. 따라서 바이트코드로 "필드 읽기" 및 "필드 두기" 둘 다 구현하는데 사용된다. 더 일반적으로, 상기 픽스업 툴은 픽스업에 사용되는 데이터로 복귀한다. 이는 컴파일 시가 아니라 픽스업 시에만 결정될 수 있다. 상기 데이터는 클래스 인스턴스(class instance)의 크기 및 필드의 클래스 인스턴스 내의 오프셋을 포함하나 이에 국한되지 않는다.
상기 데이터 툴은 만일 상기 자바 애플리케이션이 어떤 편의를 사용하지 않는 것(대부분 반사한다)으로 알려진다면 무시될 수 있고, 상기 픽스업 툴은 만일 상기 자바 애플리케이션이 또 다른 자바 클래스를 동적으로 로드하지 않는 장치에 내장된다면 무시될 수 있다.
상기 제이코드 번역기는 스택상에 각 항목에 대한 VP 레지스트를 사용한다.
VP 코드는 상기 바이코드내에 또 다른 클래스, 메소드 또는 필드를 접속하기 위한 클래스 파일의 메카니즘을 직접적으로 구현하지 않는다. 상기 바이트코드에는 (이 클래스 또는 다른 클래스에서) 메소드 호출과, (이 클래스 또는 다른 클래스에서) 필드의 내용 읽기와, 상기 스택상에 값을 푸시하기와, 상기 스택 밖으로 값을 나타내기와 필드의 내용을 설정하는 명령이 있다. 상기 제이코드 번역기는 이 명령들을 하기 명령(이는 포괄 리스트가 아니다)중 한 명령을 수행하는 VP 명령들로 변환한다.
·클래스에서 비-정적 메소드(non-static method) 호출(즉, 객체 포인터는통과되어야만 한다는 것에 대한 명령). VP는 자바 클래스를 구현하는데 사용되는 메소드를 갖는 클래스의 개념을 갖는다. 이와 같은 메소드는 가상적(호출된 실재 메소드는 객체의 포인터가 통과되는 클래스에 의존한다)또는 비가상적(호출된 메소드는 호출시에 특정된 클래스에 있다)이라 부를 수 있다.
·서브루틴 호출. 이는 정적 메소드(즉,어떤 객체포인터도 통과될 필요가 없는 명령), 및 어떤 경우에는 비정적 메소드의 바이트코드 호출을 구현하는데 사용된다.
·상기 상수 필스업의 값을 상기 픽스업 툴로부터 읽기.
클래스 파일내 상기 상수 풀은 하기와 같이 변환된다:
·상수(정수 또는 부동 소수점)를 포함한 상수 풀 엔트리는 상수를 참조하는 상기 JBC 명령의 컴파일된 버젼에 통합된다.
·JBC 명령에 의해 직접 사용된 스트링 데이터(string data)를 포함한 상수 풀 엔트리는 상기 컴파일러의 출력 코드에 첨부된 상기 데이타로 복사된다.
·스트링 데이터를 포함한 다른 상수 풀 엔트리는 직접 사용되지 않고 하기의 상수 풀 형태 또는 상기 클래스 파일의 다른 부분에 의해 참조될 때 사용된다.
·클래스 C를 참조한 상수 풀 엔트리(entry)는 상기 클래스 C를 참조하는 픽스업(또는 상기 클래스에 대한 상기 JVM의 내부 이름)이 상기 컴파일러의 출력 코드/데이터에 첨부되도록 하여 C를 참조하기 위한 이 상수 풀 엔트리를 사용한 JBC 명령이 상기 픽스업을 적용한 후 클래스 C의 코드 및 데이터에 대한 접근을 얻은는 원시코드 순서로 컴파일된다.
·클래스 C에서 필드 F를 참조하는 상수 풀 엔트리는 C에서 F를 참조한 픽스업(또는 C에서 F에 대한 상기 JVM의 내부 이름)이 상기 컴파일러의 출력 코드/데이터에 첨부되도록 하여 F를 참조하기 위한 이 상수 풀 엔트리를 사용한 JBC 명령이 상기 픽스업을 적용한 후, 필드 F에 접근을 얻는 원시 코드순서로 컴파일된다.
·클래스 C에서 메소드 M을 참조한 상수 풀 엔트리는 C에서 M을 참조한 픽스업(또는 C에서 F에 대한 상기 JVM의 내부 이름)이 상기 컴파일러의 출력 코드/데이터에 첨부되도록 하여 M을 참조하기 위한 이 상수 풀 엔트리를 이용한 JBC 명령이 상기 픽스업 적용후, 메소드 M에 대한 접근을 얻는 원시코드 순서로 컴파일된다.
·필드 또는 메소드의 이름 및 형태를 주는 상수 풀 엔트리는 직접사용되지 않고, 다른 상수 풀 엔트리 형태 또는 상기 클래스 파일의 다른 부분에 의해 참조될 때 사용된다.
클래스 파일내 코드부는 하기와 같이 변환된다:
·순수한 숫자 계산을 하는 코드(즉, 외부 메소드를 참조하지 않음)는 바이트코드로부터 VP에서 상응하는 툴로 직접 번역되어 진다.
·도 6에서 도시된 바와 같이, 상기 바이트코드(600)는 픽스업시에 호출(611)에 의해 상기 픽스업 툴로 변환되는 필드에 대한 참조(610)를 가지고 있다. 상기 픽스업 툴에 대한 호출은 상기 필드의 위치를 참조하는 값으로 복귀한다. 따라서, 명령이 실행되는 시기에 올바른 오프셋을 포함하도록 패치된다.
·정적 메소드(static method)(620)는 상응하는 VP 툴로 변환되나 픽스업 코드(620)가 추가된다.
·비-정적 메소드(630)는 상응하는 VP 툴에 메소드 호출(즉 상기 메소드 이름에 대한 참조)용 픽스업을 추가한다. 이는 결국 최종 원시코드내 아톰(atom)이 된다.
·호출 규정(callling convention)은 바이트코드 및 VP에서 오히려 다르다. 자바 바이트코드와 같은 종래 바이트코드에서, 서브루틴에 전해지게 될 매개변수는 상기 스택상에 위치되고 나서 호출되도록 상기 메소드에 대한 참조로써 뒤따른다. 그리고 나서 상기 스택으로부터 상기 메소드 참조를 하고, 분석하고, 상기 스택으로부터 매개변수를 갖는 새로운 매소드 실행을 개시하는 메소드 호출을 위한 바이트코드 명령이 실행된다. 콘트롤은 복귀(return) 명령이 실행될 때 원래 메소드로 복귀된다. 이는 수신지 메소드를 가리키도록 설정된 고 명령(gos instruction) (goto 서브루틴)을 실행하기 전에 모든 매개변수를 VP 레지스터에 로드하는 VP로 변환된다(이 픽스업은 통계적이거나 또는 동적으로 묶일 수 있다). 실행은 'ret' 명령이 실행될 때 서브루틴에 전해지고 복귀한다.
상기 파일의 다른 부분들은 하기와 같이 변환된다:
·상기 클라스의 이름은 컴파일러에 의한 코드와 데이터 출력을 참조하기 위한 상기 JVM에 의해 사용되는 이름을 결정한다.
·슈퍼클래스의 이름은 컴파일러의 의한 코드 및 데이터 출력내 슈퍼클래스에 대해 어떤 참조가 된다. 바람직한 실시예에서, 출력 데이터는 링킹후에 포인터가 슈퍼클래스 코드와 데이터를 지시하도록 첨부된 픽스업을 갖는 포인터를 포함하고 있다.
·각각의 인터페이스의 이름은 출력 코드 및 데이터내에 인터페이스에 대해 어떤 참조가 된다. 바람직한 실시예에서, 출력 데이터는 링킹후에 포인터가 인터페이스 코드와 데이터를 지시하도록 첨부된 픽스업을 갖는 각각의 인터페이스에 대한 포인터를 포함하고 있다.
·각각의 방법 (및 클래스 파일에 저장된 소스 파일 이름)에 첨부된 디버그 정보는, 존재시, JBM이 구동되는 환경에 적합한 포맷으로 변환된다. 바람직한 실시예에서, 상기 디버그 정보는 시스템의 비-자바 부분에 대해 사용되는 동일한 포맷으로 변환된다.
최종 VP 클래스는 적어도 데이터 툴, 클래스 툴, 픽스업 툴, 제로 또는 그 이상의 메소드 툴을 포함하는 일반적으로, 하나 또는 그 이상의 명명된 툴을 구비하고 있다. 툴명은 제이코드 번역기에 의해서 자동적으로 생성되고, 이들 각각의 이름은 각 상기 클래스명의 이름과 이 클래스에서 구현된 각 툴의 기능과 관련되어 있다.
도 2를 참조하여, VP코드를 원시코드로 번역하는 원시 번역기에 관해 보다 상세한 설명이 이루어질 것이다. 물론 VP 코드는 자체적으로 라이브 애플리케이션에서 절대 직접 구동되지 않고; 프로세서 의존의 원시 번역기에 의해서 프로세서상에서 실행되어질 프로세서에 대한 적절한 원시코드로 항상 변환된다는 것을 이해할 수 있을 것이다.
원시 번역기(214)는 (프로세서에 따른, 약 150k) 상당히 작은 코드 피스여서, 내장된 시스템내에서 메모리에 용이하게 저장되어질 수 있다. 원시 번역기는VP 레지스터를 사용중인 특정한 프로세서의 레지스터에 맵핑할 수 있다. 원시 번역기는 리얼 프로세서의 레지스터 구성에 있는 자체 지식을 사용하여 출력 원시코드 각각의 포인트에서 어떤 VP 레지스터가 리얼 프러세서 레지스터에 맵핑되는지를 결정하고, 이는 (접근이 보다 늦은) 메모리내에 유지되어야 한다. 번역기는 또한 장치 의존 명령의 최적화를 제공한다. 상기 원시코드가 바운드될 때까지, 원시 코드는 픽스업 코드부를 여전히 정상적으로 포함하고 있다. 바인딩시 (또는 종종 가동시간에) 픽스업 코드는 적절한 장치 의존적인 명령에 의해서 대체되어진다. 예를 들면, 비-정적 방법에 대한 픽스업은 상기 원시 코드내에서 아톰으로 변환된다.
제이코드 번역기와 원시 번역기 둘 다는 저체적으로 VP 코드로 작성되는 것이 바람직하고, 이에 따라서 다른 필요한 플랫폼 상에서 (원시 번역기 자체를 사용하여) 구동되게 번역되어질 수 있다. 최초 VP 코드에서, 양쪽 모두의 번역기의 컴파일된 버전은 원시 코드의 형태로 제공되어질 수 있고, 상기 번역기가 수행되는 특정한 프로세서에 대해 최적화되어질 수 있다. 상기 제이코드 번역기에 대한 VP 코드를 컴파일하기 위해서, 이 코드는 상기 원시 번역기를 거친다. 상기 원시 번역기용 VP 코드를 컴파일하기 위해, 상기 코드는 스스로 원시 번역기를 거친다.
비록 바람직한 실시예가 자바 가상머신(Java Virtual Machine)을 사용하지만, 전반적인 발명의 개념은 보다 일반적이고, JVM을 사용하는 것이 필수적인 것은 아니며, 또는 자바만을 사용하는 것은 전혀 아니다. 그러나 자바가 사용되는 경우에, 기술된 본 발명은 자바에 숙련된 응용 프로그래머가 VP코드에 대한 이해나 지식이 전혀 없는 상태에서도 자신이 선호하는 언어로 프로그램을 개발할 수 있게 한다. 오직 필요한 부분은 애플리케이션이 구동되어지는 각각의 물리적인 프로세서에 대한 입수가능한 원시코드 번역기가 될 수 있다는 것이다. 이와 같은 원시 프로그램 번역기는 일반적으로 입수가능하며, 적절한 번역기는 어플리케이션 개발자에 의해 구입되어지거나, 이동 전화 또는 케임 콘솔과 같은 개인 클라이언트의 표준으로서 제공되어질 수도 있다.
본 발명의 상세한 설명에 포함됨.

Claims (32)

  1. 프로그램 바이트코드를 가상 프로세서 명령 세트를 사용하는 장치 독립의 가상 프로세서 코드로 번역하는 단계와;
    가상 프로세서 코드를 물리적 프로세서 명령 세트를 사용하는 원시코드로 번역하는 단계를 구비한 객체지향 컴퓨터 프로그램 번역 방법.
  2. 제 1 항에 있어서,
    상기 프로그램 바이트코드는 가상 프로세서의 명령 세트를 사용하는 하나 또는 그 이상의 가상 프로세서 툴로 변환되는 클래스 파일을 포함하는 객체지향 컴퓨터 프로그램 번역 방법.
  3. 제 2 항에 있어서,
    상기 클래스 파일은 복수 개의 메소드를 포함하고, 클래스 파일에 있는 약간 또는 모든 메소드가 각각의 가상 프로세서 툴로 변환되는 객체지향 컴퓨터 프로그램 번역 방법.
  4. 제 2 항에 있어서,
    상기 클래스 파일은 메소드에 대한 호출을 포함하고, 상기 가상 프로세서 코드가 해당 툴에 호출을 제공하는 객체지향 컴퓨터 프로그램 번역 방법.
  5. 제 2 항에 있어서,
    상기 클래스 파일은 필드에 대한 참조를 포함하고, 상기 가상 프로세서 코드가 필드를 위치시키는데 사용되는 픽스업 툴을 제공하는 객체지향 컴퓨터 프로그램 번역 방법.
  6. 제 5 항에 있어서,
    상기 픽스업 툴은 객체 내부에 상기 필드의 오프셋를 대표하는 상수 픽스업 값을 복귀하게 배열된 객체지향 컴퓨터 프로그램의 번역 방법.
  7. 제 6 항에 있어서,
    상기 가상 프로세서 코드를 링크하고 다른 클래스 파일로부터 번역된 가상 프로세서 코드에 따른 상기 상수 픽스업 값의 결정을 포함하는 객체지향 컴퓨터 프로그램의 번역 방법.
  8. 제 6 항 또는 제 7 항에 있어서,
    상기 픽스업 툴은 상기 필드의 값을 읽거나 또는 두는 메소드를 패치하는데 사용되는 값을 복귀하는 객체지향 컴퓨터 프로그램의 번역 방법.
  9. 제 2 항에 있어서,
    상기 가상 프로세서 코드는, 복수의 포인트에서 이 가상 프로세서 코드에 포함되고, 상기 포인트에서 상기 코드가 사용전 각각의 픽스업 명령에 의해 변경되어야 하는 것을 지시하는 픽스업 명령을 가지는 객체지향 컴퓨터 프로그램의 번역 방법.
  10. 제 7 항에 있어서,
    상기 픽스업 명령은 어떻게 원시코드가 다른 클래스, 또는 필드 또는 다른 클래스에 있는 메소드를 참조할 수 있는지에 대한 명령을 제공하는 객체지향 컴퓨터 프로그램의 번역 방법.
  11. 제 9 항 또는 제 10 항에 있어서,
    상기 픽스업 명령은 원시번역기에 의해 상기 원시코드로 거의 기능적으로 변경없이 전송되며; 상기 원시코드가 상기 실재 물리적 프로세서상에 속할 때 원시명령으로 대치되는 객체지향 컴퓨터 프로그램의 번역 방법.
  12. 제 1 항 또는 제 11 항 중 어느 한 항에 있어서,
    상기 바이트코드는 스택 기반이며, 상기 가상 프로세서 코드는 레지스터 기반인 객체지향 컴퓨터 프로그램의 번역 방법.
  13. 제 1 항 또는 제 12 항 중 어느 한 항에 있어서,
    상기 프로그램을 원시 코드로 번역하고, 상기 원시코드를 상기 물리적 프로세서상으로의 실행을 포함하는 객체지향 컴퓨터 프로그램의 실행 방법.
  14. 제 13 항에 있어서,
    상기 번역된 툴을 태스크(task)에 바인딩하고, 원시코드 상태의 상기 태스크를 상기 물리적 프로세서상으로의 실행을 포함하는 객체지향 컴퓨터 프로그램의 실행 방법.
  15. 제 1 항 내지 제 14항 중 어느 한 항에 있어서,
    메소드를 실행하기 위해 채택된 컴퓨터 시스템.
  16. 제 1 항 내지 제 12 항 중 어느 한 항에 있어서,
    상기 가상 프로세서 코드를 제 2 물리적 프로세서의 명령 세트를 사용하는 다른 원시코드로의 번역을 더 포함하는 객체지향 컴퓨터 프로그램의 번역 방법.
  17. 제 13 항 또는 제 14 항에 있어서,
    상기 제 2 물리적 프로세서상으로 상기 다른 원시코드의 실행을 포함하는 객체지향 컴퓨터 프로그램의 실행 방법.
  18. 제 16 항 내지 제 17 항에 있어서,
    메소드를 실행하기 위해 채택된 컴퓨터 시스템.
  19. 객체 지향 컴퓨터 프로그램의 장치 독립의 표현인 가상 프로세서 코드를 저장하기 위한 스토어를 포함하는 서버와, 상기 서버와 통신하는 다수의 원거리 클라이언트 장치와, 각 클라이언트 장치는 클라이언트 프로세서를 포함하고, 상기 각각의 클라이언트 프로세서의 명령 세트를 사용한 원시코드로 번역하기 위해 배열된 원시 번역기와, 원시코드 스토어를 구비하고, 상기 서버로부터 상기 클라이언트 장치로 상기 가상 프로세서 코드를 전송하기 위한 전송수단을 포함하는 분산 컴퓨터 시스템.
  20. 제 19 항에 있어서,
    상기 전송수단은 무선 네트워크로 구성되거나 또는 포함하는 분산 컴퓨터 시스템.
  21. 제 20 항에 있어서,
    상기 클라이언트 장치는 이동전화인 분산 컴퓨터 시스템.
  22. 제 20 항에 있어서,
    상기 클라이언트 장치는 휴대용 컴퓨터인 분산 컴퓨터 시스템.
  23. 제 19 항 또는 제 20 항 에 있어서,
    상기 클라이언트 장치는 휴대용 게임 콘솔인 분산 컴퓨터 시스템.
  24. 제 19 항에 있어서,
    적어도 하나의 상기 클라이언트 장치는 제 1 형의 클라이언트 프로세서를 포함하고 적어도 또 다른 하나의 상기 클라이언트 장치는 상기 제 1 형의 명령세트와는 다른 명령세트를 사용하는 제 2 형의 클라이언트 프로세서를 포함하는 분산 컴퓨터 시스템.
  25. 제 19 항 내지 제 24 항 중 어느 한 항에 있어서,
    상기 서버는 바이트코드로부터 가상 프로세서 코드로 상기 객체지향 컴퓨터 프로그램을 번역하도록 더 배열된 분산 컴퓨터 시스템.
  26. 제 2 항 내지 11 항 또는 제 12 항 중 어느 한 항에 있어서,
    제 2 항에 인용된 상기 클래스 바이트코드와, 어떤 외부 호출의 완전성 검정을 포함한 객체지향 컴퓨터 프로그램의 번역 방법.
  27. 제 2 항 내지 11 항 또는 제 12 항 중 어느 한 항에 있어서,
    제 2 항에 인용된 상기 클래스 파일은 자바 클래스 파일인 객체지향 컴퓨터 프로그램의 번역 방법.
  28. 제 1 항 내지 12 항, 제 26 항 또는 제 27항 중 어느 한 항에 있어서,
    상기 프로그램 바이트코드를 가상 프로세서 코드로 번역하는 단계는 자체적으로 가상 프로세서 코드에 기록된 제 1 번역기 프로그램에 의해 실행되는 객체지향 컴퓨터 프로그램의 번역 방법.
  29. 제 1 항 내지 12 항, 제 26항, 제 27 항 또는 제 28항 중 어느 한 항에 있어서,
    상기 가상 프로세서 코드를 원시코드로 번역하는 단계는 자체적으로 가상 프로세서 코드에 기록된 제 2 번역기 프로그램에 의해 실행되는 객체지향 컴퓨터 프로그램의 번역 방법.
  30. 제 1 항 내지 12 항, 제 26항 내지 제 29 항 중 어느 한 항에 있어서,
    메소드를 실행하기 위한 컴퓨터 프로그램.
  31. 제 1 항 내지 12 항, 제 26항 내지 제 29 항 중 어느 한 항에 있어서,
    메소드를 실행하기 위한 컴퓨터 프로그램을 수행하는 데이터 캐리어(carrier).
  32. 제 1 항 내지 12 항, 제 26항 내지 제 29 항 중 어느 한 항에 있어서,
    메소드를 실행하기 위한 컴퓨터 프로그램을 대표하는 데이터 스트림.
KR1020027002858A 1999-09-01 2000-08-16 객체지향 컴퓨터 프로그램의 번역 및 실행방법 KR20020085872A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GBGB9920676.5A GB9920676D0 (en) 1999-09-01 1999-09-01 Translating and executing object-oriented computer programs
GB9920676.5 1999-09-01
PCT/GB2000/003172 WO2001016700A2 (en) 1999-09-01 2000-08-16 Translating and executing object-oriented computer programs

Publications (1)

Publication Number Publication Date
KR20020085872A true KR20020085872A (ko) 2002-11-16

Family

ID=10860172

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020027002858A KR20020085872A (ko) 1999-09-01 2000-08-16 객체지향 컴퓨터 프로그램의 번역 및 실행방법

Country Status (12)

Country Link
US (1) US20040015911A1 (ko)
EP (1) EP1214645B1 (ko)
JP (1) JP2003508844A (ko)
KR (1) KR20020085872A (ko)
AT (1) ATE253748T1 (ko)
AU (1) AU777773B2 (ko)
CA (1) CA2383884A1 (ko)
DE (1) DE60006410T2 (ko)
ES (1) ES2209947T3 (ko)
GB (1) GB9920676D0 (ko)
HK (1) HK1048527B (ko)
WO (1) WO2001016700A2 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100862937B1 (ko) * 2005-12-05 2008-10-14 한국전자통신연구원 임베디드 시스템용 자바 라이브러리의 재구조화 방법 및장치
US8056061B2 (en) 2004-10-21 2011-11-08 Samsung Electronics Co., Ltd. Data processing device and method using predesignated register

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7836395B1 (en) 2000-04-06 2010-11-16 International Business Machines Corporation System, apparatus and method for transformation of java server pages into PVC formats
US6658656B1 (en) * 2000-10-31 2003-12-02 Hewlett-Packard Development Company, L.P. Method and apparatus for creating alternative versions of code segments and dynamically substituting execution of the alternative code versions
AU2002235232B2 (en) 2000-12-18 2006-01-12 Ack Ventures Holdings, Llc A system and method for delivering content to mobile devices
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
FI113709B (fi) 2001-12-10 2004-05-31 Nokia Corp Menetelmä sulautetussa ympäristössä etälaitteen toiminnallisuuden järjestämiseksi
ATE556372T1 (de) * 2003-02-20 2012-05-15 Koninkl Philips Electronics Nv Übersetzung einer reihe von computeranweisungen
GB0316531D0 (en) * 2003-07-15 2003-08-20 Transitive Ltd Method and apparatus for performing native binding
US7913246B2 (en) * 2003-10-27 2011-03-22 American Power Conversion Corporation System and method for updating a software program
US20050108690A1 (en) * 2003-11-17 2005-05-19 Tira Wireless Inc. System and method of generating applications for mobile devices
US7085680B2 (en) * 2004-01-16 2006-08-01 Innova Electronics Corporation Vehicle diagnostic tool
US7278122B2 (en) * 2004-06-24 2007-10-02 Ftl Systems, Inc. Hardware/software design tool and language specification mechanism enabling efficient technology retargeting and optimization
DE102004058882A1 (de) * 2004-12-06 2006-06-08 Giesecke & Devrient Gmbh Erzeugen von Programmcode in einem Ladeformat und Bereitstellen von ausführbarem Programmcode
DE102004063688A1 (de) * 2004-12-28 2006-07-13 Vodafone Holding Gmbh System und Verfahren zur Vermittlung von Daten zwischen einem Datenanbieter und einem Mobilfunkteilnehmer
US7496895B1 (en) * 2004-12-29 2009-02-24 The Mathworks, Inc. Multi-domain unified debugger
KR100763177B1 (ko) * 2005-04-21 2007-10-04 삼성전자주식회사 자바 가상 머신의 명령어 수행 방법 및 그 장치
US20060277209A1 (en) * 2005-06-06 2006-12-07 Javaground Usa, Inc. Efficient and automatic software application development system for wireless devices
US20060277231A1 (en) * 2005-06-06 2006-12-07 Javaground Usa, Inc. Integrated software development and porting system for wireless devices
US8849968B2 (en) * 2005-06-20 2014-09-30 Microsoft Corporation Secure and stable hosting of third-party extensions to web services
WO2007137403A1 (en) * 2006-05-26 2007-12-06 Tira Wireless Inc. System and method of generating applications for mobile devices
US8789063B2 (en) * 2007-03-30 2014-07-22 Microsoft Corporation Master and subordinate operating system kernels for heterogeneous multiprocessor systems
US20080244507A1 (en) * 2007-03-30 2008-10-02 Microsoft Corporation Homogeneous Programming For Heterogeneous Multiprocessor Systems
US20090125611A1 (en) * 2007-11-08 2009-05-14 Barsness Eric L Sharing loaded java classes among a plurality of nodes
US8397225B2 (en) 2008-04-24 2013-03-12 International Business Machines Corporation Optimizing just-in-time compiling for a java application executing on a compute node
US8539464B2 (en) * 2008-10-30 2013-09-17 International Business Machines Corporation Distributed just-in-time compilation
CN103827880B (zh) * 2011-03-31 2017-06-16 爱迪德技术有限公司 保护非本机代码安全的方法
WO2013132767A1 (ja) * 2012-03-09 2013-09-12 パナソニック株式会社 プロセッサ、マルチプロセッサシステム、コンパイラ、ソフトウェアシステム、メモリ制御システムおよびコンピュータシステム
US10540148B2 (en) * 2014-06-12 2020-01-21 Oracle International Corporation Complex constants
US20180275957A1 (en) * 2017-03-27 2018-09-27 Ca, Inc. Assistive technology for code generation using voice and virtual reality

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5339419A (en) * 1990-06-25 1994-08-16 Hewlett-Packard Company ANDF compiler using the HPcode-plus compiler intermediate language
JP3602857B2 (ja) * 1991-04-23 2004-12-15 株式会社日立製作所 多機種対応型情報処理システム、および、方法
GB2272085A (en) * 1992-10-30 1994-05-04 Tao Systems Ltd Data processing system and operating system.
US6704923B1 (en) * 1994-12-20 2004-03-09 Sun Microsystems, Inc. System and method for pre-verification of stack usage in bytecode program loops
US5668999A (en) * 1994-12-20 1997-09-16 Sun Microsystems, Inc. System and method for pre-verification of stack usage in bytecode program loops
US5946487A (en) * 1996-06-10 1999-08-31 Lsi Logic Corporation Object-oriented multi-media architecture
JPH113225A (ja) * 1997-06-13 1999-01-06 Nec Corp 情報処理装置
US6233733B1 (en) * 1997-09-30 2001-05-15 Sun Microsystems, Inc. Method for generating a Java bytecode data flow graph
US6349344B1 (en) * 1997-12-16 2002-02-19 Microsoft Corporation Combining multiple java class files into a run-time image
US6539433B1 (en) * 1998-09-30 2003-03-25 Matsushita Electric Industrial Co., Ltd. System for distributing native program converted from Java bytecode to a specified home appliance
US6389590B1 (en) * 1999-06-22 2002-05-14 Microsoft Corporation Indefinite-size variables within an intermediate language
US6704926B1 (en) * 2000-09-28 2004-03-09 International Business Machines Corporation Bimodal Java just-in-time complier

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8056061B2 (en) 2004-10-21 2011-11-08 Samsung Electronics Co., Ltd. Data processing device and method using predesignated register
KR100862937B1 (ko) * 2005-12-05 2008-10-14 한국전자통신연구원 임베디드 시스템용 자바 라이브러리의 재구조화 방법 및장치

Also Published As

Publication number Publication date
ES2209947T3 (es) 2004-07-01
DE60006410D1 (de) 2003-12-11
EP1214645B1 (en) 2003-11-05
CA2383884A1 (en) 2001-03-08
AU6585200A (en) 2001-03-26
HK1048527B (zh) 2004-10-15
JP2003508844A (ja) 2003-03-04
GB9920676D0 (en) 1999-11-03
EP1214645A2 (en) 2002-06-19
HK1048527A1 (en) 2003-04-04
AU777773B2 (en) 2004-10-28
ATE253748T1 (de) 2003-11-15
WO2001016700A2 (en) 2001-03-08
US20040015911A1 (en) 2004-01-22
WO2001016700A3 (en) 2001-09-20
DE60006410T2 (de) 2004-09-16

Similar Documents

Publication Publication Date Title
EP1214645B1 (en) Method and system for distributing object-oriented computer programs
US20050240907A1 (en) Loading object-oriented computer programs
US11354144B2 (en) Java native interface and windows universal app hooking
US6484309B2 (en) Enabling software designed for one operating system to operate on another operating system
US20040268301A1 (en) Adding new compiler methods to an integrated development environment
KR20040048246A (ko) 자바 실행 장치 및 자바 실행 방법
Kang Function call interception techniques
EP0950947B1 (en) Static binding of dynamically dispatched calls in the presence of dynamic linking and loading
EP1221091B1 (en) Loading object-oriented computer programs
US20220147376A1 (en) Selective substitution of legacy load module programs with classes for execution in a java virtual machine
CN113168320B (en) Selectively replace legacy load module programs with classes for execution in a JAVA virtual machine
Ferreira Common Language Runtime: a new virtual machine

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