KR101665219B1 - 네스티드 에뮬레이션 및 동적 링킹 환경 - Google Patents
네스티드 에뮬레이션 및 동적 링킹 환경 Download PDFInfo
- Publication number
- KR101665219B1 KR101665219B1 KR1020147026067A KR20147026067A KR101665219B1 KR 101665219 B1 KR101665219 B1 KR 101665219B1 KR 1020147026067 A KR1020147026067 A KR 1020147026067A KR 20147026067 A KR20147026067 A KR 20147026067A KR 101665219 B1 KR101665219 B1 KR 101665219B1
- Authority
- KR
- South Korea
- Prior art keywords
- library
- call
- isa
- application
- source
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45508—Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
- G06F9/4552—Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
다양한 실시예들은 소스 애플리케이션 및 소스 에뮬레이터를 위한 네스티드 에뮬레이션을 포함한다. 듀플리케이트 소스 ISA 라이브러리들은 소스 에뮬레이터 라이브러리 호출들을 타겟 라이브러리로 리디렉션하며, 그럼으로써 제1 ISA 와 제2 ISA 간에 적절한 에뮬레이션 채널들을 통해 네이티브 에뮬레이터가 실행된다. 다른 실시예들은 PLT 코드의 에뮬레이션을 통해 처리되는 것이 아니라 대신에 PLT 코드 번역이 필요없이 직접 호출되는 특정 함수 호출들을 결정함으로써 동적 링킹을 가속하는 것에 관한 것이다. 몇몇 실시예들은 네스티드 에뮬레이션과 가속 동적 링킹 둘 다를 다루지만 다른 실시예들은 네스티드 에뮬레이션과 가속 동적 링킹 중 하나를 포함한다. 다른 실시예들도 여기에 기술된다.
Description
컴퓨팅 장치는 명령어 집합 아키텍처(ISA; Instruction Set Architecture)로 특성화될 수 있다. 통상, 컴퓨팅 장치는 운영 시스템(OS) 서비스를 포함할 수 있고, OS 서비스는 애플리케이션 개발자들이 컴퓨팅 장치에서 작동하는 애플리케이션을 개발하는데 도움을 주기 위해서 컴퓨팅 장치의 ISA용으로 개발된 런타임 라이브러리(LIB) 서비스를 포함할 수 있다. 이 애플리케이션이 컴퓨팅 장치의 ISA가 아닌 ISA용으로 쓰여져 있다면, 이 애플리케이션은 에뮬레이트될 필요가 있다. 구체적으로, 에뮬레이션은 애플리케이션(제1 ISA용으로 쓰여짐)이 컴퓨팅 장치의 아키텍처(이는 제2 ISA를 이용함)에서 실행할 수 있게 해준다. 애플리케이션들의 ISA 의존 부분들은 타겟 LIB 서비스들을 이용하여 에뮬레이트될 필요가 있는 소스 LIB 서비스들에 대한 함수 호출(function calls)을 포함할 수 있다. 더욱이, 애플리케이션들의 ISA 의존 부분들은 콜백 함수(callback function)들(예를 들어, ISA 의존 런타임 LIB로부터 에뮬레이트된 애플리케이션으로 콜백하는 함수들, 에뮬레이트될 필요가 있는 소스 LIB 서비스들로 콜백하는 함수들)을 포함할 수 있다. 그러한 콜백들은 런타임때까지는 발견되지 않을 수 있고, 그럼으로써 2개의 ISA를 브리지(bridge)하는데 있어 전통적인 접근방식(예로, 이진 번역)을 렌더링하는 것은 비효과적이다.
위의 애플리케이션들을 실행하기 위해서, 애플리케이션은 링크될 필요가 있을 수 있다. 링킹(linking)은 상호접속 기준들(interconnection references)(예를 들어, 애플리케이션에 의해 호출된 라이브러리 루틴 간의 상호접속)을 리졸브(resolve)하여 컴파일 모듈들(예로, 라이브러리들)로부터 실행가능 프로그램을 생성한다. 이러한 링킹(또한 여기서 수시로 "로딩(loading)"이라 불린다)은 이진 번역 시스템(BT)를 통해서 동적으로 실행될 수 있다. 동적 링킹은 프로그램이 실행을 시작할 때까지 링킹 프로세스를 많이 연기한다. 동적 링커는 실행가능 프로그램이 실행될 때 실행가능 프로그램에 대한 공유 라이브러리들을 로드하여 링크하는 OS의 일부일 수 있다. 이러한 기법은 동적 링크된 라이브러리 내의 타겟 함수에 애플리케이션의 라이브러리 호출을 디렉션(direction)하기 위해서 PLT(procedure linking table), GOT(global offset table) 및 간접 점프(indirect jump)를 이용할 수 있다.
본 발명의 실시예들은 첨부 도면에 도시되어 있는 예시적인 실시예에 의해 기술되지만 한정이 아니며 첨부 도면에서 동일 참조 부호는 유사한 요소들을 나타낸다.
도 1은 본 발명의 한 실시예에서 ISA 브리징을 포함하는 컴퓨팅 장치를 도시하고 있다.
도 2는 도 1의 ISA 브리징 층을 좀더 상세히 도시하고 있다.
도 3 및 4는 본 발명의 실시예들에 있어서 소스 ISA의 애플리케이션과 타겟 ISA의 라이브러리 서비스들 간의 호출과 콜백을 브리지하기 위한 방법들을 도시하고 있다.
도 5는 본 발명의 일 실시예에서 BT 시스템을 도시하고 있다.
도 6 및 7은 각각 본 발명의 실시예들에서 동적 링킹을 가속하기 위한 방법들 및 의사 코드를 도시하고 있다.
도 1은 본 발명의 한 실시예에서 ISA 브리징을 포함하는 컴퓨팅 장치를 도시하고 있다.
도 2는 도 1의 ISA 브리징 층을 좀더 상세히 도시하고 있다.
도 3 및 4는 본 발명의 실시예들에 있어서 소스 ISA의 애플리케이션과 타겟 ISA의 라이브러리 서비스들 간의 호출과 콜백을 브리지하기 위한 방법들을 도시하고 있다.
도 5는 본 발명의 일 실시예에서 BT 시스템을 도시하고 있다.
도 6 및 7은 각각 본 발명의 실시예들에서 동적 링킹을 가속하기 위한 방법들 및 의사 코드를 도시하고 있다.
다양한 동작들은 차례로 예시적인 실시예들을 이해하는데 가장 도움이 되는 식으로 다수의 이산 동작들로 설명되며; 그러나, 이러한 설명의 순서는 이들 동작이 반듯이 순서 의존임을 의미하는 것으로 해석되지 않아야 한다. 특히, 이들 동작은 제시 순서로 실행될 필요는 없다. 더욱이, 개별 동작으로서 동작들에 대한 설명은 이들 동작이 반듯이 독립적으로 및/또는 개별 엔티티들에 의해서 실행될 필요가 있는 것으로 해석되지 않아야 한다. 마찬가지로 개별 모듈로서의 엔티티들 및/또는 모듈들에 대한 설명은 이들 모듈이 개별적이어야 하고 및/또는 개별 동작들을 실행할 것을 요구하는 것으로 해석되지 않아야 한다. 다양한 실시예에서, 도시되고 및/또는 설명된 동작들, 엔티티들, 데이터, 및/또는 모듈들은 합쳐질 수 있고, 서브-파트들로 더 분리될 수 있고, 및/또는 생략될 수 있다. 구 "실시예"는 반복해서 이용된다. 이 구는 일반적으로 동일 실시예를 나타내지 않으며; 그러나, 이는 그럴 수도 있다. 용어들 "포함하는", "갖는", 및 "구비하는"은 문맥이 달리 나타내지 않는 한 동의어이다. 구 "A/B"는 "A 또는 B"를 의미한다. 구 "A 및/또는 B"는 "(A), (B), 또는 (A 및 B)"를 의미한다. 구 "A, B 및 C 중 적어도 하나"는 "(A), (B), (C), (A 및 B), (A 및 C), (B 및 C) 또는 (A, B 및 C)"를 의미한다.
다양한 실시예들은 소스 애플리케이션 및 소스 에뮬레이터를 위한 네스티드 에뮬레이션을 포함한다. 듀플리케이트(duplicate) 소스 ISA 라이브러리들은 소스 에뮬레이터 라이브러리 호출들을 타겟 라이브러리로 리디렉션(redirection)하며, 그럼으로써 제1 ISA와 제2 ISA 간에 적절한 에뮬레이션 채널들을 통해 네이티브(native) 에뮬레이터가 실행된다. 다른 실시예들은 PLT 코드의 에뮬레이션을 통해 처리되는 것이 아니라 대신에 PLT 코드 번역이 필요없이 직접 호출되는 특정 함수 호출들을 결정함으로써 동적 링킹을 가속하는 것에 관한 것이다. 몇몇 실시예들은 네스티드 에뮬레이션과 가속 동적 링킹을 둘 다 다루고 있지만 다른 실시예들은 네스티드 에뮬레이션과 가속 동적 링킹 중 하나를 포함한다.
도 1은 한 실시예에서 ISA 브리징(선택적으로 콜백에 따라)을 포함하는 컴퓨팅 장치의 예를 도시하고 있다. 컴퓨팅 장치(102)는 도시된 바와 같이 서로 연결되어 있는(즉, 직접 또는 간접으로), OS(122), ISA 브리징 층(123), 애플리케이션(120)을 포함하거나 이들에 연결되는 프로세서 및 메모리 배열(104), 그래픽 처리 유닛(GPU)(106), 표시 유닛(108) 및 네트워킹 인터페이스(110)를 포함할 수 있다. OS(122)는 라이브러리 서비스들(124)(심볼 "A" 내지 "H"를 집합적으로 포함하는 라이브러리들(127, 128)로 세분되어 있음)을 포함할 수 있다. 컴퓨팅 장치(102)는 또한 애플리케이션(120)과 OS(122) 간에 선택적 미들웨어(121)를 포함할 수 있다. 이하 좀더 상세히 기술되듯이, ISA 브리징 층(123)은, 애플리케이션(120)이 전체 또는 부분적으로(예로, ISA-독립 미들웨어(121)가 또한 이용될 때) 소스 ISA에서 구현되게하는 한편 OS(122)(라이브러리 서비스들(124)을 포함함)가 소스 ISA와는 다른 타겟 ISA에서 구현될 수 있게 해주는 다양한 런타임 피처들과 서비스들(동적 바인딩(dynamic binding)을 포함하지만 이에 한정되지 않음)로 구성될 수 있다. 더욱이, 애플리케이션(120)은 다양한 조건에서 애플리케이션(120)의 다양한 콜백 함수(125)를 "콜백"하기 위해 라이브러리 서비스들(124)의 다양한 요소(예로, 함수들)를 필요로 하는 라이브러리 서비스들(124)의 이용 특성들을 포함하는 애플리케이션(특히, 소스 ISA를 이용하여 구현된 부분)일 수 있다. ISA 브리징 층(123)은 또한 여기서 프로세스 가상 머신(PVM; process virtual machine)으로 칭해질 수 있다.
컴퓨팅 장치(102)는 서버, 데스크톱 컴퓨터, 랩톱 컴퓨터, 태블릿 컴퓨터, 스마트폰, PDA(personal digital assistant), 게임 콘솔, 인터넷 어플라이언스(Internet appliance), 모바일 인터넷 장치, 셀 폰, 모바일 네트워킹 장치, 모바일 컴퓨팅 노드, 또는 다른 컴퓨팅 장치일 수 있다. 프로세서 및 메모리 배열(104)은 다양한 실행 속도 및 소비 전력의 단일 또는 멀티-코어 프로세서들, 및 다양한 아키텍처(예로, 1 이상의 캐시 레벨을 갖는)와 다양한 유형(예로, 동적 랜덤 액세스, 플래시 등)의 메모리를 갖는 넓은 범위의 프로세서 및 메모리 배열을 나타낸다. 다양한 실시예에서, GPU(106)는 비디오 디코딩 및/또는 그래픽 처리 기능들을 OS(122)에 제공하도록 구성될 수 있고, 표시 유닛(108)은 멀티-미디어 콘텐츠(예로, HD 비디오)가 거기서 렌더링될 수 있게 하도록 구성될 수 있다. 유사하게, GPU(106) 및 표시 유닛(108)은 이 방면에 알려져 있는 넓은 범위의 그래픽 프로세서들 및 표시 요소들을 나타내는 것으로 의도된다. 마찬가지로, 네트워크(들)(134)는 이 방면에 알려져 있는 넓은 범위의 네트워크를 나타내는 것으로 의도된다. 네트워크(들)(134)의 예는 인터넷을 포함해서, 유선 또는 무선, 로컬 또는 광역, 사설 또는 공공 네트워크를 포함할 수 있다. OS(122)(라이브러리 서비스들(124)을 포함함)는, 라이브러리 서비스(124)의 호출(invocation)을 정의하는 애플리케이션 프로그래밍 인터페이스(API)를 제외하고, 이 방면에 알려져 있는 넓은 범위의 OS 요소들을 나타낸다. OS(122)는 메모리 자원들, 스케줄 태스크 실행 등을 관리하도록 구성된 커널(kernel), 및 다양한 장치 자원을 관리하도록 구성된 장치 드라이버들을 포함할 수 있다. 실시예들에서, OS(122)는 선택적인 미들웨어(121)의 지원을 받는 가상 머신(예로, Android™ 애플리케이션 프레임워크의 지원을 받는 Android™ 가상 머신)을 포함할 수 있다. 라이브러리 서비스들(124)의 호출을 정의하는 것 외에, 애플리케이션(120)의 콜백 함수들(125)의 호출을 가능하게 하기 위해서, 라이브러리 서비스들(124)의 API는 또한 애플리케이션(120)의 콜백 함수들(125)의 대응 스터브(stub)들 및 시그너춰(signature)들을 포함할 수 있다. OS(122)의 예는 Windows® 운영 시스템, Linux®, Android™, iOS®, 등을 포함할 수 있다. 유사하게, 선택적인 미들웨어(121)는 ISA-독립 미들웨어를 포함하지만 이에 한정되지 않는 넓은 범위의 미들웨어 요소들을 나타내는 것으로 의도된다. 미들웨어(121)의 예는 Android™ 애플리케이션 프레임워크, Java™, 또는 다른 애플리케이션 프레임워크들 또는 ISA-독립 실행 환경들을 포함하지만 이들에 한정되지 않는다. 마찬가지로, 애플리케이션(120)(콜백 함수들(125)을 포함함)은 퍼스널 어시스턴트(personal assistant), 생산성(productivity), 소셜 네트워킹 애플리케이션, 캘린더링(calendaring), 워드 프로세싱, 스프레드시트, Twitter®, Facebook®, 브라우저 등을 위한 애플리케이션을 포함하는 넓은 범위의 애플리케이션을 나타낸다.
도 2의 논의 후에 도 1의 나머지 요소들이 이하 더 논의된다
도 2에서, ISA 브리징 층(123)은 ISA 브리징 로더(202), 소스 ISA 에뮬레이터(204), 및 타겟 ISA 라이브러리 에뮬레이터(206)(동적 바인딩 서비스들을 포함하는 다양한 런타임 피처들과 서비스들을 제공하도록 구성됨)를 포함할 수 있다. 소스 ISA 에뮬레이터(204)는 소스 ISA 콘텍스트(source ISA context)(212) 및 이진 번역 엔진(binary translation engine)(215)을 포함할 수 있다. 소스 ISA 에뮬레이터(204)는 소스 ISA 콘텍스트(212) 내에, 예를 들어, 현재 실행 명령어 포인터(IP)를 포함하고 있는 소스 ISA 아키텍처의 실행 콘텍스트를 유지할 수 있다. 이진 번역 엔진(215)은 소스 ISA 명령어들을 타겟 ISA 명령어들로 번역하도록 구성될 수 있다. LIB 에뮬레이터(206)는 타겟 ISA LIB 콘텍스트(222), 게이트들(224)(예로, 특권 함수들(privileged functions), 변경 데이터 세그먼트들, 스위치 테이블들, 등에 대한 액세스를 프로세서가 제어하는데 이용되는 데이터 구조), 및 래퍼 함수들(wrapper functions)(226)을 포함할 수 있다. LIB 에뮬레이터(206)는 타겟 ISA LIB 콘텍스트(222) 내에 타겟 ISA 라이브러리(124)의 실행 콘텍스트를 유지할 수 있다. 다양한 실시예에서, 매 라이브러리 서비스(124)(예로, 함수)마다 대응 게이트(224) 및 래퍼 함수(226) 쌍이 있을 수 있고, 이 쌍은 소스 및 타겟 ISA 아키텍처에 걸쳐서 애플리케이션(120)에 의한 라이브러리 서비스(124)의 호출(calling)을 가능하게 하도록 구성된다. 유사하게, 타겟 및 소스 ISA 아키텍처에 걸쳐서 라이브러리 서비스들(124)에 의한 콜백 함수(125)의 콜백을 가능하게 하도록 구성된, 콜백 함수(125)마다 하나의 대응 게이트(224) 및 래퍼 함수(226) 쌍이 있을 수 있다.
ISA 브리징 로더(202)는 애플리케이션(120)을 메모리에 로딩하도록 구성된 유틸리티일 수 있다. 로딩 애플리케이션(120)에서, ISA 브리징 로더(202)는 소스 애플리케이션(120)에 대응하는 라이브러리에 관련된 애플리케이션(120)의 임의의 리조브되지 않은 심볼(unresolved symbol)(126)을 리졸브(resolve)하도록 구성될 수 있다. 심볼은 레지스터의 식별자(예로, 텍스트 스트링), 메모리 어드레스 등일 수 있다. ISA 브리징 로더(202)는 심볼들을(콜백 함수(125)로) 수정하고, 콜백 함수(125)에 대한 심볼들을 대응 래퍼 함수들(226)에 관련시키도록 구성될 수 있다. ISA 브리징 로더(202)는 OS(122) 또는 미들웨어(121)에 의해 지원될 때 이진 포맷 기반 제어 트랜스퍼 또는 로드/프리로드(load/pre-load) 변수들의 이용을 포함하는 다수의 공지된 방식 중 임의의 한 방식으로 OS(122)(또는 이용되는 경우, 미들웨어(121))의 로더(도시되지 않음)로부터의 로딩 제어를 구할 수 있다. 다른 실시예들에서, OS(122)(또는 이용되는 경우, 미들웨어(121))의 로더는 대신에 제어를 ISA 브리징 로더(202)에 트랜스퍼할 수 있게 수정될 수 있다.
소스 ISA 에뮬레이터(204)는 소스 ISA 애플리케이션(120)을 실행하기 위해서 타겟 ISA(122)"의 최상부(top)에 있는" 소스 ISA(120)를 에뮬레이트할 수 있다. 앞서 기술된 바와 같이, 소스 ISA 에뮬레이터(204)는 소스 ISA 실행 콘텍스트(212)를 유지하도록 구성될 수 있다. 예를 들어, 소스 ISA 에뮬레이터(204)는 애플리케이션(120)의 실행 동안 소스 ISA IP(명령어 포인터)를 추적하도록 구성될 수 있다. 애플리케이션(120)이 라이브러리 서비스(124)의 호출을 시도할 때, 소스 ISA 에뮬레이터(204)는 소스 ISA 실행을 모니터하고 있을 수 있고 대신에 LIB 에뮬레이터(206)를 호출하여 실행 제어를 LIB 에뮬레이터(206)에 트랜스퍼할 수 있다. 다양한 실시예에서, 소스 ISA 에뮬레이터(204)는 라이브러리 서비스(124)의 대응 게이트(224)(이하 더 논의됨)를 호출하여 실행 제어를 그에 트랜스퍼할 수 있다.
LIB 에뮬레이터(206)는 타겟 LIB(124)에 매핑을 통해서 소스 LIB(또는 임의 다른 LIB)를 에뮬레이트할 수 있다. 또한, LIB 에뮬레이터(206)는 타겟 ISA 라이브러리(LIB) 실행 콘텍스트(222)를 유지하도록 구성될 수 있다. 라이브러리 서비스들(124)에 대응하는 게이트들(224)은 호출들을 각각, 이들 호출을 처리하여 셋업하는 라이브러리 서비스들(124) 및 대응 래퍼 함수들(226)에 리디렉션(redirection)하도록 구성될 수 있다. 콜백 함수들(125)에 대응하는 게이트들(224)은 콜백들에 대한 실행 제어를 각각 대응 래퍼 함수들(226)로부터 소스 ISA 에뮬레이터(204)에 트랜스퍼하도록 구성될 수 있다. 다양한 실시예에서, 각 게이트(224)는 대응 래퍼 함수(226) 또는 소스 ISA 에뮬레이터(204)로의 리디렉션을 실행하도록 구성된 명령어를 포함할 수 있다. 다양한 실시예에서, 각 게이트(224)의 명령어는 실행 제어 리디렉션을 실행하기 위해 이진 번역 엔진(215)과 협력하도록 구성된 소스 ISA 명령어일 수 있다. 다양한 실시예에서, 각 게이트(224)는 대응 래퍼 함수(226)를 식별하는 표시기(indicator)를 더 포함할 수 있다.
다양한 실시예에서, 대응 라이브러리 서비스(124)에 대한 호출을 처리하고 셋업하기 위해, 라이브러리 서비스(124)에 대응하는 각 래퍼 함수(226)는 소스 ISA 콘텍스트(212)로부터 호출의 관련 파라미터 값들을 검색(retrieve)하고, 이 호출을 소스 ISA 애플리케이션 이진 인터페이스(ABI) 포맷으로부터 타겟 ISA ABI 포맷으로 변환(convert)하고 변환된 호출을 LIB 콘텍스트(222) 내의 파라미터 값들과 함께 세이브할 수 있다. 콜백 함수(125)에 대한 콜백시에, 실행 제어는 콜백 함수(125)의 대응 래퍼 함수(226)에 트랜스퍼될 수 있다. 다양한 실시예에서, 애플리케이션(120)의 콜백 함수(125)에 대한 콜백을 처리하고 셋업하기 위해, 콜백 함수(125)에 대응하는 각 래퍼 함수(226)는 이 콜백을 타겟 ISA ABI 포맷으로부터 소스 ISA ABI 포맷으로 변환하고, 콜백의 관련된 파라미터 값들을 첨부(attach)하고 변환된 콜백을 소스 ISA 콘텍스트(212) 내의 파라미터 값들과 함께 세이브하도록 구성될 수 있다. 콜백 함수(125)에 대응하는 게이트들(224)은 소스 ISA 포맷으로 타겟 ISA(104)에 제시된 콜백 함수를 에뮬레이트하기 위해서 소스 ISA 콘텍스트(212)(래퍼 함수(226)에 의해 준비되고 콜백 함수(125)에 대응하는)를 갖는 소스 ISA 에뮬레이터(204)를 호출(invoke)하도록 구성될 수 있다.
도 1 및 도 2를 둘다 참조하면, 몇몇 애플리케이션 환경에서 ISA 브리징 층(123)은 시스템 로더(160)의 액션들을 인터셉트(intercept)할 수 있다. 시스템 로더는 타겟 ISA(122)의 LIB 서비스들(124)의 상대(counterpart)인 소스 ISA(120)의 LIB 서비스들의 일부로 제공될 수 있다. 시스템 로더(160)는 애플리케이션(120)에만 전용은 아니고 대신에 애플리케이션(120) 층에서 다양한 컴포넌트(예로, 다수의 애플리케이션)와 동작한다. ISA 브리징 층(123)은 애플리케이션(120)으로부터 시스템 로더(160)로의 함수 호출들을 인터셉트하고 그러한 호출들을 ISA 브리징 로더(202)에 리디렉션하며, ISA 브리징 로더(202)는 소스 애플리케이션(120)을 다른 오리지널 타겟 라이브러리들 대신에 ISA 게이트들(224)에 링크한다. 런타임시에, 애플리케이션(120)이 라이브러리(소스 ISA(120) 내에 또는 그외의 장소에 위치한)를 호출할 때, ISA 게이트들(224)은 제어를 타겟 ISA(122)의 의미상 동일한(semantically identical) 라이브러리들(124)에 리디렉션한다. 그러나, 몇몇 사례에서, 애플리케이션(120)(예로, LIBmono)은 그 자신의 로더(131)에 의존하고(예로, 라이브러리를 로딩하기 위해) 무정의 심볼들(undefined symbols)(126)을 리졸브하도록 구성될 수 있다. 그러한 로더는 에뮬레이터(130) 및/또는 애플리케이션(120)의 전용일 수 있고 시스템 로더(160) 대신에 또는 그에 더해서 작용할 수 있다. ISA 브리징 층(123)은 로더(131)를 모니터하도록(또는 심지어 로더(131)가 존재함을 알아보도록) 구성되지 않을 수 있다. 그 결과, 애플리케이션(120)은 타겟 라이브러리 LIB1(127)(이는 애플리케이션(120)이 초기에 타겟으로 한 라이브러리의 이름들과 동일한 이름들을 갖는 라이브러리들 또는 심볼들을 가질 수 있다)에 직접 링크를 시도할 수 있다. ISA 브리징 층(123)은 런타임시에 로더(131)(이는 시스템 로더(160)의 호출과는 다른 호출을 이용할 수 있다)를 인터셉트하지 못할 수 있다. 이로 인해 로더(131)는 에뮬레이터(204 및 206)를 우회(bypass)하여 타겟 ISA 라이브러리 LIB1(127)와 로딩 및 링킹을 부정확하게 하며, 그 결과 부적절한 애플리케이션 실행으로 이어진다.
이러한 이슈를 다루기 위해서, 본 발명의 실시예들은 에뮬레이터(130) 및 애플리케이션(120)에 네스티드(nested)(즉, 다-층) 에뮬레이션을 제공한다. 일례로, 애플리케이션(120)(에뮬레이션 층 3)은 에뮬레이터(130)(에뮬레이션 층 2)에 의해 에뮬레이트되고, 에뮬레이터(130)는 타겟 ISA(122)(에뮬레이션 층 0)"의 최상부에" 있는 ISA 브리징 층(123)(에뮬레이션 층 1)에 의해 에뮬레이트된다.
일 실시예는 에뮬레이터(130)에 의해서 로딩되는 라이브러리 LIB1(141), LIB2(142)를 포함하는 스페셜 소스 ISA 라이브러리(140)를 포함한다. 도 1에 도시된 바와 같이, 소스 ISA(120)는 무정의 심볼(126) "A", "B", "C", 및 "D"를 포함한다. 라이브러리 LIB1(141), LIB2(142)는 대응 타겟 라이브러리(127, 128)와 같은 라이브러리 이름(동일한 함수 이름 또는 이름들을 포함함)을 이용할 수 있다. 예를 들어, 소스 라이브러리(141) 및 타겟 라이브러리(127)는 둘 다 이름이 "LIB1"이고 둘 다 함수 이름 "A", "B", "C", 및 "D"를 포함한다. 에뮬레이터(130)가 무정의 심볼들(126) "A", "B", "C", 및 "D"를 리졸브하기 위해 시도할 때, 이는 스페셜 라이브러리(141) 내의 대응 심볼들을 찾는다. 이후 에뮬레이터(130)는 심볼 "A"와 같은 무정의 심볼을 스페셜 라이브러리 LIB1(141)에 의해 노출된 대응 심볼 "A"에 링크한다. 함수들 "A", "B", "C", 및 "D" 각각에 대해서, 스페셜 라이브러리 LIB1(141)(물론 함수들 "E", "F", "G", 및 "H"의 경우는 LIB2(142))은 실제 함수 대신에 이 함수에 대한 게이트(게이트(251, 252) 참조)를 구현한다. 예를 들어, 라이브러리(141)의 함수 "A"는 단지 함수 "A"에 대한 ISA 게이트(게이트를 포함하지만 실제로는 함수 "A"를 포함하지 않는 게이트들(251)의 게이트 "A"를 참조)를 포함하고, 이는 제어를 타겟 ISA(122)의 의미상 동일한 라이브러리 LIB1(127)에 리디렉션한다. 일 실시예에서, 스페셜 소스 ISA 라이브러리(140)는 단지 ISA 게이트들을 포함한다.
도 1에 나타낸 바와 같이, 일 실시예에서 ISA 게이트들은 요구에 따라서 로딩될 수 있는 개별 라이브러리들(141, 142)로 편성된다. 예를 들어, 에뮬레이터(130)는 애플리케이션(120)이 LIB2(142)에 대응하는 함수들을 필요로 하는 경우 및 그 때에 LIB2(142)(및 다른 라이브러리들)의 로딩을 대기하면서 단지 LIB1(141)을 로딩(즉, 링크)할 수 있다.
도 3-4는 본 발명의 실시예들에 따른 콜백을 이용한 ISA 브리징 방법들의 예를 도시하고 있다. 방법(300)은 두 개의 파트, (소스 ISA의) 애플리케이션(120)으로부터의 호출을 (타겟 ISA의) 라이브러리 서비스들(124)에 브리지하기 위한 파트(300a), 및 (타겟 ISA의) 라이브러리 서비스(124)로부터의 콜백들을 (소스 ISA의) 애플리케이션(120)의 콜백 함수(125)에 브리지하기 위한 파트(300b)를 포함할 수 있다. 파트들(300a 및 300b)은 서로 독립해서 구현될 수 있다. 또한, 다양한 실시예는 래퍼 함수들 및/또는 콜백 함수들에 관련될 필요는 없으나 대신에, 예를 들어, 스페셜 소스 ISA 라이브러리들(141, 142)과 같은 네스티드 에뮬레이션의 다른 면들에 초점을 맞출 수 있다.
도 3에서, 블록(302)에서는 ISA 브리징 로더(202)는 소스 애플리케이션(120)을 로딩할 수 있다. 애플리케이션(120)을 로딩하는데 있어서, ISA 브리징 로더(202)는 앞서 기술된 바와 같이, 라이브러리 서비스들(124)에 대한 심볼 이름들 또는 참조들(126)을 리졸브하고, 콜백 함수들(125)의 심볼 이름들 또는 참조들을 수정할 수 있다. 블록(304)에서, 실행 도중에, 애플리케이션(120)은 라이브러리 서비스들(124) 중 하나를 호출할 수 있다. 다양한 실시예에서, 애플리케이션(120)은 호출된 라이브러리 서비스(124)에 의한 그의 콜백 함수들(125) 중 하나에 대한 콜백을 필요로 할 수 있다. 실시예들에서, 애플리케이션(120)은 호출된 라이브러리 서비스(124)에 대한 호출의 일부로서 콜백 함수(125)에 대한 포인터를 포함할 수 있다. 콜백 함수(125)에 대한 포인터를 패스(pass)하는 대신에, 라이브러리 서비스(124)의 래퍼 함수(226)는 콜백 함수(125)의 대응 래퍼 함수(226)를 패스할 수 있다. 블록(305)에서, 에뮬레이터(130)는 라이브러리에 링크를 시도하며 그렇게 하면서 LIB1(141)(이는 LIB1(127)과 이름이 같다)에 링크한다. LIB1(141)은 함수 호출들(예로, 함수 "A")을 소스 ISA 에뮬레이터(204)에 리디렉션하는 게이트들을 포함한다. 블록(306)에서, 소스 ISA 에뮬레이터(204)는, 호출의 검출시에(예를 들어, 소스 ISA IP를 모니터링하고, 이 IP가 타겟 라이브러리의 어드레스 범위 내의 어드레스를 참조하고 있다는 판정을 통해서), LIB 에뮬레이터(206) 내의 라이브러리 서비스(124)의 대응 게이트(224)에 호출을 리디렉션하고 실행 제어를 트랜스퍼할 수 있다. 예를 들어, 함수 "A"의 경우 LIB1(141)의 게이트 "A"는 호출을 소스 ISA 에뮬레이터(204)에, 그리고 이후 게이트들(251)의 게이트 "A"에 리디렉션할 수 있다. 블록(308)에서, 게이트들(224)로부터의 적절한 게이트는 또한 호출된 라이브러리 서비스(124)의 대응 래퍼 함수(226)에 호출을 리디렉션하고 실행 제어를 트랜스퍼할 수 있다. 블록(310)에서, 호출된 라이브러리 서비스(124)의 래퍼 함수(226)는, 앞서 기술한 바와 같이, 호출된 라이브러리 서비스(124)가 실행할 수 있게 이 호출을 처리하고 이 호출을 LIB 콘텍스트(222) 내에 셋업할 수 있다. 블록(312)에서, 호출된 라이브러리 서비스(124)의 게이트(224)는 LIB 콘텍스트(222)로부터 호출의 리턴 값(들)을 수집하고, 소스 ISA 콘텍스트(212)를 갱신하고, 실행 제어를 소스 ISA 에뮬레이터(202)에 트랜스퍼할 수 있다.
이와 같이, 도 3은 애플리케이션(예로, 게임)이 에뮬레이터(예로, 에뮬레이터(130))의 최상부(top)에서 실행되는 네스티드 에뮬레이션의 형태를 도시하고 있고, 여기서 이 애플리케이션은 제1 ISA용으로 포맷되어 있다. 이 에뮬레이터는 ISA 브리징 층(123)의 최상부에서 실행될 수 있고(즉, ISA 브리징 층에 의해 네스티드될 수 있으며), 이는 이 애플리케이션의 투명 이진 번역(transparent binary translation)을 수행하며 이 에뮬레이터를 제1 ISA와는 다른 제2 ISA에서 실행한다. 이는 ISA 브리징 층(123) 및 1 이상의 스페셜 소스 ISA 라이브러리들(예로, 141, 142)을 이용하여 성취되며, 에뮬레이터(130)는 그 자신의 로더(131)를 이용하여 이들과 링크한다. 에뮬레이터(130)가 라이브러리들을 호출할 때, 에뮬레이터(130)는 ISA 게이트들(예로, 141, 142)을 호출하고, 이는 그 다음에 함수 호출을 게이트들(251, 252)을 통해서 타겟 ISA 라이브러리들(127, 128)(이들은 게이트들(224)의 전체 집합(general collection)의 개별 라이브러리들임)에 매핑(mapping)한다. 실시예들은 임의 수의 에뮬레이션 층들(예로, 2, 3, 4, 5 등)을 커버할 수 있게 확장될 수 있다. 각 에뮬레이션 층은 에뮬레이션 층의 차기 레벨에 리디렉션되어 있는 스페셜 ISA 라이브러리들(이들은 ISA 게이트들을 포함하거나 이들에 연결된다)과 링크된다.
도 4(파트 300b)에서, 블록(404)에서는, 호출된 라이브러리 서비스(124)의 완성시 또는 그 과정에서, 라이브러리 서비스(124)는 애플리케이션(120)의 콜백 함수(125)를 콜백할 수 있다(예로, 애플리케이션(120)에 의해서 패스된 콜백 포인터를 호출함으로써). 블록(406)에서, 실행 제어는 수정된 참조에 따라서 콜백 함수(125)의 대응 래퍼 함수(226)에 트랜스퍼될 수 있다. 블록(408)에서, 래퍼 함수(226)는, 앞서 기술한 바와 같이, 애플리케이션(120)의 콜백 함수(125)가 실행할 수 있게 이 콜백을 처리하고 이 콜백을 소스 ISA 콘텍스트(212) 내에 셋업할 수 있으며, 이후 실행 제어를 콜백 함수(125)의 대응 게이트(224)에 트랜스퍼할 수 있다. 블록(410)에서, 콜백 함수(125)에 대응하는 게이트(224)는 래퍼 함수(226)에 의해 준비된 소스 ISA 콘텍스트를 갖는 ISA 에뮬레이터에 콜백을 리디렉션하고 실행 제어를 트랜스퍼할 수 있다. 블록(412)에서, 소스 ISA 에뮬레이터(204)는 소스 ISA 콘텍스트 내의 IP에 따라서 콜백 함수의 에뮬레이션을 시작할 수 있다. 블록(414)에서, 콜백 함수(125)의 게이트(224)는 소스 ISA 콘텍스트(212)로부터 콜백의 리턴 값(들)을 수집하고, LIB 콘텍스트(222)를 갱신하고, 콜백 함수(125)의 리턴 값들을 라이브러리 서비스(124)에 리턴하기 위해서 실행 제어를 LIB 에뮬레이터(204)에 트랜스퍼할 수 있다.
용이한 이해를 위해 다양한 실시예들이 하나의 소스 ISA를 하나의 타겟 ISA에 브리지하는 하나의 ISA 브리징 층(123)을 들어서 기술되었다. 그러나, 본 발명은 이에 한정되지 않는다. 실시예들에서, 다수의 ISA 브리징 층들(123)은 다수의 소스 ISA를 타겟 ISA 또는 ISA들에 브리징할 수 있다. 이들 실시예 중 몇몇 실시예에서는, 요구된 브리징을 검출하고, 요구된 ISA 브리징을 제공하기 위해 적절한 ISA 브리징 층 또는 층들(123)을 인스턴스화(instantiate)하기 위해서 디스패처(dispatcher)가 추가로 제공될 수 있다. 더욱이, 다양한 실시예에서, 본 발명은 필요한 브리징의 양을 줄이기 위해서 (소스 ISA 내의) 애플리케이션(120)의 부분들에 대한 (타겟 ISA 내의) 대체된 이진수들로 실시될 수 있다. 다른 실시예들에서, 브리징을 위해 이용된 자원들의 일부(예로, 래퍼 함수들 중 일부)는 ISA 브리징 층(123)에 액세스 가능한 원격 서버에 배치될 수 있다. 더욱이, 용이한 이해를 위해, ISA 브리징 층(123)은 소스 ISA와 상이한 타겟 ISA를 브리지하도록 구성되어 있는 것으로 기술되었다. 그러나, 다양한 애플리케이션의 경우, ISA 브리징 층(123)은 동일한 소스 ISA와 타겟 ISA를 브리지하는데 이용될 수 있다. 그러한 애플리케이션들에서, 기술된 요소들 중 하나 이상(예로, 이진 번역 엔진(215))은 필요 없을 수 있다. 그러한 애플리케이션의 일례는 개선된 운영 보안을 컴퓨팅 장치(102)에 제공하는 것일 수 있다. 다른 애플리케이션들도 마찬가지로 그러한 브리징의 장점을 취할 수 있다. 따라서, 본 발명은 애플리케이션들이 가끔 호출된 라이브러리 서비스들로부터 콜백들을 필요로 하는 이용 특성을 갖는 경우 한 ISA가 다른 ISA를 위해 개발된 애플리케이션들을 지원하는 컴퓨팅 장치의 기술적인 문제점에 대한 해법일 수 있다. 본 발명의 장점은 컴퓨팅 장치의 ISA 내의 애플리케이션을 완전히 번역하거나 재-실시할 필요성을 방지하는 것을 포함할 수 있다.
본 발명의 실시예들은 위에서 기술된 네스티드 에뮬레이션 또는 다른 피처들 중 어느 것에도 한정되지 않는다. 예를 들어, 한 실시예는 동적 링킹을 정적 링킹에 필적할 수 있게 하기 위해서(예로, 속도 관점에서) BT 에뮬레이션 동적 링킹을 가속하는 것에 관한 것이다.
전통적인 동적 링킹 시스템은 라이브러리에 링크해야만 하는 소스 ISA 애플리케이션(예를 들어, 애플리케이션(120))에 관한 것일 수 있다. 그렇게 하기 위해서, 애플리케이션은 호출자 코드(이를 이용해 라이브러리를 호출함), PLT 코드(GOT를 판독하기 위한 코드를 포함함), 및 GOT(이는 리졸브되지 않은 심볼 및 함수 장소들의 리스팅을 포함할 수 있음)를 이용할 수 있다. BT 시스템은 타겟 ISA에서 실행되게 애플리케이션을 에뮬레이트하기 위해 실행가능 로더, 번역기, 및 런타임 환경을 이용할 수 있다. 위에 언급한 바와 같이, PLT 및 GOT 기반 방법들의 이용은 애플리케이션의 라이브러리 호출을 동적 링크된 라이브러리 내의 타겟 함수에 디렉션하기 위해 간접 점프를 필요로 할 수 있다. 그러나, 동적 링킹의 간접 점프는 정적 링킹에 비해서 추가의 런타임 오버헤드를 가져온다. 도 5는 동적 링킹을 가속하기 위한 실시예를 기술하고 있고, 이는 BT 시스템에서 동적 링킹 가속기(DLA; dynamic linking accelerator)를 이용하여 실행될 수 있다.
실행가능 로더(520), 번역기(525) 및 런타임 환경(530)을 포함하는 BT 시스템(515)은 타겟 ISA(535)에서 소스 ISA 애플리케이션(505)을 에뮬레이트한다. 실행가능 로더(520)는 소스 ISA 애플리케이션(505) 및 소스 ISA 라이브러리(510)를 로딩하며, 이는 애플리케이션(505)에 동적으로 링크된다. 번역기(525)는 애플리케이션(505)으로부터 로딩된 명령어들을 번역 유닛(526)과 같은 번역 유닛들로 그룹화하고, 각 번역 유닛에서 소스 ISA를 타겟 ISA로 이진 번역한다. 런타임 환경(530)은 번역된 코드를 타겟 ISA(535)에서 실행하기 위해서 지원 환경과 헬퍼(helper) 라이브러리들(도시되지 않음)을 제공한다.
도 5의 실시예는, 예를 들어, DLA 로더(521) 및 DLA 옵티마이저(527)를 이용하여 BT를 강화한다. DLA 로더(521)는 각 동적 링크된 라이브러리의 어드레스 레인지를 저장하기 위해서 라이브러리 어드레스 레인지 테이블(library address range table)(522)을 이용한다. 테이블(522)은 어드레스 입증(address verification)을 위해서 그리고 가속되어야 하는 라이브러리 호출들을 제어하기 위해 이용된다. 예를 들어, 특정 시스템 라이브러리들(예로, LIBc 또는 LIBm)에 대한 호출들은 이들이 애플리케이션(505) 실행 동안에 로딩되고 로딩을 유지할 개연성이 있기 때문에 가속을 위한 좋은 후보이다. 그러나, 빈번하게 로딩 및 비-로딩(unloading)될 개연성이 있는 다른 사용자 라이브러리들은 반복 로딩 및 비-로딩을 수반하는 반복 번역의 연산 비용 때문에 좋은 후보가 아니다. 그래서, 가속을 위해 선택된 이들 라이브러리 호출들은 테이블(522)에 저장되고 다른 라이브러리 호출들은 테이블(522)에 저장되지 않는다.
이하 좀더 상세하게 설명되듯이, DLA 옵티마이저(527)는 소스 ISA 애플리케이션(505) 내의 PLT 코드(507)를 분석하고 소스 라이브러리(511)에 대한 어드레스를 계산한다. 이 어드레스는 이후 테이블(522) 내에 저장된 어드레스 레인지들에 비교된다(예로, LIBc는 어드레스 레인지 0x4000-0x5000 내에 있다). 어드레스가 임의 어드레스 레인지에 부합하면, DLA 옵티마이저(527)는 PLT 코드(507)를 라이브러리 함수에 대한 직접 호출로 대체한다. 이와 같은 DLA 강화에 따르면, PLT 코드는 BT 시스템(515)에서 더 이상 에뮬레이트되지 않는다. 그 결과, 동적 링킹은 정적 링킹 만큼 빠를 수 있다(또는 전통적인 동적 링킹에 관련해서 최소한 개선됨). 동적 링킹을 실행하기 위한 실시예는 도 6에 관련해서 상세히 다루어진다.
도 6은 DLA 로더(521) 및 DLA 옵티마이저(527)를 이용하는 가속 동적 링킹에 대한 프로세스(600)를 포함하고 있다. 블록(605)에서, 소스 ISA 애플리케이션(505)이 BT 시스템(515)에서 실행될 때 실행가능 로더(520)는 애플리케이션(505)과 그의 동적 링크된 라이브러리들(예를 들어, LIBc, LIBm, LIBc++ 등을 포함할 수 있는 라이브러리(510))을 로딩한다. 블록(610)에서, DLA 로더(521)는 각 로딩된 라이브러리의 메모리 어드레스 레인지를 기록하고 어드레스 또는 어드레스들을 라이브러리 어드레스 레인지 테이블(522) 내에 저장한다(예를 들어, LIBc는 어드레스 레인지 0x4000-0x5000 내에 있다). 블록(615)에서, 번역기(525)는 에뮬레이트된 애플레케이션 실행 플로우를 뒤따르는 1 이상의 번역 유닛(예로, 유닛(526))으로 로딩된 코드(505)를 그룹화한다. 예를 들어, 번역기(525)는 제어 트랜스퍼 명령어를 만날 때까지 명령어들을 하나의 번역 유닛에 부가할 수 있다. 제어 트랜스퍼 명령어를 만나면, 번역기(525)는 제어 트랜스퍼 명령어에 관련된 휴리스틱 또는 히스토리 정보(heuristic or history information)에 따라서 제어 트랜스퍼 명령어의 타겟 어드레스(들)를 따르는 명령어들을 계속 부가한다(예를 들어, 도 5의 블록(526)을 참조). 그룹화 동안, 번역기(525)가 호출 명령어(예를 들어, CALL 0X123@PLT)를 만날 때, 번역기(525)는 호출 타겟 어드레스(예로, 0X123)를 DLA 옵티마이저(527)에 전송한다. 블록(620)에서, DLA 옵티마이저(527)는 호출 타겟 어드레스(예로, 0X123)가 PLT 코드 내에 포함되어 있는지 여부를 판정하기 위해서 코드 패턴 매칭(이하 좀더 다루어짐)을 이용한다. 호출 타겟이 PLT 코드 내에 있는 것으로 판정되면, DLA 옵티마이저(527)는 PLT 코드를 계산하고 GOT(도시되어 있지 않지만 코드(505) 내에 포함되어 있음)로부터 라이브러리 함수 어드레스를 호출한다(예를 들어, 호출 함수에 의해 규정되는 바와 같이 메모리를 할당하는 "CALL malloc"). 블록(625)에서, DLA 옵티마이저(527)는 이 라이브러리 함수 어드레스를 어드레스 입증을 위해 DLA 로더(521)에 전송한다(도 5의 화살표(529)를 참조). 블록(630)에서, DLA 로더(521)는 제공된 어드레스가 가속을 위한 유효한 후보인지를 확인하기 위해서 DLA 옵티마이저(527)로부터 제공된 라이브러리 함수 어드레스를 라이브러리 어드레스 레인지 테이블(522) 내의 콘텐츠와 비교한다. 입증이 실행되면, 블록(635)에서, DLA 옵티마이저(527)는 PLT(507)에 대한 오리지널 호출을 라이브러리 함수(511)에 대한 직접 호출로 대체하고, 번역 유닛으로부터 PLT 코드를 제거한다(유닛(526)으로부터 PLT 코드를 포함하지 않는 유닛(528)을 참조). 그 결과, PLT 코드는 BT 시스템(515)에서 더 이상 에뮬레이트되지 않는다(그럼으로써 에뮬레이션 오버헤드가 방지됨).
도 7은, 예를 들어, DLA 로더(521)와 DLA 옵티마이저(527) 그리고 도 6의 프로세스의 부분들을 이용하여 동적 링크 가속을 구현하기 위한 의사 코드를 포함하고 있다. 간결성을 위해 모든 코드 라인이 논의되지는 않는다. 라인들(706-707)은 호출 명령어와 그의 타겟 어드레스를 인식하는 것에 관한 것이다. 라인(708)에서, 타겟 어드레스와 그의 인근 어드레스들(surrounding addresses)이 PLT 코드 내에 위치해 있다면, 이러한 패턴 매치는 호출 공산이 있는 타겟 PLT 코드를 나타낸다. 라인들(709-711)에서, 적절한 라이브러리 어드레스가 발견되고 입증된다. 라인들(712-713)에서, PLT 코드는 직접 호출로 대체되고 그 결과 비용이 많이 드는 PLT 코드의 에뮬레이션과 그의 관련 간접 점프 및 룩업(lookup)을 피할 수 있다. 동적 링킹은 라이브러리 함수 어드레스 계산을 위한 PLT 및 GOT를 트래버스(traverse)하도록 더 이상 요구되지 않는다.
실시예들은 코드로 구현될 수 있으며 명령어들을 실행하기 위해서 시스템을 프로그램하는데 이용될 수 있는 명령어들이 저장되어 있는 저장 매체에 저장될 수 있다. 저장 매체는 플로피 디스크, 광 디스크, 고체 상태 드라이브(SSD), 컴팩 디스크 판독 전용 메모리(CD-ROM), 재기록가능 컴팩 디스크(CD-RW), 및 광자기 디스크를 포함하는 임의 유형의 디스크, 판독 전용 메모리(ROM), 동적 랜덤 액세스 메모리(DRAM), 정적 랜덤 액세스 메모리(SRAM)과 같은 랜덤 액세스 메모리(RAM), 소거가능 프로그램가능 판독 전용 메모리(EPROM), 플래시 메모리, 전기 소거가능 프로그램가능 판독 전용 메모리(EEPROM)와 같은 반도체 장치, 자기 또는 광학 카드, 또는 전자 명령어를 저장하기에 적합한 임의 다른 유형의 매체를 포함할 수 있고 이에 한정되지 않는다. 본 발명의 실시예들은 여기서 명령어, 함수, 프로시저(procedure), 데이터 구조, 애플리케이션 프로그램, 구성 설정, 코드 등과 같은 데이터를 참조로 기술될 수 있다. 데이터가 머신에 의해서 액세스될 때, 머신은, 여기서 좀더 상세히 설명되듯이, 태스크들을 실행하고, 추상 데이터 타입을 정의하고, 저-레벨 하드웨어 콘텍스트를 구성하고, 및/또는 다른 동작들을 실행함으로써 응답할 수 있다. 데이터는 휘발성 및/또는 비휘발성 데이터 저장 기기에 저장될 수 있다. 본 개시의 목적을 위해서, 용어 "코드", 또는 "프로그램"은 애플리케이션, 드라이버, 프로세스, 루틴, 방법, 모듈 및 서브프로그램을 포함해서 넓은 범위의 컴포넌트 및 구성을 포괄한다. 이와 같이, 용어 "코드" 또는 "프로그램"은 처리 시스템에 의해 실행될 때 필요한 동작 또는 동작들을 실행하는 명령어들의 임의 집합을 나타내는데 이용될 수 있다. 게다가, 대안 실시예들은 공개된 동작들 전부보다 적은 동작들을 이용하는 프로세스들, 부가적인 동작들을 이용하는 프로세스들, 상이한 시퀀스로 동일 동작들을 이용하는 프로세스들, 및 여기서 개시된 개별 동작들이 결합, 세분, 또는 다른 식으로 변경되는 프로세스들을 포함할 수 있다. 일 실시예에서, 용어 제어 로직의 이용은 트랜지스터, 레지스터와 같은 하드웨어, 또는 프로그램가능 로직 장치(535)와 같은 다른 하드웨어를 포함한다. 그러나, 다른 실시예에서는, 로직은 또한 소프트웨어나 코드(531)를 포함한다. 그러한 로직은 펌웨어 또는 마이크로-코드(536)와 같은 하드웨어와 통합될 수 있다. 프로세서 또는 제어기는 이 방면에 알려져 있는 아주 다양한 제어 로직 중 임의의 것을 나타내는 것으로 의도된 제어 로직을 포함할 수 있고, 이와 같이, 마이크로프로세서, 마이크로-제어기, 필드-프로그램가능 게이트 어레이(FPGA), 주문형 반도체(ASIC), 프로그램가능 로직 장치(PLD) 등으로서 잘 구현될 수 있다.
도 1을 참조하면, 일 실시예의 경우, 프로세서 및 메모리 배열(104)의 프로세서(들) 중 적어도 하나는 도 3, 4, 6, 7의 방법들의 동작들(또는 그의 서브세트)를 실시하도록 구성된 ISA 브리징 층(123)의 계산 로직(또는 그의 서브세트)와 함께 패키징될 수 있다. 일 실시예의 경우, 프로세서 및 메모리 배열(104)의 프로세서(들) 중 적어도 하나는 SiP(System in Package)를 형성하기 위해 도 3, 4, 6, 7의 동작들(또는 그의 서브세트)을 실시하도록 구성된 ISA 브리징 층(123)의 계산 로직(또는 그의 서브세트)과 함께 패키징될 수 있다. 일 실시예의 경우, 프로세서 및 메모리 배열(104)의 프로세서(들) 중 적어도 하나는 도 3, 4, 6, 7의 동작들(또는 그의 서브세트)을 실시하도록 구성된 ISA 브리징 층(123)의 계산 로직(또는 그의 서브세트)과 동일한 다이에 집적될 수 있다. 일 실시예의 경우, 프로세서 및 메모리 배열(104)의 프로세서(들) 중 적어도 하나는 SoC(System on Chip)을 형성하기 위해서 ISA 브리징 층(123)의 계산 로직(또는 그의 서브세트)과 동일한 다이에 집적될 수 있다. 적어도 하나의 실시예의 경우, SoC는 데스크톱 컴퓨터, 랩톱 컴퓨터, 스마트폰, 컴퓨팅 태블릿, 인터넷 어플라이언스, PDA(personal digital assistant), 휴대용 게임 플레이 장치, 서버 또는 다른 컴퓨팅 장치에 이용될 수 있다.
한 실시예는 소스 명령어 집합 아키텍처(ISA)를 갖는 애플리케이션을 로딩하는 단계; 소스 ISA 라이브러리의 라이브러리 서비스에 대한 것인 호출을 상기 소스 ISA 라이브러리에 도달하지 않도록 제1 라이브러리로 리디렉션(redirection)하는 단계; 호출을 상기 제1 라이브러리로부터 타겟 ISA 라이브러리의 라이브러리 서비스에 디렉션(direction)하는 단계; 및 상기 타겟 ISA 라이브러리를 통해서 상기 애플리케이션을 에뮬레이트하는 단계를 포함하는, 적어도 하나의 프로세서에 의해 실행되는 방법을 포함한다. 상기 방법은 상기 애플리케이션에 대한 무정의 심볼을 리졸브(resolve)하는 단계를 더 포함할 수 있다. 상기 무정의 심볼을 리졸브하는 단계는 간접적으로 상기 제1 라이브러리의 제1 게이트를 통해서 상기 타겟 ISA 라이브러리의 타겟 게이트에 링크하는 단계를 포함한다. 상기 제1 게이트는 제1 이름을 기질 수 있고 상기 타겟 게이트는 상기 제1 이름을 포함하는 타겟 이름을 가질 수 있다. 예를 들어, 이들 이름(파일 확장자들에 관계없이)은 동일하거나 단지 접두사, 접미사 등에 있어서 다르다. 상기 호출을 상기 제1 라이브러리에 리디렉션하는 단계는 상기 호출을 상기 애플리케이션에 전용인 에뮬레이터로부터 리디렉션하는 단계를 포함할 수 있다. 상기 호출을 상기 제1 라이브러리에 리디렉션하는 단계는 상기 호출을 상기 애플리케이션에 전용이며 일반 시스템 로더가 아닌 에뮬레이터로부터 리디렉션하는 단계를 포함할 수 있다. 한 방법은 추가 호출을 상기 애플리케이션에 관련된 추가 라이브러리 서비스에 제공하는 단계 - 상기 추가 호출은 PLT(procedure linking table) 내에 포함된 코드에 디렉션됨 - ; 및 상기 PLT를 우회하는, 상기 소스 ISA 라이브러리와 추가 소스 ISA 라이브러리 중 하나로의 직접 추가 호출로 상기 추가 호출을 대체하는 단계를 포함할 수 있다. 한 방법은 상기 추가 호출에 대한 어드레스를 식별하는 단계; 및 상기 추가 호출에 대한 어드레스의 식별을 기반으로 상기 추가 호출이 상기 PLT 내에 포함된 코드에 디렉션됨을 판정하는 단계를 포함할 수 있다. 청구항 1의 방법은 추가 호출을 상기 애플리케이션에 관련된 추가 라이브러리 서비스에 제공하는 단계 - 상기 추가 호출은 프로시저(procedure)를 찾도록 구성된 코드에 디렉션됨 - ; 및 상기 프로시저를 찾도록 구성된 코드를 우회하는, 상기 소스 ISA 라이브러리와 추가 소스 ISA 라이브러리 중 하나로의 직접 추가 호출로 상기 추가 호출을 대체하는 단계를 포함할 수 있다.
한 실시예에서, 장치는 적어도 하나의 메모리와 상기 적어도 하나의 메모리에 연결된 적어도 하나의 프로세서를 포함하고, 상기 적어도 하나의 프로세서는, 소스 명령어 집합 아키텍처(ISA)를 갖는 애플리케이션을 로딩하는 단계; 상기 애플리케이션에 관련된 라이브러리 서비스에 대한 호출을 제공하는 단계 - 상기 호출은 프로시저를 찾도록 구성된 코드에 디렉션됨 - ; 상기 호출을 상기 프로시저를 찾도록 구성된 코드를 우회하는, 소스 ISA 라이브러리로의 직접 호출로 대체하는 단계; 및 상기 애플리케이션을 타겟 ISA 라이브러리를 통해서 에뮬레이트하는 단계를 포함하는 동작들을 실행할 수 있다. 상기 프로시저를 찾도록 구성된 코드는 PLT(procedure linking table) 내에 포함될 수 있다. 한 실시예는 상기 호출에 대한 어드레스를 식별하는 단계; 및 상기 호출에 대한 어드레스의 식별을 기반으로 상기 호출이 상기 PLT 내에 포함된 코드에 디렉션됨을 판정하는 단계를 포함하는 동작들을 실행할 수 있다. 한 실시예는 소스 ISA 라이브러리와 추가 소스 ISA 라이브러리 중 하나의 추가 라이브러리 서비스에 대한 것인 추가 호출을 상기 소스 ISA 라이브러리와 상기 추가 소스 ISA 라이브러리 중 하나에 도달하지 않도록 제1 라이브러리에 리디렉션하는 단계; 및 상기 제1 라이브러리로부터의 상기 추가 호출을 상기 타겟 ISA 라이브러리와 추가 타겟 ISA 라이브러리 중 하나에 디렉션하는 단계를 포함하는 동작들을 실행할 수 있다. 한 실시예는 상기 애플리케이션에 대한 무정의 심볼을 리졸브하는 단계를 포함하는 동작들을 실행할 수 있다. 한 실시예에서 상기 무정의 심볼을 리졸브하는 단계는 상기 제1 라이브러리의 게이트를 통해서 상기 타겟 ISA 라이브러리와 상기 추가 타겟 ISA 라이브러리 중 하나의 게이트에 링크하는 단계를 포함한다. 한 실시예에서, 상기 추가 호출을 리디렉션하는 단계는 상기 애플리케이션에 전용인 에뮬레이터로부터 상기 추가 호출을 리디렉션하는 단계를 포함한다. 한 실시예에서 상기 추가 호출을 리디렉션하는 단계는 상기 추가 호출을 상기 애플리케이션에 전용이며 일반 시스템 로더가 아닌 에뮬레이터로부터 리디렉션하는 단계를 포함한다.
이와 같이, 다양한 실시예는 소스 애플리케이션 및 소스 에뮬레이터를 위한 네스티드 에뮬레이션을 포함한다. 듀플리케이트 소스 ISA 라이브러리들은 소스 에뮬레이터 라이브러리 호출들을 타겟 라이브러리로 리디렉션하며, 그럼으로써 제1 ISA 와 제2 ISA 간에 적절한 에뮬레이션 채널들을 통해 네이티브(native) 에뮬레이터가 실행된다. 이는 적절한 에뮬레이션을 유도하는 장점을 제공한다. 또한, 다양한 실시예들의 장점은 동적 링킹의 증가한 효율 및 속도이다. 예를 들어, PLT들 및 GOT들을 기반으로 한 방법들의 이전 이용에 관련된 간접 점핑보다 높은 효율이 얻어진다.
또한 본 발명은 컴퓨팅 장치에 강화된 보안을 제공하는 기술적인 문제점에 대한 해법일 수 있음을 이해할 수 있다. 본 발명의 장점은 제공된 분리의 강건성(the robustness of the isolation provided)을 포함할 수 있고 이에 한정되지 않는다.
Claims (20)
- 머신 판독가능 매체로서, 컴퓨팅 장치 상에서 실행될 때 상기 컴퓨팅 장치로 하여금,
소스 명령어 집합 아키텍처(ISA; instruction set architecture)를 갖는 애플리케이션을 로딩하는 단계;
소스 ISA 라이브러리의 라이브러리 서비스에 대한 것인 호출을 상기 소스 ISA 라이브러리에 도달하지 않도록 제1 라이브러리로 리디렉션(redirection)하는 단계;
상기 호출을 상기 제1 라이브러리로부터 상기 제1 라이브러리와 동일한 이름을 갖는 타겟 ISA 라이브러리의 라이브러리 서비스에 디렉션(direction) 하는 단계; 및
상기 타겟 ISA 라이브러리를 통해서 상기 애플리케이션을 에뮬레이트하는 단계
를 포함하는 방법을 수행하도록 하는 명령어를 포함하는, 머신 판독가능 매체. - 제1항에 있어서, 상기 애플리케이션을 로딩하는 단계는 상기 애플리케이션에 대한 무정의 심볼(undefined symbol)을 리졸브(resolve)하는 단계를 포함하는, 머신 판독가능 매체.
- 제2항에 있어서, 상기 무정의 심볼을 리졸브하는 단계는 간접적으로 상기 제1 라이브러리의 제1 게이트를 통해서 상기 타겟 ISA 라이브러리의 타겟 게이트에 링크하는 단계를 포함하는, 머신 판독가능 매체.
- 제3항에 있어서, 상기 제1 게이트는 제1 이름을 갖고 있고 상기 타겟 게이트는 상기 제1 이름을 포함하는 타겟 이름을 갖고 있는, 머신 판독가능 매체.
- 제1항에 있어서, 상기 호출을 상기 제1 라이브러리에 리디렉션하는 단계는 상기 호출을 상기 애플리케이션에 전용인 에뮬레이터로부터 리디렉션하는 단계를 포함하는, 머신 판독가능 매체.
- 제1항에 있어서, 상기 호출을 상기 제1 라이브러리에 리디렉션하는 단계는 상기 호출을 상기 애플리케이션에 전용이며 일반 시스템 로더(general system loader)가 아닌 에뮬레이터로부터 리디렉션하는 단계를 포함하는, 머신 판독가능 매체.
- 제1항에 있어서,
상기 호출을 리디렉션하는 단계는,
상기 애플리케이션에 관련된 추가 라이브러리 서비스에 대한 추가 호출을 제공하는 단계 - 상기 추가 호출은 PLT(procedure linking table) 내에 포함된 코드에 디렉션됨 - ; 및
상기 PLT를 우회하는, 상기 소스 ISA 라이브러리와 추가 소스 ISA 라이브러리 중 하나로의 직접 추가 호출로 상기 추가 호출을 대체하는 단계를 포함하는, 머신 판독가능 매체. - 제7항에 있어서,
상기 추가 호출을 제공하는 단계는,
상기 추가 호출에 대한 어드레스를 식별하는 단계; 및
상기 추가 호출에 대한 어드레스의 식별을 기반으로 상기 추가 호출이 상기 PLT 내에 포함된 코드에 디렉션됨을 판정하는 단계를 포함하는, 머신 판독가능 매체. - 제1항에 있어서,
상기 호출을 리디렉션하는 단계는,
상기 애플리케이션에 관련된 추가 라이브러리 서비스에 대한 추가 호출을 제공하는 단계 - 상기 추가 호출은 프로시저(procedure)를 찾도록 구성된 코드에 디렉션됨 - ; 및
상기 프로시저를 찾도록 구성된 코드를 우회하는, 상기 소스 ISA 라이브러리와 추가 소스 ISA 라이브러리 중 하나로의 직접 추가 호출로 상기 추가 호출을 대체하는 단계를 포함하는, 머신 판독가능 매체. - 에뮬레이션 장치로서,
적어도 하나의 메모리와, 상기 적어도 하나의 메모리에 연결된 적어도 하나의 프로세서를 포함하고, 상기 적어도 하나의 프로세서는,
소스 명령어 집합 아키텍처(ISA)를 갖는 애플리케이션을 로딩하는 단계;
상기 애플리케이션에 관련된 라이브러리 서비스에 대한 호출을 제공하는 단계 - 상기 호출은 프로시저를 찾도록 구성된 코드에 디렉션됨 - ;
상기 호출을 상기 프로시저를 찾도록 구성된 코드를 우회하는, 소스 ISA 라이브러리로의 직접 호출로 대체하는 단계;
상기 애플리케이션을 타겟 ISA 라이브러리를 통해서 에뮬레이트하는 단계;
상기 소스 ISA 라이브러리와 추가 소스 ISA 라이브러리 중 하나의 추가 라이브러리 서비스에 대한 것인 추가 호출을 상기 소스 ISA 라이브러리와 상기 추가 소스 ISA 라이브러리 중 하나에 도달하지 않도록 제1 라이브러리에 리디렉션하는 단계; 및
상기 추가 호출을 상기 제1 라이브러리로부터 상기 제1 라이브러리와 동일한 이름을 갖는 상기 타겟 ISA 라이브러리와 추가 타겟 ISA 라이브러리 중 하나에 디렉션하는 단계
를 포함하는 동작들을 실행하는, 에뮬레이션 장치. - 제10항에 있어서, 상기 프로시저를 찾도록 구성된 코드는 PLT(procedure linking table) 내에 포함되어 있는, 에뮬레이션 장치.
- 제11항에 있어서, 상기 적어도 하나의 프로세서는,
상기 호출에 대한 어드레스를 식별하는 단계; 및
상기 호출에 대한 어드레스의 식별을 기반으로 상기 호출이 상기 PLT 내에 포함된 코드에 디렉션됨을 판정하는 단계
를 포함하는 동작들을 실행하는, 에뮬레이션 장치. - 삭제
- 제10항에 있어서, 상기 적어도 하나의 프로세서는 상기 애플리케이션에 대한 무정의 심볼을 리졸브하는 단계를 포함하는 동작들을 실행하는, 에뮬레이션 장치.
- 제14항에 있어서, 상기 무정의 심볼을 리졸브하는 단계는 상기 제1 라이브러리의 게이트를 통해서 상기 타겟 ISA 라이브러리와 상기 추가 타겟 ISA 라이브러리 중 하나의 게이트에 링크하는 단계를 포함하는, 에뮬레이션 장치.
- 제10항에 있어서, 상기 호출을 리디렉션하는 단계는 상기 애플리케이션에 전용인 에뮬레이터로부터 상기 호출을 리디렉션하는 단계를 포함하는, 에뮬레이션 장치.
- 제10항에 있어서, 상기 호출을 리디렉션하는 단계는 상기 호출을 상기 애플리케이션에 전용이며 일반 시스템 로더가 아닌 에뮬레이터로부터 리디렉션하는 단계를 포함하는, 에뮬레이션 장치.
- 적어도 하나의 프로세서에 의해 실행되는 에뮬레이션 방법으로서,
소스 명령어 집합 아키텍처(ISA)를 갖는 애플리케이션을 로딩하는 단계;
소스 ISA 라이브러리의 라이브러리 서비스에 대한 것인 호출을 상기 소스 ISA 라이브러리에 도달하지 않도록 제1 라이브러리로 리디렉션하는 단계;
상기 호출을 상기 제1 라이브러리로부터 상기 제1 라이브러리와 동일한 이름을 갖는 타겟 ISA 라이브러리의 라이브러리 서비스에 디렉션을 하는 단계; 및
상기 타겟 ISA 라이브러리를 통해서 상기 애플리케이션을 에뮬레이트하는 단계
를 포함하는 에뮬레이션 방법. - 제18항에 있어서, 상기 애플리케이션에 대한 무정의 심볼을 리졸브하는 단계를 포함하는 에뮬레이션 방법.
- 제19항에 있어서, 상기 무정의 심볼을 리졸브하는 단계는 간접적으로 상기 제1 라이브러리의 제1 게이트를 통해서 상기 타겟 ISA 라이브러리의 타겟 게이트에 링크하는 단계를 포함하는 에뮬레이션 방법.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2012/072770 WO2013139014A1 (en) | 2012-03-22 | 2012-03-22 | Nested emulation and dynamic linking environment |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20140127332A KR20140127332A (ko) | 2014-11-03 |
KR101665219B1 true KR101665219B1 (ko) | 2016-10-11 |
Family
ID=49221814
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020147026067A KR101665219B1 (ko) | 2012-03-22 | 2012-03-22 | 네스티드 에뮬레이션 및 동적 링킹 환경 |
Country Status (7)
Country | Link |
---|---|
US (2) | US9851987B2 (ko) |
EP (1) | EP2828739A4 (ko) |
JP (1) | JP5976917B2 (ko) |
KR (1) | KR101665219B1 (ko) |
CN (1) | CN104246695B (ko) |
AU (1) | AU2012373895B2 (ko) |
WO (1) | WO2013139014A1 (ko) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013102280A1 (en) * | 2012-01-06 | 2013-07-11 | Intel Corporation (A Corporation Of Delaware) | Method and apparatus for substituting compiler built-in helper functions with machine instructions |
US9830176B2 (en) * | 2013-04-19 | 2017-11-28 | The Trustees Of Columbia University In The City Of New York | Methods, systems, and media for binary compatible graphics support in mobile operating systems |
CN106528188B (zh) * | 2015-09-09 | 2019-08-30 | 腾讯科技(深圳)有限公司 | 一种应用加速方法及装置 |
US10268465B2 (en) * | 2016-10-24 | 2019-04-23 | International Business Machines Corporation | Executing local function call site optimization |
US10713213B2 (en) * | 2016-12-21 | 2020-07-14 | Intel Corporation | Systems and methods for multi-architecture computing |
US10684984B2 (en) | 2016-12-21 | 2020-06-16 | Intel Corporation | Computing devices and server systems with processing cores having different instruction set architectures |
US10552207B2 (en) | 2016-12-21 | 2020-02-04 | Intel Corporation | Systems and methods for multi-architecture computing including program stack translation |
US11275709B2 (en) | 2017-05-02 | 2022-03-15 | Intel Corporation | Systems and methods for multi-architecture computing |
US10706193B1 (en) * | 2018-12-04 | 2020-07-07 | Xilinx, Inc. | Computer processing during simulation of a circuit design |
US11231918B1 (en) | 2020-08-31 | 2022-01-25 | Microsoft Technologly Licensing, LLC | Native emulation compatible application binary interface for supporting emulation of foreign code |
US11403100B2 (en) * | 2020-08-31 | 2022-08-02 | Microsoft Technology Licensing, Llc | Dual architecture function pointers having consistent reference addresses |
CN116457765A (zh) | 2020-12-24 | 2023-07-18 | 三菱电机株式会社 | 数据处理装置、数据处理方法及数据处理程序 |
CN114461227B (zh) * | 2022-04-13 | 2022-07-12 | 飞腾信息技术有限公司 | 运行软件的方法、装置以及机器可读存储介质 |
WO2024069678A1 (ja) * | 2022-09-26 | 2024-04-04 | 日立Astemo株式会社 | 電子制御装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011134315A (ja) * | 2009-12-23 | 2011-07-07 | Intel Corp | 部分的なエミュレーション環境におけるソース命令セットアーキテクチャ(isa)コードから、変換済みコードへの遷移 |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3086623A (en) | 1959-07-20 | 1963-04-23 | David F Cole | Pneumatic timer |
US5774694A (en) * | 1996-09-25 | 1998-06-30 | Intel Corporation | Method and apparatus for emulating status flag |
US6086623A (en) * | 1997-06-30 | 2000-07-11 | Sun Microsystems, Inc. | Method and implementation for intercepting and processing system calls in programmed digital computer to emulate retrograde operating system |
US6631514B1 (en) * | 1998-01-06 | 2003-10-07 | Hewlett-Packard Development, L.P. | Emulation system that uses dynamic binary translation and permits the safe speculation of trapping operations |
US8065504B2 (en) * | 1999-01-28 | 2011-11-22 | Ati International Srl | Using on-chip and off-chip look-up tables indexed by instruction address to control instruction execution in a processor |
KR100518584B1 (ko) * | 2003-07-12 | 2005-10-04 | 삼성전자주식회사 | 공유 라이브러리 시스템 및 상기 시스템 구축 방법 |
US7434209B2 (en) * | 2003-07-15 | 2008-10-07 | Transitive Limited | Method and apparatus for performing native binding to execute native code |
GB0316531D0 (en) | 2003-07-15 | 2003-08-20 | Transitive Ltd | Method and apparatus for performing native binding |
US7634768B2 (en) * | 2005-02-17 | 2009-12-15 | Intel Corporation | Methods and apparatus to support mixed-mode execution within a single instruction set architecture process of a virtual machine |
US7415701B2 (en) * | 2005-02-17 | 2008-08-19 | Intel Corporation | Methods and apparatus to support mixed-mode execution within a single instruction set architecture process of a virtual machine |
WO2006131695A1 (en) | 2005-06-04 | 2006-12-14 | Transitive Limited | Method and apparatus for combined execution of native code and target code during program code conversion |
GB2426840A (en) | 2005-06-04 | 2006-12-06 | Transitive Ltd | Method of executing program code where a portion of the target code calls a native code portion which then calls a second target code portion. |
US7596540B2 (en) * | 2005-12-01 | 2009-09-29 | Exent Technologies, Ltd. | System, method and computer program product for dynamically enhancing an application executing on a computing device |
US7768518B2 (en) * | 2006-09-27 | 2010-08-03 | Intel Corporation | Enabling multiple instruction stream/multiple data stream extensions on microprocessors |
JP5128602B2 (ja) | 2006-10-02 | 2013-01-23 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラムコード変換に関して動的にリンクされた関数呼び出しを行うための方法及び装置 |
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 |
CN101295265A (zh) | 2007-04-25 | 2008-10-29 | 国际商业机器公司 | 全系统isa仿真系统及其识别进程的方法 |
JP5546023B2 (ja) | 2011-06-16 | 2014-07-09 | 日本電信電話株式会社 | 光ファイバ無切断型光入出力装置及び光ファイバ無切断型光入出力方法 |
WO2013104107A1 (en) | 2012-01-10 | 2013-07-18 | Intel Corporation | Isa bridging with callback |
US10120663B2 (en) * | 2014-03-28 | 2018-11-06 | Intel Corporation | Inter-architecture compatability module to allow code module of one architecture to use library module of another architecture |
-
2012
- 2012-03-22 JP JP2015500737A patent/JP5976917B2/ja not_active Expired - Fee Related
- 2012-03-22 US US13/994,725 patent/US9851987B2/en not_active Expired - Fee Related
- 2012-03-22 WO PCT/CN2012/072770 patent/WO2013139014A1/en active Application Filing
- 2012-03-22 EP EP12871825.1A patent/EP2828739A4/en not_active Withdrawn
- 2012-03-22 KR KR1020147026067A patent/KR101665219B1/ko active IP Right Grant
- 2012-03-22 CN CN201280071653.8A patent/CN104246695B/zh not_active Expired - Fee Related
- 2012-03-22 AU AU2012373895A patent/AU2012373895B2/en not_active Ceased
-
2017
- 2017-12-15 US US15/843,822 patent/US10761867B2/en not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011134315A (ja) * | 2009-12-23 | 2011-07-07 | Intel Corp | 部分的なエミュレーション環境におけるソース命令セットアーキテクチャ(isa)コードから、変換済みコードへの遷移 |
Also Published As
Publication number | Publication date |
---|---|
EP2828739A4 (en) | 2015-12-09 |
US20130338993A1 (en) | 2013-12-19 |
EP2828739A1 (en) | 2015-01-28 |
KR20140127332A (ko) | 2014-11-03 |
CN104246695B (zh) | 2019-05-10 |
CN104246695A (zh) | 2014-12-24 |
WO2013139014A1 (en) | 2013-09-26 |
US20180173545A1 (en) | 2018-06-21 |
US10761867B2 (en) | 2020-09-01 |
US9851987B2 (en) | 2017-12-26 |
AU2012373895B2 (en) | 2016-01-21 |
JP2015511041A (ja) | 2015-04-13 |
AU2012373895A1 (en) | 2014-09-11 |
JP5976917B2 (ja) | 2016-08-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101665219B1 (ko) | 네스티드 에뮬레이션 및 동적 링킹 환경 | |
US9910721B2 (en) | System and method for execution of application code compiled according to two instruction set architectures | |
US20200117615A1 (en) | Apparatus and method for handling page protection faults in a computing system | |
US8768682B2 (en) | ISA bridging including support for call to overidding virtual functions | |
EP2802983B1 (en) | Isa bridging with callback | |
US20150379169A1 (en) | Efficient emulation for pseudo-wrapped callback handling in binary translation software | |
JP5886450B2 (ja) | ハイブリッドのエミュレーション及びカーネル関数処理のシステム及び方法 | |
US20140196019A1 (en) | Method and Apparatus for Substituting Compiler Built-in Helper Functions with Machine Instructions | |
TWI660307B (zh) | 二元碼轉譯裝置及方法 | |
KR20110080767A (ko) | 액티브엑스 컨트롤 변환 시스템 및 방법 | |
LU500621B1 (en) | Enhancing shadow stack enforcement after process creation | |
JP2017142842A (ja) | コールバックによるisaブリッジング |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |