맨위로가기

동적 재컴파일

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

동적 재컴파일은 런타임 시 아키텍처 간 기계어 코드 변환을 수행하는 기술이다. 레거시 게임 에뮬레이션, 자바 또는 .NET 바이트코드 실행, 고속 디버깅, 스레드 마이그레이션 등 다양한 용도로 사용된다. 동적 재컴파일러는 소스 플랫폼의 기계어 코드를 읽어 대상 플랫폼용 기계어 코드를 생성하며, 코드 캐시 관리, 인터럽트 처리, 하드웨어 인터페이스, 코드 최적화 등의 부가적인 작업을 수행한다. 자바 가상 머신, 로제타, 에뮬레이터 등 다양한 소프트웨어에서 활용되며, Xbox 360의 하위 호환 기능, Apple 실리콘의 Rosetta 2 등에도 적용된다.

더 읽어볼만한 페이지

  • 에뮬레이션 소프트웨어 - 에뮬레이터
    에뮬레이터는 다른 프로그램이나 장치를 모방하는 컴퓨터 프로그램 또는 전자기기의 능력으로, 하드웨어 및 소프트웨어 모방을 포함하며 디지털 아카이빙과 뉴 미디어 아트 분야에서 중요한 역할을 한다.
  • 에뮬레이션 소프트웨어 - 시그윈
    Cygwin은 윈도우에서 유닉스 시스템과 유사한 환경을 제공하는 소프트웨어로, POSIX API 구현 및 다양한 개발 도구를 통해 유닉스 기반 소프트웨어의 개발, 빌드, 실행을 지원한다.
  • 컴파일러 구성 - 구문 분석
    구문 분석은 입력 데이터를 구조화된 형태로 변환하는 과정으로, 컴퓨터 언어에서는 소스 코드를 분석하여 추상 구문 트리를 생성하고, 자연어 처리에서는 텍스트의 문장 구조와 의미를 분석한다.
  • 컴파일러 구성 - 바이너리 재컴파일러
동적 재컴파일
개요
유형번역
범주동적 컴파일
다른 이름동적 이진 번역
동적 변환
런타임 코드 생성
적응 최적화
설명
기본 설명동적 재컴파일은 프로그램 실행 중에 코드를 번역하는 컴파일 기술이다.
사용 시기일반적으로 한 종류의 CPU용으로 작성된 코드를 다른 종류의 CPU에서 실행할 수 있도록 하기 위해 사용된다.
작동 방식소스 코드를 실행하는 동안 분석하여 가장 자주 실행되는 코드 섹션을 식별하고, 이러한 섹션을 대상 CPU에 맞게 최적화된 코드로 변환한다.
목표동적 재컴파일의 목표는 서로 다른 명령어 집합 아키텍처를 가진 시스템 간에 코드를 이식하는 것이다.
장점전체 코드를 미리 번역할 필요 없이 실행 중에 가장 중요한 코드 섹션만 최적화함으로써 성능을 향상시킨다.
예시에뮬레이터가 동적 재컴파일을 사용하여 게스트 시스템의 코드를 호스트 시스템에서 효율적으로 실행한다.
추가 정보
관련 기술가상 머신
에뮬레이터
JIT 컴파일
응용 분야게임 에뮬레이션
레거시 소프트웨어 실행
CPU 아키텍처 간 코드 이식
중요성다양한 플랫폼에서 소프트웨어 호환성을 유지하고 성능을 최적화하는 데 중요한 역할을 한다.

2. 용도

동적 재컴파일은 주로 런타임 시 아키텍처 간에 기계어 코드를 변환하는 데 사용된다. 이는 레거시 게임 플랫폼 에뮬레이션에서 종종 필요한 작업이다. 다른 경우에는 시스템이 적응적 최적화 전략의 일부로 동적 재컴파일을 사용하여 자바 또는 .NET 공용 언어 런타임 바이트코드와 같은 프로그램을 실행할 수 있다. 디버거는 또한 동적 재컴파일을 활용하여 대부분의 역최적화 기술 및 동적 스레드 마이그레이션과 같은 기능에서 발생하는 공간 오버헤드를 줄인다.

3. 작업

동적 재컴파일러의 주요 작업은 다음과 같다.[1]


  • 소스 플랫폼에서 기계어 코드를 읽어 들인다.
  • 대상 플랫폼용 기계어 코드를 내보낸다.


동적 재컴파일러는 다음과 같은 보조 작업도 수행할 수 있다.[1]

  • 재컴파일된 코드의 캐시 관리
  • 사이클 카운트 레지스터가 있는 플랫폼에서 경과된 사이클 수 업데이트
  • 인터럽트 확인 관리
  • GPU와 같은 가상화된 지원 하드웨어에 대한 인터페이스 제공
  • 대상 하드웨어에서 효율적으로 실행되도록 상위 레벨 코드 구조 최적화

4. 애플리케이션

동적 재컴파일은 다양한 분야의 애플리케이션에서 활용된다. 예를 들어, 엑스박스 360의 하위 호환성 기능을 통해 원래 Xbox용으로 작성된 게임을 실행할 수 있다.

4. 1. 에뮬레이터

