KR102023668B1 - 공유된 객체 레벨에 대한 이진 트랜슬레이션 - Google Patents

공유된 객체 레벨에 대한 이진 트랜슬레이션 Download PDF

Info

Publication number
KR102023668B1
KR102023668B1 KR1020177027874A KR20177027874A KR102023668B1 KR 102023668 B1 KR102023668 B1 KR 102023668B1 KR 1020177027874 A KR1020177027874 A KR 1020177027874A KR 20177027874 A KR20177027874 A KR 20177027874A KR 102023668 B1 KR102023668 B1 KR 102023668B1
Authority
KR
South Korea
Prior art keywords
dynamically loaded
shared object
host platform
library
platform
Prior art date
Application number
KR1020177027874A
Other languages
English (en)
Other versions
KR20170130447A (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 KR20170130447A publication Critical patent/KR20170130447A/ko
Application granted granted Critical
Publication of KR102023668B1 publication Critical patent/KR102023668B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0712Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a virtual computing platform, e.g. logically partitioned systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/76Adapting program code to run in a different environment; Porting
    • 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/45516Runtime code conversion or optimisation
    • G06F9/4552Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM
    • 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/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

Abstract

이진 트랜슬레이션을 위한 기술들이 개시된다. 호스트 플랫폼은 호스트와 상이한 게스트 플랫폼용 프로그램을 수신한다. 프로그램은 공유된 객체들 또는 동적으로 로딩된 라이브러리들의 세트를 사용하고 호스트 플랫폼과 호환가능하지 않다. 호스트 플랫폼은, 호스트 플랫폼이 세트 내에 있는 특정 공유된 객체 또는 동적으로 로딩된 라이브러리와 공통 외부 인터페이스를 구현하는 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지는지를 결정한다. 호스트 플랫폼이 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지면, 호스트 플랫폼은 프로그램의 실행을 위하여 특정 공유된 객체 또는 동적으로 로딩된 라이브러리 대신 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 사용한다. 호스트 플랫폼이 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지지 않으면, 호스트 플랫폼은 프로그램의 실행을 위하여 특정 공유된 객체 또는 동적으로 로딩된 라이브러리의 이진 트랜슬레이션을 수행한다.

Description

공유된 객체 레벨에 대한 이진 트랜슬레이션
[0001] 본 출원은 위임 도킷 번호 제 096553-0074호이고, 발명의 명칭이 "BINARY TRANSLATION INTO NATIVE CLIENT"인, 본원과 동시에 출원된 국제 특허 출원에 관련되고, 국제 특허 출원의 전체 개시내용은 인용에 의해 본원에 통합된다.
[0002] 청구대상 기술은 일반적으로 이진 트랜슬레이션(binary translation) 기술들에 관한 것이다. 소프트웨어 프로그램은 보통 특정 하드웨어 아키텍처, 특정 오퍼레이팅 시스템, 및/또는 특정 라이브러리(library)들을 포함할 수 있는 특정 플랫폼을 위해 컴파일링된다. 사용자는 상이한 하드웨어 아키텍처, 상이한 오퍼레이팅 시스템 또는 상이한 라이브러리들을 가지는, 특정 플랫폼과 상이한 다른 플랫폼상에서 이 소프트웨어 프로그램을 실행하기를 원할 수 있다. 그 경우에, 프로그램이 컴파일링되는 플랫폼은 게스트(guest)로 지칭되고, 코드가 실행되는 플랫폼은 호스트로 지칭된다. 호스트 프로그램상에서 실행을 위해 프로그램을 조정하기 위하여, 호스트 플랫폼은 특정 게스트 플랫폼을 (소프트웨어적으로) 에뮬레이팅(emulate)하도록 프로그램될 수 있고, 그리고 이진 트랜슬레이션은 소프트웨어 프로그램을 자신의 오리지널 형태로부터 새로운 소프트웨어 프로그램으로 트랜슬레이팅하도록 수행될 수 있고, 새로운 소프트웨어 프로그램은 에뮬레이팅된 특정 게스트 플랫폼과 함께 호스트 플랫폼상에서 실행될 수 있다. 이진 트랜슬레이션 시, 특정 게스트 플랫폼에 대한 이진 코드는 호스트 플랫폼용 이진 코드로 트랜슬레이팅된다.
[0003] 일부 양상들에 따라, 청구대상 기술은 방법에 관련된다. 방법은, 호스트 플랫폼에서, 호스트 플랫폼과 상이한 특정 게스트 플랫폼용으로 쓰여진 소프트웨어 프로그램을 수신하는 단계를 포함하고, 소프트웨어 프로그램은 공유된 객체들 또는 동적으로 로딩된 라이브러리들의 세트를 사용하고, 그리고 소프트웨어 프로그램은 호스트 플랫폼과 호환가능하지 않다. 방법은 호스트 플랫폼 내에 특정 게스트 플랫폼을 에뮬레이팅하는 단계를 포함한다. 방법은, 호스트 플랫폼이 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지는지를 결정하는 단계를 포함하고, 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리는, 공유된 객체들 또는 동적으로 로딩된 라이브러리들의 세트 내에 있는 특정 공유된 객체 또는 동적으로 로딩된 라이브러리와 공통 외부 인터페이스를 구현한다. 방법은, 호스트 플랫폼이 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지면, 호스트 플랫폼 내에서의 소프트웨어 프로그램의 실행을 위하여 특정 공유된 객체 또는 동적으로 로딩된 라이브러리 대신 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 사용하는 단계를 포함한다. 방법은, 호스트 플랫폼이 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지지 않으면, 호스트 플랫폼 내에서의 소프트웨어 프로그램의 실행을 위하여 특정 공유된 객체 또는 동적으로 로딩된 라이브러리의 이진 트랜슬레이션을 수행하는 단계를 포함한다.
[0004] 일부 양상들에 따라, 청구대상 기술은 명령들 및 데이터를 저장하는 비-일시적 컴퓨터-판독가능 매체에 관련된다. 명령들은, 호스트 플랫폼에서, 호스트 플랫폼과 상이한 특정 게스트 플랫폼용으로 쓰여진 소프트웨어 프로그램을 수신하기 위한 코드를 포함하고, 소프트웨어 프로그램은 공유된 객체들 또는 동적으로 로딩된 라이브러리들의 세트를 사용하고, 그리고 소프트웨어 프로그램은 호스트 플랫폼과 호환가능하지 않다. 명령들은, 호스트 플랫폼이 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지는지를 결정하기 위한 코드를 포함하고, 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리는 공유된 객체들 또는 동적으로 로딩된 라이브러리들의 세트 내에 있는 특정 공유된 객체 또는 동적으로 로딩된 라이브러리와 공통 외부 인터페이스를 구현한다. 명령들은, 호스트 플랫폼이 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지면, 호스트 플랫폼 내에서의 소프트웨어 프로그램의 실행을 위하여 특정 공유된 객체 또는 동적으로 로딩된 라이브러리 대신 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 사용하기 위한 코드를 포함한다. 명령들은, 호스트 플랫폼이 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지지 않으면, 호스트 플랫폼 내에서의 소프트웨어 프로그램의 실행을 위하여 특정 공유된 객체 또는 동적으로 로딩된 라이브러리의 이진 트랜슬레이션을 수행하기 위한 코드를 포함한다.
[0005] 일부 양상들에 따라, 청구대상 기술은 시스템에 관련된다. 시스템은 하나 또는 그 초과의 프로세서들 및 명령들 및 데이터를 저장하는 메모리를 포함한다. 명령들은, 호스트 플랫폼에서, 호스트 플랫폼과 상이한 특정 게스트 플랫폼용으로 쓰여진 소프트웨어 프로그램을 수신하기 위한 코드를 포함하고, 소프트웨어 프로그램은 공유된 객체들 또는 동적으로 로딩된 라이브러리들의 세트를 사용하고, 그리고 소프트웨어 프로그램은 호스트 플랫폼과 호환가능하지 않다. 명령들은 호스트 플랫폼 내의 특정 게스트 플랫폼을 에뮬레이팅하기 위한 코드를 포함한다. 명령들은, 호스트 플랫폼이 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지는지를 결정하기 위한 코드를 포함하고, 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리는 공유된 객체들 또는 동적으로 로딩된 라이브러리들의 세트 내에 있는 특정 공유된 객체 또는 동적으로 로딩된 라이브러리와 공통 외부 인터페이스를 구현한다. 명령들은, 호스트 플랫폼이 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지면, 특정 공유된 객체 또는 동적으로 로딩된 라이브러리 대신 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리에 링크하기 위하여 소프트웨어 프로그램의 링크들을 동적으로 수정함으로써, 호스트 플랫폼 내에서의 소프트웨어 프로그램의 실행을 위하여 특정 공유된 객체 또는 동적으로 로딩된 라이브러리 대신 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 사용하기 위한 코드를 포함한다. 명령들은, 호스트 플랫폼이 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지지 않으면, 호스트 플랫폼 내에서의 소프트웨어 프로그램의 실행을 위하여 특정 공유된 객체 또는 동적으로 로딩된 라이브러리의 이진 트랜슬레이션을 수행하기 위한 코드를 포함한다.
[0006] 청구대상 기술의 다른 구성들이 다음 상세한 설명으로부터 쉽게 자명하게 될 것이 이해되고, 여기서 청구대상 기술의 다양한 구성들은 예시로써 도시되고 설명된다. 실현될 바와 같이, 모두가 청구대상 기술의 범위에서 벗어남이 없이, 청구대상 기술은 다른 그리고 상이한 구성들일 수 있고 이의 몇몇 세부사항들은 다양한 다른 측면들에서 수정될 수 있다. 따라서, 도면들 및 상세한 설명은 제한으로서가 아닌 사실상 예시로서 간주될 것이다.
[0007] 청구대상 기술의 특징들은 첨부된 청구항들에서 설명된다. 그러나, 설명의 목적을 위하여, 개시된 청구대상의 몇몇 양상들은 다음 도면들에서 설명된다.
[0008] 도 1a는 공유된 객체 레벨 상에서 이진 트랜슬레이션과 관련될 수 있는 예시적인 게스트 머신을 예시한다.
[0009] 도 1b는 공유된 객체 레벨 상에서 이진 트랜슬레이션과 관련될 수 있는 예시적인 호스트 머신을 예시한다.
[0010] 도 2는, 공유된 객체 레벨 상에서의 이진 트랜슬레이션이 완료될 수 있게 하는 예시적인 프로세스를 예시한다.
[0011] 도 3은, 청구대상 기술의 일부 구현들을 구현하는 예시적인 전자 시스템을 개념적으로 예시한다.
[0012] 아래에서 설명된 상세한 설명은 청구대상 기술의 다양한 구성들의 설명으로서 의도되고 그리고 청구대상 기술이 실시될 수 있는 유일한 구성들을 표현하도록 의도되지 않는다. 첨부된 도면들은 본원에 통합되고 상세한 설명의 일부를 구성한다. 상세한 설명은 청구대상 기술의 완전한 이해를 제공하는 목적을 위하여 특정 세부사항들을 포함한다. 그러나, 청구대상 기술이 본원에 설명된 특정 세부사항들로 제한되지 않고 이들 특정 세부사항들 없이 실시될 수 있다는 것은 명확하고 자명할 것이다. 일부 경우들에서, 특정 구조들 및 컴포넌트들은 청구대상 기술의 개념들을 모호하게 하는 것을 방지하기 위하여 블록 다이어그램 형태로 도시된다.
[0013] 본원에 사용된 바와 같이, "플랫폼"은 소프트웨어가 실행되는데 필요한 환경을 지칭할 수 있다. 환경은 하드웨어 아키텍처, 오퍼레이팅 시스템, 및/또는 하나 또는 그 초과의 라이브러리들을 포함할 수 있다. 예시적인 플랫폼들은 ARM® 하드웨어에 대한 안드로이드(Android)® 오퍼레이팅 시스템, x86® 하드웨어에 대한 리눅스(Linux)® 오퍼레이팅 시스템, 및 X86® 하드웨어에 대한크롬(Chrome) OS®에서 실행되는 네이티브 클라이언트(Native Client)를 포함한다. "이진 트랜슬레이션"은 하나의 플랫폼으로부터 이진 코드를 취하고 그리고 이를 다른 플랫폼을 위한 이진 코드로 전환하기 위한 프로세스를 지칭할 수 있다. "공유된 객체", "공유된 라이브러리" 또는 "동적 라이브러리"는 하나 또는 그 초과의 실행가능 파일들에 의해 공유되거나 액세스되도록 의도된 파일일 수 있다. "공유된 객체", "공유된 라이브러리" 또는 "동적 라이브러리"는 로드 시간 또는 실행 시간 시 실행가능 파일들 또는 다른 객체들/라이브러리들과 링크된다. "마샬링(marshalling)"은 하나의 플랫폼상에서 사용되는 데이터 포맷으로부터 다른 플랫폼상에서 사용되는 데이터 포맷으로 객체의 메모리 표현을 변환하는 프로세스를 지칭할 수 있다. 게다가, 위의 각 용어들은 평범하고 일반적인 의미를 포함한다.
[0014] 애플리케이션은 플랫폼상에서 실행될 수 있다. 애플리케이션은 메인 실행가능 파일 및 제로 또는 그 초과의 동적 라이브러리들을 가질 수 있다. 동적 라이브러리들은 애플리케이션-특정 또는 공통일 수 있다. 애플리케이션-특정 동적 라이브러리들은 애플리케이션-특정 작동을 구현하고 애플리케이션 벤더(vendor)에 의해 애플리케이션과 함께 배포될 수 있다. 공통 동적 라이브러리들은 많은 상이한 애플리케이션들이 필요로 할 수 있는 작동(예컨대, 디스플레이 유닛상에 이미지들을 디스플레이하는 것)을 구현한다. 그런 라이브러리들은 보통 그 자신의 벤더들(예컨대, 오퍼레이팅 시스템의 개발자 또는 하드웨어의 개발자)에 의해 별도로 배포된다. 일부 경우들에서, 공통 동적 라이브러리는 많은 상이한 오퍼레이팅 시스템들에 대해 버전들을 가질 수 있다.
[0015] 특정 오퍼레이팅 시스템상에서 함께 존재하는 메인 실행가능 파일 및 동적 라이브러리들은 펑션(function) 호들을 만듦으로써 서로 통신할 수 있다. 메인 실행가능 파일 및 동적 라이브러리들은 시스템 호들을 만듦으로써 오퍼레이팅 시스템과 통신할 수 있다.
[0016] 메인 실행가능 파일, 동적 라이브러리들 및 오퍼레이팅 시스템은 특정 하드웨어 상에서 실행된다. 메인 실행가능 파일, 동적 라이브러리들, 및 오퍼레이팅 시스템은 이런 특정 하드웨어용으로 컴파일링되고, 그리고 특정 하드웨어의 명령 세트를 사용하여 이진 코드로 표현되는 소프트웨어들이다.
[0017] 이진 트랜슬레이션은 하나의 플랫폼(게스트 플랫폼)으로부터 이진 코드를 취하고 이를 다른 플랫폼(호스트 플랫폼 또는 타겟 플랫폼)용 이진 코드로 전환하는 프로세스를 지칭할 수 있다. 이진 트랜슬레이션의 하나의 목적은, 애플리케이션의 소스 코드에 액세스하여 소스 코드를 리컴파일링함이 없이, 호스트 플랫폼상에서 게스트 플랫폼용으로 원래 컴파일링된 애플리케이션들을 실행하는 것이다.
[0018] 일부 경우들에서, 전체 머신 에뮬레이션의 경우, 이진 트랜슬레이션은 오리지널 메인 실행가능, 동적 라이브러리들, 및 오퍼레이팅 시스템 이미지를 취하고 위의 모두를 호스트 하드웨어 상에서 실행함으로써 달성된다. 이들 경우들에서, 이진 트랜슬레이션은 호스트 하드웨어 상에서 게스트 하드웨어의 명령 세트를 에뮬레이팅하기 위하여 사용된다. 이런 접근법의 이득은 매우 정확한 게스트 에뮬레이션이다. 단점은, 게스트 오퍼레이팅 시스템 및 라이브러리들을 포함하는 많은 게스트 코드가 이진 트랜슬레이팅되어야 하기 때문에, 비교적 느린 성능이다.
[0019] 일부 경우들에서, 시스템 호 에뮬레이션의 경우, 이진 트랜슬레이션은 게스트로부터 오리지널 메인 실행가능 및 동적 라이브러리들을 취하고 이들을 호스트와 연관된 상이한 오퍼레이팅 시스템 또는 상이한 하드웨어 상에서 실행하는 것에 의해 달성된다. 이들 경우들에서, 오리지널 게스트 프로그램 및 이의 동적 라이브러리들은 게스트 시스템 호들까지 이진 트랜슬레이팅되고, 그리고 게스트 시스템 호들은 호스트 시스템 호들을 통하여 에뮬레이팅된다. 이런 접근법은 이전 것과 같이 정확하게 게스트 코드를 에뮬레이팅하지 않지만, 오리지널 게스트 오퍼레이팅 시스템이 이진 트랜슬레이팅되지 않기 때문에 더 효율적일 수 있다. 또한, 애플리케이션에 의해 요구되는 유일한 시스템 호들은 호스트에서 에뮬레이팅될 수 있고, 이는 복잡성을 크게 감소시킨다.
[0020] 청구대상 기술은 더 나아가는 것을 포함할 수 있다. 구체적으로, 청구대상 기술은 게스트로부터 오리지널 메인 실행가능 파일 및 애플리케이션-특정 동적 라이브러리들을 취하고 이들을 원래 호스트로부터 발생하는 공통 동적 라이브러리들과 함께 실행하는 것을 포함할 수 있다. 이진 트랜슬레이션은 (원래 게스트로부터의) 애플리케이션-특정 동적 라이브러리들에 대한 펑션 호들, 게스트의 오퍼레이팅 시스템에 대한 시스템 호들, 및 게스트의 하드웨어의 명령 세트를 에뮬레이팅하기 위하여 사용된다. 이런 접근법의 이득들은, 게스트의 공통 동적 라이브러리들이 이진 트랜슬레이팅될 필요가 없다는 것을 포함한다. 대신, 오리지널 메인 실행가능 파일 및 애플리케이션-특정 동적 라이브러리들이 필요로 하는 유일한 펑션 호들은 호스트에서 에뮬레이팅된다. 이런 접근법은 전체 머신 에뮬레이션 또는 시스템 호 에뮬레이션보다 더 큰 효율성을 유발한다.
[0021] 청구대상 기술의 하나의 복잡성은 펑션 호들의 에뮬레이션이다. 펑션 호 인터페이스들은 상이한 플랫폼들에서 매우 상이할 수 있다. 구체적으로, 상이한 플랫폼들은 상이한 호 규칙(convention)들을 가질 수 있고, 여기서 어구 "호 규칙"은, 상이한 플랫폼들이 인수들을 펑션들에 전달하고 펑션들로부터 리턴 값들을 얻는 방법을 지칭할 수 있다. 상이한 플랫폼들은, 상이한 데이터 타입들의 데이터 모델, 크기들 및 정렬들의 차이들을 비롯하여, 데이터 객체들에 대한 상이한 이진 표현들을 가질 수 있다. 또한, 동일한 의미 및 펑션의 데이터 객체들은 상이한 플랫폼들 상에서 상이한 내부 표현들을 가질 수 있다. 예컨대, FILE 객체는, 데이터 모델이 glibc 및 bionic 둘 모두에서 동일하더라도, GNU C 라이브러리(glibc) 및 Bionic C 라이브러리에서 상이하다.
[0022] 이런 복잡성은 호 규칙들의 전환 및 데이터 객체들의 마샬링에 의해 처리될 수 있다. 이것은 관련된 펑션들의 알려진 프로토타입(prototype)들 및 관련된 데이터 객체들의 이진 레이아웃에 기반하여 완성될 수 있다. 그러나, 일부 경우들에서, 호 규칙들의 전환 및 데이터 객체들의 마샬링은 실용적이지 않을 수 있다. 아래에 설명된 몇몇 해결책들은 그런 경우들에 사용될 수 있다. 하나의 해결책은 게스트와 호스트에 대해 동일한 어드레스 공간 및 1:1 포인터 맵핑(pointer mapping)을 사용하는 것을 포함한다. 이것은 데이터 객체들에 대한 포인터들을 마샬링하는 것을 회피시킨다. 다른 해결책은 호 규칙들을 게스트로부터 호스트로 전환하는 프록시 펑션(예컨대, "호스트 펑션 래퍼(wrapper)들") 및 호스트로부터 게스트로 전환하는 프록시 펑션(예컨대, "게스트 펑션 래퍼들")을 제공하는 것을 포함한다. 동일한 어드레스는, 호스트 펑션들에 대한 포인터들의 마샬링을 회피하기 위하여, 호스트 펑션 및 이의 대응하는 호스트 펑션 래퍼에 사용될 수 있다.
[0023] 현재 이진 트랜슬레이션 방식들은 전체 머신 에뮬레이션 또는 유저랜드(userland) 에뮬레이션을 포함한다. 본원에 사용된 바와 같이, 용어 "유저랜드"는 예컨대, 커널(kernel)에 속하지 않을 수 있는 사용자 공간 오퍼레이팅 시스템 소프트웨어를 지칭할 수 있다. 전체 머신 에뮬레이션에서, 게스트 시스템용 오퍼레이션 시스템과 함께 게스트 플랫폼용 소프트웨어 프로그램을 비롯하여, 전체 게스트 머신 하드웨어가 에뮬레이팅된다. 대안적으로, 특정 게스트 플랫폼과 연관된 게스트 하드웨어 및 오퍼레이팅 시스템은 호스트 플랫폼 및 호스트 오퍼레이팅 시스템을 사용하여 에뮬레이팅될 수 있고, 그리고 소프트웨어 프로그램은 이 에뮬레이션 프레임워크의 최상부 상에서 실행될 수 있다. 위에서 설명된 이진 트랜슬레이션 방식들은 많은 리소스들, 이를테면 프로세서 시간 및 메모리를 소비한다. 전술이 예시하는 바와 같이, 이진 트랜슬레이션을 위한 새로운 기술이 바람직할 수 있다.
[0024] 청구대상 기술은 특정 게스트 플랫폼으로부터 호스트 플랫폼으로 이동된 소프트웨어 프로그램의 공유된 객체 레벨 상에서 이진 트랜슬레이션에 관한 것이다. 소프트웨어 프로그램은 호스트 플랫폼과 상이한 특정 게스트 플랫폼용으로 원래 컴파일링되었다. 소프트웨어 프로그램은 호스트 플랫폼과 호환하지 않는다. 소프트웨어 프로그램은 특정 게스트 하드웨어 시스템의 시스템 라이브러리들에 대한 종속성을 포함하는 공유된 객체들 또는 라이브러리들의 세트, 및 벤더에 의해 생성되고 소프트웨어 프로그램에 특정한 벤더 라이브러리들을 사용한다.
[0025] 이진 트랜슬레이션 동안, 특정 게스트 플랫폼은 호스트 플랫폼 내에서 에뮬레이팅된다. 소프트웨어 프로그램에 의해 사용되는 공유된 객체들 또는 동적으로 로딩된 라이브러리들의 세트에서 각각의 객체 또는 동적으로 로딩된 라이브러리에 대해, 이진 트랜슬레이터(translator)는, 호스트 플랫폼이 세트 내의 객체 또는 동적으로 로딩된 라이브러리와 공통 외부 인터페이스를 구현하는 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지는지를 결정한다. 객체가 라이브러리이면, 라이브러리는 시스템 라이브러리(이는 호스트 하드웨어에서 대응하는 시스템 라이브러리/객체와 연관되고, 여기서 대응하는 라이브러리/객체는 라이브러리와 공통 외부 인터페이스를 가짐) 또는 벤더 라이브러리(이는 호스트 하드웨어에서 대응하는 라이브러리/객체와 연관되지 않을 수 있음)일 수 있다. 시스템 라이브러리의 예는 거의 모든 각각의 플랫폼상에 존재하는, 디스플레이 유닛 상에 프리미티브(primitive) 그래픽들을 제시하기 위한 라이브러리일 수 있다. 벤더 라이브러리의 예는 소프트웨어 프로그램과 독점적으로 사용하기 위한 소프트웨어 프로그램의 벤더에 의해 생성된 라이브러리일 수 있다. 벤더 라이브러리들은, 사용자가 특정 게스트 하드웨어 시스템을 구현하는 머신에서 다운로드를 위하여 소프트웨어 프로그램을 구매하거나 요청할 때, (예컨대, 인터넷을 통하여 또는 제거가능 디스크, 이를테면 CD 또는 USB 디스크를 통하여) 다운로드를 위하여 사용자에게 제공될 수 있다.
[0026] 본원에 사용된 바와 같이, "대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리"는, 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리가 오리지널 객체 또는 동적으로 로딩된 라이브러리와 공통 외부 인터페이스를 구현하면, 게스트 플랫폼의 오리지널 객체 또는 동적으로 로딩된 라이브러리용 호스트 플랫폼에 존재한다. 오리지널 객체 또는 동적으로 로딩된 라이브러리 및 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리는, 오리지널 객체 및 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리가 유사하거나 사실상 동일한 펑션 호들을 구현하고 펑션 호들에 대한 응답으로 유사하거나 사실상 동일한 작동을 구현하면, "공통 외부 인터페이스"를 가진다.
[0027] 객체 또는 동적으로 로딩된 라이브러리(예컨대, 시스템 라이브러리)가 호스트 하드웨어의 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리에 대응하면(여기서, 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리는 객체와 동일한 작동을 함), 이진 트랜슬레이터는 호스트 하드웨어 내의 소프트웨어 프로그램의 실행을 위한 객체 대신 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 사용한다. 이진 번역기는 특정 공유된 객체 또는 동적으로 로딩된 라이브러리를 이진 트랜슬레이팅하지 않는다. 이진 트랜슬레이터는 특정 게스트 플랫폼의 객체 대신 호스트 플랫폼의 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리에 링크하기 위하여 제 1 프로그램 내의 종속성들을 동적으로 결정한다(resolve).
[0028] 구체적으로, 이진 트랜슬레이터는 늦은 바인딩(binding)을 구현하는 동적 링커(linker) 메커니즘들과 협력하고, 그리고 특정 트램폴린(trampoline)들을 통하여 호스트 라이브러리들의 펑션들에 대한 엔트리들을 결정한다(resolve). 트램폴린은 예컨대 ABI(application binary interface) 트랜슬레이션을 수행할 수 있고 때때로 의미론적 트랜슬레이션을 수행한다. 트램폴린은 API의 게스트 버전에 대한 호들을 API의 호스트 버전에 대한 호들로 대체할 수 있다. 트램폴린들은 맞춤형 ELF(executable and linkable format) 링커를 사용하여 구현될 수 있다. 로드 동안, ELF 링커는 게스트로부터 호스트로 전달될 객체의 임포트(import) 테이블로 적절한 트램폴린들을 삽입할 수 있다. 의미론적 트랜슬레이션은, 예컨대 게스트 및 호스트 플랫폼들 상에서 시스템 라이브러리들의 정렬 또는 다른 구현으로 인해, 펑션 포인트 API들을 호스트에 의한 호출(invocation)에 적절하게 만듦으로써 펑션 포인트 API들의 트랜슬레이션, 또는 호스트 및 게스트가 상이한 요건들을 가지는 경우들에 대해 전환 객체 이진 레이아웃을 포함할 수 있다.
[0029] 예로서, 게스트 코드가 qsort() 표준 라이브러리 펑션을 호출하면, 게스트 코드는 'qsort'를 라이브러리의 임포트 테이블에서 결정되지 않은 엔트리로서 언급한다. 늦은 바인딩 동안, 그런 엔트리는 아래 2개의 일들을 행하는 머신 코드에 대한 포인터로 채워진다: (1) 에뮬레이팅된 게스트 레지스터들로부터 인수들을 판독하고 이들이 호스트 펑션에서 보여질 수 있도록 스택하고; 그리고 (2) 'qsort' 펑션의 알려진 시그네이처에 따라 인수들을 전환. 다른 말로, 게스트 포인터들은 호스트 포인터들로 전환되고, 정수들은 있는 그대로 전달되며, 그리고 펑션 포인터 인수는 동적으로 생성된 호스트 코드로 래핑되어, 펑션 포인터 인수는 필요한 대로 호스트 'qsort' 에뮬레이션에 의해 호출될 수 있다. 게스트 펑션 포인터들의 래핑은 호스트 ABI로부터 게스트 ABI로의 반대 전환을 포함할 수 있다.
[0030] 결과로서, 게스트 프로그램은, 펑션의 최적화된 호스트 버전들을 사용하여 원하는 동작들을 수행하면서, 예상된 대로 동일한 작동을 달성한다. 호스트에서 비교기 펑션은 이진 트랜슬레이션을 사용하여 실행되는 반면, 분류 알고리즘 자체는 기본(native) 속도로 실행된다.
[0031] 게스트 공유된 객체에서 외부 공유된 객체 참조는 위에서 설명된 바와 같이 호스트 공유된 객체를 사용하여, 또는 다른 게스트 공유된 객체들을 사용하여 결정될 수 있다. 후자의 경우에서, 호출자와 수신자가 동일한 ABI를 따르기 때문에, 트램폴린은 요구되지 않는다. 따라서, 맞춤형 로더는 표준 로더와 동일한 방식으로 작동할 수 있다.
[0032] 청구대상 기술에 따른 일부 접근법들은, 기본 실행보다 더 느릴 수 있고 더 리소스-소비적일 수 있는 이진 트랜슬레이션이, 기본 호스트 구현이 없는 벤더 제공 공유된 객체들에만 적용될 수 있는 것을 보장한다. 이들 접근법들은 벤더 제공된 라이브러리들 및 시스템 라이브러리들 둘 모두의 이진 트랜슬레이션들을 제공하는 것과 관련된 다른 방식에 비해 개선이다.
[0033] 위에서 설명된 기술은 호스트 플랫폼의 하드웨어 상에서 직접 호스트 플랫폼의 시스템 라이브러리들의 실행, 및 호스트 플랫폼상에서 특정 게스트 플랫폼의 에뮬레이션에 대한 벤더 라이브러리들의 실행을 요구한다. 결과로서, 호스트 플랫폼의 상태(예컨대, 레지스터들, 스택 등의 상태)는 에뮬레이팅된 특정 게스트 플랫폼의 상태와 동기화될 필요가 있을 수 있다. 게스트로부터 호스트 펑션에 대한 호가 발생할 때, 에뮬레이션 계층은, 호스트 코드가 정상적으로 호출되는 것처럼 동작할 수 있도록, 에뮬레이팅된 게스트 상태로부터 레지스터들 및 스택 또는 호스트 하드웨어로 파라미터들의 이동을 포함할 수 있는, 모든 필요한 인수 트랜슬레이션을 수행한다.
[0034] 도 1a는 공유된 객체 레벨 상에서 이진 트랜슬레이션에 관련될 수 있는 예시적인 게스트 머신(100A)을 예시한다. 게스트 머신(100A)은 임의의 컴퓨팅 디바이스, 예컨대 랩톱 컴퓨터, 데스크톱 컴퓨터, 태블릿 컴퓨터, 모바일 폰, PDA(personal digital assistant), 전자 뮤직 플레이어, 스마트 시계, 하나 또는 그 초과의 프로세서들 및 메모리와 커플링된 텔레비전 등일 수 있다. 일부 예들에서, 게스트 머신(100A)은 ARM 하드웨어를 가진다.
[0035] 도시된 바와 같이, 게스트 머신(100A)은 프로세싱 유닛(102A), 네트워크 인터페이스(104A), 및 메모리(106A)를 포함한다. 프로세싱 유닛(102A)은 하나 또는 그 초과의 프로세서들을 포함한다. 프로세싱 유닛(102A)은 CPU(central processing unit), GPU(graphics processing unit), 또는 임의의 다른 프로세싱 유닛을 포함할 수 있다. 프로세싱 유닛(102A)은 컴퓨터-판독가능 매체, 예컨대 메모리(106A)에 저장되는 컴퓨터 명령들을 실행한다. 네트워크 인터페이스(104A)는 게스트 머신(100A)이 네트워크, 예컨대 인터넷, 인트라넷, 셀룰러 네트워크, 로컬 영역 네트워크, 광역 네트워크, 유선 네트워크, 무선 네트워크, VPN(virtual private network) 등에서 데이터를 송신 및 수신하게 한다. 메모리(106A)는 데이터 및/또는 명령들을 저장한다. 메모리(106A)는 캐시 유닛, 스토리지 유닛, 내부 메모리 유닛, 또는 외부 메모리 유닛 중 하나 또는 그 초과일 수 있다. 예시된 바와 같이, 메모리(106A)는 게스트 하드웨어 아키텍처(108A), 소프트웨어 프로그램(110A), 게스트 시스템 객체들(122A 및 124A), 및 벤더 객체들(126A 및 128A)을 포함한다.
[0036] 게스트 하드웨어 아키텍처(108A)는 게스트 머신(100A)에 의해 사용되는 임의의 플랫폼들, 예컨대 레지스터들 또는 시스템 스택을 포함할 수 있다. 소프트웨어 프로그램(110A)은 자신의 실행 동안 게스트 하드웨어 아키텍처(108A)를 사용한다. 소프트웨어 프로그램(110A)은 게스트 머신(100A)으로 쓰여지고 게스트 머신(100A)에 존재하는 게스트 하드웨어 아키텍처(108A)와 함께 작동하도록 설계된다. 소프트웨어 프로그램(110A)은 임의의 소프트웨어 프로그램, 예컨대 워드 프로세서, 메시징 또는 이메일 프로그램, 오디오 또는 비디오 플레이어, 온라인 또는 오프라인 게이밍 프로그램 등일 수 있다.
[0037] 예시된 바와 같이, 소프트웨어 프로그램(110A)은 링크들(112A, 114A, 116A, 및 118A)을 포함한다. 링크들(112A 및 114A)은 각각 게스트 시스템 객체들(122A 및 124A)과 인터페이스한다. 게스트 시스템 객체들(122A 및 124A)은, 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리들이 호스트 머신(예컨대, 아래에서 도 1b와 함께 논의되는 호스트 머신(100B))에 존재하는 객체들이고, 여기서 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리는 게스트 시스템 객체(122A 또는 124A)와 공통 외부 인터페이스 및 공통 작동을 구현한다. 예컨대, 게스트 시스템 객체(122A 또는 124A)는 임의의 모든 또는 대부분의 플랫폼들에 구현되는 시스템 라이브러리에 대응할 수 있다. 시스템 라이브러리의 예들은 디스플레이 유닛에 프리미티브 그래픽들을 제시하기 위한 그래픽 라이브러리 또는 오디오 출력 유닛에서 사운드 파일들을 플레이하기 위한 사운드 라이브러리를 포함한다. 링크들(116A 및 118A)은 각각 벤더 객체들(126A 및 128A)과 인터페이스한다.
[0038] 벤더 객체들(126A 및 128A)은, 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리들이 호스트 머신(예컨대, 아래에서 도 1b와 함께 논의되는 호스트 머신(100B))에 존재하지 않는 객체들이고, 여기서 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리는 벤더 객체(126A 또는 128A)와 공통 외부 인터페이스 및 공통 작동을 구현한다. 예컨대, 벤더 객체들(126A 및 128A)은, 사용자가 게스트 머신(100A)에서 소프트웨어 프로그램을 구매하거나 요청할 때, (예컨대, 네트워크를 통하여 또는 제거가능 디스크, 이를테면 CD 또는 USB 디스크를 통하여) 다운로드를 위하여 게스트 머신(100A)의 사용자에게 제공될 수 있다.
[0039] 위에서 논의된 바와 같이, 소프트웨어 프로그램(110A)은 게스트 머신(100A)(또는 동일한 플랫폼을 가지는 다른 머신) 상에서 실행되도록 설계된다. 소프트웨어 프로그램(110A)은 게스트 하드웨어 아키텍처(108A) 및 게스트 시스템 객체들(122A 및 124A)과 인터페이스하도록 설계된다. 그러나, 일부 경우들에서, 게스트 머신(100A)의 플랫폼과 상이한 플랫폼을 가진 호스트 머신(예컨대, 아래에서 도 1b와 함께 논의된 호스트 머신(100B)) 상에서 게스트 소프트웨어 프로그램(110A)을 실행하는 것은 바람직할 수 있다. 일부 구현들에서, 청구대상 기술은 소프트웨어 프로그램(110A)이 그런 호스트 머신 상에서 실행되게 하는 기술들을 제공한다.
[0040] 도 1b는 공유된 객체 레벨 상에서 이진 트랜슬레이션에 관련될 수 있는 예시적인 호스트 머신(100B)을 예시한다. 호스트 머신(100B)은 임의의 컴퓨팅 디바이스, 예컨대 랩톱 컴퓨터, 데스크톱 컴퓨터, 태블릿 컴퓨터, 모바일 폰, PDA(personal digital assistant), 전자 뮤직 플레이어, 스마트 시계, 하나 또는 그 초과의 프로세서들 및 메모리가 커플링된 텔레비전 등일 수 있다. 호스트 머신(100B)은 게스트 머신(100A)의 플랫폼과 상이한 플랫폼을 가진다. 예컨대, 게스트 머신(100A)의 플랫폼이 ARM 하드웨어이면, 호스트 머신(100B)의 플랫폼은 ARM 하드웨어가 아니고 예컨대 x86 하드웨어일 수 있다.
[0041] 도시된 바와 같이, 호스트 머신(100B)은 프로세싱 유닛(102B), 네트워크 인터페이스(104B), 및 메모리(106B)를 포함한다. 프로세싱 유닛(102B)은 하나 또는 그 초과의 프로세서들을 포함한다. 프로세싱 유닛(102B)은 CPU(central processing unit), GPU(graphics processing unit), 또는 임의의 다른 프로세싱 유닛을 포함할 수 있다. 프로세싱 유닛(102B)은 컴퓨터-판독가능 매체, 예컨대 메모리(106B)에 저장되는 컴퓨터 명령들을 실행한다. 네트워크 인터페이스(104B)는 호스트 머신(100B)이 네트워크, 예컨대 인터넷, 인트라넷, 셀룰러 네트워크, 로컬 영역 네트워크, 광역 네트워크, 유선 네트워크, 무선 네트워크, VPN(virtual private network) 등에서 데이터를 송신 및 수신하게 한다. 메모리(106B)는 데이터 및/또는 명령들을 저장한다. 메모리(106B)는 캐시 유닛, 스토리지 유닛, 내부 메모리 유닛, 또는 외부 메모리 유닛 중 하나 또는 그 초과일 수 있다. 예시된 바와 같이, 메모리(106B)는 호스트 하드웨어 아키텍처(107B), 소프트웨어 프로그램(110B), 호스트 시스템 객체들(122B 및 124B), 및 이진 트랜슬레이터(130B)를 포함하고, 이진 트랜슬레이터(130B)는 에뮬레이팅된 게스트 하드웨어 아키텍처(108B) 및 벤더 객체들(126B 및 128B)의 이진 트랜슬레이션(BT)들을 포함한다.
[0042] 호스트 하드웨어 아키텍처(107B)는 호스트 머신(100B)에 의해 사용되는 임의의 플랫폼들, 예컨대 레지스터들 또는 시스템 스택을 포함할 수 있다. 호스트 머신(100B)용으로 쓰여진 소프트웨어는 자신의 실행 동안 호스트 하드웨어 아키텍처(107B)를 사용할 수 있다. 호스트 하드웨어 아키텍처(107B)는 이진 트랜슬레이터(130B)(에뮬레이팅된 게스트 하드웨어 아키텍처(108B) 및 벤더 객체들(126B 및 128B)의 이진 트랜슬레이션들)의 콘텐츠의 존재를 알지 못할 수 있다. 따라서, 호스트 플랫폼은 호스트 하드웨어 아키텍처(107B)에 액세스하기 위하여 벤더 객체들(126B 및 128B)의 이진 트랜슬레이션들 및 에뮬레이팅된 게스트 하드웨어 아키텍처(108B)에 대한 인터페이스를 제공하지 않을 수 있고 자신의 일반적인 방식으로 동작할 수 있다.
[0043] 이진 트랜슬레이터(130B)는 소프트웨어로 구현되고 게스트 머신(100A)의 게스트 하드웨어 아키텍처(108A)에 대응하는 에뮬레이팅된 게스트 하드웨어 아키텍처(108B)를 생성 및 저장한다. 호스트 머신(100B)의 에뮬레이팅된 게스트 하드웨어 아키텍처(108B)는 게스트 머신(100A)의 게스트 하드웨어 아키텍처(108A)와 동일한 기능성 및 작동을 가진다. 예컨대, 게스트 머신(100A)의 게스트 하드웨어 아키텍처(108A)가 하드웨어로 구현된 레지스터들 및 스택들을 포함하면, 에뮬레이팅된 게스트 하드웨어 아키텍처(108B)는 호스트 머신(100B)의 하드웨어뿐만 아니라 소프트웨어로 구현되는 동일한 기능성 및 작동을 가지는 레지스터들 및 스택들을 포함할 수 있다.
[0044] 소프트웨어 프로그램(110B)은 게스트 머신(100A)의 소프트웨어 프로그램(110A)에 대응한다. 그러나, 소프트웨어 프로그램(100B)은 호스트 머신(100B)에서 실행되도록 구성된다. 소프트웨어 프로그램(110B)은 게스트 머신(100A)의 게스트 하드웨어 아키텍처(108A)와 인터페이싱하는 대신 호스트 머신(100B)의 에뮬레이팅된 게스트 하드웨어 아키텍처(108B)와 인터페이스한다. 예시된 바와 같이, 소프트웨어 프로그램은 각각 호스트 시스템 객체들(122B 및 124B)에 대한 링크들(112B 및 114B)을 포함한다. 호스트 시스템 객체들(122B 및 124B)에 대한 링크들(112B 및 114B)은 도 1a의 게스트 시스템 객체들(112A 및 114A)에 대한 링크들(112A 및 114A)을 대체한다. 소프트웨어 프로그램은 각각 벤더 객체들(126B 및 128B)의 이진 트랜슬레이션들에 대한 링크들(116B 및 118B)을 포함한다. 아래에서 도 2와 함께 더 상세히 논의되는 바와 같이, 벤더 객체들(126A 및 128A)은 벤더 객체들(126B 및 128B)의 이진 트랜슬레이션들을 획득하기 위하여 수행되는 이진 트랜슬레이션들을 가지는데, 그 이유는 벤더 객체들(126A 및 128A)과 동일한 외부 인터페이스, 기능성 및 작동을 가지는 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리들이 호스트 머신(100B)에 존재하지 않기 때문이다. 호스트 시스템 객체들(122B 및 124B)은 호스트 머신(100B)의 아키텍처용으로 원래 개발되었다. 유사하게, 게스트 시스템 객체들(122A 및 124A)은 게스트 머신(100A)의 아키텍처용으로 원래 개발되었다.
[0045] 링크(112B)는 링크(112A)에 대응하고, 그리고 호스트 시스템 객체(122B)는 게스트 시스템 객체(122A)에 대응한다. 다른 말로, 호스트 시스템 객체(122B)는 공통 외부 인터페이스를 구현하고, 그리고 게스트 시스템 객체(122A)와 공통 기능성 및 작동을 가진다. 결과로서, 소프트웨어 프로그램(110B/110A)은, 게스트 머신(100A)으로부터 호스트 머신(100B)으로 포팅(porting)의 프로세스 시, 게스트 시스템 객체(122A) 대신 호스트 시스템 객체(122B)에 (링크(112B/112A)를 통하여) 링크하도록 조정될 수 있다.
[0046] 링크(114B)는 링크(114A)에 대응하고, 그리고 호스트 시스템 객체(124B)는 게스트 시스템 객체(124A)에 대응한다. 다른 말로, 호스트 시스템 객체(124B)는 공통 외부 인터페이스를 구현하고, 그리고 게스트 시스템 객체(124A)와 공통 기능성 및 작동을 가진다. 결과로서, 소프트웨어 프로그램(110B/110A)은, 게스트 머신(100A)으로부터 호스트 머신(100B)으로 포팅의 프로세스 시, 게스트 시스템 객체(124A) 대신 호스트 시스템 객체(124B)에 (링크(114B/114A)를 통하여) 링크하도록 조정될 수 있다.
[0047] 링크(116B)는 링크(116A)에 대응한다. 이진 트랜슬레이터(130B)에 의해 생성된 객체(126B)는 게스트 머신(100A)의 벤더 객체(126A)의 이진 트랜슬레이션이다. 이진 트랜슬레이션의 결과로서, 객체(126B)는 호스트 머신(100B) 상에서 실행되고 벤더 객체(126A)의 것과 유사한 외부 인터페이스, 기능성 및 작동을 구현한다. 따라서, 소프트웨어 프로그램(110B)은 이진 트랜슬레이터(130B) 내에서, 벤더 객체(126A) 대신 객체(126B)에 링크할 수 있다.
[0048] 링크(118B)는 링크(118A)에 대응한다. 이진 트랜슬레이터(130B)에 의해 생성된 객체(128B)는 게스트 머신(100A)의 벤더 객체(128A)의 이진 트랜슬레이션이다. 이진 트랜슬레이션의 결과로서, 객체(128B)는 호스트 머신(100B) 상에서 실행되고 벤더 객체(128A)의 것과 유사한 외부 인터페이스, 기능성 및 작동을 구현한다. 따라서, 소프트웨어 프로그램(110B)은 이진 트랜슬레이터(130B) 내에서, 벤더 객체(128A) 대신 객체(128B)에 링크할 수 있다.
[0049] 중요하게, 호스트 하드웨어 아키텍처(107B)는 에뮬레이팅된 게스트 하드웨어 아키텍처(108B)에 관한 알지 못할 수 있고 그리고 에뮬레이팅된 게스트 하드웨어 아키텍처(108B)에 대한 인터페이스를 제공함이 없이 자신의 일반적인 방식으로 작동할 수 있다. 이진 트랜슬레이터(130B)는 에뮬레이팅된 게스트 하드웨어 아키텍처(108B)를 숨긴다. 이진 트랜슬레이터(130B)는 그 자체 내에 에뮬레이팅된 게스트 하드웨어 아키텍처(108B)를 숨기고 벤더 객체들(126B 및 128B)의 이진 트랜슬레이션들이 호스트 머신(100B)의 ABI와 같은 호스트 머신(100B)의 예상들과 호환가능하게 한다.
[0050] 도 1a 및 도 1b에서, 청구대상 기술은 2개의 시스템 객체들(122A/122B 및 124A/124B) 및 2개의 벤더 객체들(126A 및 128A)과 함께 설명된다. 그러나, 청구대상 기술은 임의의 수(예컨대, 0, 1, 2 또는 2개보다 많은) 시스템 객체들 및 임의의 수(예컨대, 0, 1, 2 또는 2개보다 많은) 벤더 객체들로 구현될 수 있다.
[0051] 도 2는, 공유된 객체 레벨 상에서의 이진 트랜슬레이션이 완료될 수 있게 하는 예시적인 프로세스(200)를 예시한다.
[0052] 프로세스(200)는 단계(210)에서 시작되고, 여기서 호스트 플랫폼(예컨대, 호스트 머신(100B))은 호스트 플랫폼과 상이한 특정 게스트 플랫폼(예컨대, 게스트 머신(100A))용으로 쓰여진 소프트웨어 프로그램(예컨대, 소프트웨어 프로그램(110A))을 수신한다. 소프트웨어 프로그램은 공유된 객체들 또는 동적으로 로딩된 라이브러리들(예컨대, 객체들(122A, 124A, 126A, 및 128A))의 세트를 사용한다. 소프트웨어 프로그램은 호스트 플랫폼과 호환하지 않는다.
[0053] 단계(220)에서, 호스트 플랫폼은 호스트 플랫폼 내에서 특정 게스트 플랫폼을 에뮬레이팅한다. 예컨대, 게스트 플랫폼들이 레지스터들 및 시스템 스택을 포함하면, 호스트 플랫폼은 게스트 하드웨어의 레지스터들 및 시스템 스택의 소프트웨어 에뮬레이션들을 생성할 수 있다. 소프트웨어 프로그램은 오리지널 게스트 플랫폼 대신 에뮬레이팅된 게스트 플랫폼상에서 동작할 수 있다.
[0054] 단계(230)에서, 호스트 플랫폼은, 호스트 플랫폼이 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지는지를 결정하고, 여기서 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리는 공유된 객체들 또는 동적으로 로딩된 라이브러리들의 세트 내에 있는 특정 공유된 객체 또는 동적으로 로딩된 라이브러리와 공통 외부 인터페이스를 구현한다. 특정 공유된 객체 또는 동적으로 로딩된 라이브러리는 게스트 시스템 객체와 공통 외부 인터페이스를 구현하는 대응하는 호스트 시스템 객체(예컨대, 호스트 시스템 객체(122B 또는 124B))를 가지는 게스트 시스템 객체(예컨대, 게스트 시스템 객체(122A 또는 124A))일 수 있다. 대안적으로, 특정 공유된 객체 또는 동적으로 로딩된 라이브러리는 그런 대응하는 호스트 시스템 객체와 연관되지 않을 수 있는 벤더 객체(예컨대, 벤더 객체(126A 또는 128A))일 수 있다. 호스트 플랫폼이 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지면, 프로세스(200)는 단계(240)로 계속된다. 호스트 플랫폼이 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지지 않으면, 프로세스(200)는 단계(250)로 계속된다.
[0055] 공유된 객체들 또는 동적으로 로딩된 라이브러리들의 세트는 라이브러리들의 세트를 포함할 수 있다. 라이브러리들의 세트는 호스트 플랫폼에 대한 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리와 연관된 적어도 하나의 시스템 라이브러리 및 호스트 플랫폼에 대한 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리와 연관되지 않을 수 있는 적어도 하나의 벤더 라이브러리를 포함할 수 있다.
[0056] 단계(240)에서, 호스트 플랫폼이 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지는 것을 결정할 때, 호스트 플랫폼은 호스트 플랫폼 내에서의 소프트웨어 프로그램의 실행을 위하여 특정 공유된 객체 또는 동적으로 로딩된 라이브러리 대신 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 사용한다. 호스트 플랫폼은 특정 공유된 객체 또는 동적으로 로딩된 라이브러리 대신 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리에 링크하기 위하여 소프트웨어 프로그램의 링크들을 동적으로(예컨대, 컴파일링 시간이 아닌 실행 시간에서) 수정할 수 있다. (예컨대, 도 1a-도 1b를 참조하여, 링크(112B/112A)는 게스트 시스템 객체(122A) 대신 호스트 시스템 객체(122B)에 링크하도록 동적으로 수정될 수 있음). 호스트 플랫폼은, 특정 공유된 객체 또는 동적으로 로딩된 라이브러리에 대한 호들이 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리에 대한 호들로 전환되도록, 브리지(bridge)를 제공할 수 있다. 단계(240) 이후, 프로세스(200)는 종료된다.
[0057] 단계(250)에서, 호스트 플랫폼이 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지지 않는 것을 결정할 때, 호스트 플랫폼은 호스트 플랫폼 내에서의 소프트웨어 프로그램의 실행을 위하여 특정 공유된 객체 또는 동적으로 로딩된 라이브러리의 이진 트랜슬레이션을 수행한다. 이진 트랜슬레이션을 수행하는 것은 이진 트랜슬레이팅된 객체를 생성하는 것을 포함할 수 있고, 여기서 이진 트랜슬레이팅된 객체의 외부 인터페이스는 호스트 플랫폼의 다른 이진 트랜슬레이팅된 벤더 객체들 또는 시스템 객체들에 대한 펑션 호를 포함한다. 일부 경우들에서, 특정 게스트 플랫폼에서 실행될 수 있지만 호스트 플랫폼에서 실행될 수 없는 객체의 임의의 명령들은 호스트 플랫폼에서 실행될 수 있는 명령들로 트랜슬레이팅될 수 있다. 예컨대, 호스트 플랫폼이, (x86 아키텍처의 일부 구현들에서 그렇듯이) 레지스터(32) 교차 명령들이 제공되지 않는 것을 요구하는 64 레지스터 아키텍처이면, 레지스터들(30-35)에 액세스하기 위한 명령은 레지스터들(30-31)에 액세스하기 위한 명령 및 레지스터들(32-35)에 액세스하기 위한 명령으로 수정될 수 있다. 코드의 트랜슬레이션은 "적시에" 행해질 수 있다. 다른 말로, 트랜슬레이션은, 제어가 시스템 객체와 연관된 코드로부터 벤더 객체와 연관된 코드로 전달될 때, 또는 그 반대일 때 발생할 수 있다. 다른 말로, 트랜슬레이션은, 시스템 객체가 실행을 중단하고 벤더 객체가 실행을 시작할 때, 또는 그 반대일 때 발생할 수 있다. "적시" 접근법의 하나의 이득은, 호스트 플랫폼상에서 실행되지 않는 소프트웨어 프로그램의 코드가 트랜슬레이팅되지 않아서, 이진 트랜슬레이션에 대해 소비되는 시간 및 프로세싱 리소스들을 감소시킨다는 것이다. 단계(250) 이후, 프로세스(200)는 종료된다.
[0058] 일부 예들에서, 호스트 플랫폼에서 실행되는 소프트웨어 프로그램은 에뮬레이팅된 게스트 플랫폼(예컨대, 에뮬레이팅된 게스트 하드웨어 아키텍처(108B))의 상태 또는 호스트 플랫폼(예컨대, 호스트 하드웨어 아키텍처(107B))의 상태에 대한 액세스를 요구하는 호를 수신할 수 있다. 호스트 플랫폼은 호에 대한 응답으로, 에뮬레이팅된 게스트 플랫폼의 상태를 호스트 플랫폼의 상태와 동기화할 수 있다. 예컨대, 호스트 플랫폼은 에뮬레이팅된 게스트 플랫폼의 스택 또는 레지스터들에 대해 이루어진 변화들을 호스트 플랫폼의 스택 또는 레지스터들에, 그리고 그 반대로 전파할 수 있다. 이런 동기화의 결과로서, 호는 에뮬레이팅된 게스트 플랫폼과 호스트 플랫폼의 동기화된 상태에 따라 프로세싱될 수 있다. 동기화 동안, 에뮬레이션 계층은, 호스트 코드가 정상적으로 호출되는 것처럼 호스트 코드가 동작할 수 있도록, 에뮬레이팅된 게스트 상태로부터 레지스터들 및 스택 또는 호스트 하드웨어로 파라미터들의 이동을 포함할 수 있는, 모든 필요한 인수 트랜슬레이션들을 수행할 수 있다.
[0059] 위에서 설명된 바와 같이, 프로세스(200)의 단계들(210-250)은 특정 순서에 따라 그리고 직렬로 구현된다. 그러나, 단계들(210-250)은 임의의 순서로 구현될 수 있다. 일부 예들에서, 단계들(210-250) 중 2 또는 그 초과는 병렬로 구현될 수 있다.
[0060] 도 3은, 청구대상 기술의 일부 구현들을 구현하는 전자 시스템(300)을 개념적으로 예시한다. 예컨대, 게스트 머신(100A) 또는 호스트 머신(100B) 중 하나 또는 그 초과는 전자 시스템(300)의 어레인지먼트를 사용하여 구현될 수 있다. 전자 시스템(300)은 컴퓨터(예컨대, 모바일 폰, PDA), 또는 임의의 다른 종류의 전자 디바이스일 수 있다. 그런 전자 시스템은 다양한 타입들의 컴퓨터 판독가능 매체를 포함하고 다양한 다른 타입들의 컴퓨터 판독가능 매체에 인터페이스한다. 전자 시스템(300)은 버스(305), 프로세서(들)(310), 시스템 메모리(315), 판독-전용 메모리(320), 영구 스토리지 디바이스(325), 입력 디바이스 인터페이스(330), 출력 디바이스 인터페이스(335), 및 네트워크 인터페이스(340)를 포함한다.
[0061] 버스(305)는 집합적으로 전자 시스템(300)의 다수의 내부 디바이스들을 통신가능하게 연결하는 모든 시스템, 주변장치 및 칩셋 버스들을 표현한다. 예컨대, 버스(305)는 프로세서(들)(310)를 판독-전용 메모리(320), 시스템 메모리(315) 및 영구 스토리지 디바이스(325)와 통신가능하게 연결한다.
[0062] 이들 다양한 메모리 유닛들로부터, 프로세서(들)(310)는 청구대상 기술의 프로세스들을 실행하기 위하여 실행할 명령들 및 프로세스할 데이터를 리트리브한다. 프로세서(들)는 상이한 구현들의 단일 프로세서 또는 다중-코어 프로세서를 포함할 수 있다.
[0063] 판독-전용-메모리(ROM)(320)는 전자 시스템의 프로세서(들)(310) 및 다른 모듈들이 필요로 하는 정적 데이터 및 명령들을 저장한다. 다른 한편으로, 영구 스토리지 디바이스(325)는 판독-및-기입 메모리 디바이스이다. 이 디바이스는, 전자 시스템(300)이 오프일 때에도 명령들 및 데이터를 저장하는 비-휘발성 메모리 유닛이다. 청구대상 기술의 일부 구현들은 영구 스토리지 디바이스(325)로서 대량-스토리지 디바이스(예컨대 자기 또는 광학 디스크 및 이의 대응하는 디스크 드라이브)를 사용한다.
[0064] 다른 구현들은 영구 스토리지 디바이스(325)로서 제거가능 스토리지 디바이스(예컨대, 플로피 디스크, 플래시 드라이브, 및 이의 대응하는 디스크 드라이브)를 사용한다. 영구 스토리지 디바이스(325)와 같이, 시스템 메모리(315)는 판독-및-기입 메모리 디바이스이다. 그러나, 스토리지 디바이스(325)와 달리, 시스템 메모리(315)는 휘발성 판독-및-기입 메모리, 이를테면 랜덤 액세스 메모리이다. 시스템 메모리(315)는, 프로세서가 실행 시간에 필요로 하는 명령들 및 데이터 중 일부를 저장한다. 일부 구현들에서, 청구대상 기술의 프로세스들은 시스템 메모리(315), 영구 스토리지 디바이스(325), 또는 판독-전용 메모리(320)에 저장된다. 예컨대, 다양한 메모리 유닛들은 일부 구현들에 따라 공유된 객체 레벨 상에서 이진 트랜슬레이션을 위한 명령들을 포함한다. 이들 다양한 메모리 유닛들로부터, 프로세서(들)(310)는 일부 구현들의 프로세스들을 실행하기 위하여 실행할 명령들 및 프로세스할 데이터를 리트리브한다.
[0065] 버스(305)는 또한 입력 및 출력 디바이스 인터페이스들(330 및 335)에 연결된다. 입력 디바이스 인터페이스(330)는 사용자가 정보를 통신하고 전자 시스템에 대한 커맨드들을 선택할 수 있게 한다. 입력 디바이스 인터페이스(330)와 함께 사용되는 입력 디바이스들은 예컨대 문자숫자식 키보드들 및 포인팅 디바이스들(또한 "커서 제어 디바이스들"이라 불림)을 포함한다. 출력 디바이스 인터페이스들(335)은 예컨대 전자 시스템(300)에 의해 생성된 이미지들의 디스플레이를 가능하게 한다. 출력 디바이스 인터페이스(335)와 함께 사용된 출력 디바이스들은 예컨대 프린터들 및 디스플레이 디바이스들, 예컨대 음극선관(CRT) 또는 액정 디스플레이들(LCD)을 포함한다. 일부 구현들은 입력 및 출력 디바이스들 둘 모두로서 기능하는 디바이스들, 예컨대 터치 스크린을 포함한다.
[0066] 마지막으로, 도 3에 도시된 바와 같이, 버스(305)는 또한 전자 시스템(300)을 네트워크 인터페이스(340)를 통하여 네트워크(도시되지 않음)에 커플링한다. 이런 방식에서, 전자 시스템(300)은 컴퓨터들의 네트워크(예컨대, LAN(local area network), WAN(wide area network), 또는 인트라넷), 또는 네트워크들의 네트워크, 예컨대 인터넷의 일부일 수 있다. 전자 시스템(300)의 임의의 또는 모든 컴포넌트들은 청구대상 기술과 함께 사용될 수 있다.
[0067] 위에서 설명된 특징들 및 애플리케이션들은 컴퓨터 판독가능 스토리지 매체(또한 컴퓨터 판독가능 매체로서 지칭됨) 상에 레코딩된 명령들의 세트로서 특정된 소프트웨어 프로세스들로서 구현될 수 있다. 이들 명령들이 하나 또는 그 초과의 프로세서(들)(예컨대, 하나 또는 그 초과의 프로세서들, 코어들의 프로세서들 또는 다른 프로세싱 유닛들을 포함할 수 있음)에 의해 실행될 때, 이들 명령들은 프로세서(들)로 하여금 명령들에 표시된 액션들을 수행하게 한다. 컴퓨터 판독가능 매체의 예들은 CD-ROM들, 플래시 드라이브들, RAM 칩들, 하드 드라이브들, EPROM들 등(그러나 이에 제한되지 않음)을 포함한다. 컴퓨터 판독가능 매체는 무선으로 또는 유선 연결들을 통하여 전달되는 반송파들 및 전자 신호들을 포함하지 않는다.
[0068] 본 명세서에서, 용어 "소프트웨어"는 판독-전용 메모리에 상주하는 펌웨어 또는 자기 스토리지 또는 플래시 스토리지, 예컨대 고체-상태 드라이브에 저장된 애플리케이션들을 포함하는 것을 의미하고, 이는 프로세서에 의한 프로세싱을 위하여 메모리에 입력(read into)될 수 있다. 또한, 일부 구현들에서, 별개의 소프트웨어 기술들을 유지하면서 더 큰 프로그램의 서브-부분들로서 다수의 소프트웨어 기술들이 구현될 수 있다. 일부 구현들에서, 다수의 소프트웨어 기술들은 또한 별개의 프로그램들로서 구현될 수 있다. 마지막으로, 본원에 설명된 소프트웨어 기술을 함께 구현하는 별개의 프로그램들의 임의의 조합은 청구대상 기술의 범위 내에 있다. 일부 구현들에서, 소프트웨어 프로그램들은, 하나 또는 그 초과의 전자 시스템들 상에서 동작하도록 인스톨될 때, 소프트웨어 프로그램들의 동작들을 실행 및 수행하는 하나 또는 그 초과의 특정 머신 구현들을 정의한다.
[0069] 컴퓨터 프로그램(또한 프로그램, 소프트웨어, 소프트웨어 애플리케이션, 스크립트, 또는 코드로서 알려짐)은 컴파일링 언어 또는 해석형 언어, 선언적 언어 또는 절차적 언어들을 비롯한 임의의 형태의 프로그래밍 언어로 쓰여질 수 있고, 그리고 독립형 프로그램으로서 또는 모듈로서, 컴포넌트, 서브루틴, 객체, 또는 컴퓨팅 환경에 사용하기에 적절한 다른 유닛을 비롯한, 임의의 형태로 알맞게 사용될 수 있다. 컴퓨터 프로그램은 파일 시스템의 파일에 대응할 수 있다(그러나, 대응할 필요가 없을 수 있음). 프로그램은 다른 프로그램들 또는 데이터(예컨대, 마크업(markup) 언어 문서에 저장된 하나 또는 그 초과의 스크립트들)를 보유하는 파일의 일부에, 해당 프로그램에 전용된 단일 파일에, 또는 다수의 조정된 파일들(예컨대, 하나 또는 그 초과의 모듈들, 서브 프로그램들, 또는 코드의 부분들을 저장하는 파일들)에 저장될 수 있다. 컴퓨터 프로그램은 하나의 컴퓨터, 또는 하나의 사이트에 위치되거나 다수의 사이트들에 걸쳐 분산되고 통신 네트워크에 의해 상호연결되는 다수의 컴퓨터들 상에서 실행되도록 알맞게 사용될 수 있다.
[0070] 위에서 설명된 이들 기능들은 디지털 전자 회로, 컴퓨터 소프트웨어, 펌웨어 또는 하드웨어로 구현될 수 있다. 기술들은 하나 또는 그 초과의 컴퓨터 프로그램 제품들을 사용하여 구현될 수 있다. 프로그램가능 프로세서들 및 컴퓨터들은 모바일 디바이스들에 포함되거나 모바일 디바이스들로서 패키지될 수 있다. 프로세스들 및 로직 흐름들은 하나 또는 그 초과의 프로그램가능 프로세서들에 의해 그리고 하나 또는 그 초과의 프로그램가능 로직 회로에 의해 수행될 수 있다. 일반 및 특수 목적 컴퓨팅 디바이스들 및 스토리지 디바이스들은 통신 네트워크들을 통하여 상호연결될 수 있다.
[0071] 일부 구현들은 머신-판독가능 또는 컴퓨터-판독가능 매체(대안적으로 컴퓨터-판독가능 스토리지 매체, 머신-판독가능 매체, 또는 머신-판독가능 스토리지 매체로서 지칭됨)에 컴퓨터 프로그램 명령들을 저장하는 전자 컴포넌트들, 예컨대 마이크로프로세서들, 스토리지 및 메모리를 포함한다. 그런 컴퓨터-판독가능 매체의 일부 예들은 RAM, ROM, CD-ROM(read-only compact discs), CD-R(recordable compact discs), CD-RW(rewritable compact discs), 판독-전용 디지털 다기능 디스크들(예컨대, DVD-ROM, 이중-층 DVD-ROM), 다양한 레코딩가능/재기입가능 DVD들(예컨대, DVD-RAM, DVD-RW, DVD+RW 등), 플래시 메모리(예컨대, SD 카드들, 미니-SD 카드들, 마이크로-SD 카드들 등), 자기 또는 고체 상태 하드 드라이브들, 판독-전용 및 레코딩가능 블루-레이® 디스크들, 초고밀도 광학 디스크들, 임의의 다른 광학 또는 자기 매체, 및 플로피 디스크들을 포함한다. 컴퓨터-판독가능 매체는 적어도 하나의 프로세서에 의해 실행가능하고 다양한 동작들을 수행하기 위한 명령들의 세트들을 포함하는 컴퓨터 프로그램을 저장할 수 있다. 컴퓨터 프로그램들 또는 컴퓨터 코드의 예들은 예컨대 컴파일러에 의해 생성되는 머신 코드, 및 해석기를 사용하여 컴퓨터, 전자 컴포넌트 또는 마이크로프로세서에 의해 실행되는 고급 코드를 포함하는 파일들을 포함한다.
[0072] 위의 논의가 주로 소프트웨어를 실행하는 마이크로프로세서 또는 다중-코어 프로세서들을 참조하지만, 일부 구현들은 하나 또는 그 초과의 집적 회로들, 예컨대 ASIC(application specific integrated circuit)들 또는 FPGA(field programmable gate array)들에 의해 수행된다. 일부 구현들에서, 그런 집적 회로들은 회로 자체에 저장된 명령들을 실행한다.
[0073] 본 출원의 이 명세서 및 임의의 청구항들에 사용된 바와 같이, 용어들 "컴퓨터", "서버", "프로세서" 및 "메모리"는 모두 전자 또는 다른 기술적 디바이스들을 지칭한다. 이들 용어들은 사람 또는 사람의 그룹들을 배제한다. 명세서의 목적들을 위하여, 용어들 디스플레이 또는 디스플레이하는 것은 전자 디바이스 상에 디스플레이하는 것을 의미한다. 본 출원의 이 명세서 및 임의의 청구항들에 사용된 바와 같이, 용어들 "컴퓨터 판독가능 매체" 및 "컴퓨터 판독가능 매체들"은 오로지, 컴퓨터에 의해 판독가능한 형태로 정보를 저장하는 유형의, 물리적 객체들로 제한된다. 이들 용어들은 임의의 무선 신호들, 유선 다운로드 신호들, 및 임의의 다른 임시 신호들을 배제한다.
[0074] 사용자와의 상호작용을 제공하기 위하여, 본 명세서에 설명된 청구 대상의 구현들은 사용자에게 정보를 디스플레이하기 위한 디스플레이 디바이스, 예컨대 음극선관(CRT) 또는 액정 디스플레이(LCD) 모니터 및 키보드 및 포인팅 디바이스, 예컨대 마우스 또는 트랙볼(이에 의해 사용자는 컴퓨터에게 입력을 제공할 수 있음)을 가지는 컴퓨터상에서 구현될 수 있다. 다른 종류의 디바이스들이 또한 사용자와의 상호작용을 제공하기 위하여 사용될 수 있고; 예컨대, 사용자에게 제공되는 피드백은 임의의 형태의 감각(sensory) 피드백, 예컨대 시각 피드백, 청각 피드백, 또는 촉각 피드백일 수 있고; 그리고 사용자로부터의 입력은 음향, 스피치, 또는 촉각 입력을 비롯한 임의의 형태로 수신될 수 있다. 게다가, 컴퓨터는 사용자에 의해 사용되는 디바이스에 문서들을 전송하고 이 디바이스들로부터 문서들을 수신함으로써; 예컨대 웹 브라우저로부터 수신된 요청들에 대한 응답으로 사용자의 클라이언트 디바이스 상의 웹 브라우저에 웹 페이지들을 전송함으로써 사용자와 상호작용할 수 있다.
[0075] 본 명세서에 설명된 청구 대상은 예컨대 데이터 서버로서 백엔드(back end) 컴포넌트를 포함하거나, 미들웨어 컴포넌트, 예컨대 애플리케이션 서버를 포함하거나, 프론트엔드(front end) 컴포넌트, 예컨대 사용자가 본 명세서에 설명된 청구 대상의 구현과 상호작용할 수 있는 그래픽 사용자 인터페이스 또는 웹 브라우저를 가지는 클라이언트 컴퓨터를 포함하는 컴퓨팅 시스템, 또는 하나 또는 그 초과의 그런 백엔드, 미들웨어, 또는 프론트엔드 컴포넌트들의 임의의 조합으로 구현될 수 있다. 시스템의 컴포넌트들은 디지털 데이터 통신의 임의의 형태 또는 매체, 예컨대 통신 네트워크에 의해 상호연결될 수 있다. 통신 네트워크들의 예들은 LAN(local area network) 및 WAN(wide area network), 인터-네트워크(예컨대, 인터넷), 및 피어-투-피어 네트워크들(예컨대, 애드 혹 피어-투-피어 네트워크들)을 포함한다.
[0076] 컴퓨팅 시스템은 클라이언트들 및 서버들을 포함할 수 있다. 클라이언트 및 서버는 일반적으로 서로 멀리 있고 통상적으로 통신 네트워크를 통하여 상호작용한다. 클라이언트와 서버의 관계는 개별 컴퓨터들 상에서 실행되고 서로 클라이언트-서버 관계를 가지는 컴퓨터 프로그램들 때문에 발생한다. 개시된 청구 대상의 일부 양상들에서, 서버는 데이터(예컨대, HTML 페이지)를 클라이언트 디바이스(예컨대, 클라이언트 디바이스와 상호작용하는 사용자에게 데이터를 디스플레이하고 이 사용자로부터의 사용자 입력을 수신하는 목적들을 위함)에 송신한다. 클라이언트 디바이스에 생성된 데이터(예컨대, 사용자 상호작용의 결과)는 서버에서 클라이언트 디바이스로부터 수신될 수 있다.
[0077] 개시된 프로세스들에서의 단계들의 임의의 특정 순서 또는 체계가 예시적인 접근법들의 예시인 것이 이해된다. 설계 선호도들에 기반하여, 프로세스들에서의 단계들의 특정 순서 또는 체계가 재배열될 수 있거나, 또는 모든 예시된 단계들이 수행되는 것이 이해된다. 단계들 중 일부는 동시에 수행될 수 있다. 예컨대, 특정 환경들에서, 멀티태스킹 및 병렬 프로세싱이 유리할 수 있다. 게다가, 위에서 예시된 다양한 시스템 컴포넌트들의 분리는 그런 분리를 요구하는 것으로 이해되지 않아야 하고, 그리고 설명된 프로그램 컴포넌트들 및 시스템들이 일반적으로 단일 소프트웨어 제품으로 함께 통합될 수 있거나 다수의 소프트웨어 제품들로 패키지될 수 있다는 것이 이해되어야 한다.
[0078] 이들 양상들에 대한 다양한 수정들은 쉽게 자명할 것이고, 그리고 본원에 정의된 일반적인 원리들은 다른 양상들에 적용될 수 있다. 따라서, 청구항들은 본원에 도시된 양상들로 제한되도록 의도되는 것이 아니라, 청구항 문언들과 일치하는 전체 범위에 부합될 것이고, 여기서 단수의 엘리먼트의 참조는, 구체적으로 그렇게 언급되지 않으면, "하나 및 단지 하나만"을 의미하도록 의도되는 것이 아니라 오히려 "하나 또는 그 초과"를 의미하도록 의도된다. 구체적으로 다르게 언급되지 않으면, 용어 "일부"는 하나 또는 그 초과를 지칭한다. 남성 대명사(예컨대, 그의)는 여성 및 중성(예컨대, 그녀 및 그것의)을 포함하고 그 반대도 가능하다. 제목들 및 부제목들은, 만약 있다면, 편의를 위해서만 사용되고 청구대상 기술을 제한하지 않는다.
[0079] 어구, 예컨대 "양상"은 그 양상이 청구대상 기술에 필수적이거나 그 양상이 청구대상 기술의 모든 구성들에 적용되는 것을 의미하지 않는다. 일 양상에 관한 개시내용은 모든 구성들, 또는 하나 또는 그 초과의 구성들에 적용될 수 있다. 어구 예컨대, 양상은 하나 또는 그 초과의 양상들을 지칭할 수 있고 그 반대도 가능하다. 어구, 예컨대 "구성"은 그런 구성이 청구대상 기술에 필수적이거나 그런 구성이 청구대상 기술의 모든 구성들에 적용되는 것을 의미하지 않는다. 일 구성에 관한 개시내용은 모든 구성들, 또는 하나 또는 그 초과의 구성들에 적용될 수 있다. 어구 예컨대, 구성은 하나 또는 그 초과의 구성들을 지칭할 수 있고 그 반대도 가능하다.

Claims (20)

  1. 컴퓨터에서 구현되는 방법으로서,
    호스트 플랫폼에서, 상기 호스트 플랫폼과 상이한 특정 게스트(guest) 플랫폼을 위해 쓰여진 소프트웨어 프로그램을 수신하는 단계 ― 상기 소프트웨어 프로그램은 상기 게스트 플랫폼과 연관된 공유된 객체들 또는 동적으로 로딩된 라이브러리들의 세트를 사용하고, 그리고 상기 소프트웨어 프로그램 및 상기 공유된 객체들 또는 동적으로 로딩된 라이브러리들의 세트는 상기 호스트 플랫폼과 호환가능하지 않음 ―;
    상기 호스트 플랫폼 내에서 상기 특정 게스트 플랫폼을 에뮬레이팅(emulating)하는 단계;
    상기 호스트 플랫폼이, 상기 공유된 객체들 또는 동적으로 로딩된 라이브러리들의 세트 내에 있는 특정 공유된 객체 또는 동적으로 로딩된 라이브러리로부터 이진 트랜슬레이션되지는 않았지만, 상기 특정 공유된 객체 또는 동적으로 로딩된 라이브러리와의 공통 외부 인터페이스를 구현하는 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지는지를 결정하는 단계;
    상기 호스트 플랫폼이 상기 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지면, 상기 호스트 플랫폼 내에서의 상기 소프트웨어 프로그램의 실행을 위하여 상기 특정 공유된 객체 또는 동적으로 로딩된 라이브러리 대신 상기 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리에 링크하기 위한 상기 소프트웨어 프로그램 내의 하나 또는 그 초과의 링크들을 수정하는 것에 기초하여 상기 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 사용하고, 상기 특정 공유된 객체 또는 동적으로 로딩된 라이브러리의 이진 트랜슬레이션을 회피하는 단계 ― 상기 공통 외부 인터페이스는 상기 특정 공유된 객체 또는 동적으로 로딩된 라이브러리와 같이, 펑션 호(function call)들에 응답하여 유사하거나 또는 동일한 펑션 호들, 및 유사하거나 또는 동일한 작동을 구현함 ―; 및
    상기 호스트 플랫폼이 상기 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지지 않으면, 상기 호스트 플랫폼 내에서의 상기 소프트웨어 프로그램의 실행을 위하여 상기 특정 공유된 객체 또는 동적으로 로딩된 라이브러리의 상기 이진 트랜슬레이션을 수행하는 단계
    를 포함하는,
    컴퓨터에서 구현되는 방법.
  2. 제 1 항에 있어서,
    상기 특정 공유된 객체 또는 동적으로 로딩된 라이브러리의 상기 이진 트랜슬레이션을 수행하는 단계는 제 1 이진 트랜슬레이팅된 객체를 생성하는 단계를 포함하고, 상기 제 1 이진 트랜슬레이팅된 객체의 외부 인터페이스는 상기 호스트 플랫폼에 대한 제 2 이진 트랜슬레이팅된 객체 또는 원래 상기 호스트 플랫폼용 객체에 대한 펑션 호를 포함하는,
    컴퓨터에서 구현되는 방법.
  3. 제 1 항에 있어서,
    상기 공유된 객체들 또는 동적으로 로딩된 라이브러리들의 세트는 상기 호스트 플랫폼에서의 상기 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리와 연관된 적어도 하나의 시스템 라이브러리 및 상기 호스트 플랫폼에서의 상기 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리와 연관되지 않은 적어도 하나의 벤더(vendor) 라이브러리를 포함하는,
    컴퓨터에서 구현되는 방법.
  4. 제 1 항에 있어서,
    상기 특정 게스트 플랫폼은 ARM 하드웨어를 포함하고, 그리고 상기 호스트 플랫폼은 x86 하드웨어를 포함하는,
    컴퓨터에서 구현되는 방법.
  5. 삭제
  6. 제 1 항에 있어서,
    상기 호스트 플랫폼 내에서의 상기 소프트웨어 프로그램의 실행을 위하여 상기 특정 공유된 객체 또는 동적으로 로딩된 라이브러리 대신 상기 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 사용하는 것은:
    상기 특정 공유된 객체 또는 동적으로 로딩된 라이브러리에 대한 호들이 상기 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리에 대한 호들로 전환(convert)되도록 브리지(bridge)를 제공하는 것을 포함하는,
    컴퓨터에서 구현되는 방법.
  7. 제 1 항에 있어서,
    에뮬레이팅된 게스트 플랫폼의 상태 또는 상기 호스트 플랫폼의 상태에 대한 액세스를 요구하는 호를 수신하는 단계; 및
    상기 호에 대한 응답으로, 상기 에뮬레이팅된 게스트 플랫폼의 상태를 상기 호스트 플랫폼의 상태와 동기화하는 단계
    를 더 포함하는,
    컴퓨터에서 구현되는 방법.
  8. 명령들을 포함하는 비-일시적 컴퓨터-판독가능 매체로서,
    상기 명령들은, 하나 또는 그 초과의 컴퓨터들에 의해 실행될 때, 상기 하나 또는 그 초과의 컴퓨터들로 하여금:
    호스트 플랫폼에서, 상기 호스트 플랫폼과 상이한 특정 게스트 플랫폼을 위해 쓰여진 소프트웨어 프로그램을 수신하는 단계 ― 상기 소프트웨어 프로그램은 상기 게스트 플랫폼과 연관된 공유된 객체들 또는 동적으로 로딩된 라이브러리들의 세트를 사용하고, 그리고 상기 소프트웨어 프로그램 및 상기 공유된 객체들 또는 동적으로 로딩된 라이브러리들의 세트는 상기 호스트 플랫폼과 호환가능하지 않음 ―;
    상기 호스트 플랫폼이, 상기 공유된 객체 또는 동적으로 로딩된 라이브러리들의 세트 내에 있는 특정 공유된 객체 또는 동적으로 로딩된 라이브러리로부터 이진 트랜슬레이션되지는 않았지만, 상기 특정 공유된 객체 또는 동적으로 로딩된 라이브러리와의 공통 외부 인터페이스를 구현하는 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지는지를 결정하는 단계;
    상기 호스트 플랫폼이 상기 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지면, 상기 호스트 플랫폼 내에서의 상기 소프트웨어 프로그램의 실행을 위하여 상기 특정 공유된 객체 또는 동적으로 로딩된 라이브러리 대신 상기 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리에 링크하기 위한 상기 소프트웨어 프로그램 내의 하나 또는 그 초과의 링크들을 수정하는 것에 기초하여 상기 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 사용하고, 상기 특정 공유된 객체 또는 동적으로 로딩된 라이브러리의 이진 트랜슬레이션을 회피하는 단계 ― 상기 공통 외부 인터페이스는 상기 특정 공유된 객체 또는 동적으로 로딩된 라이브러리와 같이, 펑션 호들에 응답하여 유사하거나 또는 동일한 펑션 호들, 및 유사하거나 또는 동일한 작동을 구현함 ―; 및
    상기 호스트 플랫폼이 상기 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지지 않으면, 상기 호스트 플랫폼 내에서의 상기 소프트웨어 프로그램의 실행을 위하여 상기 특정 공유된 객체 또는 동적으로 로딩된 라이브러리의 상기 이진 트랜슬레이션을 수행하는 단계
    를 포함하는 방법을 구현하게 하는,
    명령들을 포함하는 비-일시적 컴퓨터-판독가능 매체.
  9. 제 8 항에 있어서,
    상기 특정 공유된 객체 또는 동적으로 로딩된 라이브러리의 상기 이진 트랜슬레이션을 수행하는 단계는 제 1 이진 트랜슬레이팅된 객체를 생성하는 단계를 포함하고, 상기 제 1 이진 트랜슬레이팅된 객체의 외부 인터페이스는 상기 호스트 플랫폼에 대한 제 2 이진 트랜슬레이팅된 객체 또는 원래 상기 호스트 플랫폼용 객체에 대한 펑션 호를 포함하는,
    명령들을 포함하는 비-일시적 컴퓨터-판독가능 매체.
  10. 제 8 항에 있어서,
    상기 공유된 객체들 또는 동적으로 로딩된 라이브러리들의 세트는 상기 호스트 플랫폼에서의 상기 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리와 연관된 적어도 하나의 시스템 라이브러리 및 상기 호스트 플랫폼에서의 상기 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리와 연관되지 않은 적어도 하나의 벤더 라이브러리를 포함하는,
    명령들을 포함하는 비-일시적 컴퓨터-판독가능 매체.
  11. 제 8 항에 있어서,
    상기 특정 게스트 플랫폼은 ARM 하드웨어를 포함하고, 그리고 상기 호스트 플랫폼은 x86 하드웨어를 포함하는,
    명령들을 포함하는 비-일시적 컴퓨터-판독가능 매체.
  12. 삭제
  13. 제 8 항에 있어서,
    상기 호스트 플랫폼 내에서의 상기 소프트웨어 프로그램의 실행을 위하여 상기 특정 공유된 객체 또는 동적으로 로딩된 라이브러리 대신 상기 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 사용하는 것은:
    상기 특정 공유된 객체 또는 동적으로 로딩된 라이브러리에 대한 호들이 상기 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리에 대한 호들로 전환되도록 브리지를 제공하는 것을 포함하는,
    명령들을 포함하는 비-일시적 컴퓨터-판독가능 매체.
  14. 제 8 항에 있어서,
    상기 방법은 상기 호스트 플랫폼 내에서 상기 특정 게스트 플랫폼을 에뮬레이팅하는 단계를 더 포함하는,
    명령들을 포함하는 비-일시적 컴퓨터-판독가능 매체.
  15. 제 14 항에 있어서,
    상기 방법은:
    에뮬레이팅된 게스트 플랫폼의 상태 또는 상기 호스트 플랫폼의 상태에 대한 액세스를 요구하는 호를 수신하는 단계; 및
    상기 호에 대한 응답으로, 상기 에뮬레이팅된 게스트 플랫폼의 상태를 상기 호스트 플랫폼의 상태와 동기화하는 단계
    를 더 포함하는,
    명령들을 포함하는 비-일시적 컴퓨터-판독가능 매체.
  16. 시스템으로서,
    하나 또는 그 초과의 프로세서들; 및
    명령들을 포함하는 메모리
    를 포함하고,
    상기 명령들은, 상기 하나 또는 그 초과의 프로세서들에 의해 실행될 때, 상기 하나 또는 그 초과의 프로세서들로 하여금:
    호스트 플랫폼에서, 상기 호스트 플랫폼과 상이한 특정 게스트 플랫폼을 위해 쓰여진 소프트웨어 프로그램을 수신하는 단계 ― 상기 소프트웨어 프로그램은 상기 게스트 플랫폼과 연관된 공유된 객체들 또는 동적으로 로딩된 라이브러리들의 세트를 사용하고, 그리고 상기 소프트웨어 프로그램 및 상기 공유된 객체들 또는 동적으로 로딩된 라이브러리들의 세트는 상기 호스트 플랫폼과 호환가능하지 않음 ―;
    상기 호스트 플랫폼 내에서 상기 특정 게스트 플랫폼을 에뮬레이팅하는 단계;
    상기 호스트 플랫폼이, 상기 공유된 객체들 또는 동적으로 로딩된 라이브러리들의 세트 내에 있는 특정 공유된 객체 또는 동적으로 로딩된 라이브러리로부터 이진 트랜슬레이션되지는 않았지만, 상기 특정 공유된 객체 또는 동적으로 로딩된 라이브러리와의 공통 외부 인터페이스를 구현하는 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지는지를 결정하는 단계;
    상기 호스트 플랫폼이 상기 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지면, 상기 특정 공유된 객체 또는 동적으로 로딩된 라이브러리 대신 상기 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리에 링크하기 위한 상기 소프트웨어 프로그램 내의 링크들을 동적으로 수정함으로써 상기 호스트 플랫폼 내에서의 상기 소프트웨어 프로그램의 실행을 위하여 상기 특정 공유된 객체 또는 동적으로 로딩된 라이브러리 대신 상기 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 사용하고, 상기 특정 공유된 객체 또는 동적으로 로딩된 라이브러리의 이진 트랜슬레이션을 회피하는 단계 ― 상기 공통 외부 인터페이스는 상기 특정 공유된 객체 또는 동적으로 로딩된 라이브러리와 같이, 펑션 호들에 응답하여 유사하거나 또는 동일한 펑션 호들, 및 유사하거나 또는 동일한 작동을 구현함 ―; 및
    상기 호스트 플랫폼이 상기 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 가지지 않으면, 상기 호스트 플랫폼 내에서의 상기 소프트웨어 프로그램의 실행을 위하여 상기 특정 공유된 객체 또는 동적으로 로딩된 라이브러리의 상기 이진 트랜슬레이션을 수행하는 단계
    를 포함하는 방법을 구현하게 하는,
    시스템.
  17. 제 16 항에 있어서,
    상기 공유된 객체들 또는 동적으로 로딩된 라이브러리들의 세트는 상기 호스트 플랫폼에서의 상기 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리와 연관된 적어도 하나의 시스템 라이브러리 및 상기 호스트 플랫폼에서의 상기 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리와 연관되지 않은 적어도 하나의 벤더 라이브러리를 포함하는,
    시스템.
  18. 제 16 항에 있어서,
    상기 특정 게스트 플랫폼은 ARM 하드웨어를 포함하고, 그리고 상기 호스트 플랫폼은 x86 하드웨어를 포함하는,
    시스템.
  19. 제 16 항에 있어서,
    상기 호스트 플랫폼 내에서의 상기 소프트웨어 프로그램의 실행을 위하여 상기 특정 공유된 객체 또는 동적으로 로딩된 라이브러리 대신 상기 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리를 사용하는 것은:
    상기 특정 공유된 객체 또는 동적으로 로딩된 라이브러리에 대한 호들이 상기 대응하는 공유된 객체 또는 동적으로 로딩된 라이브러리에 대한 호들로 전환되도록 브리지를 제공하는 것을 포함하는,
    시스템.
  20. 제 16 항에 있어서,
    상기 방법은:
    에뮬레이팅된 게스트 플랫폼의 상태 또는 상기 호스트 플랫폼의 상태에 대한 액세스를 요구하는 호를 수신하는 단계; 및
    상기 호에 대한 응답으로, 상기 에뮬레이팅된 게스트 플랫폼의 상태를 상기 호스트 플랫폼의 상태와 동기화하는 단계
    를 더 포함하는,
    시스템.
KR1020177027874A 2015-04-10 2015-04-10 공유된 객체 레벨에 대한 이진 트랜슬레이션 KR102023668B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/IB2015/000937 WO2016162721A1 (en) 2015-04-10 2015-04-10 Binary translation on shared object level

Publications (2)

Publication Number Publication Date
KR20170130447A KR20170130447A (ko) 2017-11-28
KR102023668B1 true KR102023668B1 (ko) 2019-09-20

Family

ID=57071905

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177027874A KR102023668B1 (ko) 2015-04-10 2015-04-10 공유된 객체 레벨에 대한 이진 트랜슬레이션

Country Status (8)

Country Link
US (1) US10007497B2 (ko)
EP (1) EP3259664B1 (ko)
JP (1) JP6559793B2 (ko)
KR (1) KR102023668B1 (ko)
CN (1) CN107408052B (ko)
DE (1) DE112015006436T5 (ko)
GB (1) GB2554553B (ko)
WO (1) WO2016162721A1 (ko)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6458146B2 (ja) * 2015-07-08 2019-01-23 株式会社日立製作所 計算機及びメモリ領域管理方法
US10572310B2 (en) 2016-09-21 2020-02-25 International Business Machines Corporation Deploying and utilizing a software library and corresponding field programmable device binary
US10599479B2 (en) 2016-09-21 2020-03-24 International Business Machines Corporation Resource sharing management of a field programmable device
US9996334B2 (en) * 2016-09-21 2018-06-12 International Business Machines Corporation Deploying and utilizing a software library and corresponding field programmable device binary
US10355945B2 (en) 2016-09-21 2019-07-16 International Business Machines Corporation Service level management of a workload defined environment
US10417012B2 (en) 2016-09-21 2019-09-17 International Business Machines Corporation Reprogramming a field programmable device on-demand
US10354690B2 (en) * 2016-12-19 2019-07-16 Modulus Media Systems, Inc. Method for capturing and recording high-definition video and audio output as broadcast by commercial streaming service providers
US10152313B1 (en) * 2017-12-19 2018-12-11 International Business Machines Corporation Shared library transformation on the same architecture
US11709670B2 (en) * 2020-04-14 2023-07-25 Advanced Micro Devices, Inc. Identifying and configuring compatible versions of runtime components by shared libraries
CN112114778B (zh) * 2020-07-03 2024-04-02 上海金融期货信息技术有限公司 一种支持水平扩展的跨平台动态库算法管理系统
CN111858778B (zh) * 2020-08-18 2023-11-10 天津速越科技有限公司 基于蓝牙ic卡的服务器端数据读写方法及动态库使能器
US11675593B2 (en) * 2021-08-31 2023-06-13 International Business Machines Corporation Dynamically updating a dynamic library
US11900087B1 (en) * 2022-03-23 2024-02-13 Amazon Technologies, Inc. Application binary replatforming as a service

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120296626A1 (en) * 2011-05-16 2012-11-22 Microsoft Corporation Instruction set emulation for guest operating systems
US20130103380A1 (en) * 2011-10-19 2013-04-25 Hob Gmbh & Co. Kg System and method for controlling multiple computer peripheral devices using a generic driver
US20150089502A1 (en) * 2013-09-25 2015-03-26 Privatecore, Inc. Method and System for Providing Secure System Execution on Hardware Supporting Secure Application Execution

Family Cites Families (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6463582B1 (en) * 1998-10-21 2002-10-08 Fujitsu Limited Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method
JP4130713B2 (ja) * 1998-10-21 2008-08-06 松下電器産業株式会社 プログラム変換装置
US20020046305A1 (en) * 1999-02-17 2002-04-18 Babaian Boris A. Method for effective binary translation between different instruction sets using emulated supervisor flag and multiple page tables
US6907519B2 (en) * 2001-11-29 2005-06-14 Hewlett-Packard Development Company, L.P. Systems and methods for integrating emulated and native code
US7496494B2 (en) * 2002-09-17 2009-02-24 International Business Machines Corporation Method and system for multiprocessor emulation on a multiprocessor host system
GB0316531D0 (en) * 2003-07-15 2003-08-20 Transitive Ltd Method and apparatus for performing native binding
US7434209B2 (en) * 2003-07-15 2008-10-07 Transitive Limited Method and apparatus for performing native binding to execute native code
US7290253B1 (en) * 2003-09-30 2007-10-30 Vmware, Inc. Prediction mechanism for subroutine returns in binary translation sub-systems of computers
US7984304B1 (en) * 2004-03-02 2011-07-19 Vmware, Inc. Dynamic verification of validity of executable code
US8214622B2 (en) * 2004-05-27 2012-07-03 International Business Machines Corporation Facilitating management of storage of a pageable mode virtual environment absent intervention of a host of the environment
JP2006244009A (ja) * 2005-03-02 2006-09-14 Seiko Epson Corp ダウンロードシステム、サーバ装置およびドライバ提供方法
US20070006178A1 (en) * 2005-05-12 2007-01-04 Microsoft Corporation Function-level just-in-time translation engine with multiple pass optimization
US7496495B2 (en) * 2005-05-12 2009-02-24 Microsoft Corporation Virtual operating system device communication relying on memory access violations
CN100359472C (zh) * 2005-07-01 2008-01-02 中国科学院计算技术研究所 一种二进制翻译中库函数调用的处理方法
US20070016895A1 (en) * 2005-07-15 2007-01-18 Microsoft Corporation Selective omission of endian translation to enhance emulator performance
US8572606B1 (en) * 2005-12-29 2013-10-29 Vmware, Inc. System and method for avoiding synchronization bugs through virtualization
KR100810268B1 (ko) * 2006-04-06 2008-03-06 삼성전자주식회사 모바일 디스플레이 장치에서의 색약자를 위한 구현 방법
US20150088982A1 (en) * 2006-09-25 2015-03-26 Weaved, Inc. Load balanced inter-device messaging
US20160344745A1 (en) * 2006-09-25 2016-11-24 Weaved, Inc. Method and protocol for secure device deployment using a partially-encrypted provisioning file
GB2442495B (en) * 2006-10-02 2009-04-01 Transitive Ltd Method and apparatus for handling dynamically linked function cells with respect to program code conversion
US8166492B2 (en) * 2007-04-10 2012-04-24 Microsoft Corporation Application compatibility using a hybrid environment
US8561061B2 (en) * 2007-05-14 2013-10-15 Vmware, Inc. Adaptive dynamic selection and application of multiple virtualization techniques
US9740637B2 (en) * 2007-10-30 2017-08-22 Vmware, Inc. Cryptographic multi-shadowing with integrity verification
US8819676B2 (en) * 2007-10-30 2014-08-26 Vmware, Inc. Transparent memory-mapped emulation of I/O calls
US8086811B2 (en) * 2008-02-25 2011-12-27 International Business Machines Corporation Optimizations of a perform frame management function issued by pageable guests
US8176280B2 (en) * 2008-02-25 2012-05-08 International Business Machines Corporation Use of test protection instruction in computing environments that support pageable guests
US8095773B2 (en) * 2008-02-26 2012-01-10 International Business Machines Corporation Dynamic address translation with translation exception qualifier
US20090271172A1 (en) * 2008-04-24 2009-10-29 International Business Machines Corporation Emulating A Computer Run Time Environment
US8346531B2 (en) * 2008-11-05 2013-01-01 Oracle America, Inc. Handling mutex locks in a dynamic binary translation across heterogeneous computer systems
CN101482851B (zh) * 2008-12-31 2011-02-16 中国科学院计算技术研究所 二进制翻译器中线程共享目标本地码缓存替换方法及系统
US8738932B2 (en) * 2009-01-16 2014-05-27 Teleputers, Llc System and method for processor-based security
US20100262722A1 (en) * 2009-04-10 2010-10-14 Christophe Vauthier Dynamic Assignment of Graphics Processing Unit to a Virtual Machine
US9766911B2 (en) * 2009-04-24 2017-09-19 Oracle America, Inc. Support for a non-native application
US8479176B2 (en) * 2010-06-14 2013-07-02 Intel Corporation Register mapping techniques for efficient dynamic binary translation
US8595469B2 (en) * 2010-06-24 2013-11-26 International Business Machines Corporation Diagnose instruction for serializing processing
WO2012003486A1 (en) * 2010-07-01 2012-01-05 Neodana, Inc. A system and method for virtualization and cloud security
CN102141929B (zh) * 2010-10-21 2014-05-07 华为技术有限公司 应用程序的运行方法、模拟器、宿主机及系统
US9600429B2 (en) * 2010-12-09 2017-03-21 Solarflare Communications, Inc. Encapsulated accelerator
US8880851B2 (en) * 2011-04-07 2014-11-04 Via Technologies, Inc. Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US9098309B2 (en) * 2011-09-23 2015-08-04 Qualcomm Incorporated Power consumption optimized translation of object code partitioned for hardware component based on identified operations
US8819648B2 (en) * 2012-07-20 2014-08-26 International Business Machines Corporation Control flow management for execution of dynamically translated non-native code in a virtual hosting environment
US8812873B2 (en) * 2012-09-26 2014-08-19 Intel Corporation Secure execution of a computer program using binary translators
US9405551B2 (en) * 2013-03-12 2016-08-02 Intel Corporation Creating an isolated execution environment in a co-designed processor
WO2014155684A1 (ja) * 2013-03-29 2014-10-02 富士通株式会社 プログラム、情報処理システム、およびプログラム移行方法
US9658867B2 (en) * 2013-05-30 2017-05-23 Hewlett Packard Enterprise Development Lp Preserving object code translations of a library for future reuse by an emulator
CN103885814B (zh) * 2014-03-20 2017-05-17 百度在线网络技术(北京)有限公司 在x86架构上运行ARM APK的模拟器装置和方法
US20150355946A1 (en) * 2014-06-10 2015-12-10 Dan-Chyi Kang “Systems of System” and method for Virtualization and Cloud Computing System
US20150379169A1 (en) * 2014-06-27 2015-12-31 Yong Wu Efficient emulation for pseudo-wrapped callback handling in binary translation software

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120296626A1 (en) * 2011-05-16 2012-11-22 Microsoft Corporation Instruction set emulation for guest operating systems
US20130103380A1 (en) * 2011-10-19 2013-04-25 Hob Gmbh & Co. Kg System and method for controlling multiple computer peripheral devices using a generic driver
US20150089502A1 (en) * 2013-09-25 2015-03-26 Privatecore, Inc. Method and System for Providing Secure System Execution on Hardware Supporting Secure Application Execution

Also Published As

Publication number Publication date
CN107408052B (zh) 2021-04-16
CN107408052A (zh) 2017-11-28
KR20170130447A (ko) 2017-11-28
US10007497B2 (en) 2018-06-26
GB2554553B (en) 2021-12-01
US20170039050A1 (en) 2017-02-09
EP3259664A1 (en) 2017-12-27
EP3259664A4 (en) 2018-12-05
DE112015006436T5 (de) 2018-01-04
EP3259664B1 (en) 2022-07-06
JP2018508083A (ja) 2018-03-22
JP6559793B2 (ja) 2019-08-14
GB201714961D0 (en) 2017-11-01
WO2016162721A1 (en) 2016-10-13
GB2554553A (en) 2018-04-04
WO2016162721A8 (en) 2016-12-15

Similar Documents

Publication Publication Date Title
KR102023668B1 (ko) 공유된 객체 레벨에 대한 이진 트랜슬레이션
US9910833B2 (en) Automatically rendering web and/or hybrid applications natively in parallel
US9910721B2 (en) System and method for execution of application code compiled according to two instruction set architectures
US10417026B2 (en) Binary editing of applications executed by virtual machines
US20160085604A1 (en) Dynamic method invocation via proxy framework
KR102002143B1 (ko) 네이티브 클라이언트로의 이진 변환
WO2016000550A1 (zh) 共享库的二进制翻译执行方法和装置
EP3752914B1 (en) Techniques for native runtime of hypertext markup language graphics content
US10268498B2 (en) Web browser for spoofing supported features
US9300760B2 (en) Machine-specific instruction set translation
US10579373B2 (en) Seamless extension porting
Liu et al. KMRE: An Efficient and Compatible Runtime to Execute Android Application on Linux System

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant