KR20090085048A - 프로그램 코드 변환에 관한 프로세스 파일시스템을 관리하는 방법 및 기기 - Google Patents

프로그램 코드 변환에 관한 프로세스 파일시스템을 관리하는 방법 및 기기 Download PDF

Info

Publication number
KR20090085048A
KR20090085048A KR1020097009184A KR20097009184A KR20090085048A KR 20090085048 A KR20090085048 A KR 20090085048A KR 1020097009184 A KR1020097009184 A KR 1020097009184A KR 20097009184 A KR20097009184 A KR 20097009184A KR 20090085048 A KR20090085048 A KR 20090085048A
Authority
KR
South Korea
Prior art keywords
translator
subject
data structure
code
information
Prior art date
Application number
KR1020097009184A
Other languages
English (en)
Other versions
KR101244153B1 (ko
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 KR20090085048A publication Critical patent/KR20090085048A/ko
Application granted granted Critical
Publication of KR101244153B1 publication Critical patent/KR101244153B1/ko

Links

Images

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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • 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
    • 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/45533Hypervisors; Virtual machine monitors
    • G06F9/45537Provision of facilities of other operating environments, e.g. WINE

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

동적인 이진 번역기에서 서브젝트 코드를 타깃 코드로 번역하는 동안 서브젝트 프로세스 파일시스템에 대한 참조를 관리하는 기술을 제공한다. 서브젝트 프로세서 상에서 실행용 서브젝트 코드는 번역기에 의해 수신되고, 상기 타깃 프로세스상에서 대응하는 실행용 타깃 코드는 생성된다. 상기 번역기는 프로세스 데이터 구조를 확립하고, 채우며, 유지하고, 그리하여 코드는, 상기 서브젝트 프로세스 파일시스템에 대한 서브젝트 참조가 효과적으로 취급되는 번역기에 의해 생성된다.
서브젝트 코드, 타깃 코드, 참조, 번역기,

Description

프로그램 코드 변환에 관한 프로세스 파일시스템을 관리하는 방법 및 기기{Method and Apparatus for Administering A Process Filesystem With Respect To Program Code Conversion}
본 발명은 일반적으로, 컴퓨터 및 컴퓨터 소프트웨어 분야와 관련되며, 보다 구체적으로, 예를 들어, 프로세스 파일시스템을 참조하는 프로그램 코드를 변환하는 코드 번역기(code translators), 에뮬레이터(emulators) 및 가속기(accelerators)에서, 유용한 프로그램 코드 변환 방법 및 기기와 관련된다.
엠비디드 및 넌-엠비디드 CPU 시장 전반에 있어서, 그것들이 투명하게 관련 소프트웨어에 접근할 수 있다면, 대부분의 소프트웨어에 존재하고, 더 나은 비용/수행을 제공할 수 있는 무수히 많은 유능한 프로세서로의 "번역(translated)" 또는 실행을 위해 "가속(accelerated)"화 될 수 있는 대부분의 ISAs(Instruction Set Architectures)는 유익하다는 것을 누구나 발견한다. 또한, 제시간에 ISA와 연결되고, 그리고 실행 면에서 또는 시장범위에서 진화할 수 없고, “종합적인 CPU(synthetic CPU)”코-아키텍처(co- architecture)로부터 유익한 대부분의 CPU 아키텍처를 누구나 발견한다.
자주, 제2 타입의 프로세서("타깃" 프로세서)상에서 제1 타입 컴퓨터 프로세 서("서브젝트" 프로세서)를 위해 쓰인 프로그램 코드를 동작시키는 것을 바란다. 여기서, 에뮬레이터 또는 번역기는 프로그램 코드 변환을 수행하기 위해 사용되며, 그리하여 서브젝트 프로그램은 타깃 프로세서상에서 동작할 수 있다. PCT 출원 WO00/22521은 본 발명의 예에서 적용될 수 있는, 그러한 가속, 번역 및 코-아키텍처 성능을 용이하게 하는 프로그램 코드 변환 방법 및 기기를 개시한다.
특히, Unix와 같은 OS(operation system)을 포함하는, 어떤 OS에서, 프로세스 파일 시스템이 제공된다. 프로세스 파일 시스템은 다른 프로세스들에 관한 정보, 프로세서에 의해 제공되는 하드웨어 환경에 대한 정보에 접근하기 위해 프로세스에 의해 사용될 수 있다. 예를 들어, 선 마이크로시스템스 회사(Sun Microsystems Inc.)의 솔라리스 OS(Solaris operating system)는 /proc로 알려진 디렉토리에서 가상 파일시스템을 포함하는 프로세스 파일시스템을 제공한다. /proc의 컨텐츠 및 구조는, 전형적으로 라이브 프로세서당 생성되고 유지되는 하나의 서브-디렉토리와 함께, 프로세스가 동작할 때마다 OS에 의해 동적으로 만들어진다.
위에서 언급한 프로세스 파일시스템의 제공은 프로그램 코드 변환을 복잡하게 할 수 있다. 이것이 3가지 면에서 분명하다. 첫째, 타깃 OS가 프로세스 파일시스템을 제공하지 않고, 그러나, 서브젝트 코드가 어느 하나를 참조한다면, 그때 고유한 불일치가 있다.
둘째, 타깃 OS가 프로세스 파일시스템을 제공한다면, 아직도 그 정렬 및 동작은 서브젝트 코드에 의해 참조되는 프로세스 파일시스템과 불일치할 수 있다.
셋째, 타깃 OS는 양립할 수 있는 파일시스템을 제공한다면, 타깃 프로세스 파일시스템에서 번역기 프로세스를 다른 프로세스와 구별하는 어려움이 있을 수 있다.
서브젝트 프로세스와 관련된 일련의 정보를 타깃 OS의 프로세스 파일시스템에 허락하는 하나의 방법은 타깃 프로세서의 OS를 수정하는 것이다. 타깃 OS의 수정은 타깃 프로세스 파일시스템이 구성되고 관리되는 방법을 변경시킬 수 있고, 커널(kernel) 모듈을 만들고, 이것을 타깃 OS에 삽입하거나, 타깃 OS의 직접적인 소스 코드 수정을 함으로써 달성될 수 있다. 그러나 타깃 OS의 수정은 어려운 작업일 수 있고, 타깃 OS를 불안정하게 할 수 있다.
서브젝트 프로그램 코드의 번역에 관한 프로세스 파일시스템을 관리하는 방법이 제공된다. 서브젝트 코드를 타깃 코드로 변환할 수 있는 번역기는 서브젝트 프로그램에서 서브젝트 프로세스 파일시스템에 관한 참조들이 확인되고, 타깃 코드가 생성될 수 있다. 생성된 타깃 코드는 번역기가 서브젝트 프로세서의 예상되는 행동과 일치하는 방법으로 프로세스 정보를 참조하고 제공할 수 있게 한다.
본 발명이 바람직한 예들은 서브젝트 프로세스 정보가, 타깃 OS의 수정 없이, 번역기에 의해 편리하게 관리될 수 있도록 한다. 이것은 타깃 OS를 불안정하게 하는 것을 피할 수 있고, 번역기가 번역 동안 잠정적으로 불안정한 서브젝트 프로세스의 행동을 올바르게 처리할 수 있도록 한다.
그리하여, 본 발명은, 프로그램 코드 변환을 실행할 때 성능을 향상시킬 수 있다.
본 발명에 따르면, 첨부된 청구항에 개시된 바와 같이, 기기 및 방법이 제공된다. 본 발명의 바람직한 특징은 이하 이어지는 설명 및 종속항으로부터 명백해질 것이다.
하나의 예시적인 관점에서, 타깃 프로세서; 및 서브젝트 프로세서상에서 실행용 수신된 서브젝트 코드 명령에 대한 응답으로 확립된 번역기 프로세스;를 포함하고, 여기서, 번역기 프로세스는,(a) 상기 확립된 번역기 프로세스에 대한 정보를 프로세서 데이터 구조를 채우고; 그리고 (b) 서브젝트 프로세스 파일시스템 내의 정보에 대한 수신된 서브젝트 코드에서 만들어진 참조에 대한 응답으로 단계 (a)의 상기 프로세스 데이터 구조를 참조하는 컴퓨터 기기가 제공된다.
상기 번역기 프로세스는, 서브젝트 프로세서상에서 실행될 때, 각 수신된 서브젝트 코드 명령에 대한 응답으로 서브젝트 프로세스를 확립하는 추가적인 번역기 프로세스를 확립하는 것이 바람직하다. 복수 개의 번역기 프로세스의 각 번역기 프로세스는 공통 프로세스 데이터 구조를 채우고 참조하는 것이 바람직하다. 적절하게는 상기 프로세스 데이터 구조는 (a) 각 번역기 프로세스에 접근가능한 디렉토리; 및 (b) 각 번역기 프로세스에 접근가능한 공유된 메모리 영역; 중 하나 또는 모두를 포함한다. 컴퓨터 기기는 상기 프로세스 데이터 구조에 존재하는 정보를 갖는 번역기 프로세스의 상태를 체크하고, 더 이상 동작하지 않는 번역기 프로세스와 관련된 정보를 상기 프로세스 데이터 구조로부터 제거된 오디터를 더 포함하는 것이 바람직하다.
또 다른 예시적인 관점에서, 서브젝트 프로세서상의 실행용 서브젝트 코드로부터 타깃 프로세서상의 실행용 타깃 코드로의 프로그램 코드 변환과 관련된 프로세스 파일시스템을 관리하는 방법을 제공하고, 상기 방법은 (a) 수신된 서브젝트 코드 명령에 대한 응답으로, 서브젝트 프로세서상에서 실행될 때, 서브젝트 프로세스를 확립하는 번역기 프로세스를 확립하는 단계; (b) 상기 수신된 서브젝트 코드에 대한 응답으로 확립된 하나 이상의 번역기 프로세스에 관한 정보를 상기 번역기 프로세스로 접근가능한 프로세스 데이터 구조를 채우는 단계; 및 (c) 수신된 서브젝트 코드내 서브젝트 프로세스 파일시스템 내의 정보에 대한 참조의 응답으로 단계(b)에 채워진 상기 데이터 구조를 참조하는 단계;를 포함한다.
상기 방법은 상기 프로세스 데이터 구조에 저장된 정보를 갖는 상기 프로세스 상태를 체크하는 단계, 및 예를 들어, 상기 데이터 구조에 저장된 정보를 갖는 프로세스의 상기 상태가 주기적으로 실행되는 것을 체크함으로써, 더 이상 동작하지 않은 번역기 프로세스와 관련된 정보를 상기 프로세스 데이터 구조로부터 제거하는 단계를 더 포함하는 것이 바람직하다. 상기 방법은 (d) 상기 참조를 만드는 상기 번역기프로세스에 대한 식별자 및 참조된 정보를 갖는 상기 번역기 프로세스에 대한 식별자를 기록함으로써 상기 프로세스 데이터 구조내의 정보에 대한 참조가 만들어졌다는 것을 기록하는 단계;를 더 포함하는 것이 바람직하다. 상기 방법은 참조된 정보를 갖는 상기 번역기 프로세스가 더 이상 동작하지 않을 때 단계 (d)에서 기록된 데이터를 상기 프로세스 데이터 구조로부터 제거하는 단계를 더 포함하는 것이 바람직하다.
여전히 추가적인 관점에서, 서브젝트 프로세서상의 실행용 서브젝트 코드로부터 타깃 프로세서상의 실행용 타깃 코드로의 프로그램 코드 변환과 관련하여 프로그램 파일시스템을 관리하는 상기 방법을 실행하기 위한 컴퓨터에 의해 수행할 수 있는 명령을 거기에 기록하는 컴퓨터-판독가능한 매체가 제공되며, 상기 방법은 (a) 수신된 서브젝트 코드 명령에 대한 응답으로, 서브젝트 프로세서상에서 실행될 때, 서브젝트 프로세스를 확립하는 번역기 프로세스를 확립하는 단계; (b) 상기 수신된 서브젝트 코드에 대한 응답으로 확립된 하나 이상의 번역기 프로세스에 관한 정보를 상기 번역기 프로세스에 접근가능한 프로세스 데이터 구조를 채우는 단계; 및 (c) 수신된 서브젝트 코드 내의 서브젝트 프로세스 파일시스템내 정보에 대한 참조의 응답으로, 단계 (b)에서 채워진 상기 데이터 구조를 언급하는 단계;를 포함한다.
여전히 추가적인 관점에서, 서브젝트 프로세서상의 실행용 서브젝트 코드를 수신하고 상기 타깃 프로세서상의 실행용 타깃 코드를 생성하는 번역기 기기에 있어서, 상기 번역기는 (a) 수신된 서브젝트 코드에 대한 응답으로 확립된 하나 이상의 번역기 프로세스에 관한 정보를 프로세스 데이터 구조를 채우고; 및 (b) 서브젝트 프로세스 파일시스템내의 정보에 대한 수신된 서브젝트 코드내의 참조에 대한 응답으로 단계(a)의 상기 프로세스 데이터 구조를 참조한다.
본 발명에 따른 프로그램 코드 변환에 대한 향상된 아키텍처의 다양한 실시예에 따라 실현될 수 있는 다양한 관점 및 이익의 위 요약은 당업자가 계속되고 그리고 그렇지 않은 본 발명의 상세한 설명을 보다 빠르게 받아들일 수 있도록 도와주는 지침서로서 제공되고 여기 첨부된 청구항의 범위를 한정하기 위한 임의의 방법으로 의도되지 않는다.
상세한 설명의 일부로서 결합하고 구성되는, 수반된 도면은 아래와 같이 현재 바람직한 수행을 설명하고 언급한다.
도 1은 본 발명의 실시예가 어플리케이션을 발견하는 기기를 설명하는 블록도이다.
도 2는 본 발명의 실시예에 의해 적용되는 번역기부의 도식도이다.
도 3은 본 발명의 실시예에 의해 적용되는 기기를 설명하는 블록도이다.
도 4는 본 발명의 예시적인 실시예에서 적용되는 통신 채널을 설명하는 도식도이다.
도 5는 본 발명의 예시적인 실시예에 따라, 프로세스 파일시스템을 관리하는 방법을 설명하는 도식도이다.
다음의 설명은 당업자가 본 발명을 만들고 이용하고 이들 발명을 행하는 발명자들에 의해 시도된 최선의 형태들을 설명할 수 있도록 제공된다. 그러나 본 발명의 일반적인 원리들이 특히 개선된 프로그램 코드 방법 및 기기를 제공하기 위해 여기서 정의되었기 때문에, 다양한 변형 예들은 당업자에게 용이하게 명백한 채로 있을 것이다.
도 1을 참조하면, 서브젝트 프로그램(17)은 서브젝트 프로세서(3)를 갖는 서브젝트 컴퓨팅 플랫폼(1)상에서 실행하는 경향이 있다. 그러나 타깃 컴퓨팅 플랫 폼(10)은, 프로그램 코드 변환을 수행하는 번역기부(19)를 통해, 서브젝트 프로그램(17)을 대신 실행하는데 이용된다. 번역기부(19)는 서브젝트 코드(17)에서 타깃 코드(21)로 코드 변환을 실행하며, 그리하여 타깃 코드(21)는 타깃 컴퓨팅 플랫폼(10)상에서 실행될 수 있다.
당업자에게 익숙한 바와 같이, 서브젝트 프로세서(3)는 서브젝트 레지스터 세트(5)를 갖는다. 서브젝트 메모리(8)는, 특히, 서브젝트 코드(17) 및 서브젝트 OS(운영체제: operation system)(2)을 보유한다. 유사하게, 도 1에서 예시적인 타깃 컴퓨팅 플랫폼(10)은 복수개의 타깃 레지스터(15)를 갖는 타깃 프로세서, 타깃 OS(20)를 포함하는 복수 개의 동작 요소를 저장하기 위한 메모리(18), 서브젝트 코드(17), 번역기 코드(19), 및 번역된 타깃 코드(21)를 포함한다. 타깃 컴퓨팅 플랫폼(10)은 일반적으로 마이크로 프로세서-기반 컴퓨터 또는 다른 적합한 컴퓨터이다.
일 실시예에서, 번역기 코드(19)는, 최적화와 함께 또는 최적화없이, 서브젝트 ISA(subject instruction set architecture)의 서브젝트 코드를 다른 ISA의 번역된 타깃 코드로 번역하는 에뮬레이터이다. 다른 실시예에서, 번역기(19)는, 프로그램 코드 최적화를 수행함으로써, 서브젝트 코드를 타깃 코드, 각각의 동일한 ISA로 변환하는 가속기(accelator)와 같은 기능을 한다.
적합하게는, 번역기 코드(19)는 번역기를 실행하는 컴파일된(compiled) 버전의 소스 코드이고, 타깃 프로세서(13)상의 OS(20)과 결합하여 동작한다. 도 1에 설명된 구조는 단지 예시적인 것이고, 예를 들어, 본 발명의 실시예에 따른 방법 및 프로세스는 OS(20) 내 또는 밑에 있는 코드에서 실행될 수 있다는 것은 인정되어야 할 것이다. 서브젝트 코드(17), 번역기 코드(19), OS(20), 및 메모리(18)의 저장 메커니즘은, 당업자에게 알려진 바와 같이, 보다 다양한 타입일 수 있다.
도 1에 따른 기기에서, 프로그램 코드 변환은, 동작시간(run-time)에, 타깃 코드(21)가 동작하는 동안, 타깃 아키텍처상에서 실행되도록 동적으로 수행된다. 즉, 번역기(19)는 번역된 타깃 코드(21)를 즉시 처리하도록 동작한다. 번역기(19)를 통해 서브젝트 프로그램(17)을 동작하는 것은 인터리브된(interleaved) 방법에서 실행되는 두 개의 다른 타입의 코드 즉, 번역기 코드(19); 및 타깃 코드(21)를 포함한다. 그리하여, 타깃 코드(21)는, 동작 시간 전반에 걸쳐, 번역되고 저장된 프로그램의 서브젝트 코드(17)에 기초하여, 번역기 코드(19)에 의해 생성된다.
일 실시예에서, 타깃 프로세서(13)상의 타깃 코드(21)로 서브젝트 프로그램(17)을 실제로 실행하는 동안, 번역기부(19)는 서브젝트 프로세서(3) 및 특히 서브젝트 레지스터(5)와 같은 서브젝트 아키텍처(1)의 관련 영역을 에물레이트한다. 바람직한 실시예에서, 적어도 하나의 글로벌 레지스터 스토어(27)(서브젝트 레지스터 뱅크(27) 또는 요약 레지스터 뱅크(27)로도 언급된다.)이 제공된다. 멀티프로세서 환경에서, 임의로 하나 이상의 요약 레지스터 뱅크(27)는 서브젝트 프로세서의 아키텍처에 따라 제공된다. 서브젝트 상태의 표시는 번역기(19) 및 타깃 코드(21)의 요소에 의해 제공된다. 즉, 번역기(19)는 변수들 및/또는 오브젝트들과 같은 다양한 명시적인 프로그래밍 언어 장치에서 서브젝트 상태를 저장한다. 비교적으로, 번역된 타깃 코드(21)는 타깃 레지스터(15) 및 메모리 로케이션(18)에서 함축적으 로 서브젝트 프로세서 상태를 제공하고, 이것은 타깃 코드(21)의 타깃 명령에 의해 조작된다. 예를 들어, 글로벌 레지스터 스토어(27)의 로우-레벨(low-level) 표현은 단순히 할당된 메모리의 영역이다. 그러나 번역기(19)의 소스 코드에서, 글로벌 레지스터 스토어(27)는 보다 높은 레벨(higher level)에서 접근되고 조작될 수 있는 데이터 어레이 또는 오브젝트이다.
"기본 블록(basic block)"이라는 용어는 당업자에게 익숙할 것이다. 기본 블록은 정확하게 하나의 입력 포인트 및 정확하게 하나의 출력 포인트를 갖는 코드 섹션이다. 이 이유 때문에, 기본 블록은 제어 흐름의 유익한 기본 유닛이다. 적합하게는, 번역기(19)는 서브젝트 코드(17)를 복수 개의 기본 블록으로 분류하고, 여기서 각 기본 블록은 단일 입력 포인트에서 첫번째 명령과 단일 출력 포인트에서 마지막 명령간의 (점프, 호출(call) 또는 브랜치(branch) 명령 같은) 연속적인 명령 세트이다. 번역기(19)는 단지 이러한 기본 블록 중 하나(블록 모드)를 선택하거나 기본 블록의 그룹(그룹 블록 모드)을 선택할 수 있다. 적합하게는, 그룹 블록은 단일 유닛으로 함께 취급되는 두 개 이상의 기본 블록을 포함한다. 무엇보다, 번역기는 서브젝트 코드의 동일한 기본 블록 그러나 다른 입력 조건에 속하는 아이소-블럭(iso-blocks)을 형성할 수 있다.
바람직한 실시예에서, IR(Intermediate Representation) 트리는 원 서브젝트 프로그램(17)으로부터 타깃 코드(21)를 생성하는 과정의 일부로서, 서브젝트 명령 시퀀스에 기초하여 생성된다. IR 트리는 서브젝트 프로그램에 의해 실행된 동작 및 계산된 식의 요약 표현이다. 나중에, 타깃 코드(21)는 IR 트리에 기초하여 생성된 다. IR 노드의 집합은 실질적으로 DAGs(directed acyclic graphs)이나 구어체로 "트리(trees)"로 언급된다.
당업자가 인정하는 바와 같이, 하나의 실시예에서, 번역기(19)는 C++과 같은 오브젝트-지향 프로그래밍 언어를 이용하여 수행된다. 예를 들어, IR 노드는 C++ 오브젝트로서 수행되고, 다른 노드에 대한 참조는 그 다른 노드에 대응하는 C++ 오브젝트에 대한 C++ 참조로서 수행된다. 그리하여 IR 트리는 각각에 대한 다양한 참조를 포함하는, IR 노드 오브젝트의 집합으로서 수행된다.
무엇보다, 언급하고 있는 실시예에서, IR 생성은, 서브젝트 프로그램(17)이 동작하는 서브젝트 아키텍처의 특정 특징에 대응되는 요약 레지스터 정의 세트를 사용한다. 예를 들어, 서브젝트 아키텍처상의 각 물리적인 레지스터에 대한 고유한 요약 레지스터 정의(예를 들어, 도 1의 서브젝트 레지스터(5))가 있다. 그리하여, 번역기내의 요약 레지스터 정의는 IR 노드 오브젝트(예를 들어, IR 트리)에 대한 참조를 포함하는 C++ 오브젝트로서 수행될 수 있다. 요약 레지스터 정의의 세트에 의해 언급되는 모든 IR 트리의 집합은 워킹 IR 포레스트("포레스트(forest)" 왜냐하면 그것은 다중 요약 레지스터 루트(root)를 포함하고, 그것의 각각은 IR 트리를 언급하기 때문이다.)로서 언급될 수 있다. 적합하게는, 이 IR 트리 및 다른 프로세스는 번역기(19)의 일부를 형성한다.
도 2는 타깃 컴퓨팅 플랫폼(10)상에서 동작할 때 번역기(19)를 보다 상세하게 설명한다. 위에서 언급한 바와 같이, 번역기(19)의 프론트 엔드(front end)는 (일반적으로 각각은 서브젝트 코드의 하나의 기본 블록을 포함하는) 복수 개의 서 브젝트 코드 블록(171a, 171b, 171c)을 제공하기 위해 서브젝트 프로그램(17)의 현재 필요한 섹션을 디코딩하는 디코더부(191)를 포함하고, 그리고 각 서브젝트 블록과 관련된 디코더 정보(172) 및 거기에 포함되고 번역기(19)의 나중 동작을 도와줄 서브젝트 명령을 제공할 수 있다. 어떤 실시예에서, 번역기(19)의 코어(core)내의 IR부(192)는 디코딩된 서브젝트 명령으로부터 IR(intermediate representation)를 생산하고, 그리고 최적화는 IR과 관련하여 적절하게 실행된다. 번역기(19)의 백엔드(back end)의 일부로서 인코더(193)는 타깃 프로세서(13)에 의해 실행될 수 있는 타깃 코드(21)를 생성한다(플랜트(plant)한다). 이 간단한 예에서, 세 개의 타깃 코드 블록(211a-211c)은 서브젝트 플랫폼(1)상에 서브젝트 코드블록(171a-171c)을 실행하는 것과 같은 타깃 플랫폼(10)상에서 일을 실행하기 위해 생성된다. 또한, 인코더(193)는, 타깃 코드가 동작할 환경을 설정하고 적절하게 번역기(19)로 제어신호를 다시 패스하는 것과 같은 기능을 실행하는 일부 또는 모든 타깃 코드 블록(211a-211c)에 대한 헤드 코드(header code) 및/또는 푸터 코드(footer code)(212)를 생성할 수 잇다.
도 3은 본 발명의 실시예에 의해 적용되는 기기를 설명하는 보다 상세한 도식도이다. 도 3의 설명적인 예에서, 번역기(19)는 솔라리스(Solaris) 대 리눅스(Linux) 번역을 실행한다. 그러나, 이하 보다 상세히 언급한 바와 같이, 또한, 본 발명은, 리눅스를 리눅스로, 또는 솔라리스를 솔라리스로 변환하는 것과 같이, 번역이 최적화 및 가속화를 목적으로 실행될 때, 유용할 수 있다.
도 3에 도시된 솔라리스 대 리눅스 실시예에서 타깃 프로세서(13)는 타깃 OS(20)의 일부로서 프로세스 파일시스템(20a)을 포함하고, 그러나, 이하 보다 상세히 설명된 바와 같이, 타깃 프로세서(13)의 프로세스 파일시스템(20a)은, 서브젝트 코드(17)가 프로세스 파일시스템에 대한 참조를 만들 때 필수적이거나 일반적으로 사용되는 것은 아니다.
서브젝트 코드(17)는 제1 타깃 코드(21a)로 번역될 실행가능한 제1 서브젝트(17a)를 포함한다. 실행가능한 서브젝트(17a)는, 서브젝트 프로세서상에서 실행된다면, 적어도 하나의 프로세스를 확립하는 명령을 포함한다. 서브젝트 실행가능한 파일(17a)내의 프로세스-확립 명령이 제1 번역기 프로세스(19)와 만날 때, 대응되는 입력은 번역기 프로세스(19a)에 접근할 수 있는 프로세스 데이터 구조(190)내에서 만들어진다.
서브젝트 코드(17)는, 서브젝트 프로세서상에서 실행될 때, 하나 이상의 프로세스를 확립하는 명령을 포함할 수 있다. 또한, 도 3은 제2 번역기 프로세스(19b)를 나타낸다. 제2 번역기 프로세스(19b)는 제2 서브젝트 실행가능한 파일(17b)을 타깃 코드(21b)로 번역하기 위해 동작한다.
프로세스 데이터 구조(190)는 번역기 프로세스가 서브젝트 코드의 제1 블록에 걸쳐 작업하기 전에 초기화되거나, 대안적으로, 제1 서브젝트 코드 명령이 서브젝트 코드의 제1 블록에서 만날 때 초기화될 수 있다.
예시적인 실시예에서, 프로세스 데이터 구조(190)는 타깃 프로세서(13)상에서 동작하는 타깃 프로세스에 접근가능한 디렉토리를 포함한다. 다른 예시적인 실시예에서, 프로세스 데이터 구조(190)는 타깃 프로세서(13)상에서 동작하는 번역기 프로세스에 접근가능한 공유된 메모리 영역을 포함한다. 프로세스 데이터 구조(190)는 프로세스 식별자를 포함한다.
번역기 프로세스는 서브젝트 프로세스 파일 시스템과 관련된 서브젝트 코드(17)내의 어떤 명령을 확인하고, 서브젝트 프로세스 파일시스템에 의해 제공될 수 있는 요청된 기능성(fuctionality)을 에뮬레이트한다. 번역기 프로세스는 프로세스 데이터 구조(190)를 이용하여 이것을 완수한다.
예를 들어, 서브젝트 실행가능한 파일(17a)은 서브젝트 프로세스 파일시스템내의 입력을 갖는 프로세스의 상세한 내용을 요청할 수 있다. 서브젝트 코드가 서브젝트 프로세서상에서 동작할 때, 이 요청은, 전형적으로, 서브젝트 프로세스 파일시스템내의 참조적인 정보에 대한 선행물(precursor)로서 실행될 수 있다.
서브젝트 프로세서가 솔라리스 하에서 동작하는 예시적인 실시예에서, 서브젝트 실행가능한 파일(17a)은 함수를:
getdents (/proc/)
로 칭할 수 있다.
이 명령에 대한 응답으로, 번역기 프로세스(19a)는 프로세스 데이터 구조(190)로부터 대응하는 정보를 제공한다. 프로세스 데이터 구조는 초기화되어 각 확립된 서브젝트 프로세스와 관련된 정보가 채워진다(populated). 예를 들어, 번역기 프로세스는 프로세스 정보를 포함하기 위해 디렉토리 /tmp/pds를 확립하고, 이 디렉토리는, 각 번역기 프로세스에 의해, 번역될 각 서브젝트 프로세스에 대한 프로세스 식별자 형태인 프로세스 정보와 함께 채워질 수 있다. 편의를 위해, 프로세 스 데이터 구조(190)는 프로세스 데이터 구조내에 저장된 프로세스 식별자가 서브젝트 코드 프로세스 식별자와 직접적으로 대응한다. 다른 예시적인 실시예에서, 프로세스 데이터 구조는 각 프로세스에 대한 파일을 포함할 수 있고, 파일은 프로세스와 관련된 다른 정보와 함께 프로세스 식별자를 포함한다.
이 예에서 번역기 프로세스(19a)는 그때서야 타깃 함수:
getdents ( /tmp/pds)
을 실행할 수 있다. 여기서 getdents ( /tmp/pds)는 프로세스 데이터 구조로부터 관련 프로세스 식별자를 리턴(return)할 것이다.
본 예에서, 번역기 프로세스가 리눅스 프로세서상에서 동작하도록 솔라리스 코드를 변환하는 경우에, 번역기 프로세스는 각 프로세스에 대한 디렉토리 /tmp/pds에서 통신 소켓(communication socket)을 확립한다. 편의를 위해, 번역기 프로세스는 각 소켓에 관련 프로세스 식별자와 대응하는 이름을 할당한다.
관련 프로세스 식별자가 획득될 때, 서브젝트 코드(17a)는 프로세스 중 하나를 참조하는 경향이 있다. 예를 들어, 번역기 프로세스(19a)가
open ( /proc/ {process_identifier} /ctl)
와 같은 서브젝트 명령을 만날 수 있다. 여기서, {process_identifier}는 실행가능한 서브젝트(17a)가 동작할 것으로 예상하는 프로세스의 식별자이다. 예시적인 실시예에서, {process_identifier}는 제2 번역기 프로세스(19b)에 의해 번역될 프로세스의 식별자일 수 있다. 예를 들어, 이전 서브젝트 코드 getdents (/proc/) 명령이 위에서 설명된 바와 같이 만나서 취급된다면, 서브젝트 코드(17)는 프로세 스가 동작할 것이라는 것을 예상할 수 있다.
번역기 프로세스(19a)는 open 명령이 /proc 프로세스 파일시스템과 관련이 있다는 것을 인정하고, 프로세스 데이터 구조(190)를 참조하여 이 명령을 취급한다. 그러나 프로세스 데이터 구조(190)에 접근하고자 시도하기 전에, 번역기 프로세스(19a)는, 예시적인 실시예에서, 참조될 프로세스가 아직도 작동중인지를 확인한다.
번역기 프로세스(19a)는 서브젝트 getdents (/proc/) 명령을 만나고, 그리고 이전 getdents (/proc/) 명령에 대한 응답으로 제공되는 정보를 참조한 서브젝트 명령간의 기간에 대한 어떠한 제어도 갖지 않는다. 무엇보다, 번역기 프로세스(19a)는, 그것들을 참조하는 서브젝트 명령이 만날 때 여전히 동작하기 위해 프로세스 데이터 구조(190)에서 확인된 서브젝트 프로세스에 의존할 수 없다.
예를 들어, 프로세스 데이터 구조(190)에서 확인된 프로세스는 그 프로세스 식별자가 제공된 후 바로 예상 밖으로 크래시(crash)할 수 있다. 그리하여, 프로세스 데이터 구조(190)에 기초한 프로세스 식별자 리스트를 획득하는 번역기 프로세스(19a)와 프로세스 식별자의 순차적인 사용간의 기간에서, 프로세스 식별자 리스트는 무효가 될 수 있다.
다른 프로세스에 대한 서브젝트 코드(17)내의 각 참조에 있어서, 번역기 프로세스는 참조된 프로세스가 여전히 동작하는지를 더 확인할 수 있다. 예시적인 실시예에서, 번역기 프로세스(19a)는 프로세스 데이터 구조(190)내의 프로세스에 대한 소켓을 체크함으로써 이 확인을 실행할 수 있다.
위 예를 계속하면서, 번역기 프로세스(19a)는, 다음 서브젝트 명령을 계속하기 전에, open 명령에 의해 참조된 프로세스가 여전히 동작하는지 확인한다. 참조된 프로세스가 오픈될 때, 서브젝트 코드는 예를 들어 프로세스를 정지하는 것과 같은 추가적인 작업을 실행하도록 계속될 수 있다. 이 동작에 대한 전형적인 서브젝트 코드 명령은:
write (fd, PCSTOP)
이다. 여기서, fd는 질문에서 프로세스를 확인하는 파일 디스크립터(descriptor)이다.
다시, 번역기 프로세스(19a)가 이 서브젝트 명령을 적절하게 에뮬레이트하기 위해, 질문내 프로세스는 실질적으로 동작하고 있어야 한다. 그리하여, 번역기 프로세스(19a)는 질문내 프로세스 상태를 다시 체크한다. 예상되는 바와 같이 질문내 프로세스가 여전히 동작하고 있다면, 번역기 프로세스(19a)는 정지를 실행하기 위해 질문내 프로세스를 번역하는 번역기 프로세스를 요청할 수 있다.
본 예에서, 번역기 프로세스(19a)는 번역기 프로세스(19b)가 정지를 실행하도록 요청한다.
도 3에 도시된 예시적인 실시예는 제2 번역기 프로세스(19b)하에서 동작하는 프로세스를 제어하기 위해 프로세스 데이터 구조(190)를 참조하는 제1 번역기 프로세스(19a)를 포함한다 할지라도, 번역기 프로세스가 그 자체와 관련된 프로세스 데이터 구조내의 데이터를 참조할 환경이 있을 수 있다. 예를 들어, 프로세스 데이터 구조는 프로세스 메모리 맵핑상의 정보를 포함할 수 있고, 번역기는
open (/proc/ {process_identifier }/map)
과 같은 서브젝트 명령을 만날 수 있다. 여기서, 질문내 {process_identifier}는 자기-참조(self-referencing)이다.
임의의 지점에서 번역기 예가 참조된 프로세스가 예상 밖으로 정지된 동작을 갖는다는 것을 확립한다면, 번역기 프로세스는 에러 통지를 리턴할 수 있다. 번역기에 의해 제공되는 에러 통지는, 서브젝트 프로세서상에서 원래 동작할 때, 서브젝트 프로그램의 예상되는 행동과 일치할 수 있다.
프로세스 데이터 구조(190)내의 정보를 유지하기 위해, 번역기 프로세스는 프로세스 데이터 구조내에 존재하는 식별자를 오디트(audit)할 수 있다. 이 오디팅(auditing)은 모든 번역기 프로세스를 대신하여 하나의 번역기 프로세스에 의해 실행될 수 있거나, 오디팅 업무를 분배하기 위해 각 번역기 프로세스에 의해 실행될 수 있다. 대안적으로, 오디팅은 번역기 밖의 모듈에 의해 실행될 수 있으며, 이것은 타깃 프로세서상에서 동작하는 모든 번역기 프로세스에 대한 프로세스 데이터 구조를 유지하기 위해 동작한다. 그러한 모듈은 도 3에 도시된 바와 같이 오디터(auditor)(195)를 포함한다.
오디터(195)는 제1 번역기 프로세서하에서 동작하는 프로세스는 제2 번역기 프로세스하에서 동작하는 프로세스를 참조하고 있다는 것을 인식한다. 예를 들어, 제1 번역기 프로세스가 write (fd, PCSTOP)와 같은 서브젝트 명령을 만날 때, 오디터(195)는 제1 번역기 프로세스하에서 동작하는 프로세스가 제2 번역기 프로세스하에서 동작하는 프로세스를 참조하고 있다는 것을 기록한다. 이것은 write 명령이 오디터(195)를 통해 제2 번역기 프로세스와 통신한다면 편리하게 획득 수 있다. 편리하게, 오디터는 프로세스 데이터 구조(190)내의 이러한 참조들을 기록할 수 있다.
번역기 프로세스, 오디터 및 프로세스 데이터 구조 간의 메세지는, 위에서 언급한 바와 같이, 그리고 도 4에 도시된 경로를 통해 소켓을 이용하여 편리하게 통신될 수 있다.
참조된 프로세스가 여전히 동작하고 있다면, 제2 번역기 프로세스는 제1 번역기 프로세스로부터 메세지를 수신받고, 참조된 프로세스가 올바르게 정지되었다는 확인을 제1 번역기 프로세스에 통지한다. 또한, 이 통지는 오디터(195)를 경유하여 편리하게 전송될 수 있다. 그때, 오디터(195) 제1 번역기 프로세스하에 동작하는 프로세스가 제2 번역기 프로세스하에 동작하는 프로세스를 참조하였다는 기록을 삭제할 수 있다. 이 기록에 대한 삭제는, 이하 보다 상세한 설명된 바와 같이, 출력 프로세스 및 불안정 프로세스를 올바르게 취급하도록 번역기 프로세스 및 오디터를 돕는다.
참조가 수신될 때 참조된 프로세스가 출력되고 있다면, 제2 번역기 프로세스는 입력되는 메세지를 버리고, 그리고 정지는 제1 번역기 프로세스의 요청에 따라 실행되지 않는다. 그러나 제2 번역기 프로세스는 그것이 출력 프로세스내에 있다는 사실, 즉, 그것이 곧 더 이상 동작되지 않을 것이라는 사실을 오디터(195)에 통지한다. 이것은 그때서야 오디터가, 프로세스 데이터 구조로부터 정지된 프로세스의 상세한 내용을 제거하고; 참조된 프로세스가 출력되었다고 제2 번역기 프로세스에 통지하며; 제1 번역기 프로세스 하에 동작하는 프로세스는 제2 번역기 프로세스 하에 동작하는 프로세스를 참조한다는 기록을 삭제;하게 할 수 있다. 오디터(195)로부터 제1 번역기 프로세스로 패스된 통지는, write 명령이 실행되지 않았다는 것을 서브젝트 코드에게 확인시키면서, 제1 번역기 프로세스가 올바른 에러 메세지를 리턴할 수 있도록 한다.
임의의 지점에서 참조된 프로세스가 크래시되었다면, 제1 번역기 프로세스로부터 전송된 메세지는 수신되지 않는다. 제1 번역기 프로세스는 참조된 프로세스가 크래시되었다는 것을 전송할 수 없으며, 제2 번역기 프로세스로부터 응답을 기다리는 채 남는다. 이러한 환경에서, 오디터(195)는 제1 번역기 프로세스에 대한 문제를 해결할 수 있다. 오디터(195)는 프로세스로부터 프로세스로 패스된 메세지에 대한 기록을 체크하고, 프로세스 데이터 구조내에 기록된 프로세스가 동작하고 있다는 것을 체크한다. 오디터(195)가 프로세스가 더 이상 동작하고 있지 않다는 것을 검출하면, 그것은 프로세스 데이터 구조로부터 그 프로세스와 관련된 정보를 제거하고, 그리고 제1 프로세스가 제2 프로세스를 참조하였다는 기록을 제거한다. 그리고 나서, 오디터(195)는 참조된 프로세스가 더 이상 동작하고 있지 않다는 것을 확인시키기 위해 제1 번역기 프로세스에 통지를 리턴할 수 있다. 오디터(195)로부터 제1 번역기 프로세스로 패스된 통지는, 참조된 프로세스가 더 이상 동작하고 있지 않기 때문에 write 명령은 실행되지 않았다는 것을 서브젝트 코드에게 확인시키면서, 제1 번역기 프로세스가 올바른 에러 메시지를 리턴할 수 있다.
오디터(195)는 더 이상 동작하지 않는 프로세스와 관련된 메시지의 기록에 대한 프로세스 데이터 구조를 주기적으로 체크하고, 그러한 기록을 스테일(stale)로 주기적으로 제거한다. 오디터(195)는, 몇 개의 메세지가 프로세스간에 패스된 후, 대안적으로 또는 추가적으로 그러한 체크를 실행할 수 있다.
본 발명의 실시예에 대한 이해를 보다 더 돕기 위해, 도 5의 예시적인 방법도가 제공된다. 단계 S101에서, 번역기 프로세스는, 서브젝트 프로세서 상에서 실행될 때, 서브젝트 프로세스를 확립하는 수신된 서브젝트 코드 명령에 대한 응답으로 확립된다. 단계 S102에서, 확립된 번역기 프로세스는 접근가능한 프로세스 데이터 구조에 단계 S101에서 확립된 번역기 프로세스와 관련된 정보를 채운다. 단계 S103단계에서, 단계 S102 에서 채워진 데이터 구조는, 수신된 서브젝트 코드내의 서브젝트 프로세스 파일시스템내의 정보에 대한 참조의 응답으로, 참조된다.
여기서 설명된 예시적인 실시예는, 서브젝트 및 타깃 프로세스가 다른 경우에, 번역기내의 프로그램 코드 변환에 있어서 특히 유용하다. 그러나 서브젝트 및 타깃 프로세스가 양립가능한 프로세스 파일시스템을 갖는 OS하에서 동작하는 경우마저도, 예를 들어, 서브젝트 및 타깃 OS가 동일한 타입일 때, 그것은 번역기 프로세스가 다른 번역기 프로세스에 접근하도록 하는 것이 바람직할 수 있다.
여기서 언급된 예시적인 실시예는 서브젝트 프로세스 파일시스템에 대한 서브젝트 코드내의 참조가 올바르게 취급될 수 있도록 사용될 수 있는 번역기 프로세스에 대한 프로세스 데이터 구조를 확립하고 유지한다. 프로세스 데이터 구조내의 프로세스에 대한 상태를 주기적으로 체크하고, 그렇지 않으면, 더 이상 동작하지 않는 그것들을 주기적으로 제거하거나 그렇지 않으면 표시함으로써 번역기는 존재 하거나 크래시된 프로세스에 대한 서브젝트 코드내의 참조들을 올바르게 취급할 수 있다.
위에서 언급된 바와 같이, 번역될 서브젝트 코드가 잠정적으로 불안정한 프로세스를 포함하고 있다면 이것은 특별히 유용한다. 타깃 프로세스 파일시스템내의 서브젝트 및 타깃 프로세스를 구별하기 위해 타깃 OS를 수정하는 것은 불안정한 프로세스가, 번역기의 관점에서, 확인되고 올바르게 취급될 수 있도록 한다. 그러나 여기서 언급된 예시적인 실시예는 이러한 점을 편리하게 한다.
예시적인 실시예는 번역기가 프로그램 코드 변환동안 서브젝트 프로세스 파일시스템에 대한 참조를 확인하고 취급하도록 한다. 번역기는 서브젝트 파일시스템과 관련된 서브젝트 코드내의 명령 및 함수 호출(function call)을 인식하고 취급하기 위해 편리한 메커니즘을 제공한다. 그러나 다른 실시예에서, 그러한 명령 및 함수 호출을 인식하고 취급하기 위한 메커니즘은 다른 방법으로 수행될 수 있다는 것이 이해되어야 할 것이다. 예를 들어, 타깃 프로세스는 수정된 시스템 디렉토리와 함께 셋업되거나, 모든 시스템 호출 상의 디폴트로 셋업될 수 있다. 임의의 적절한 메커니즘은, 관련된 명령이 인식될 때, 서브젝트 프로그램 코드의 제어 흐름을 중단하기 위해 적용될 수 있다. 그때, 제어 흐름은 본 발명을 수행하기 위해 적합한 코드로 이동될 수 있다.
여기서 언급된 예시적인 실시예에 추가하여, 본 발명은 또한, 예를 들어, 번역기와 함께 사용되는 하드웨어 모듈 또는 그와 유사한 것과 같은, 분리된 모듈에서 수행될 수 있다. 모듈은, 프로그램 코드 변환을 실행하기 위해 유닛으로부터 논 리적으로 분리된 엔티티(entity)로 여전히 존재하며, 여기서 언급된 기능성을 번역기 프로세스에 제공할 수 있다. 위에서 언급된 바와 같이, 번역기의 실시예는 타깃 및 서브젝트 OS가 다른 환경에서 프로그램 코드 변환을 실행하는데 유용할 수 있다. 또한, 번역기의 실시예는 가속화 또는 에뮬레이션 목적으로 예를 들어, 특정 OS의 코드로부터 프로그램 코드 변환이 프로세스 데이터 구조를 이용함으로써 가능한 추가적인 제어 레벨을 가지만 동일한 OS하에서 동작하도록 하는 경우에, 프로그램 코드 변환을 실행하는데 유용할 수 있다.
여기서 사용된 용어 "번역기" 및 "번역기 프로세스"는 코드 변환 과정 동안 또는 코드 변환 때 동작할 수 있는 에뮬레이터, 가속기 또는 해석자(interpreter)와 같은 관련된 기기를 망라하기 위해 판독되어야 한다. 특히 여기서 언급된 번역기 프로세스는 사용될 수 있다.
본 발명의 기기 및 방법에 대한 다른 특징은 위 실시예 각각에서 분리적으로 설명되었다. 그러나, 여기서 언급된 각 실시예의 분리된 특징은 여기서 언급된 다른 실시예와 결합될 수 있다는 것은 본 발명의 발명자의 완전한 의도이다.
여기서 언급된 방법은 프로그램 코드 변환에서 지향되고, 그리고 서브젝트 프로그램 코드의 타깃 코드로의 동적인 이진 번역을 제공하는 동작 시간(run-time) 번역기와 연결되면서 특히 유용한다. 본 발명은 또한, 여기서 정의된 모든 방법들을 수행하는 컴퓨터 시스템의 일부로서 동작하는 번역기 기기까지 확장된다. 또한, 본 발명은 여기서 정의돈 모든 방법을 실행하기 위해 컴퓨터에 의해 수행될 수 있는 명령을 거기에 기록하는 컴퓨터-판독가능한 저장매체에까지 확장된다.
본 발명의 적어도 몇몇 실시예는 단독으로 전용 하드웨어를 이용하여 구성될 수 있고, 여기서 사용되는 '모듈' 또는 '유닛'과 같은 용어는, 어떤 일을 수행하는, FPGA(Field Programmable Gate Array) 또는 ASIC(Application Specific Integrated Circuit)와 같은, 하드웨어 디바이스를 포함할 수도 있지만, 이에 한정되지 않는다. 대안적으로, 본 발명의 요소는 어드레스가능한 저장 매체에 있을 수도 있도록 구성될 수 있지만, 하나 이상의 프로세서상에서 실행하도록 구성될 수 있다. 그리하여, 본 발명의 기능적 요소는, 예를 들어, 소프트웨어 요소, 오브젝트-지향 소프트웨어 요소, 클래스 요소 및 태스크 요소, 프로세스, 함수, 특징, 절차, 서브루티, 프로그램 코드의 세그먼트, 드라이버, 펌웨어, 마이크로코드, 회로, 데이터, 데이터 베이스, 데이터 구조, 테이블, 어레이 및 변수들과 같은 요소를 포함한다. 무엇보다, 바람직한 실시예가 이하 언급된 요소, 모듈 및 유닛에 대한 참조와 함께 설명되었다 할지라도, 그러한 기능적인 요소는 더 작은 요소로 결합되고, 추가적인 요소로 분리될 수 있다.
몇몇 예시적인 실시예들이 도시되고 언급되었지만, 당업자들은 단지 설명된 예시적인 실시예의 여러 변경들 및 변형들이 본 발명의 범위 및 사상을 벗어나지 않고 구성 수 있다는 것을 이해할 수 있을 것이다. 그리하여, 첨부된 청구항에 내에서, 본 발명은 여기서 특별히 언급된 것과 다른 것으로 실행될 수 있다는 것을 이해하여야 할 것이다.
몇몇 바람직한 실시예가 도시되고 설명되었다 하더라도, 첨부된 청구항에 정의된 바와 같이, 다양한 변경 및 수정이 본 발명의 범위를 벗어남이 없이 만들어 질 수 있다는 것을 당업자에 의해 인정되어야 할 것이다.
주의해야 할 점은 이 출원과 관련하여 이 명세서와 동시에 또는 이전에 제출되고 이 출원과 관련하여 이 명세서와 함께 공개되고 이 명세서와 함께 공개 열람에 오픈된 모든 서류들 및 문서들에 있고, 모든 이와 같은 서류들 및 문서들의 내용들은 참조로 본원에 포함된다.
이 명세서(첨부 청구항들, 요약 및 도면들을 포함)에 개시된 모든 특징들 및/또는 그렇게 개시된 임의의 방법 또는 공정들의 모든 단계들은 이와 같은 특징들 및/또는 단계들의 적어도 일부가 상호 배타적인 조합들을 제외하고, 어떠한 조합으로도 조합될 수 있다.
이 명세서(첨부 청구항들, 요약 및 도면들을 포함)에 개시된 각각의 특징은 달리 명확하게 설명되지 않는다면, 동일, 등가 또는 유사 목적을 달성하는 다른 특징들에 의해 대체될 수 있다. 따라서, 달리 명확하게 설명되지 않는다면, 개시된 각 특징은 등가 또는 유사 특징들만의 일반 시리즈의 일 예이다.
본 발명은 상기 실시예(들)의 상세들로 제한되지 않는다. 본 발명은 이 명세서(첨부 청구항들, 요약 및 도면들을 포함)에 개시된 특징들의 어느 신규한 하나 또는 임의의 신규의 조합, 또는 그렇게 개시된 임의의 방법 또는 공정의 어느 신규의 하나 또는 어느 신규의 조합으로 확대된다.

Claims (25)

  1. 타깃 프로세서, 및
    서브젝트 프로세서상에서 수신된 실행용 서브젝트 코드 명령에 대한 응답으로 확립된 번역기 프로세스;를 포함하고,
    여기서, 상기 번역기 프로세스는,
    (a) 상기 확립된 번역기 프로세스에 대한 정보를 프로세서 데이터 구조를 채우고(populate); 그리고
    (b) 서브젝트 프로세스 파일시스템내의 정보에 대한 수신된 서브젝트 코드에서 만들어진 참조에 대한 응답으로 단계 (a)의 상기 프로세스 데이터 구조를 참조하는 컴퓨터 기기.
  2. 제 1항에 있어서, 상기 번역기 프로세스는,
    서브젝트 프로세서상에서 실행될 때, 각 수신된 서브젝트 코드 명령에 대한 응답으로 서브젝트 프로세서를 확립하는 추가적인 번역기 프로세스를 확립하는 컴퓨터 기기.
  3. 제 2항에 있어서, 각 번역기 프로세스는 제1 항의 번역기 프로세스인 컴퓨터 기기.
  4. 제 3항에 있어서, 각 번역기 프로세스는 공통 프로세스 데이터 구조를 채우고 공통 프로세스 데이터구조를 참조하는 컴퓨터 기기.
  5. 제 4항에 있어서, 상기 프로세스 데이터 구조는 (a) 각 번역기 프로세스에 접근가능한 디렉토리; 및 (b) 각 번역기 프로세스에 접근가능한 공유된 메모리 영역; 중 하나 또는 모두를 포함하는 컴퓨터 기기.
  6. 제 1항에 있어서, 상기 번역기 프로세스는 상기 프로세스 데이터 구조에 각 번역기 프로세스에 대한 프로세스 식별자를 채우며, 상기 프로세스 식별자는, 서브젝트 프로세서상에서 실행될 때, 상기 수신된 서브젝트 코드 명령에 대한 응답으로 확립된 상기 서브젝트 프로세스에 할당되는 것과 대응하는 컴퓨터 기기.
  7. 제 1항에 있어서, 상기 프로세스 데이터 구조에 존재하는 정보를 갖는 번역기 프로세스의 상태를 체크하고, 그리고 더 이상 동작하지 않는 번역기 프로세스와 관련된 정보를 상기 프로세스 데이터 구조로부터 제거하는 오디터(auditor)를 더 포함하는 컴퓨터 기기.
  8. 제 7항에 있어서, 상기 오디터는 상기 프로세스 데이터 구조에 존재하는 정보를 갖는 번역기 프로세스의 상태를 주기적으로 체크하는 컴퓨터 기기.
  9. 제 7항에 있어서, 상기 오디터는 상기 번역기 프로세스의 일부를 포함하는 컴퓨터 기기.
  10. 제 1항에 있어서, 오디터를 더 포함하고,
    상기 오디터는, 상기 프로세스 데이터 구조내의 정보에 대한 참조가 만들어졌다는 것을 기록하는 컴퓨터 기기.
  11. 제 10항에 있어서, 상기 오디터는 상기 참조를 만드는 상기 번역기 프로세스에 대한 식별자 및 참조된 정보를 갖는 번역기 프로세서에 대한 관련된 식별자를 기록하는 컴퓨터 기기.
  12. 제 11항에 있어서, 상기 오디터는 상기 프로세스 데이터 구조내의 상기 식별자를 기록하는 컴퓨터 기기.
  13. 제 12항에 있어서, 상기 오디터는, 참조된 정보를 갖는 프로세스가 더 이상 동작하지 않는 것으로 결정될 때 그것이 기록했던 상기 데이터를 상기 프로세스 데이터 구조로부터 제거하는 컴퓨터 기기.
  14. 제 1항에 있어서, 상기 번역기 프로세스는, 그것이 존재할 때, 상기 프로세스 데이터 구조로부터 그 자체와 관련된 정보를 제거하는 컴퓨터 기기.
  15. 제 1항에 있어서, 상기 타깃 프로세서는 상기 수신된 서브젝트 코드가 실행용으로 있는 상기 서브젝트 프로세서와 동일 타입을 갖는 컴퓨터 기기.
  16. 제 1항에 있어서, 상기 번역기 프로세스는 상기 타깃 프로세서상의 실행용 타깃 코드 명령을 생성하는 컴퓨터 기기.
  17. 서브젝트 프로세서상의 실행용 서브젝트 코드로부터 타깃 프로세서상의 실행용 타깃 코드로의 프로그램 코드 변환과 관련된 프로세스 파일시스템을 관리하는 방법에 있어서,
    (a) 수신된 서브젝트 코드 명령에 대한 응답으로, 서브젝트 프로세서상에서 실행될 때, 서브젝트 프로세스를 확립하는 번역기 프로세스를 확립하는 단계;
    (b) 상기 수신된 서브젝트 코드에 대한 응답으로 확립된 하나 이상의 번역기 프로세스에 관한 정보를 상기 번역기 프로세스로 접근가능한 프로세스 데이터 구조를 채우는(populate하는) 단계; 및
    (c) 수신된 서브젝트 코드내 서브젝트 프로세스 파일시스템내의 정보에 대한 참조의 응답으로 단계(b)에 채워진 상기 데이터 구조를 참조하는 단계;를 포함하는 방법.
  18. 제 17항에 있어서, 단계 (b)에서 채워진 상기 프로세스 데이터 구조는 번역 기 데이터 구조인 방법.
  19. 제 17항에 있어서, 상기 프로세스 데이터 구조에 저장된 정보를 갖는 프로세스의 상태를 체크하는 단계, 및 더 이상 동작하지 않는 번역기 프로세스와 관련된 정보를 상기 프로세스 데이터 구조로부터 제거하는 단계를 더 포함하는 방법.
  20. 제 19항에 있어서, 상기 데이터 구조에 저장된 정보를 갖는 상기 프로세스의 상태를 체크하는 단계는 주기적으로 실행되는 방법.
  21. 제 17항에 있어서,
    (d) 상기 참조를 만드는 상기 번역기 프로세스에 대한 식별자 및 참조된 정보를 갖는 상기 번역기 프로세스에 대한 식별자를 기록함으로써 상기 프로세스 데이터 구조내 정보에 대한 참조가 만들어졌다는 것을 기록하는 단계;를 더 포함하는 방법.
  22. 제 21항에 있어서, 참조된 정보를 갖는 상기 번역기 프로세스가 더 이상 동작되지 않을 때 단계 (d)에서 기록된 데이터를 상기 프로세스 데이터 구조로부터 제거하는 단계;를 더 포함하는 방법.
  23. 제 17항에 있어서, 더 이상 동작하지 않는 프로세스와 관련된 정보를 상기 프로세스 데이터 구조로부터 제거하는 단계;를 더 포함하는 방법.
  24. 제 17항의 방법을 실행하기 위해 컴퓨터에 의해 수행가능한 명령을 기록한 컴퓨터-판독가능한 매체.
  25. 서브젝트 프로세서상의 실행용 서브젝트 코드를 수신하고 상기 타깃 프로세서상의 실행용 타깃 코드를 생성하는 번역기 기기에 있어서, 상기 번역기는
    (a) 수신된 서브젝트 코드에 대한 응답으로 확립된 하나 이상의 번역기 프로세스에 관한 정보를 프로세스 데이터 구조를 채우고; 그리고,
    (b) 서브젝트 프로세스 파일시스템내의 정보에 대한 수신된 서브젝트 코드내의 참조에 대한 응답으로 단계(a)의 상기 프로세스 데이터 구조를 참조하는 번역기 기기.
KR1020097009184A 2006-10-02 2007-10-01 프로그램 코드 변환에 관한 프로세스 파일시스템을 관리하는 방법 및 기기 KR101244153B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
GB0619402A GB2442497B (en) 2006-10-02 2006-10-02 Method and apparatus for administering a process filesystem with respect to program code conversion
GB0619402.1 2006-10-02
US85454306P 2006-10-26 2006-10-26
US60/854,543 2006-10-26
PCT/GB2007/050598 WO2008041026A1 (en) 2006-10-02 2007-10-01 Method and apparatus for administering a process filesystem with respect to program code conversion

Publications (2)

Publication Number Publication Date
KR20090085048A true KR20090085048A (ko) 2009-08-06
KR101244153B1 KR101244153B1 (ko) 2013-03-14

Family

ID=37435059

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097009184A KR101244153B1 (ko) 2006-10-02 2007-10-01 프로그램 코드 변환에 관한 프로세스 파일시스템을 관리하는 방법 및 기기

Country Status (8)

Country Link
US (1) US8286144B2 (ko)
EP (1) EP2069926A1 (ko)
JP (1) JP5031032B2 (ko)
KR (1) KR101244153B1 (ko)
CN (1) CN101558382B (ko)
GB (1) GB2442497B (ko)
TW (1) TWI447649B (ko)
WO (1) WO2008041026A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023177024A1 (ko) * 2022-03-17 2023-09-21 주식회사 넷아스 아키텍처 변경을 위한 소스 변환 솔루션 제공 장치 및 방법

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
BRPI1102315A8 (pt) * 2011-08-04 2017-10-10 Neo Plastic Embalagens Plasticas Ltda Geomembrana produzida com misturas de polietileno de alta densidade, polietileno linear de baixa densidade e polietileno de baixa densidade
US20140289280A1 (en) * 2013-03-15 2014-09-25 Perforce Software, Inc. System and Method for Bi-directional Conversion of Directed Acyclic Graphs and Inter-File Branching
US9223553B2 (en) * 2013-09-26 2015-12-29 Intel Corporation Methods and apparatus to validate translated guest code in a dynamic binary translator

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0695891A (ja) 1992-09-10 1994-04-08 Toshiba Corp インタフェース方式
JPH11345134A (ja) 1998-06-03 1999-12-14 Hitachi Ltd オペレーティングシステム
ATE293808T1 (de) 1998-10-10 2005-05-15 Transitive Ltd Programm-kode-umwandlung
US7103914B2 (en) * 2002-06-17 2006-09-05 Bae Systems Information Technology Llc Trusted computer system
US7127592B2 (en) * 2003-01-08 2006-10-24 Sun Microsystems, Inc. Method and apparatus for dynamically allocating registers in a windowed architecture
US7543284B2 (en) * 2003-04-22 2009-06-02 Transitive Limited Partial dead code elimination optimizations for program code conversion
US7299460B2 (en) * 2003-05-29 2007-11-20 Nec Corporation Method and computer program for converting an assembly language program for one processor to another
GB0316531D0 (en) * 2003-07-15 2003-08-20 Transitive Ltd Method and apparatus for performing native binding
GB0316532D0 (en) * 2003-07-15 2003-08-20 Transitive Ltd Method and apparatus for partitioning code in program code conversion
US7805710B2 (en) 2003-07-15 2010-09-28 International Business Machines Corporation Shared code caching for program code conversion
JP2005099968A (ja) 2003-09-24 2005-04-14 Hitachi Ltd 仮想ファイルシステムを有する計算機システム
GB2424092A (en) * 2005-03-11 2006-09-13 Transitive Ltd Switching between code translation and execution using a trampoline
KR101244104B1 (ko) * 2006-10-02 2013-03-18 인터내셔널 비지네스 머신즈 코포레이션 컴퓨터 시스템 및 레지스터 윈도우 아키텍쳐를 지원하도록 컴퓨터 시스템을 구현하는 방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023177024A1 (ko) * 2022-03-17 2023-09-21 주식회사 넷아스 아키텍처 변경을 위한 소스 변환 솔루션 제공 장치 및 방법

Also Published As

Publication number Publication date
US8286144B2 (en) 2012-10-09
KR101244153B1 (ko) 2013-03-14
WO2008041026A1 (en) 2008-04-10
JP5031032B2 (ja) 2012-09-19
GB0619402D0 (en) 2006-11-08
US20080082971A1 (en) 2008-04-03
GB2442497B (en) 2010-03-31
TW200834419A (en) 2008-08-16
GB2442497A (en) 2008-04-09
CN101558382B (zh) 2015-02-25
EP2069926A1 (en) 2009-06-17
CN101558382A (zh) 2009-10-14
JP2010506251A (ja) 2010-02-25
TWI447649B (zh) 2014-08-01

Similar Documents

Publication Publication Date Title
US11599346B2 (en) Accessing a migrated member in an updated type
US6907519B2 (en) Systems and methods for integrating emulated and native code
US10175998B2 (en) Container-based language runtime loading an isolated method
US10303449B2 (en) Compiling non-native constants
US20070169070A1 (en) In-kernel virtual machine for low overhead startup and low resource usage
US20200272482A1 (en) Unikernel provisioning
US20210055941A1 (en) Type-constrained operations for plug-in types
KR101244153B1 (ko) 프로그램 코드 변환에 관한 프로세스 파일시스템을 관리하는 방법 및 기기
US10853110B2 (en) Constructor accessibility checks for deserialization
US10802855B2 (en) Producing an internal representation of a type based on the type's source representation
KR101308781B1 (ko) 프로그램 코드 변환과 관련된 링크된 함수 호출을 동적으로 처리하는 방법 및 장치
US10802836B2 (en) Intelligently determining a virtual machine configuration during runtime based on garbage collection characteristics
US10521200B2 (en) Unambiguous proxying of interface methods
US11971817B2 (en) Managing lifecycles of sets of foreign resources
US11726786B2 (en) Lazy copying of runtime-managed stack frames
US11568047B2 (en) Distinguished nest-based access control

Legal Events

Date Code Title Description
N231 Notification of change of applicant
N231 Notification of change of applicant
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20160229

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20170227

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20180227

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20190227

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20200227

Year of fee payment: 8