동적 재컴파일을 사용하는 에뮬레이터는 다음과 같다.

  • JVM(Java Virtual Machine): 많은 JVM이 동적 재컴파일 기능을 갖추고 있다.
  • macOS용 Apple Rosetta: x86 아키텍처에서 PowerPC 코드를 실행할 수 있도록 해준다.
  • 클래식 Mac OS용 Mac 68K 에뮬레이터: PowerPC 하드웨어에서 680x0 코드를 실행하기 위해 사용되는 최신 버전이다.
  • Psyco: Python 전용 컴파일러이다.
  • HP Dynamo 프로젝트: 투명한 바이너리 동적 최적화 프로그램의 예시이다.[13]
  • DynamoRIO: ARM, x86-64, IA-64 (Itanium) 명령어 세트와 함께 작동하는 Dynamo의 오픈 소스 후속 제품이다.[14][15]
  • Vx32 가상 머신: 안전한 애플리케이션 플러그인을 위한 OS 독립적인 x86 아키텍처 샌드박스를 생성하는 데 동적 재컴파일을 사용한다.
  • Mac용 Microsoft Virtual PC: PowerPC에서 x86 코드를 실행하는 데 사용된다.
  • FreeKEYB: 사용자 구성(선택한 기능, 언어, 레이아웃) 및 실제 런타임 환경(OS 변형)을 기반으로 메모리 내 이미지를 최소화하기 위해 자체 수정 코드 및 동적 데드 코드 제거를 활용하는 국제 DOS 키보드 및 콘솔 드라이버이다. 종속성 자동 해결, 바이트 수준 세분성에서 코드 섹션 동적 재배치 및 재결합, 소스 코드에 제공된 의미 정보를 기반으로 한 opstring 최적화, 조립 중 특수 도구에 의해 생성된 재배치 정보 및 획득한 프로필 정보 로드 시간에 동적 재컴파일을 사용한다.
  • Xbox 360의 하위 호환성 기능: 원래 Xbox 용으로 작성된 게임을 실행하는 등 동적 재컴파일을 사용하는 것으로 널리 알려져 있다.
  • Apple 실리콘용 Apple Rosetta 2: x86-64 기반 프로세서용으로 컴파일된 많은 응용 프로그램이 Apple 실리콘에서 실행되도록 변환한다.
  • PCSX2:[16] PlayStation 2 에뮬레이터로, "SuperVU"의 후속 제품인 "microVU"라는 재컴파일러를 갖추고 있다.
  • GCemu:[17] GameCube 에뮬레이터.
  • GEM:[18] MSXGame Boy 에뮬레이터로, 최적화 동적 재컴파일러를 사용한다.
  • DeSmuME:[19] Nintendo DS 에뮬레이터로, dynarec 옵션이 있다.
  • Soywiz의 Psp:[20] PlayStation Portable 에뮬레이터로, dynarec 옵션이 있다.
  • Mupen64Plus: 다중 플랫폼 Nintendo 64 에뮬레이터.[21]
  • Yabause: 다중 플랫폼 Saturn 에뮬레이터.[22]
  • PPSSPP: 다중 플랫폼 PlayStation Portable 에뮬레이터로, 기본적으로 JIT 동적 재컴파일러를 사용한다.[23]

참조

[1] 웹사이트 HP Labs' technical report on Dynamo https://web.archive.[...] 2006-01-22
[2] 웹사이트 DynamoRIO Dynamic Instrumentation Tool Platform https://web.archive.[...] 2016-04-12
[3] 웹사이트 DynamoRIO https://github.com/D[...] 2021-10-15
[4] 간행물 FreeKEYB - Enhanced DOS keyboard and console driver 1997-10-13
[5] 웹사이트 PCSX 2 https://web.archive.[...] 2009-04-15
[6] 웹사이트 GCemu http://sourceforge.n[...] 2015-10-03
[7] 웹사이트 Gameboy Emulator for MSX | The New Image http://gem.tni.nl/ GEM 2014-01-12
[8] 웹사이트 DeSmuME v0.9.9 http://desmume.org/2[...]
[9] 웹사이트 Soywiz's PSP Emulator: Release : Soywiz's Psp Emulator 2013-07-28 (r525) http://pspemu.soywiz[...] Pspemu.soywiz.com 2014-01-12
[10] 문서 Mupen64Plus http://pandorawiki.o[...]
[11] 웹사이트 SH2 http://wiki.yabause.[...]
[12] 웹사이트 PPSSPP - PPSSPP - PSP emulator for Android, Windows, Linux, iOS, MacOSX https://ppsspp.org/ 2021-11-17
[13] 웹인용 HP Labs' technical report on Dynamo http://www.hpl.hp.co[...] 2023-02-19
[14] 웹인용 DynamoRIO Dynamic Instrumentation Tool Platform https://web.archive.[...] 2016-04-12
[15] 웹인용 DynamoRIO https://github.com/D[...] 2021-10-15
[16] 웹인용 PCSX 2 http://www.pcsx2.net[...] 2023-02-19
[17] 웹인용 GCemu http://sourceforge.n[...]
[18] 웹인용 Gameboy Emulator for MSX | The New Image http://gem.tni.nl/ GEM 2014-01-12
[19] 웹인용 DeSmuME v0.9.9 http://desmume.org/2[...]
[20] 웹인용 Soywiz's PSP Emulator: Release : Soywiz's Psp Emulator 2013-07-28 (r525) http://pspemu.soywiz[...] Pspemu.soywiz.com 2014-01-12
[21] 문서 Mupen64Plus http://pandorawiki.o[...]
[22] 웹인용 SH2 http://wiki.yabause.[...]
[23] 웹인용 PPSSPP - PPSSPP - PSP emulator for Android, Windows, Linux, iOS, MacOSX https://ppsspp.org/ 2021-11-17



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com