KR102332209B1 - 2개의 명령어 세트 아키텍처들에 따라 컴파일링된 애플리케이션 코드의 실행을 위한 시스템 및 방법 - Google Patents

2개의 명령어 세트 아키텍처들에 따라 컴파일링된 애플리케이션 코드의 실행을 위한 시스템 및 방법 Download PDF

Info

Publication number
KR102332209B1
KR102332209B1 KR1020177012763A KR20177012763A KR102332209B1 KR 102332209 B1 KR102332209 B1 KR 102332209B1 KR 1020177012763 A KR1020177012763 A KR 1020177012763A KR 20177012763 A KR20177012763 A KR 20177012763A KR 102332209 B1 KR102332209 B1 KR 102332209B1
Authority
KR
South Korea
Prior art keywords
instruction set
code
set architecture
execution
interaction
Prior art date
Application number
KR1020177012763A
Other languages
English (en)
Other versions
KR20170094136A (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 KR20170094136A publication Critical patent/KR20170094136A/ko
Application granted granted Critical
Publication of KR102332209B1 publication Critical patent/KR102332209B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/541Interprogram communication via adapters, e.g. between incompatible applications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/45533Hypervisors; Virtual machine monitors

Abstract

다중의 ISA들을 갖는 애플리케이션(118) 코드의 실행과 연관된 방법들, 장치들 및 저장 매체가 개시된다. 다양한 실시예들에서, 런타임 환경(104)은 다중의 명령어 세트 아키텍처들을 갖는 애플리케이션(118) 코드를 실행할 수 있다. 런타임 환경(104)은 제1 명령어 세트 아키텍처에 따라 애플리케이션(118) 코드의 제1 코드(120)를 실행하도록 구성될 수 있으면서, 제1 명령어 세트 아키텍처를 확장하는 제2 명령어 세트 아키텍처에 따라 애플리케이션(118) 코드의 제2 코드(122)를 실행하도록 또한 구성될 수 있다. 게이트들(124)을 사용하여, 런타임 환경(104)은 제1 코드(120)로부터 제2 명령어 세트 아키텍처로 상호작용을 적응시킬 수 있으며 그리고/또는 제2 코드(122)로부터 제1 명령어 세트 아키텍처로 상호작용을 적응시킬 수 있고, 이어서, 제1 명령서 세트 아키텍처 또는 제2 명령어 세트 아키텍처 각각에 따라 애플리케이션(118) 코드의 실행으로 리턴하도록 적응될 수 있다. 다른 실시예들이 개시될 수 있다.

Description

2개의 명령어 세트 아키텍처들에 따라 컴파일링된 애플리케이션 코드의 실행을 위한 시스템 및 방법{SYSTEM AND METHOD FOR EXECUTION OF APPLICATION CODE COMPILED ACCORDING TO TWO INSTRUCTION SET ARCHITECTURES}
본원에 제공된 배경 설명은 본 개시내용의 컨텍스트를 일반적으로 제시하기 위한 것이다. 본원에서 달리 표시되지 않는 한, 이 섹션에서 설명되는 내용들은 본 출원의 청구항들에 대한 종래 기술이 아니고, 이 섹션에 포함됨으로써 종래 기술로 인정되는 것도 아니다.
컴퓨팅 디바이스는 그것의 명령어 세트 아키텍처(ISA)를 포함하는 것을 특징으로 할 수 있다. 통상적으로, 컴퓨팅 디바이스는 운영 시스템(OS) 서비스들을 포함할 수 있으며, OS 서비스들은 애플리케이션 개발자들이 컴퓨팅 디바이스상에서 동작하는 애플리케이션들을 개발하는 것을 용이하게 하기 위해, 컴퓨팅 디바이스의 ISA에 대해 개발된 런타임 라이브러리 서비스들(LIB)을 포함할 수 있다. 예를 들어, 다양한 스마트폰들이 ARM 프로세서 및 그것의 ISA의 사용을 포함하는 것을 특징으로 할 수 있다. 이러한 스마트폰들은 각각의 스마트폰들에 대해 개발된 다양한 애플리케이션들을 지원하는 OS, 예를 들어, Apple® 컴퓨터로부터의 iOS 또는 Google®로부터의 안드로이드(Android)를 포함할 수 있다.
중앙 처리 장치(CPU) 아키텍처들이 발전함에 따라, 컴퓨팅 디바이스는 일부 새로운 특징들을 제공하도록 구성된 CPU를 포함할 수 있고 - 예를 들어, Intel® 프로세서 패밀리의 IA-64는 여분의 자원들 및 능력들(예를 들어, 추가의 레지스터들, 레지스터-기반 인수들, 및 명령어 포인터 상대적 어드레싱)을 공급할 수 있다. 그러나, 컴퓨팅 디바이스는 새로운 CPU의 새로운 특징을 이용하도록 구성되지 않을 수 있는 레거시 애플리케이션을 그 내부에 저장할 수 있다. 종래에, 레거시 애플리케이션은 새로운 특징들을 이용하기 위해 새로운 ISA에 따라 재컴파일링되어야 하고, 예를 들어, 32-비트 애플리케이션이 64-비트 모드에서 구동하기 위해 재컴파일링될 수 있다. 그러나, 전체 애플리케이션의 재컴파일은 비현실적일 수 있다. 예를 들어, 64-비트 ISA로 재컴파일링되더라도, 애플리케이션은 64-비트 ISA에 포트되지 않은 시스템 라이브러리들에 의존할 수 있다.
본 발명의 실시예들은 동일한 참조부호들이 유사한 엘리먼트들을 나타내는 첨부한 도면들에서 예시된, 제한이 아닌 예시적인 실시예들로서 설명될 것이다.
도 1은 다양한 실시예들에 따른, 다중의 명령어 세트 아키텍처들을 갖는 애플리케이션 코드를 실행하는 샌드박스를 갖는 런타임 환경을 갖는 컴퓨팅 시스템을 예시하는 블록도이다.
도 2는 다양한 실시예들에 따른, 다중의 명령어 세트 아키텍처들을 갖는 애플리케이션 코드를 실행하는 런타임 환경, 로더(loader), 및 컴파일 툴을 갖는 컴퓨팅 시스템을 예시하는 블록도이다.
도 3은 다양한 실시예들에 따른, 다중의 명령어 세트 아키텍처들을 갖는 애플리케이션 코드를 실행하는 고속 룩업 함수 및 라이브러리 호출들 함수를 갖는 런타임 환경을 갖는 컴퓨팅 시스템을 예시하는 블록도이다.
도 4는 다양한 실시예들에 따른, 다중의 명령어 세트 아키텍처들을 갖는 애플리케이션 코드를 실행하는 방법을 예시하는 흐름도이다.
도 5는 다양한 실시예들에 따른, 다중의 명령어 세트 아키텍처들을 갖는 애플리케이션 코드를 실행하는 다른 방법을 예시하는 흐름도이다.
도 6은 본 개시내용의 실시예들의 모든 또는 선택된 양태들을 실시하도록 구성된 명령어들을 갖는 예시적인 비일시적 컴퓨터-판독가능 저장 매체를 예시한다.
예시된 실시예들의 다양한 양태들이 본 기술분야의 통상의 기술자들이 그들의 작업의 내용을 본 기술분야의 다른 기술자들에게 전달하기 위해 일반적으로 이용되는 용어들을 사용하여 설명될 것이다. 그러나, 대안의 실시예들이 설명된 양태들 중 일부만을 이용하여 실시될 수 있다는 것이 본 기술분야의 통상의 기술자에게 명백할 것이다. 설명을 위해, 예시적인 실시예들의 완전한 이해를 제공하기 위해 특정한 번호들, 재료들, 및 구성들이 설명된다. 그러나, 대안의 실시예들이 특정한 상세사항들 없이 실시될 수 있다는 것이 본 기술분야의 통상의 기술자에게 명백할 것이다. 다른 경우들에서, 널리 공지된 특징들은 예시적인 실시예들을 모호하게 하지 않기 위해 생략되거나 간소화된다.
다양한 동작들은 다중의 별개의 동작들로서, 결과적으로, 예시적인 실시예들을 이해하는데 가장 도움이 되는 방식으로 설명되지만; 설명의 순서는 이들 동작들이 반드시 순서에 의존한다는 것을 의미하는 것으로 해석되지 않아야 한다. 특히, 이들 동작들은 제시의 순서로 수행될 필요가 없다. 추가로, 개별 동작들로서 동작들의 설명들이 동작들이 독립적으로 그리고/또는 개별 엔터티들에 의해 반드시 수행되는 것을 요구하는 것으로서 해석되지 않아야 한다. 유사하게, 개별 모듈들로서 엔터티들 및/또는 모듈들의 설명들은 모듈들이 개별적이며 그리고/또는 개별 동작들을 수행하는 것을 요구하는 것으로서 해석되지 않아야 한다. 다양한 실시예들에서, 예시되며 그리고/또는 설명된 동작들, 엔터티들, 데이터, 및/또는 모듈들은 병합되고, 추가의 서브-파트들로 분할되고, 그리고/또는 생략될 수 있다.
문구 "일 실시예에서" 또는 "실시예에서"가 반복적으로 사용된다. 문구는 동일한 실시예를 일반적으로 지칭하지 않지만; 지칭할 수도 있다. 용어들 "포함하는", "갖는", 및 "구비하는"은 문맥이 다르게 명시하지 않으면 동의어이다. 문구 "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)"를 의미한다.
도 1은 본 개시내용의 다양한 실시예들에 따른, 다중의 ISA들을 갖는 애플리케이션 코드를 실행하는 샌드박스(120)를 갖는 런타임 환경(104)과 통합된 예시적인 컴퓨팅 시스템(100)을 예시한다. 도시되어 있는 바와 같이, 예시된 실시예들에 대해, 컴퓨팅 시스템(100)은 도시된 바와 같이 서로 결합된 적어도 하나의 프로세서(112), 운영 시스템(OS) 커널(114), 복수의 시스템 라이브러리들(116), 런타임 환경(104), 그래픽 프로세싱 유닛(GPU)(106), 디스플레이(108), 및 네트워크 인터페이스(110)를 갖도록 구성된 프로세서 및 메모리 장치(102)를 포함할 수 있다.
컴퓨팅 시스템(100)은 서버, 데스크탑 컴퓨터, 랩탑 컴퓨터, 태블릿 컴퓨터, 스마트폰, 개인 휴대 정보 단말기, 게임 콘솔, 인터넷 어플라이언스, 또는 기타의 다른 컴퓨팅 시스템들일 수 있다. 컴퓨팅 시스템(100)의 예들은, 캘리포니아주(CA)의 Palo Alto 소재의 Hewlett Packard로부터 입수가능한 서버들, 텍사스주(Texas)의 Austin 소재의 Dell Computer로부터 입수가능한 데스크탑 또는 랩탑 컴퓨터들, 캘리포니아주(CA)의 Cupertino 소재의 Apple Computer로부터 입수가능한 스마트폰들 및 컴퓨팅 태블릿들, 일본 도쿄 소재의 Nintendo Corporation으로부터 입수가능한 게임 콘솔들 등을 포함할 수 있지만, 이에 제한되지 않는다.
프로세서 및 메모리 장치(102)는 다양한 실행 속도들 및 전력 소모들의 단일 또는 멀티-코어 프로세서들, 및 캐시들의 하나 이상의 레벨들을 갖는 다양한 아키텍처들의 또는 동적 랜덤 액세스, 플래시 등과 같은 다양한 타입들의 메모리를 갖는 장치들을 포함하지만 이에 제한되지 않는 광범위한 프로세서 및 메모리 장치들을 나타내는 것으로 의도된다. 다양한 실시예들에서, GPU(106)는 비디오 디코딩 및/또는 그래픽 프로세싱 기능들을 OS 커널(114)에 제공하도록 구성될 수 있고, 디스플레이(108)는 콘텐츠가 렌더링될 수 있도록 구성될 수 있다. 유사하게, GPU(106) 및 디스플레이(108)는 본 기술분야에 공지된 광범위한 그래픽 프로세서들 및 디스플레이 엘리먼트들을 나타내는 것으로 의도된다. 유사하게, 하나 이상의 네트워크(들)(134)는 본 기술분야에 공지된 광범위한 네트워크들을 나타내는 것으로 의도된다. 네트워크(들)(134)의 예들은 인터넷을 포함하는, 유선 또는 무선, 로컬 또는 광역, 사설 또는 공중 네트워크들을 포함할 수 있다.
프로세서 및 메모리 장치(102)는 적어도 하나의 프로세서(112)를 포함할 수 있다. 프로세서(112)는 예를 들어, CPU, 단일 또는 멀티-코어 마이크로프로세서 등을 포함할 수 있다. 프로세서(112)는 다른 아키텍처를 또한 지원하면서 하나의 아키텍처를 위해 구성될 수 있다. 예를 들어, 프로세서(112)는 32-비트 연산들을 지원하는 64-비트 프로세서(예를 들어, IA-64)일 수 있다. 대응하게, OS 커널(114)은 다른 아키텍처를 또한 지원하면서 하나의 아키텍처를 위해 구성될 수 있고, 예를 들어, OS 커널(114)은 32-비트 연산들을 지원하는 64-비트 커널일 수 있다. OS 커널(114)은 메모리 자원들, 스케줄 작업 실행 등을 추가적으로 관리할 수 있다.
기본 시스템과의 상호작용을 지원하기 위해, 프로세서 및 메모리 장치(102)는 복수의 시스템 라이브러리들(116)을 포함할 수 있다. 시스템 라이브러리들(116)은 애플리케이션(118)과 OS 커널(114) 사이에 호출들을 제공하도록 구성될 수 있다. 시스템 라이브러리들(116)은 파일 저장 및 입/출력 동작들과 같은 다양한 플랫폼 동작 기능들을 또한 제공할 수 있다. 시스템 라이브러리들(116) 중 적어도 하나가 OS 커널(114) 및/또는 프로세서(112)의 아키텍처의 특징들 모두를 사용하도록 구성되지 않은 ISA에 따라 컴파일링될 수 있고, 즉, OS 커널(114) 및/또는 프로세서(112)는 시스템 라이브러리들(116) 중 적어도 하나의 아키텍처를 확장하는 아키텍처를 위해 사용될 수 있다. 예를 들어, 시스템 라이브러리들(116) 중 적어도 하나는 32-비트 라이브러리일 수 있다.
실시예들에서, 프로세서 및 메모리 장치(102)는 그 내부에 로딩된 애플리케이션(118)을 가질 수 있다. 애플리케이션(118)은 본 기술분야에 공지된 광범위한 애플리케이션들을 나타내는 것으로 의도된다. 애플리케이션(118)의 예들은 캘린더, 워드 프로세싱, 스프레드시트, 트위터, 페이스북 등과 같은 개인 비서, 생산성(productivity), 또는 소셜 네트워킹 애플리케이션들, 또는 브라우저와 같은 일반 애플리케이션 에이전트들을 포함할 수 있지만, 이에 제한되지 않는다.
실시예들에서, 애플리케이션(118)은 제1 ISA에 따라 컴파일링되는 제1 코드(120) 및 제1 ISA를 확장하는 제2 ISA에 따라 컴파일링되는 제2 코드(122)를 포함할 수 있다. 일 실시예에서, 제1 코드(120)는 32-비트 ISA에 따라 컴파일링될 수 있는 반면에, 제2 코드(122)는 64-비트 ISA에 따라 컴파일링될 수 있다. 실행 동안, 제1 코드(120)는 제1 ISA에 따른 컴파일의 결과로서 제1 애플리케이션 이진 인터페이스(ABI)(예를 들어, 32-비트 ABI)를 따를 수 있고, 여기서, 제2 코드(122)는 제2 ISA에 따른 컴파일의 결과로서 상이한 ABI(예를 들어, 64-비트 ABI)를 따를 수 있다. 그 결과, 애플리케이션(118)의 제1 코드(120) 및 제2 코드(122)는, 하나의 프로세스에서 실행될 때 서로 상호작용할 수 없어서, 그 프로세서에서 실행될 때 데이터를 공유할 수 없다. 예를 들어, 32-비트 모드에 대한 포인터 사이즈가 4 바이트인 반면에, 64-비트 모드에 대한 포인터 사이즈가 8 바이트이기 때문에, 32-비트 모드에서 제1 코드(120)와 연관된 데이터 레이아웃 및/또는 정렬은 64-비트 모드에서 제2 코드(122)와 연관된 데이터 레이아웃 및/또는 정렬과 상이할 수 있다.
프로세서 및 메모리 장치(102)는 다중의 ISA들을 갖는 애플리케이션(118)의 실행을 위한 런타임 환경(104)이 그 내부에 로딩되어 있을 수 있다. 일 실시예에서, 런타임 환경(104)은 프로세스 가상 머신(PVM)을 포함할 수 있다. 런타임 환경(104)은 제1 코드(120)와 제2 코드(122)를 분리할 수 있고, 제1 코드(120)와 제2 코드(122) 사이의 상호작용을 관리할 수 있다. 이러한 분리와 관련하여, 런타임 환경(104)은 제2 코드의 실행을 위한 샌드박스(126)를 가질 수 있다. 샌드박스(126)는, 제2 코드(122)의 동작들이 다른 컴포넌트들(예를 들어, 제1 코드(120) 및/또는 시스템 라이브러리들(116))과 직접 상호작용하지 않도록 가상 컨테이너로서 작용할 수 있다. 따라서, 애플리케이션(118)이 실행하는 프로세스는 제1 ISA에 따라 컴파일링된 제1 코드(120)의 실행을 위해 구성될 수 있지만, 제2 ISA에 따라 컴파일링된 제2 코드(122)는 샌드박스(126) 내의 그 프로세스에서 실행될 수 있다. 샌드박스(126)와 관련하여, 런타임 환경(104)은 애플리케이션(118)의 실행 제어로 하여금 (예를 들어, 32-비트 모드와 64-비트 모드 사이에서) 샌드박스(126)를 크로스하게 하기 위한 상호작용들이 양호하게 처리된다는 것을 보장할 수 있다.
다양한 실시예들에서, 런타임 환경(104)은 애플리케이션(118)의 실행 제어로 하여금 다른 모드(예를 들어, 다른 ISA 및/또는 다른 ISA ABI)로 전달되게 하기 위한 것인 제1 코드(120)의 실행 또는 제2 코드(122)의 실행 동안 상호작용을 차단하도록 구성될 수 있다. 예를 들어, 32-비트 ISA와 연관될 수 있는 제1 코드(120)의 실행 동안, 상호작용은 애플리케이션(118)의 실행 제어로 하여금 64-비트 ISA와 연관될 수 있는 제2 코드(122)와 같은 64-비트 모드로 전달되게 할 수 있다. 유사하게, 64-비트 ISA와 연관될 수 있는 제2 코드(122)의 실행 동안, 상호작용은 애플리케이션(118)의 실행 제어로 하여금 시스템 라이브러리들(116)의 32-비트 ISA 또는 32-비트 시스템 라이브러리와 연관될 수 있는 제1 코드(120)와 같은 32-비트 모드로 전달되게 할 수 있다.
다양한 실시예들에서, 런타임 환경(104)에 의해 차단된 상호작용은 제1 코드(120)로부터 제2 코드(122)로의 호출, 제2 코드(122)로부터 제1 코드(120)로의 호출, 제1 코드(120)로부터 제2 ISA에 따라 컴파일링된 시스템 라이브러리들(116)의 라이브러리로의 호출, 제2 코드(120)로부터 제2 ISA에 따라 컴파일링된 라이브러리로의 호출, 또는 실행 제어가 전달될 때 차단될 수 있는 OS 커널(114)과 연관된 신호일 수 있다.
일 실시예에서, OS 커널(114)로부터의 신호는 제2 코드(122)를 인터럽트할수 있다. 애플리케이션(118)이 구동하는 프로세스가 제1 ISA(예를 들어, 32-비트 모드)를 위해 구성될 수 있기 때문에, 제1 코드(120)와 연관된 레지스터들이 이러한 인터럽트에 응답하여 디폴트로 저장되며 그리고/또는 복원될 수 있다. 그러나, 런타임 환경(104)은 예를 들어, 애플리케이션(118)의 실행 제어가 샌드박스(126)에서 제2 코드(122)와 연관될 때, 제2 코드(122)와 연관된 레지스터들을 저장하며 그리고/또는 복원하도록 구성될 수 있다.
런타임 환경(104)은 제1 ISA와 연관된 제1 ABI 포맷으로부터 제2 ISA와 연관된 제2 ABI 포맷으로의 적응(adaption) 또는 제2 ABI 포맷으로부터 제1 ABI 포맷으로의 적응을 포함할 수 있는, 제1 ISA로부터 제2 ISA로 또는 제2 ISA로부터 제1 ISA로 차단된 상호작용을 적응시키도록 구성될 수 있다. 상호작용을 적응시키기 위해, 런타임 환경(104)은 스위치 게이트(124)를 삽입하도록 적응될 수 있다. 스위치 게이트(124)를 사용하여, 애플리케이션(118)의 실행 제어는 (예를 들어, 32-비트 모드와 64-비트 모드 사이에서) 제1 코드(120) 또는 제2 코드(122)로부터 전달될 수 있다. 추가로, 런타임 환경(104)은 리턴 게이트(124)를 삽입하도록 적응될 수 있다. 실행 제어가 제1 코드(120) 또는 제2 코드(122)로 리턴될 때, 런타임 환경은 리턴 게이트(124)를 사용하여 (예를 들어, 64-비트 모드와 32-비트 모드 사이에서) 실행 제어를 다시 전달하도록 구성될 수 있다.
런타임 환경은 제1 코드(120) 및 제2 코드(122)가 동일한 프로세스에서 실행할 수 있도록 스위치/리턴 게이트들(124)을 실행 제어로 하여금 제1 코드(120) 또는 제2 코드(122)로부터 전달되게 할 수 있는 임의의 코드로 인라인(inline)할 수 있다. 일 실시예에서, 런타임 환경(104)은 예를 들어, 애플리케이션(118)의 실행 이전에, 하나 이상의 게이트들(124)을 정적으로 삽입할 수 있다. 다른 실시예에서, 런타임 환경(104)은 예를 들어, 애플리케이션(118)의 실행 동안, 하나 이상의 게이트들(124)을 동적으로 삽입할 수 있다. 게이트들(124)이 동적으로 삽입되는 실시예에서, 런타임 환경(104)은 PVM을 포함할 수 있다.
제1 코드(120) 또는 제2 코드(122)로부터의 실행 제어의 전달을 위해, 런타임 환경(104)에서의 스위치 게이트(124)는 예를 들어, 하나 이상의 레지스터들을 저장하고, 데이터의 사이즈를 조절하고, 데이터의 정렬을 조절하고, 데이터의 레이아웃을 조절하고, 호출(예를 들어, 제1 코드(120) 또는 제2 코드(122)의 애플리케이션 프로그램 인터페이스(API)와 연관된 호출, 제2 코드(122)로부터 제1 ISA에 따라 컴파일링된 시스템 라이브러리들(116) 중 하나로의 호출 등)을 변환하고, OS 커널(114)과 연관된 신호를 저장하고, 그리고/또는 레지스터를 저장하도록 구성될 수 있다. 일 실시예에서, 스위치 게이트(124)는 제1 ISA와 연관된 제1 ABI 포맷과 제2 ISA와 연관된 제2 ABI 포맷 사이에서 호출을 변환하도록 구성될 수 있으며, 대응하게, 리턴 게이트(124)는 제1 또는 제2 ABI로부터 제1 또는 제2 ABI 중 다른 하나로 리턴하도록 구성될 수 있다.
제1 코드(120) 또는 제2 코드(122)로부터의 실행 제어의 전달 이후에, 제2 ISA 또는 제1 ISA 각각과 연관되고, 상호작용에 의해 초래된 하나 이상의 동작들이 실행될 수 있다. 예를 들어, 상호작용은 제1 코드(120)로부터 제2 코드(122)의 함수로의 호출을 포함할 수 있고, 실행 제어의 전달은 콜백 함수의 실행을 포함할 수 있다.
그 후, 실행 제어는 제1 코드(120) 또는 제2 코드(122)로 리턴할 수 있다. 런타임 환경(104)은 실행 제어를 제1 코드(120) 또는 제2 코드(122)로 리턴하기 위해 리턴 게이트(124)를 사용할 수 있다. 다양한 실시예들에서, 리턴 게이트(124)는 하나 이상의 레지스터들을 복원하고, 데이터의 정렬에 대한 조절을 복원하고, 데이터의 사이즈에 대한 조절을 복원하고, 데이터의 레이아웃에 대한 조절을 복원하고, 제1 코드(120) 또는 제2 코드(122)와 연관된 각각의 ISA에 대해 응답(예를 들어, 콜백 함수의 결과)을 적응하도록 적응될 수 있다.
애플리케이션(118)의 실행 동안, 프로세서(112)는 제1 코드(120)와 연관된 세그먼트 또는 제2 코드(122)와 연관된 세그먼트로 점프할 수 있는 명령어들을 포함할 수 있다. OS 커널(114)은 제1 코드(120) 및 제2 코드(122)에 대해 상이한 세그먼트들을 작성할 수 있다. OS 커널(114)에 의해 제공된 하나 이상의 점프들 및 코드 세그먼트 서술자들과 연관되는 프로세서(112)로부터의 명령어들에 기초하여, 런타임 환경(104)은 (예를 들어, 32-비트 모드와 64-비트 모드 사이에서) 제1 코드(120) 또는 제2 코드(122)로 그리고 제1 코드(120) 또는 제2 코드(122)로부터 실행 제어를 전달하기 위해 스위치 게이트(124) 및 대응하는 리턴 게이트(124)를 삽입할 수 있다. 제1 코드(120)와 연관된 세그먼트 또는 제2 코드(122)와 연관된 세그먼트 사이의 점프의 예들이 32-비트 ISA(예를 들어, x86 ISA) 및 64-비트 ISA(즉, x64 ISA)에 대해 표 1 및 표 2에 예시되어 있다.
[표 1]
Figure 112017044828750-pct00001
표 1에 예시된 의사-어셈블리는 AT&T 스타일(즉, 동작-코드 소스, 대상)에 있다. 이러한 예에서, "ljmp"는 프로세서(112)에 의해 제공된 FAR JUMP 명령어이다. "USER_64_CS"는 OS 커널(114)에 의해 제공되는 제2 코드(122)(예를 들어, 64-비트 코드)와 연관된 16-비트 길이 코드 세그먼트이고, "USER_32_CS"는 OS 커널(114)에 의해 또한 제공된 제1 코드(120)(예를 들어, 32-비트 코드)와 연관된 8-비트 길이 코드 세그먼트이다. "code_64_addr"은 제2 코드(122)의 엔트리 포인트(예를 들어, 샌드박스(126)에서 제2 코드(122)로의 실행 제어의 천이)와 연관된 64-비트 어드레스인 반면, "code_32_addr"은 제1 코드(120)의 엔트리 포인트(예를 들어, 제1 코드(120)로의 실행 제어의 천이)와 연관된 32-비트 어드레스이다. ".code32" 및 ".code64"는 제1 코드(120) 및 제2 코드(122) 각각에 대한 컴파일러 의사-지시문들이다.
[표 2]
Figure 112017044828750-pct00002
표 2는 점프를 위해 "far call" 및 매칭 "far ret"을 사용할 수 있는 다른 예를 예시한다. 이러한 구현은 하나 이상의 점프들의 성능과 연관된 북키핑(bookkeeping)에 대한 개선된 자동화를 제공할 수 있다. "lcall" 및 "lret"은 64-비트 모드와 32-비트 모드 사이에서 스위칭하도록 프로세서(112)에 의해 제공된 명령어들일 수 있다. "PREPARE-ARGS"는 32-비트 모드와 64-비트 모드 사이의 호출 규칙을 처리하기 위한 것이다. 예를 들어, "PREPARE-ARGS"는, 64-비트 ISA와 연관된 ABI 포맷이 레지스터들에 의해 인수들을 패스하고 32-비트 ISA와 연관된 ABI 포맷이 스택에 의해 인수들을 패스하기 때문에, 스택으로부터 그리고 64-비트 레지스터로(그 반대의 경우도 가능함) 인수들을 카피할 수 있다. 유사하게, "PREPARE-RES"는 필요하면, 리턴값을 변환할 수 있다.
표 2의 예에 따르는 일 실시예에서, 스위치/리턴 게이트들(124)은 자동화될 수 있다. 스위치/리턴 게이트들(124)은 타겟 함수와 연관된 어드레스에 대한 입력 파라미터를 갖는, 제1 코드(120) 또는 제2 코드(122)에 대한 함수 호출들로서 제공될 수 있다. 스위치 게이트(12)는 수신자 코드(예를 들어, 제1 코드(120) 또는 제2 코드(122))와 연관된 레지스터들을 저장하고 타겟 함수를 호출하며, 그 후, 리턴 게이트(124)는 레지스터들을 복원하고 호출자 코드(예를 들어, 제1 코드(120) 또는 제2 코드(122) 중 다른 하나)로 리턴할 수 있다.
32-비트 내지 64-비트 모드 스위치에 대한 예시적인 스위치/리턴 게이트들(124)의 실시예들에서, "esi" 및 "edi"는 제1 코드(120)의 32-비트 레지스터들이다. 이들 레지스터들은 제1 코드(120)로부터 실행 제어의 전달 동안 저장되지 않을 수 있다. 따라서, 스위치 게이트(124)는 32-비트 레지스터들을 저장할 필요가 있을 수 있으며, 리턴 게이트(124)는 far call 이후에 32-비트 레지스터들을 복원할 수 있다. 유사하게, 64-비트 내지 32-비트 모드 스위치에 대한 예시적인 스위치/리턴 게이트들(124)의 실시예들에서, "rbx" 및 "rbp"는 제1 코드(120)의 64-비트 레지스터들이다. 이들 레지스터들은 실행 제어가 제2 코드(120)로부터/로 전달/리턴될 때 부분적으로 저장되고/복원된다. 그러나, 스위치 게이트(124)는 64-비트 레지스터들을 저장할 수 있으며, 리턴 게이트(124)는 far call 이후에 64-비트 레지스터들을 복원할 수 있다.
이제 도 2를 참조하면, 블록도는 본 개시내용의 다양한 실시예들에 따른, 다중의 ISA들을 갖는 애플리케이션 코드를 실행하는 런타임 환경(204), 로더(230), 및 컴파일 툴(232)과 통합된 예시적인 컴퓨팅 시스템(200)을 예시한다. 도 1에 설명한 실시예들에 관하여, 컴퓨팅 시스템(200)은 컴퓨팅 시스템(100)의 실시예일 수 있고, 프로세서 및 메모리 장치(202)는 프로세서 및 메모리 장치(102)의 실시예일 수 있고, 런타임 환경(204)은 런타임 환경(104)의 실시예일 수 있고, 프로세서(212)는 프로세서(112)의 실시예일 수 있고, OS 커널(214)은 OS 커널(114)의 실시예일 수 있고, 시스템 라이브러리들(216)은 시스템 라이브러리들(116)의 실시예일 수 있으며, 그리고/또는 스위치/리턴 게이트들(224)은 스위치/리턴 게이트들(124)의 실시예일 수 있다. 런타임 환경(204)은 제1 코드(120) 및 제2 코드(122)를 갖는 애플리케이션(118)의 실시예일 수 있는 제1 코드(220) 및 제2 코드(222)를 갖는 애플리케이션(218)을 그 내부에서 실행할 수 있다. 제2 코드(222)는 샌드박스(126)의 실시예일 수 있는 샌드박스(226)에서의 런타임 환경(204)에서 실행될 수 있다.
OS 커널(214)은 임의의 종래의 로더일 수 있는 시스템 로더(미도시)와 연관될 수 있다. 시스템 로더는 시스템 라이브러리들(216)을 프로세서 및 메모리 구성(204)의 물리적 메모리로 로딩하는 것을 담당할 수 있다. 시스템 로더는 애플리케이션(218)의 제1 코드(220)를 프로세서 및 메모리 구성(204)의 물리적 메모리로 로딩할 수 있다. 애플리케이션(218)을 포함하는 제1 코드(220) 이외에, 애플리케이션(218)은 제1 코드(220)가 컴파일링되는 ISA를 확장하는 ISA에 따라 컴파일링되는 제2 코드(222)로 구성될 수 있고, 예를 들어, 제1 코드(220)는 32-비트 ISA에 따라 컴파일링될 수 있는 반면에, 제2 코드(222)는 64-비트 ISA에 따라 컴파일링될 수 있다. 따라서, 시스템 로더는 제2 코드(222)를 로딩하는데 불충분할 수 있다.
시스템 로더 이외에, 컴퓨팅 시스템(200)은 제1 코드(220)의 제1 ISA를 확장하는 제2 ISA에 따라 컴파일링된 코드를 프로세서 및 메모리 장치(202)의 물리적 메모리에 로딩하기 위한 로더(230)를 포함할 수 있다. 일 실시예에서, 로더(230)는 제2 ISA와 연관된 라이브러리(예를 들어, 시스템 라이브러리들(216)의 라이브러리)를 제1 ISA와 연관된 어드레스 공간에 로딩하도록 구성된다. 추가로, 로더(230)는 제1 코드(220) 또는 제2 코드(222)를 스위치/리턴 게이트(224) 중 적어도 하나와 링크하도록 적응될 수 있다. 로더(230)는 시스템 라이브러리들(216)과 연관된 애플리케이션(118)의 임의의 미해결 심볼 명칭들 및/또는 시스템 라이브러리들(216)과 연관된 대응하는 게이트들(224)의 어드레스들을 해결하도록 구성될 수 있다.
로더(230)는 다수의 공지된 방식들 중 어느 하나에서 OS 커널(214)과 연관된 시스템 로더로부터 로딩의 제어를 획득할 수 있다. 이러한 공지된 방식들의 예들은 OS 커널(214)에 의해 지원될 때의 이진 포맷 기반 제어 전달 또는 로딩/프리-로딩 변수들의 사용을 포함할 수 있다. 다른 실시예들에서, OS 커널(214)과 연관된 시스템 로더는 로더(230)로의 제어의 전달을 용이하게 하도록 변경될 수 있다.
실시예들에서, 컴퓨팅 시스템(200)은 컴파일 툴(232)을 포함할 수 있다. 컴파일 툴은 제1 ISA를 확장하는 제2 ISA에 따라 애플리케이션(218)의 제2 코드(222)를 컴파일링하도록 구성될 수 있다. 컴파일 동안, 컴파일 툴(232)은 제2 ISA의 인코딩을 가정하지만 제1 ISA의 데이터 사이즈 및 정렬을 따르는 ABI를 따르도록 구성될 수 있다. 일 실시예에서, 컴파일 툴(232)은 제2 ISA를 따르지만, 제1 코드(220)가 컴파일 툴(232)에 의해 컴파일링된 시스템 라이브러리들(216)과 상호작용할 때 비호환 데이터 레이아웃 및/또는 배열을 회피하는 방식으로 시스템 라이브러리들(216) 중 하나 이상을 컴파일링하도록 구성될 수 있다.
컴파일 툴(232)과 유사할 수 있으며 그리고/또는 컴파일 툴(232)에 포함될 수 있는 컴파일러들의 예들은, 64-비트 인코딩을 가정하지만 32-비트 데이터 사이즈 및 정렬을 따르는 x32 ABI를 지원하는 캘리포니아주(CA), Santa Clara 소재의 Intel Corporation으로부터 입수가능한 컴파일러들, 및/또는 x86 프로세스 내부에서 x32 코드를 생성하는 동적 코드 생성기들을 포함한다. 실시예들에서, 컴파일 툴(232)은 다수의 공지된 방식들 중 어느 하나로 인보크될 수 있다. 일 실시예에서, (예를 들어, 사용자 입력을 통한) 애플리케이션(218)의 인보크는 컴파일 툴(232)을 대응하게 인보크할 수 있다. 일 실시예에서, 컴파일 툴(232)은 컴파일을 위한 동적 JIT(just-in-time) 엔진을 포함할 수 있다.
실시예들에서, 런타임 환경(204)은 PVM을 포함할 수 있다. PVM(204)은 제1 코드(220)에 대해 제1 ISA(예를 들어, 32-비트 ISA 및 연관된 ABI 포맷)에 따라 동작하도록 구성될 수 있다. 이러한 실시예들에서, 컴파일 툴(232)은 제2 ISA(예를 들어, 64-비트 ISA 및 연관된 ABI 포맷)에 따라 저스트-인-타임(just-in-time) 코드(예를 들어, 제2 코드(222) 및/또는 시스템 라이브러리들(216))를 생성하도록 구성될 수 있다. PVM(204)은 제1 ISA를 따르는 프로세스 내에서, 제2 ISA에 따라 동작할 샌드박스(226)를 호스트하도록 구성될 수 있다. PVM(204)은 동적 링킹(예를 들어, 제1 코드(220) 및/또는 제2 코드(222)로 그리고/또는 제1 코드(220) 및/또는 제2 코드(222)로부터의 호출들)에 기초하여 함수 호출들 및 콜백들을 처리하기 위해 다양한 API 매핑 기법들을 사용하도록 적응될 수 있다. 일부 실시예들에서, PVM(204)은 제1 ISA 및/또는 리턴 명령어 포인터(RIP) 상대적 어드레싱에 이용가능한 것들 이상의 추가의 레지스터들을 제공할 수 있다. 일 실시예에서, PVM(204)은 제2 ISA와 연관된 레지스터들을 제1 ISA에 고정으로 매핑하도록 구성될 수 있고, 이는 레지스터 할당 및/또는 레지스터 부하와 연관된 변환 오버헤드를 감소시킬 수 있다.
PVM(204)은 스위치/리턴 게이트들(224)을 삽입하도록 구성될 수 있다. 실시예들에서, PVM(204)은 노출된 심볼 정보를 위치시키기 위해 로더(230)와 상호작용할 수 있고, 상이한 ISA들과 연관된 실행 제어의 전달을 위한 하나 이상의 스위치/리턴 게이트들(224)과 제1 코드(220) 및/또는 제2 코드(222)를 링크할 수 있다. 실시예들에서, PVM(204) 및/또는 로더(230)는 링킹 및/또는 로딩 동안 하나 이상의 상호작용들을 차단할 수 없을 수 있지만; 제1 코드(220), 제2 코드(222), 및/또는 시스템 라이브러리들(216)이 PVM(204) 내부에서 실행될 수 있기 때문에, PVM(204)은 상호작용들을 제어할 수 있으며, 실행 동안 하나 이상의 스위치/리턴 게이트들(224)을 동적으로 삽입하도록 구성될 수 있다. OS 커널(214)로부터의 신호들에 관하여, PVM(204)은 하나 이상의 신호들을 차단하고, 하나 이상의 레지스터 상태들로 하여금 신호 핸들러에 저장되게 하는 방식으로 제1 ISA와 제2 ISA 사이에서 스위칭하도록 구성될 수 있다. 신호 핸들링 이후에, PVM(204)은 제1 SIA 또는 제2 ISA에 따라 "페이크(fake)" 신호 프레임을 생성하고, 하나 이상의 레지스터 상태들을 리턴하기 위해 제1 ISA 또는 제2 ISA에 따라 "sig-return"을 사용하도록 구성될 수 있다.
도 3으로 가서, 블록도는 본 개시내용의 다양한 실시예들에 따른, 다중의 ISA들을 갖는 애플리케이션 코드를 실행하는 하나 이상의 라이브러리 호출들(334) 및 고속 룩업 함수(336)와 결합된 런타임 환경(304)과 통합된 예시적인 컴퓨팅 시스템(300)을 예시한다. 도 1에 설명한 실시예들에 관하여, 컴퓨팅 시스템(300)은 컴퓨팅 시스템(100)의 실시예일 수 있고, 프로세서 및 메모리 장치(302)는 프로세서 및 메모리 장치(102)의 실시예일 수 있고, 런타임 환경(304)은 런타임 환경(104)의 실시예일 수 있고, 프로세서(312)는 프로세서(112)의 실시예일 수 있고, OS 커널(314)은 OS 커널(114)의 실시예일 수 있고, 시스템 라이브러리들(316)은 시스템 라이브러리들(116)의 실시예일 수 있으며, 그리고/또는 스위치/리턴 게이트들(324)은 스위치/리턴 게이트들(124)의 실시예일 수 있다. 런타임 환경(304)은 제1 코드(120) 및 제2 코드(122)를 갖는 애플리케이션(118)의 실시예일 수 있는 제1 코드(320) 및 제2 코드(322)를 갖는 애플리케이션(318)을 그 내부에서 실행할 수 있다. 제2 코드(322)는 샌드박스(126)의 실시예일 수 있는 샌드박스(326)에서의 런타임 환경(304)에서 실행될 수 있다.
런타임 환경(304)이 다중의 ISA들을 갖는 애플리케이션 코드를 실행하는 것에 대한 접근방식을 제공할 수 있지만, 스위치/리턴 게이트들(324)을 사용하는 (제1 코드(320)가 컴파일링될 수 있는) 제1 ISA와 (제2 코드(322)가 컴파일링될 수 있는) 제2 ISA 사이의 스위칭이 일부 오버헤드를 초래할 수 있다. 따라서, 하나 이상의 라이브러리 호출들(334) 및/또는 고속 룩업 함수(336)가 오버헤드를 감소시키기 위해 본 개시내용의 교시들과 통합될 수 있다.
실시예들에서, 런타임 환경(304)은 애플리케이션(318)의 실행 제어로 하여금 변환 룩업을 위해 제1 코드(320) 또는 제2 코드(322)로부터 전달되게 할 수 있다. 이러한 문제를 다루기 위해, 런타임 환경(304)은 고속 룩업 함수(336)에서 코드의 하나 이상의 블록들을 유지하도록 적응될 수 있다. 코드의 하나 이상의 블록들은 제1 코드(320)와 연관되지만 제2 ISA 하에서 컴파일링될 수 있거나, 제2 코드(322)와 연관되지만 제1 ISA 하에서 컴파일링될 수 있다. 따라서, 제1 코드(320) 또는 제2 코드(322)의 블록이 실행되면, 포워딩 쓰레드가 실행될 코드의 다음 블록을 식별하기 위해 고속 룩업 함수(336)를 입력할 수 있으며, 코드의 다음 블록이 고속 룩업 함수(336)에서 성공적으로 식별되면, 제1 ISA와 제2 ISA 사이의 스위치 대신에 코드의 식별된 블록을 사용하여 애플리케이션(318)을 계속 실행할 수 있다.
일 실시예에서, 런타임 환경(304)은 복수 횟수 실행될 제1 코드(320) 또는 제2 코드(332)의 블록을 식별하고, 예를 들어, 제2 ISA와 연관되면 제1 ISA 하에서 또는 제1 ISA와 연관되면 제2 ISA 하에서 재컴파일링함으로써 코드의 식별된 블록으로 하여금 다른 ISA로 변환되게 하기 위해 컴파일 툴(322)과 상호작용하도록 적응될 수 있다.
실시예들에서, 런타임 환경(304)에 의한 빈번한 API 호출은 애플리케이션(318)의 실행 제어로 하여금 제1 코드(320) 또는 제2 코드(322)로부터 전달되게 할 수 있으며, 따라서, API 호출은 애플리케이션(318)의 실행과 연관된 오버헤드를 증가시킬 수 있다. 특히, 제2 코드(322)로부터의 일부 함수 호출들은 제1 ISA에 따라 컴파일링된 시스템 라이브러리들(316)에 대한 것일 수 있다. 오버헤드를 감소시키기 위해, 런타임 환경(304)은 예를 들어, 컴파일 툴(332) 로 하여금 하나 이상의 시스템 라이브러리들(316)을 재컴파일링하게 함으로써, 제2 ISA에 따라 컴파일링될, 제1 ISA에 따라 원래 컴파일링된 하나 이상의 시스템 라이브러리들(316)을 재컴파일링하도록 구성될 수 있다. 이들 재컴파일링된 시스템 라이브러리들은 샌드박스(326)에서 제2 코드(322)의 실행 동안 액세스가능한 라이브러리 호출 함수(334)에서 유지될 수 있다. 따라서, 제2 코드(322)가 실행되고 있을 때, 런타임 환경(304)은 샌드박스(326)를 나가고 시스템 라이브러리들(316)과 상호작용하기 위해 스위치/리턴 게이트들(324)을 사용하는 대신에 라이브러리 호출 함수(334)에 액세스할 수 있다.
이제 도 4를 참조하면, 흐름도는 본 개시내용의 다양한 실시예들에 따른, 다중의 ISA들을 갖는 애플리케이션을 실행하는 방법(400)을 예시한다. 방법(400)은 도 1의 컴퓨팅 시스템(100)과 같은, 본 개시내용에 설명한 하나 이상의 컴퓨팅 시스템들에서 실시될 수 있다. 방법(400)이 복수의 순차적 동작들을 예시하지만, 통상의 기술자는 방법(400)의 하나 이상의 동작들이 생략되며 그리고/또는 전치될 수 있다는 것을 인식할 것이다.
동작(405)으로 시작하여, 방법(400)은 예를 들어, 운영 시스템의 로더에 의해, 런타임 환경을 물리적(또는 가상) 메모리로 로딩하는 단계를 포함할 수 있다. 실시예들에서, 런타임 환경은 제1 ISA에 따라 애플리케이션 코드를 실행하도록 구성될 수 있지만, 제1 ISA를 확장하는 제2 ISA에 따라 애플리케이션 코드의 실행을 위한 샌드박스를 포함할 수 있다. 동작(410)은 예를 들어, 운영 시스템의 로더에 의해, 제1 ISA에 따라 컴파일링된 제1 코드 및 제2 ISA에 따라 컴파일링된 제2 코드를 포함하는 애플리케이션 코드를 물리적(또는 가상) 메모리로 로딩하는 것을 포함할 수 있다. 실시예들에서, 제2 코드는 런타임 환경의 샌드박스에서 실행되도록 로딩될 수 있다. 동작(415)에서, 방법(400)은 런타임 환경에 의해, 제1 ISA와 제2 ISA 사이의 스위치와 연관된 스위치 게이트를 삽입하는 단계를 포함할 수 있다. 대응하게, 동작(420)은 런타임 환경에 의해, 제1 ISA와 제2 ISA 사이의 스위치로부터의 리턴과 연관된 리턴 게이트를 삽입하는 것을 포함할 수 있다. 다양한 실시예들에서, 동작들(415 및 420)은 정적으로 또는 동적으로 수행될 수 있다.
애플리케이션 코드의 실행 동안, 동작(425)은 런타임 환경에 의해, 제1 코드 및/또는 제2 코드로 그리고/또는 제1 코드 및/또는 제2 코드로부터의 호출 또는 제1 코드 및/또는 제2 코드를 인터럽트하기 위한 신호와 같은, 제1 코드 또는 제2 코드와 연관된 상호작용을 차단하는 것을 포함할 수 있다. 여전히, 애플리케이션 코드의 실행 동안, 동작(430)은 런타임 환경에 의해, 제1 ISA로부터 제2 ISA로 또는 제2 ISA로부터 제1 ISA로 차단된 상호작용을 적응시키는 것을 포함할 수 있다. 동작(430)의 적응하는 것은 애플리케이션 코드가 제1 코드 또는 제2 코드를 실행하는 포인트에 있는지에 의존할 수 있고, 예를 들어, 상호작용이 제1 코드로부터 제2 코드로의 함수 호출로서, 제1 코드로부터 제2 코드로이면, 상호작용은 제1 ISA로부터 제2 ISA로 적응될 수 있다. 상호작용(예를 들어, 콜백 함수의 실행)과 연관된 동작들이 수행될 수 있다. 애플리케이션 코드의 추가의 실행에서, 동작(435)은 런타임 환경에 의해 그리고 삽입된 리턴 게이트를 사용하여, 스위칭이 제2 ISA로부터 제1 ISA로이면, 제1 ISA로부터 제2 ISA에 따른 애플리케이션 코드의 실행으로 리턴하는 것, 또는 스위칭이 제1 ISA로부터 제2 ISA로이면, 제2 ISA로부터 제1 ISA에 따른 애플리케이션 코드의 실행으로 리턴하는 것을 포함할 수 있다.
이제 도 5를 참조하면, 흐름도는 본 개시내용의 다양한 실시예들에 따른, 다중의 ISA들을 갖는 애플리케이션을 실행하는 다른 방법(500)을 예시한다. 방법(500)은 도 1의 컴퓨팅 시스템(100)과 같은, 본 개시내용에 설명한 하나 이상의 컴퓨팅 시스템들에서 실시될 수 있다. 방법(500)이 복수의 순차적 동작들을 예시하지만, 통상의 기술자는 방법(400)의 하나 이상의 동작들이 생략되며 그리고/또는 전치될 수 있다는 것을 인식할 것이다.
방법(500)은 애플리케이션 코드의 실행을 위한 샌드박스를 (예를 들어, 런타임 환경에 의해) 제공하는 동작(505)으로 시작할 수 있다. 실시예들에서, 애플리케이션 코드는 제1 ISA에 따라 컴파일링되는 제1 코드 및 제1 ISA를 확장하는 제2 ISA에 따라 컴파일링되는 제2 코드를 포함할 수 있다. 제1 코드 및 제2 코드가 실행 동안 만족하게 상호작용할 수 없을 수 있기 때문에, 샌드박스는 제1 코드로부터 제2 코드의 분리된 실행을 위해 제공될 수 있다. 제1 ISA에 따른 애플리케이션 코드의 실행 동안, 동작(510)은 제1 코드로부터 제2 코드로의 엔트리(예를 들어, 실행 제어의 전달)를 초래할 적어도 하나의 상호작용을 (예를 들어, 샌드박스에 의해) 차단하는 것을 포함할 수 있다. 동작(515)은 애플리케이션 코드의 실행 동안 샌드박스에서 실행을 위해 제1 ISA로부터 제2 ISA로의 적어도 하나의 엔트리 상호작용을 제1 엔트리 게이트를 사용하여 (예를 들어, 샌드박스에 의해) 적응시키는 것을 포함할 수 있다. 그 후, 적어도 하나의 상호작용과 연관된 동작들이 샌드박스에서 수행될 수 있다. 이어서, 동작(520)은 샌드박스에서 애플리케이션 코드의 실행으로부터 제1 ISA에 따른 애플리케이션 코드의 실행으로, 제1 엑시트(exit) 게이트를 사용하여 (예를 들어, 샌드박스에 의해) 리턴하는 것을 포함할 수 있다.
실시예들에서, 방법(500)은 동작들(525 내지 535)을 더 포함할 수 있다. 제2 ISA에 따른 애플리케이션 코드의 실행 동안, 동작(525)은 샌드박스에서 실행하는 제2 코드로부터 제1 코드로의 엑시트(예를 들어, 실행 제어의 전달)를 초래할 적어도 하나의 상호작용을 (예를 들어, 샌드박스에 의해) 차단하는 것을 포함할 수 있다. 동작(530)은 애플리케이션 코드의 실행 동안 제1 ISA에 따른 샌드박스 외부에서 실행을 위해 제2 ISA로부터 제1 ISA로 적어도 하나의 엑시트 상호작용을 제2 엑시트 게이트를 사용하여 (예를 들어, 샌드박스에 의해) 적응시키는 것을 포함할 수 있다. 그 후, 적어도 하나의 상호작용과 연관된 동작들이 제1 ISA에 따라 수행될 수 있다. 이어서, 동작(535)은 제1 ISA에 따른 애플리케이션 코드의 실행으로부터 제2 ISA에 따른 샌드박스에서의 애플리케이션 코드의 실행으로, 제1 엔트리 게이트를 사용하여 (예를 들어, 샌드박스에 의해) 리턴하는 것을 포함할 수 있다.
도 6은 본 개시내용의 다양한 실시예들에 따른, 도 4 및 도 5의 방법의 모든 또는 선택된 양태들을 실시하도록 구성된 명령어들을 갖는 예시적인 비일시적 컴퓨터-판독가능 저장 매체를 예시한다. 예시되어 있는 바와 같이, 비일시적 컴퓨터-판독가능 저장 매체(602)는 다수의 프로그래밍 명령어들(604)을 포함할 수 있다. 프로그래밍 명령어들(604)은 컴퓨팅 시스템, 예를 들어, 컴퓨팅 디바이스(100)가 프로그래밍 명령어들의 실행에 응답하여, 도 4를 참조하여 상술한 방법(400)의 런타임 환경 동작들 및/또는 도 5를 참조하여 상술한 방법(500)의 동작들의 모든 또는 선택된 양태들 수행하게 할 수 있도록 구성된다. 다시 도 1을 참조하면, 프로그래밍 명령어들(604)은 컴퓨팅 시스템이 런타임 환경(104)에 관하여 설명한 선택된 특징들 모두를 수행하게 할 수 있도록 구성될 수 있다. 다시 도 2를 참조하면, 프로그래밍 명령어들(604)은 컴퓨팅 시스템이 로더(230) 및/또는 컴파일 툴(232)에 관하여 설명한 선택된 특징들 모두를 수행하게 할 수 있도록 구성된다. 대안의 실시예들에서, 프로그래밍 명령어들(604)은 다중의 비일시적 컴퓨터-판독가능 저장 매체(602)상에 배치될 수 있다.
다양한 실시예들에서, 예 1은 다중의 명령어 세트 아키텍처들을 갖는 애플리케이션 코드를 실행하는 장치일 수 있고, 장치는 하나 이상의 프로세서들; 하나 이상의 프로세서들과 결합되고, 제1 명령어 세트 아키텍처에 따라 컴파일링된 제1 코드 및 제1 명령어 세트 아키텍처의 확장된 제2 명령어 세트 아키텍처에 따라 컴파일링된 제2 코드를 포함하는, 하나 이상의 프로세서들에 의한 실행을 위해 물리적 메모리에 로딩될 애플리케이션 코드를 저장하도록 구성된 물리적 메모리; 및 제1 및 제2 명령어 세트 아키텍처들 사이의 스위치와 연관된 스위치 게이트를 삽입하고; 애플리케이션 코드의 실행 동안, 제1 코드 또는 제2 코드와 연관된 상호작용을 차단하며; 애플리케이션 코드의 실행 동안 스위치 게이트를 사용하여, 제1 명령어 세트 아키텍처로부터 제2 명령어 세트 아키텍처로 또는 제2 명령어 세트 아키텍처로부터 제1 명령어 세트 아키텍처로 차단된 상호작용을 적응하기 위해, 물리적 메모리에 로딩되고 하나 이상의 프로세서들에 의해 동작될, 제2 코드의 실행을 위한 샌드박스를 갖는, 런타임 환경을 포함한다. 예 2는 예 1의 장치를 포함할 수 있고, 여기서, 런타임 환경은 추가로, 제1 명령어 세트 아키텍처와 제2 명령어 세트 아키텍처 사이의 스위치로부터의 리턴과 연관된 리턴 게이트를 삽입하며, 애플리케이션 코드의 실행 동안 리턴 게이트를 사용하여, 제1 명령어 세트 아키텍처로부터 제2 명령어 세트 아키텍처에 따른 제2 코드의 실행으로 또는 제2 명령어 세트 아키텍처로부터 제1 명령어 세트 아키텍처에 따른 제1 코드의 실행으로 리턴한다. 예 3은 예 2의 장치를 포함할 수 있고, 여기서, 런타임 환경은 상호작용과 연관된 데이터의 사이즈에 대한 조절, 상호작용과 연관된 데이터의 정렬에 대한 조절, 또는 상호작용과 연관된 적어도 하나의 레지스터의 적어도 하나의 상태의 저장 중 적어도 하나를 통해 차단된 상호작용을 적응시키고, 런타임 환경은 사이즈에 대한 조절의 복원, 정렬에 대한 조절의 복원, 또는 저장으로부터 적어도 하나의 레지스터의 적어도 하나의 상태의 복원 중 적어도 하나를 통해 리턴한다. 예 4는 예 2의 장치를 포함할 수 있고, 여기서, 런타임 환경은 제1 명령어 세트 아키텍처와 연관된 제1 애플리케이션 이진 인터페이스로부터 제2 명령어 세트 아키텍처와 연관된 제2 애플리케이션 이진 인터페이스로 또는 제2 애플리케이션 이진 인터페이스로부터 제1 애플리케이션 이진 인터페이스로의 호출의 변환을 통해 차단된 상호작용을 적응시키고, 런타임 환경은 제1 애플리케이션 이진 인터페이스로부터 제2 애플리케이션 이진 인터페이스로의 리턴 또는 제1 애플리케이션 이진 인터페이스로부터 제1 애플리케이션 이진 인터페이스로의 리턴을 통해 리턴한다. 예 5는 예 2의 장치를 포함할 수 있고, 장치는 제2 명령어 세트 아키텍처와 연관된 라이브러리를 제1 명령어 세트 아키텍처와 연관된 어드레스 공간으로 로딩하고 애플리케이션 코드를 스위치 게이트 또는 리턴 게이트 중 적어도 하나와 링크하기 위해, 런타임 환경과 협력하도록 물리적 메모리에 로딩될 로더를 더 포함한다. 예 6은 예 1의 장치를 포함할 수 있고, 여기서, 상호작용은 제1 코드로부터 제2 코드로의 호출, 제2 코드로부터 제1 코드로의 호출, 제1 코드로부터 제2 명령어 세트 아키텍처에 따라 컴파일링된 라이브러리로의 호출, 제2 코드로부터 제1 명령어 세트 아키텍처에 따라 컴파일링된 라이브러리로의 호출, 또는 장치의 운영 시스템 커널과 연관된 신호 중 적어도 하나를 포함한다. 예 7은 예 1 내지 예 6 중 어느 하나의 장치를 포함할 수 있고, 여기서, 제1 명령어 세트 아키텍처는 32-비트 명령어 세트 아키텍처를 포함하고, 제2 명령어 세트 아키텍처는 64-비트 명령어 세트 아키텍처를 포함한다. 예 8은 예 1 내지 예 6 중 어느 하나의 장치를 포함할 수 있고, 장치는 제2 명령어 세트 아키텍처에 따라 제2 코드를 컴파일링하기 위해, 물리적 메모리로 로딩되고 하나 이상의 프로세서들에 의해 동작될 컴파일 툴을 더 포함하고, 컴파일 툴은, 컴파일 동안, 제2 명령어 세트 아키텍처의 인코딩을 가정하지만 제1 명령어 세트 아키텍처의 데이터 사이즈 및 정렬을 따르는 애플리케이션 이진 인터페이스를 따른다. 예 9는 예 8의 장치를 포함할 수 있고, 여기서, 런타임 환경은 스위치 게이트를 동적으로 삽입하기 위해 애플리케이션 코드의 실행과 연관된 프로세스 가상 머신을 포함하고, 컴파일 툴은 컴파일을 위한 동적 저스트-인-타임(just-in-time) 엔진을 포함한다. 예 10은 예 8의 장치를 포함할 수 있고, 여기서, 런타임 환경은 제2 명령어 세트 아키텍처에 따라 컴파일링된 적어도 하나의 시스템 라이브러리로 하여금 제1 명령어 세트 아키텍처에 따라 재컴파일링되게 하고, 런타임 환경은 추가로, 복수 횟수 실행될 애플리케이션 코드의 블록을 식별하고; 상호작용의 차단과 연관된 런타임 환경에 의한 고속 룩업을 용이하게 하기 위해, 제1 명령어 세트 아키텍처 하에서 컴파일링되면 제2 명령어 세트 아키텍처로 또는 제2 명령어 세트 아키텍처 하에서 컴파일링되면 제1 명령어 세트 아키텍처로 블록을 변환한다. 예 11은 예 1 내지 예 6 중 어느 하나의 장치를 포함할 수 있고, 여기서, 애플리케이션 코드는 물리적 메모리로 로딩되고 하나 이상의 프로세서들에 의해 동작된다.
다양한 실시예들에서, 예 12는 컴퓨팅 디바이스-실행가능 명령어들을 포함하는 하나 이상의 비일시적 컴퓨터-판독가능 매체들일 수 있고, 명령어들은 컴퓨팅 시스템에 의한 실행에 응답하여, 다중의 명령어 세트 아키텍처들을 갖는 애플리케이션의 실행을 관리하기 위해 샌드박스 환경을 갖는 컴퓨팅 시스템을 제공하고, 샌드박스 환경은 제1 명령어 세트 아키텍처와 연관된 제1 코드 및 제2 명령어 세트 아키텍처와 연관된 제2 코드를 포함하는 애플리케이션 코드의 실행 동안, 제2 명령어 세트 아키텍처와 연관된 제2 코드의 실행을 위한 샌드박스를 제공하고; 제1 명령어 세트 아키텍처에 따른 애플리케이션 코드의 실행 동안, 제1 코드로부터 제2 코드로의 적어도 하나의 엔트리 상호작용을 차단하고; 제1 엔트리 게이트를 사용하여, 애플리케이션 코드의 실행 동안 샌드박스에서 실행을 위해 제1 명령어 세트 아키텍처로부터 제2 명령어 세트 아키텍처로 적어도 하나의 엔트리 상호작용을 적응하며, 제1 엑시트 게이트를 사용하여, 샌드박스에서의 실행으로부터 제1 명령어 세트 아키텍처에 따른 애플리케이션 코드의 실행으로 리턴한다. 예 13은 예 12의 하나 이상의 비일시적 컴퓨터-판독가능 매체들을 포함할 수 있고, 여기서, 명령어들은 추가로, 컴퓨팅 시스템으로 하여금, 제2 명령어 세트 아키텍처에 따른 애플리케이션 코드의 실행 동안, 제2 코드로부터 제1 코드로의 적어도 하나의 엑시트 상호작용을 차단하게 하고; 제2 엑시트 게이트를 사용하여, 애플리케이션 코드의 실행 동안 제1 명령어 세트 아키텍처에 따른 샌드박스 외부의 실행을 위해 제2 코드로부터 제1 코드로 적어도 하나의 엑시트 상호작용을 적응시키게 하며; 제2 엔트리 게이트를 사용하여, 애플리케이션 코드의 실행 동안 샌드박스에서의 실행으로 리턴하게 한다. 예 14는 예 12의 하나 이상의 비일시적 컴퓨터-판독가능 매체들을 포함할 수 있고, 여기서, 제1 엔트리 게이트를 사용하는 적응은 엔트리 상호작용과 연관된 데이터의 사이즈에 대한 조절, 엔트리 상호작용과 연관된 데이터의 정렬에 대한 조절, 또는 엔트리 상호작용과 연관된 적어도 하나의 레지스터의 적어도 하나의 상태의 저장 중 적어도 하나를 포함한다. 예 15는 예 12의 하나 이상의 비일시적 컴퓨터-판독가능 매체들을 포함할 수 있고, 여기서, 명령어들은 추가로, 컴퓨팅 시스템으로 하여금, 제2 명령어 세트 아키텍처와 연관된 라이브러리를 제1 명령어 세트 아키텍처와 연관된 어드레스 공간으로 로딩하게 하고, 애플리케이션 코드를 제1 엔트리 게이트 또는 제1 엑시트 게이트 중 적어도 하나와 링크하게 한다. 예 16은 예 12의 하나 이상의 비일시적 컴퓨터-판독가능 매체들을 포함할 수 있고, 여기서, 제1 명령어 세트 아키텍처는 32-비트 명령어 세트 아키텍처를 포함하고, 제2 명령어 세트 아키텍처는 64-비트 명령어 세트 아키텍처를 포함한다. 예 17은 예 12의 하나 이상의 비일시적 컴퓨터-판독가능 매체들을 포함할 수 있고, 여기서, 엔트리 상호작용은 제2 명령어 세트 아키텍처에 따라 컴파일링된 애플리케이션 코드의 제1 부분에 대한 호출, 제2 명령서 세트 아키텍처에 따라 컴파일링된 라이브러리에 대한 호출, 또는 컴퓨팅 시스템의 운영 시스템 커널과 연관된 신호 중 적어도 하나를 포함한다. 예 18은 예 12 내지 예 17 중 어느 하나의 하나 이상의 비일시적 컴퓨터-판독가능 매체들을 포함할 수 있고, 여기서, 명령어들은 추가로, 컴퓨팅 시스템으로 하여금, 제2 명령어 세트 아키텍처의 인코딩을 가정하지만 제1 명령어 세트 아키텍처의 데이터 사이즈 및 정렬을 따르는 애플리케이션 이진 인터페이스에 기초하여 제2 명령어 세트 아키텍처에 따라 제2 코드를 컴파일링하게 한다. 예 19는 예 18의 하나 이상의 비일시적 컴퓨터-판독가능 매체들을 포함할 수 있고, 여기서, 애플리케이션 코드의 실행은 제1 엔트리 게이트 또는 제1 엑시트 게이트 중 적어도 하나를 동적으로 삽입하기 위한 프로세스 가상 머신과 연관된다. 예 20은 예 18의 하나 이상의 비일시적 컴퓨터-판독가능 매체들을 포함할 수 있고, 여기서, 명령어들은 추가로, 컴퓨팅 시스템으로 하여금, 복수 횟수 실행될 애플리케이션 코드의 블록을 식별하게 하며; 제2 코드로부터 제1 코드로의 엔트리 상호작용의 차단 또는 출력 상호작용의 차단과 연관된 고속 룩업을 용이하게 하기 위해, 제1 명령어 세트 아키텍처에 따라 컴파일링되면 제2 명령어 세트 아키텍처로 또는 제2 명령어 세트 아키텍처에 따라 컴파일링되면 제1 명령어 세트 아키텍처로 블록을 변환하게 한다.
다양한 실시예들에서, 예 21은 다중의 명령어 세트 아키텍처들을 갖는 애플리케이션들을 실행하는 컴퓨터-구현 방법일 수 있고, 이 방법은 프로세스에서, 제1 명령어 세트 아키텍처 및 샌드박스와 연관된 제1 코드를 실행하는 단계; 샌드박스에서, 제2 명령어 세트 아키텍처와 연관된 제2 코드를 실행하는 단계; 제1 코드의 실행 동안, 제1 코드로부터 제2 코드로의 적어도 하나의 상호작용을 차단하는 단계; 제1 게이트를 사용하여, 제1 명령어 세트 아키텍처로부터 제2 명령어 세트 아키텍처로 적어도 하나의 상호작용을 적응시키는 단계; 샌드박스에서, 적어도 하나의 상호작용의 적응에 기초하여 제2 코드의 적어도 일부를 실행하는 단계; 및 제2 게이트를 사용하여, 제2 코드의 적어도 일부를 실행한 이후에 샌드박스를 나가는 단계를 포함한다. 예 22는 예 21의 컴퓨터-구현 방법을 포함할 수 있고, 여기서, 제1 게이트를 사용하여 적응시키는 단계는 상호작용과 연관된 데이터의 사이즈에 대한 조절, 상호작용과 연관된 데이터의 정렬에 대한 조절, 또는 상호작용과 연관된 적어도 하나의 레지스터의 적어도 하나의 상태의 저장 중 적어도 하나를 포함한다. 예 23은 예 21의 컴퓨터-구현 방법을 포함할 수 있고, 여기서, 상호작용은 제2 코드에 대한 호출, 제2 명령어 세트 아키텍처에 따라 컴파일링된 라이브러리에 대한 호출, 또는 운영 시스템 커널과 연관된 신호 중 적어도 하나를 포함한다. 예 24는 예 21 내지 예 23 중 어느 하나의 컴퓨터-구현 방법을 포함할 수 있고, 방법은 제2 명령어 세트 아키텍처의 인코딩을 가정하지만 제1 명령어 세트 아키텍처의 데이터 사이즈 및 정렬을 따르는 애플리케이션 이진 인터페이스에 기초하여 제2 명령어 세트 아키텍처에 따라 제2 코드를 컴파일링하는 단계를 더 포함한다. 예 25는 예 21 내지 예 23 중 어느 하나의 컴퓨터-구현 방법을 포함할 수 있고, 방법은 제1 명령어 세트 아키텍처에 따라 이전에 컴파일링된 적어도 하나의 시스템 라이브러리를 제2 명령어 세트 아키텍처에 따라 컴파일링하는 단계를 더 포함한다. 예 26은 예 21 내지 예 23 중 어느 하나의 컴퓨터-구현 방법을 포함할 수 있고, 방법은 제2 코드의 실행 동안, 다른 상호작용을 차단하는 단계 - 다른 상호작용은 제2 코드로부터 제1 코드로임 -; 제3 게이트를 사용하여, 제2 명령어 세트 아키텍처로부터 제1 명령어 세트 아키텍처로 다른 상호작용을 적응시키는 단계; 샌드박스 외부에서, 다른 상호작용의 적응에 기초하여 제1 코드의 적어도 일부를 실행하는 단계; 및 제4 게이트를 사용하여, 제1 코드의 적어도 일부의 실행 이후에 샌드박스 내부에서 제2 코드의 실행으로 리턴하는 단계를 더 포함한다.
다양한 실시예들에서, 예 27은 컴퓨팅 디바이스-실행가능 명령어들을 포함하는 하나 이상의 비일시적 컴퓨터-판독가능 매체들일 수 있고, 여기서, 명령어들은 컴퓨팅 시스템에 의한 실행에 응답하여, 컴퓨팅 시스템으로 하여금 예 21 내지 예 23 중 어느 하나의 방법을 수행하게 한다.
다양한 실시예들에서, 예 28은 다중의 명령어 세트 아키텍처들을 갖는 애플리케이션들을 실행하는 장치일 수 있고, 이 장치는 프로세스에서, 제1 명령어 세트 아키텍처 및 샌드박스와 연관된 제1 코드를 실행하는 수단; 샌드박스에서, 제2 명령어 세트 아키텍처와 연관된 제2 코드를 실행하는 수단; 제1 코드의 실행 동안, 제1 코드로부터 제2 코드로의 적어도 하나의 상호작용을 차단하는 수단; 제1 게이트를 사용하여, 제1 명령어 세트 아키텍처로부터 제2 명령어 세트 아키텍처로 적어도 하나의 상호작용을 적응시키는 수단; 샌드박스에서, 적어도 하나의 상호작용의 적응에 기초하여 제2 코드의 적어도 일부를 실행하는 수단; 및 제2 게이트를 사용하여, 제2 코드의 적어도 일부를 실행한 이후에 샌드박스를 나가는 수단을 포함한다. 예 29는 예 28의 장치를 포함할 수 있고, 여기서, 제1 게이트를 사용하여 적응시키는 수단은 상호작용과 연관된 데이터의 사이즈를 조절하는 것, 상호작용과 연관된 데이터의 정렬을 조절하는 것, 또는 상호작용과 연관된 적어도 하나의 레지스터의 적어도 하나의 상태를 저장하는 것 중 적어도 하나의 수단을 포함한다. 예 30은 예 28의 장치를 포함할 수 있고, 여기서, 상호작용은 제2 코드에 대한 호출, 제2 명령어 세트 아키텍처에 따라 컴파일링된 라이브러리에 대한 호출, 또는 운영 시스템 커널과 연관된 신호 중 적어도 하나를 포함한다. 예 31은 예 28 내지 예 30 중 어느 하나의 장치를 포함할 수 있고, 장치는 제2 명령어 세트 아키텍처의 인코딩을 가정하지만 제1 명령어 세트 아키텍처의 데이터 사이즈 및 정렬을 따르는 애플리케이션 이진 인터페이스에 기초하여 제2 명령어 세트 아키텍처에 따라 제2 코드를 컴파일링하는 수단을 더 포함한다. 예 32는 예 28 내지 예 30 중 어느 하나의 장치를 포함할 수 있고, 장치는 제1 명령어 세트 아키텍처에 따라 이전에 컴파일링된 적어도 하나의 시스템 라이브러리를 제2 명령어 세트 아키텍처에 따라 컴파일링하는 수단을 더 포함한다. 예 33은 예 28 내지 예 30 중 어느 하나의 장치를 포함할 수 있고, 장치는 복수 횟수 실행될 제1 코드 또는 제2 코드의 블록을 식별하는 수단; 및 상호작용의 차단과 연관된 고속 룩업을 용이하게 하기 위해, 제1 명령어 세트 아키텍처 하에서 컴파일링되면 제2 명령어 세트 아키텍처로 또는 제2 명령어 세트 아키텍처 하에서 컴파일링되면 제1 명령어 세트 아키텍처로 블록을 변환하는 수단을 더 포함한다. 예 34는 예 28 내지 예 30 중 어느 하나의 장치를 포함할 수 있고, 장치는 제2 코드의 실행 동안, 다른 상호작용을 차단하는 수단 - 다른 상호작용은 제2 코드로부터 제1 코드로임 -; 제3 게이트를 사용하여, 제2 명령어 세트 아키텍처로부터 제1 명령어 세트 아키텍처로 다른 상호작용을 적응시키는 수단; 샌드박스 외부에서, 다른 상호작용의 적응에 기초하여 제1 코드의 적어도 일부를 실행하는 수단; 및 제4 게이트를 사용하여, 제1 코드의 적어도 일부의 실행 이후에 샌드박스 내부에서 제2 코드의 실행으로 리턴하는 수단을 더 포함한다.
이전의 상세한 설명의 일부 부분들은 컴퓨터 메모리 내의 데이터 비트들에 대한 동작들의 알고리즘들 및 심볼 표현들에 관하여 제시되었다. 이들 알고리즘적 설명들 및 표현들은 데이터 처리 분야의 통상의 기술자들이 그들의 작업의 본질을 다른 통상의 기술자들에게 가장 효과적으로 전달하기 위해 사용된 방식들이다. 본원에서, 알고리즘은 일반적으로, 원하는 결과를 야기하는 동작들의 일관성 있는 시퀀스인 것으로 인식된다. 동작들은 물리적 양들의 물리적 조작들을 요구하는 것들이다.
그러나, 이들 및 유사한 용어들 모두가 적절한 물리적 양들과 연관되고 이들 양들에 적용된 단지 편리한 라벨들이라는 것을 유의해야 한다. 상기 논의로부터 명백한 바와 같이 다르게 명시되지 않으면, 설명 전반적으로, 아래의 청구항들에서 제시된 바와 같은 것들과 같은 용어들을 활용하는 논의들이 컴퓨터 시스템의 레지스터들 및 메모리들 내의 물리적(전자) 양들로서 표현된 데이터를 컴퓨터 시스템 메모리들 또는 레지스터들 또는 다른 이러한 정보 저장, 송신, 또는 디스플레이 디바이스들 내의 물리적 양들로서 유사하게 표현된 다른 데이터로 조작하고 변환하는 컴퓨터 시스템 또는 유사한 전자 컴퓨팅 디바이스의 액션 및 프로세스들을 지칭한다는 것이 이해된다.
본 발명의 실시예들은 또한 본원에서의 동작들을 수행하는 장치에 관한 것이다. 이러한 컴퓨터 프로그램은 비일시적 컴퓨터-판독가능 매체에 저장된다. 머신-판독가능 매체가 머신(예를 들어, 컴퓨터)에 의해 판독가능한 형태로 정보를 저장하는 임의의 메커니즘을 포함한다. 예를 들어, 머신-판독가능(예를 들어, 컴퓨터-판독가능) 매체는 머신-(예를 들어, 컴퓨터-) 판독가능 저장 매체(예를 들어, 판독 전용 메모리("ROM"), 랜덤 액세스 메모리("RAM"), 자기 디스크 저장 매체, 광학 저장 매체, 플래시 메모리 디바이스들)를 포함한다.
이전의 도면들에 도시된 프로세스들 또는 방법들은 하드웨어(예를 들어, 회로, 전용 로직 등), 소프트웨어(예를 들어, 비일시적 컴퓨터-판독가능 매체상에 수록됨), 또는 양자의 조합을 포함하는 로직을 프로세싱함으로써 수행될 수 있다. 프로세스들 또는 방법들이 일부 순차적 동작들에 관하여 상술되었지만, 설명한 동작들 중 일부가 상이한 순서로 수행될 수 있다는 것을 이해해야 한다. 더욱이, 일부 동작들은 순차적으로 보다는 병렬로 수행될 수 있다.
본 발명의 실시예들은 임의의 특정한 프로그래밍 언어를 참조하여 설명되지 않는다. 본원에 설명한 바와 같이 본 발명의 실시예들의 교시들을 구현하기 위해 각종 프로그래밍 언어들이 사용될 수 있다는 것이 이해될 것이다. 상술한 명세서에서, 본 발명의 실시예들은 본 발명의 특정한 예시적인 실시예들을 참조하여 설명되었다. 아래의 청구항들에 설명된 바와 같이 본 발명의 더 넓은 사상 및 범위를 벗어나지 않고 다양한 변형들이 이루어질 수 있다는 것이 명백할 것이다. 따라서, 명세서 및 도면들은 제한적인 의미보다는 예시적인 의미로 간주되어야 한다.

Claims (25)

  1. 다중의 명령어 세트 아키텍처들을 갖는 애플리케이션 코드를 실행하는 장치로서,
    하나 이상의 프로세서들;
    상기 하나 이상의 프로세서들과 결합되고, 제1 명령어 세트 아키텍처에 따라 컴파일링된 제1 코드 및 상기 제1 명령어 세트 아키텍처의 확장된 제2 명령어 세트 아키텍처에 따라 컴파일링된 제2 코드를 포함하는, 상기 하나 이상의 프로세서들에 의한 실행을 위해 물리적 메모리에 로딩될 애플리케이션 코드를 저장하는 물리적 메모리; 및
    상기 물리적 메모리에 로딩되고 상기 하나 이상의 프로세서들에 의해 동작될, 런타임 환경
    을 포함하고,
    상기 런타임 환경은,
    상기 제1 및 제2 명령어 세트 아키텍처들 사이의 스위치와 연관된 스위치 게이트를 삽입하고;
    상기 제1 명령어 세트 아키텍처와 상기 제2 명령어 세트 아키텍처 사이의 스위치로부터의 리턴과 연관된 리턴 게이트를 삽입하고;
    상기 애플리케이션 코드의 실행 동안, 상기 제1 코드 또는 상기 제2 코드와 연관된 상호작용을 차단(intercept)하며;
    상기 애플리케이션 코드의 상기 실행 동안 상기 스위치 게이트를 사용하여, 상기 제1 명령어 세트 아키텍처로부터 상기 제2 명령어 세트 아키텍처로 또는 상기 제2 명령어 세트 아키텍처로부터 상기 제1 명령어 세트 아키텍처로 스위칭하도록 상기 차단된 상호작용을 적응시키고,
    상기 런타임 환경은 상기 제1 명령어 세트 아키텍처와 연관된 제1 애플리케이션 이진 인터페이스로부터 상기 제2 명령어 세트 아키텍처와 연관된 제2 애플리케이션 이진 인터페이스로 또는 상기 제2 애플리케이션 이진 인터페이스로부터 상기 제1 애플리케이션 이진 인터페이스로의 호출의 변환을 통해 상기 차단된 상호작용을 적응시키고,
    상기 런타임 환경은 상기 제1 애플리케이션 이진 인터페이스로부터 상기 제2 애플리케이션 이진 인터페이스로 리턴하거나 또는 상기 제2 애플리케이션 이진 인터페이스로부터 상기 제1 애플리케이션 이진 인터페이스로 리턴하는, 장치.
  2. 삭제
  3. 다중의 명령어 세트 아키텍처들을 갖는 애플리케이션 코드를 실행하는 장치로서,
    하나 이상의 프로세서들;
    상기 하나 이상의 프로세서들과 결합되고, 제1 명령어 세트 아키텍처에 따라 컴파일링된 제1 코드 및 상기 제1 명령어 세트 아키텍처의 확장된 제2 명령어 세트 아키텍처에 따라 컴파일링된 제2 코드를 포함하는, 상기 하나 이상의 프로세서들에 의한 실행을 위해 물리적 메모리에 로딩될 애플리케이션 코드를 저장하는 물리적 메모리; 및
    상기 물리적 메모리에 로딩되고 상기 하나 이상의 프로세서들에 의해 동작될, 런타임 환경
    을 포함하고,
    상기 런타임 환경은,
    상기 제1 및 제2 명령어 세트 아키텍처들 사이의 스위치와 연관된 스위치 게이트를 삽입하고;
    상기 제1 명령어 세트 아키텍처와 상기 제2 명령어 세트 아키텍처 사이의 스위치로부터의 리턴과 연관된 리턴 게이트를 삽입하고;
    상기 애플리케이션 코드의 실행 동안, 상기 제1 코드 또는 상기 제2 코드와 연관된 상호작용을 차단하며;
    상기 애플리케이션 코드의 상기 실행 동안 상기 스위치 게이트를 사용하여, 상기 제1 명령어 세트 아키텍처로부터 상기 제2 명령어 세트 아키텍처로 또는 상기 제2 명령어 세트 아키텍처로부터 상기 제1 명령어 세트 아키텍처로 스위칭하도록 상기 차단된 상호작용을 적응시키고,
    상기 런타임 환경은 상기 상호작용과 연관된 데이터의 사이즈에 대한 조절, 또는 상기 상호작용과 연관된 데이터의 정렬에 대한 조절 중 적어도 하나를 통해 상기 차단된 상호작용을 적응시키고, 상기 런타임 환경은 상기 사이즈에 대한 상기 조절의 복원, 또는 상기 정렬에 대한 상기 조절의 복원 중 적어도 하나를 통해 리턴하는, 장치.
  4. 삭제
  5. 제3항에 있어서,
    상기 제2 명령어 세트 아키텍처와 연관된 라이브러리를 상기 제1 명령어 세트 아키텍처와 연관된 어드레스 공간으로 로딩하고 상기 애플리케이션 코드를 상기 스위치 게이트 또는 상기 리턴 게이트 중 적어도 하나와 링크하기 위해, 상기 런타임 환경과 협력하도록 상기 물리적 메모리에 로딩될 로더를 더 포함하는, 장치.
  6. 제1항에 있어서,
    상기 상호작용은 상기 제1 코드로부터 상기 제2 코드로의 호출, 상기 제2 코드로부터 상기 제1 코드로의 호출, 상기 제1 코드로부터 상기 제2 명령어 세트 아키텍처에 따라 컴파일링된 라이브러리로의 호출, 상기 제2 코드로부터 상기 제1 명령어 세트 아키텍처에 따라 컴파일링된 라이브러리로의 호출, 또는 상기 장치의 운영 시스템 커널과 연관된 신호 중 적어도 하나를 포함하는, 장치.
  7. 제1항에 있어서,
    상기 제1 명령어 세트 아키텍처는 32-비트 명령어 세트 아키텍처를 포함하고, 상기 제2 명령어 세트 아키텍처는 64-비트 명령어 세트 아키텍처를 포함하는, 장치.
  8. 다중의 명령어 세트 아키텍처들을 갖는 애플리케이션 코드를 실행하는 장치로서,
    하나 이상의 프로세서들;
    상기 하나 이상의 프로세서들과 결합되고, 제1 명령어 세트 아키텍처에 따라 컴파일링된 제1 코드 및 상기 제1 명령어 세트 아키텍처의 확장된 제2 명령어 세트 아키텍처에 따라 컴파일링된 제2 코드를 포함하는, 상기 하나 이상의 프로세서들에 의한 실행을 위해 물리적 메모리에 로딩될 애플리케이션 코드를 저장하는 물리적 메모리;
    상기 물리적 메모리에 로딩되고 상기 하나 이상의 프로세서들에 의해 동작될, 런타임 환경; 및
    상기 제2 명령어 세트 아키텍처에 따라 상기 제2 코드를 컴파일링하기 위해, 상기 물리적 메모리로 로딩되고 상기 하나 이상의 프로세서들에 의해 동작될 컴파일 툴
    을 포함하고,
    상기 런타임 환경은,
    상기 제1 및 제2 명령어 세트 아키텍처들 사이의 스위치와 연관된 스위치 게이트를 삽입하고;
    상기 제1 명령어 세트 아키텍처와 상기 제2 명령어 세트 아키텍처 사이의 스위치로부터의 리턴과 연관된 리턴 게이트를 삽입하고;
    상기 애플리케이션 코드의 실행 동안, 상기 제1 코드 또는 상기 제2 코드와 연관된 상호작용을 차단하며;
    상기 애플리케이션 코드의 상기 실행 동안 상기 스위치 게이트를 사용하여, 상기 제1 명령어 세트 아키텍처로부터 상기 제2 명령어 세트 아키텍처로 또는 상기 제2 명령어 세트 아키텍처로부터 상기 제1 명령어 세트 아키텍처로 스위칭하도록 상기 차단된 상호작용을 적응시키고,
    상기 컴파일 툴은, 상기 컴파일 동안, 상기 제2 명령어 세트 아키텍처의 인코딩을 가정하지만 상기 제1 명령어 세트 아키텍처의 데이터 사이즈 및 정렬을 따르는 애플리케이션 이진 인터페이스를 따르는, 장치.
  9. 제8항에 있어서,
    상기 런타임 환경은 상기 스위치 게이트를 동적으로 삽입하기 위해 상기 애플리케이션 코드의 상기 실행과 연관된 프로세스 가상 머신을 포함하고, 상기 컴파일 툴은 상기 컴파일을 위한 동적 저스트-인-타임(just-in-time) 엔진을 포함하는, 장치.
  10. 제8항에 있어서,
    상기 런타임 환경은 상기 제2 명령어 세트 아키텍처에 따라 컴파일링된 적어도 하나의 시스템 라이브러리로 하여금 상기 제1 명령어 세트 아키텍처에 따라 재컴파일링되게 하고,
    상기 런타임 환경은 추가로,
    복수 횟수 실행될 상기 애플리케이션 코드의 블록을 식별하고;
    상기 상호작용의 상기 차단과 연관된 상기 런타임 환경에 의한 고속 룩업(fast lookup)을 용이하게 하기 위해, 상기 제1 명령어 세트 아키텍처 하에서 컴파일링되면 상기 제2 명령어 세트 아키텍처로 또는 상기 제2 명령어 세트 아키텍처 하에서 컴파일링되면 상기 제1 명령어 세트 아키텍처로 상기 블록을 변환하는, 장치.
  11. 제8항에 있어서,
    상기 애플리케이션 코드는 상기 물리적 메모리로 로딩되고 상기 하나 이상의 프로세서들에 의해 동작되는, 장치.
  12. 컴퓨팅 디바이스 실행가능 명령어들을 포함하는 하나 이상의 비일시적 컴퓨터 판독가능 매체들로서, 상기 명령어들은, 컴퓨팅 시스템에 의한 실행에 응답하여, 다중의 명령어 세트 아키텍처들을 갖는 애플리케이션의 실행을 관리하기 위해 샌드박스 환경을 상기 컴퓨팅 시스템에 제공하고, 상기 샌드박스 환경은:
    제1 명령어 세트 아키텍처와 연관된 제1 코드 및 제2 명령어 세트 아키텍처와 연관된 제2 코드를 포함하는 애플리케이션 코드의 실행 동안, 상기 제2 명령어 세트 아키텍처와 연관된 상기 제2 코드의 실행을 위한 샌드박스를 제공하고,
    상기 제1 명령어 세트 아키텍처에 따른 상기 애플리케이션 코드의 실행 동안, 상기 제1 코드로부터 상기 제2 코드로의 적어도 하나의 엔트리 상호작용을 차단하고;
    제1 엔트리 게이트를 사용하여, 상기 애플리케이션 코드의 실행 동안, 상기 샌드박스에서의 실행을 위해 상기 제1 명령어 세트 아키텍처로부터 상기 제2 명령어 세트 아키텍처로 스위칭하도록 상기 적어도 하나의 엔트리 상호작용을 적응시키고;
    제1 엑시트 게이트를 사용하여, 상기 샌드박스에서의 실행으로부터 상기 제1 명령어 세트 아키텍처에 따른 상기 애플리케이션 코드의 실행으로 리턴하고;
    상기 컴퓨팅 시스템은 또한
    상기 제2 명령어 세트 아키텍처와 연관된 라이브러리를 상기 제1 명령어 세트 아키텍처와 연관된 어드레스 공간으로 로딩하고 상기 애플리케이션 코드를 상기 제1 엔트리 게이트 또는 상기 제1 엑시트 게이트 중 적어도 하나와 링크하도록 되는, 하나 이상의 비일시적 컴퓨터 판독가능 매체들.
  13. 제12항에 있어서, 상기 명령어들은 또한 상기 컴퓨팅 시스템으로 하여금,
    상기 제2 명령어 세트 아키텍처에 따른 상기 애플리케이션 코드의 실행 동안, 상기 제2 코드로부터 상기 제1 코드로의 적어도 하나의 엑시트 상호작용을 차단하고,
    제2 엑시트 게이트를 사용하여, 상기 애플리케이션 코드의 실행 동안 상기 제1 명령어 세트 아키텍처에 따라 상기 샌드박스 외부에서 실행을 위해 상기 제2 코드로부터 상기 제1 코드로 상기 적어도 하나의 엑시트 상호작용을 적응시키고,
    제2 엔트리 게이트를 사용하여, 상기 애플리케이션 코드의 실행 동안 상기 샌드박스에서의 실행으로 리턴하게 하는, 하나 이상의 비일시적 컴퓨터 판독가능 매체들.
  14. 제12항에 있어서,
    상기 제1 엔트리 게이트를 사용하여 적응시키는 것은 상기 엔트리 상호작용과 연관된 데이터의 사이즈를 조절하는 것, 상기 엔트리 상호작용과 연관된 데이터의 정렬을 조절하는 것, 또는 상기 엔트리 상호작용과 연관된 적어도 하나의 레지스터의 적어도 하나의 상태를 저장하는 것 중 적어도 하나를 포함하는, 하나 이상의 비일시적 컴퓨터 판독가능 매체들.
  15. 삭제
  16. 제12항에 있어서,
    상기 제1 명령어 세트 아키텍처는 32-비트 명령어 세트 아키텍처를 포함하고, 상기 제2 명령어 세트 아키텍처는 64-비트 명령어 세트 아키텍처를 포함하는, 하나 이상의 비일시적 컴퓨터 판독가능 매체들.
  17. 제12항에 있어서,
    상기 엔트리 상호작용은 상기 제2 명령어 세트 아키텍처에 따라 컴파일링된 상기 애플리케이션 코드의 제1 부분으로의 호출, 상기 제2 명령어 세트 아키텍처에 따라 컴파일링된 라이브러리로의 호출, 또는 상기 컴퓨팅 시스템의 운영 시스템 커널과 연관된 신호 중 적어도 하나를 포함하는, 하나 이상의 비일시적 컴퓨터 판독가능 매체들.
  18. 컴퓨팅 디바이스 실행가능 명령어들을 포함하는 하나 이상의 비일시적 컴퓨터 판독가능 매체들로서, 상기 명령어들은, 컴퓨팅 시스템에 의한 실행에 응답하여, 다중의 명령어 세트 아키텍처들을 갖는 애플리케이션의 실행을 관리하기 위해 환경을 상기 컴퓨팅 시스템에 제공하고, 상기 환경은:
    제1 명령어 세트 아키텍처와 연관된 제1 코드 및 제2 명령어 세트 아키텍처와 연관된 제2 코드를 포함하는 애플리케이션 코드의 실행 동안, 상기 제2 명령어 세트 아키텍처와 연관된 상기 제2 코드의 실행을 위한 샌드박스를 제공하고,
    상기 제1 명령어 세트 아키텍처에 따른 상기 애플리케이션 코드의 실행 동안, 상기 제1 코드로부터 상기 제2 코드로의 적어도 하나의 엔트리 상호작용을 차단하고;
    제1 엔트리 게이트를 사용하여, 상기 애플리케이션 코드의 실행 동안, 상기 샌드박스에서의 실행을 위해 상기 제1 명령어 세트 아키텍처로부터 상기 제2 명령어 세트 아키텍처로 스위칭하도록 상기 적어도 하나의 엔트리 상호작용을 적응시키고;
    제1 엑시트 게이트를 사용하여, 상기 샌드박스에서의 실행으로부터 상기 제1 명령어 세트 아키텍처에 따른 상기 애플리케이션 코드의 실행으로 리턴하고;
    상기 명령어들은 또한 상기 컴퓨팅 시스템으로 하여금,
    상기 제2 명령어 세트 아키텍처의 인코딩을 가정하지만 상기 제1 명령어 세트 아키텍처의 데이터 사이즈 및 정렬을 따르는 애플리케이션 이진 인터페이스에 기초하여 상기 제2 명령어 세트 아키텍처에 따라 상기 제2 코드를 컴파일링하게 하는, 하나 이상의 비일시적 컴퓨터 판독가능 매체들.
  19. 제18항에 있어서,
    상기 애플리케이션 코드의 실행은 상기 제1 엔트리 게이트 또는 상기 제1 엑시트 게이트 중 적어도 하나를 동적으로 삽입하기 위해 프로세스 가상 머신과 연관되는, 하나 이상의 비일시적 컴퓨터 판독가능 매체들.
  20. 제18항에 있어서, 상기 명령어들은 또한 상기 컴퓨팅 시스템으로 하여금,
    복수 횟수 실행될 상기 애플리케이션 코드의 블록을 식별하고;
    상기 제2 코드로부터 상기 제1 코드로의 엑시트 상호작용의 차단 또는 엔트리 상호작용의 차단과 연관된 고속 룩업(fast lookup)을 용이하게 하기 위해, 상기 제1 명령어 세트 아키텍처에 따라 컴파일링되면 상기 제2 명령어 세트 아키텍처로 또는 상기 제2 명령어 세트 아키텍처에 따라 컴파일링되면 상기 제1 명령어 세트 아키텍처로 상기 블록을 변환하게 하는, 하나 이상의 비일시적 컴퓨터 판독가능 매체들.
  21. 다중의 명령어 세트 아키텍처들을 갖는 애플리케이션들을 실행하는 컴퓨터에 의해 구현된 방법으로서,
    프로세스에서, 제1 명령어 세트 아키텍처 및 샌드박스와 연관된 제1 코드를 실행하는 단계;
    상기 샌드박스에서, 제2 명령어 세트 아키텍처와 연관된 제2 코드를 실행하는 단계;
    상기 제1 코드의 상기 실행 동안, 상기 제1 코드로부터 상기 제2 코드로의 적어도 하나의 상호작용을 차단하는 단계;
    제1 게이트를 사용하여, 상기 제1 명령어 세트 아키텍처로부터 상기 제2 명령어 세트 아키텍처로 스위칭하도록 상기 적어도 하나의 상호작용을 적응시키는 단계;
    상기 샌드박스에서, 상기 적어도 하나의 상호작용의 상기 적응에 기초하여 상기 제2 코드의 적어도 일부를 실행하는 단계;
    제2 게이트를 사용하여, 상기 제2 코드의 상기 적어도 일부를 실행한 이후에 상기 샌드박스를 나가는 단계; 및
    상기 제2 명령어 세트 아키텍처의 인코딩을 가정하지만 상기 제1 명령어 세트 아키텍처의 데이터 사이즈 및 정렬을 따르는 애플리케이션 이진 인터페이스에 기초하여 상기 제2 명령어 세트 아키텍처에 따라 상기 제2 코드를 컴파일링하는 단계
    를 포함하는, 컴퓨터에 의해 구현된 방법.
  22. 제21항에 있어서,
    상기 제1 게이트를 사용하여 적응시키는 단계는 상기 상호작용과 연관된 데이터의 사이즈에 대한 조절, 상기 상호작용과 연관된 데이터의 정렬에 대한 조절, 또는 상기 상호작용과 연관된 적어도 하나의 레지스터의 적어도 하나의 상태의 저장 중 적어도 하나를 포함하는, 컴퓨터에 의해 구현된 방법.
  23. 제21항에 있어서,
    상기 상호작용은 상기 제2 코드에 대한 호출, 상기 제2 명령어 세트 아키텍처에 따라 컴파일링된 라이브러리에 대한 호출, 또는 운영 시스템 커널과 연관된 신호 중 적어도 하나를 포함하는, 컴퓨터에 의해 구현된 방법.
  24. 삭제
  25. 제21항에 있어서,
    상기 제1 명령어 세트 아키텍처에 따라 이전에 컴파일링된 적어도 하나의 시스템 라이브러리를 상기 제2 명령어 세트 아키텍처에 따라 컴파일링하는 단계를 더 포함하는, 컴퓨터에 의해 구현된 방법.
KR1020177012763A 2014-12-09 2014-12-09 2개의 명령어 세트 아키텍처들에 따라 컴파일링된 애플리케이션 코드의 실행을 위한 시스템 및 방법 KR102332209B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2014/093373 WO2016090554A1 (en) 2014-12-09 2014-12-09 System and method for execution of application code compiled according to two instruction set architectures

Publications (2)

Publication Number Publication Date
KR20170094136A KR20170094136A (ko) 2017-08-17
KR102332209B1 true KR102332209B1 (ko) 2021-11-29

Family

ID=56106423

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177012763A KR102332209B1 (ko) 2014-12-09 2014-12-09 2개의 명령어 세트 아키텍처들에 따라 컴파일링된 애플리케이션 코드의 실행을 위한 시스템 및 방법

Country Status (5)

Country Link
US (1) US9910721B2 (ko)
EP (1) EP3230853A4 (ko)
KR (1) KR102332209B1 (ko)
CN (1) CN107077337B (ko)
WO (1) WO2016090554A1 (ko)

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016154795A1 (en) 2015-03-27 2016-10-06 Intel Corporation Efficient address translation
US10200406B1 (en) 2015-12-17 2019-02-05 Architecture Technology Corporation Configuration of application randomization mechanism
US10412116B1 (en) 2015-12-17 2019-09-10 Architecture Technology Corporation Mechanism for concealing application and operation system identity
US10007498B2 (en) 2015-12-17 2018-06-26 Architecture Technology Corporation Application randomization mechanism
US10412114B1 (en) 2015-12-17 2019-09-10 Architecture Technology Corporation Application randomization mechanism
US10284592B1 (en) 2015-12-17 2019-05-07 Architecture Technology Corporation Application randomization mechanism
US10200401B1 (en) 2015-12-17 2019-02-05 Architecture Technology Corporation Evaluating results of multiple virtual machines that use application randomization mechanism
US10713213B2 (en) * 2016-12-21 2020-07-14 Intel Corporation Systems and methods for multi-architecture computing
US20180173530A1 (en) * 2016-12-21 2018-06-21 Intel Corporation Systems and methods for multi-architecture computing
US10552207B2 (en) 2016-12-21 2020-02-04 Intel Corporation Systems and methods for multi-architecture computing including program stack translation
US10684984B2 (en) 2016-12-21 2020-06-16 Intel Corporation Computing devices and server systems with processing cores having different instruction set architectures
US10853040B2 (en) 2017-03-31 2020-12-01 Microsoft Technology Licensing, Llc Address space splitting for legacy application compatibility
US11275709B2 (en) 2017-05-02 2022-03-15 Intel Corporation Systems and methods for multi-architecture computing
US10554685B1 (en) * 2017-05-25 2020-02-04 Architecture Technology Corporation Self-healing architecture for resilient computing services
US10628175B2 (en) 2017-10-04 2020-04-21 Citrix Systems, Inc. Loader application with secondary embedded application object
CN109697114B (zh) * 2017-10-20 2023-07-28 伊姆西Ip控股有限责任公司 用于应用迁移的方法和机器
US10666497B2 (en) * 2018-06-22 2020-05-26 Intel Corporation Localized service resiliency
JP7374981B2 (ja) * 2018-07-10 2023-11-07 マジック リープ, インコーポレイテッド クロス命令セットアーキテクチャプロシージャ呼出のためのスレッドウィービング
CN109683873B (zh) * 2018-11-16 2021-10-08 中国西安卫星测控中心 利用asn1规则的航天信息接口编码方法及系统架构
KR20210016773A (ko) 2019-08-05 2021-02-17 삼성전자주식회사 프로세서의 주파수를 제어하는 전자 장치와 이의 동작 방법
CN111026452B (zh) * 2019-11-20 2023-10-20 北京明朝万达科技股份有限公司 一种远程32位进程注入64位进程的方法及系统
CN113760338B (zh) * 2020-06-05 2023-07-18 北京字跳网络技术有限公司 切换应用程序二进制接口abi的方法、装置及电子设备
US11403100B2 (en) * 2020-08-31 2022-08-02 Microsoft Technology Licensing, Llc Dual architecture function pointers having consistent reference addresses
US11231918B1 (en) * 2020-08-31 2022-01-25 Microsoft Technologly Licensing, LLC Native emulation compatible application binary interface for supporting emulation of foreign code
KR20220030081A (ko) * 2020-09-02 2022-03-10 삼성전자주식회사 전자장치 및 그 제어방법
US11704562B1 (en) * 2020-11-04 2023-07-18 Meta Platforms, Inc. Architecture for virtual instructions
US11556403B1 (en) 2021-10-19 2023-01-17 Bank Of America Corporation System and method for an application programming interface (API) service modification

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080059769A1 (en) 2006-08-30 2008-03-06 James Walter Rymarczyk Multiple-core processor supporting multiple instruction set architectures
US20110138473A1 (en) * 2009-12-03 2011-06-09 Google Inc. Dynamic code insertion and removal for static analysis based sandboxes
US20130326489A1 (en) * 2012-05-30 2013-12-05 Vector Fabrics B.V. Method and system for translating non-native instructions
US20140244983A1 (en) * 2013-02-26 2014-08-28 Qualcomm Incorporated Executing an operating system on processors having different instruction set architectures

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5968162A (en) * 1996-04-02 1999-10-19 Advanced Micro Devices, Inc. Microprocessor configured to route instructions of a second instruction set to a second execute unit in response to an escape instruction
US20020083421A1 (en) * 2000-12-22 2002-06-27 Hitachi America, Ltd. Assembly language code compilation for an instruction-set architecture containing new instructions using the prior assembler
US7233998B2 (en) 2001-03-22 2007-06-19 Sony Computer Entertainment Inc. Computer architecture and software cells for broadband networks
JP5405799B2 (ja) * 2008-10-30 2014-02-05 株式会社日立製作所 仮想計算機の制御方法、仮想化プログラム及び仮想計算機システム
US20120159127A1 (en) * 2010-12-16 2012-06-21 Microsoft Corporation Security sandbox
US9298375B2 (en) 2013-02-27 2016-03-29 Vmware, Inc. Method and apparatus for returning reads in the presence of partial data unavailability
CN104104679B (zh) * 2014-07-18 2017-07-11 四川中亚联邦科技有限公司 一种基于私有云的数据处理方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080059769A1 (en) 2006-08-30 2008-03-06 James Walter Rymarczyk Multiple-core processor supporting multiple instruction set architectures
US20110138473A1 (en) * 2009-12-03 2011-06-09 Google Inc. Dynamic code insertion and removal for static analysis based sandboxes
US20130326489A1 (en) * 2012-05-30 2013-12-05 Vector Fabrics B.V. Method and system for translating non-native instructions
US20140244983A1 (en) * 2013-02-26 2014-08-28 Qualcomm Incorporated Executing an operating system on processors having different instruction set architectures

Also Published As

Publication number Publication date
WO2016090554A1 (en) 2016-06-16
EP3230853A4 (en) 2019-05-29
KR20170094136A (ko) 2017-08-17
CN107077337A (zh) 2017-08-18
US20160364276A1 (en) 2016-12-15
US9910721B2 (en) 2018-03-06
CN107077337B (zh) 2021-01-15
EP3230853A1 (en) 2017-10-18

Similar Documents

Publication Publication Date Title
KR102332209B1 (ko) 2개의 명령어 세트 아키텍처들에 따라 컴파일링된 애플리케이션 코드의 실행을 위한 시스템 및 방법
US10761867B2 (en) Nested emulation and dynamic linking environment
US8768682B2 (en) ISA bridging including support for call to overidding virtual functions
JP6458959B2 (ja) 協調設計されたプロセッサ用動的言語アクセラレータ
US8464230B2 (en) Methods and systems to implement non-ABI conforming features across unseen interfaces
US8997066B2 (en) Emulating pointers
US9134973B2 (en) Dynamic compiling and loading at runtime
EP2802983B1 (en) Isa bridging with callback
CN107273311B (zh) 计算设备、用于计算的方法和用于计算的装置
US9152442B2 (en) Callbacks in virtual machines
US20160246622A1 (en) Method and system for implementing invocation stubs for the application programming interfaces embedding with function overload resolution for dynamic computer programming languages
US9639375B2 (en) Generation of language bindings for libraries using data from compiler generated debug information
US20140222410A1 (en) Hybrid emulation and kernel function processing systems and methods
US20160132246A1 (en) Conditional stack frame allocation
US8589899B2 (en) Optimization system, optimization method, and compiler program
US9864518B2 (en) Assigning home memory addresses to function call parameters
JP4093484B2 (ja) コンパイラ、コンパイル方法、コンパイルプログラム、及び記録媒体
CN114546515B (zh) 动态加载静态库的模块、固件及设备和C库转Lua库的方法
US20190065161A1 (en) Supporting compiler variable instrumentation for uninitialized memory references

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