동적 재컴파일

컴퓨터 과학 에서 동적 재컴파일은 일부 에뮬레이터 및 가상 머신의 기능으로, 시스템은 실행 중에 프로그램의 일부를 재컴파일 할 수 있다. 실행 중에 컴파일함으로써 시스템은 프로그램의 런타임 환경을 반영하도록 생성된 코드를 조정할 수 있으며 잠재적으로 기존의 정적 컴파일러 에서 사용할 수 없는 정보를 활용하여 보다 효율적인 코드를 생성할 수 있다.

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

 작업 
동적 재컴파일러가 수행해야 하는 주요 작업은 다음과 같다.

 소스 플랫폼에서 기계 코드 읽기
 대상 플랫폼에 대한 기계어 코드 방출

동적 재컴파일러는 일부 보조 작업도 수행할 수 있다.

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

 애플리케이션 

 많은 JVM(Java Virtual Machine)에는 동적 재컴파일 기능이 있다.
 x86의 Mac OS X 용 Apple의 Rosetta는 PowerPC 코드가 x86 아키텍처 에서 실행되도록 한다.
 PowerPC 하드웨어에서 680x0 코드를 실행하기 위해 클래식 Mac OS에서 사용되는 최신 버전의 Mac 68K 에뮬레이터.
 Python 전용 컴파일러인 Psyco.
 투명한 바이너리 동적 최적화 프로그램 의 예인 HP Dynamo 프로젝트.
 ARM, x86-64 및 IA-64 (Itanium) 명령어 세트와 함께 작동하는 Dynamo의 오픈 소스 후속 제품인 DynamoRIO.
 Vx32 가상 머신은 동적 재컴파일을 사용하여 안전한 애플리케이션 플러그인을 위한 OS 독립적인 x86 아키텍처 샌드박스를 생성한다.
 PowerPC에서 x86 코드를 실행하는 데 사용되는 Mac용 Microsoft Virtual PC.
 사용자 구성(선택한 기능, 언어, 레이아웃) 및 실제 런타임 환경(OS 변형)을 기반으로 메모리 내 이미지를 최소화하기 위해 자체 수정 코드 및 동적 데드 코드 제거를 활용하여 사용 편의성이 향상된 국제 DOS 키보드 및 콘솔 드라이버인 FreeKEYB 에서 버전, 로드된 드라이버, 기본 하드웨어), 종속성 자동 해결, 바이트 수준 세분성에서 코드 섹션을 동적으로 재배치 및 재결합, 소스 코드에 제공된 의미 정보를 기반으로 opstring 최적화, 조립 중 특수 도구에 의해 생성된 재배치 정보 및 획득한 프로필 정보 로드 시간에 동적 재컴파일을 사용한다.
 Xbox 360의 이전 버전과의 호환성 기능(예: 원래 Xbox 용으로 작성된 게임 실행)은 동적 재컴파일을 사용하는 것으로 널리 알려져 있다.
 Apple 실리콘용 Apple의 Rosetta 2는 x86-64 기반 프로세서용으로 컴파일된 많은 응용 프로그램이 Apple 실리콘에서 실행되도록 변환되도록 허용한다.

 에뮬레이터 

 PlayStation 2 에뮬레이터인 PCSX2 에는 "SuperVU"의 후속 제품인 "microVU"라는 재컴파일러가 있다.
 GCemu, GameCube 에뮬레이터.
 GEM, MSX 용 Game Boy 에뮬레이터는 최적화 동적 재컴파일러를 사용한다.
 Nintendo DS 에뮬레이터인 DeSmuME 에는 dynarec 옵션이 있다.
 Soywiz의 Psp PlayStation Portable 에뮬레이터에는 dynarec 옵션이 있다.
 Mupen64Plus, 멀티 플랫폼 Nintendo 64 에뮬레이터.Mupen64Plus
 멀티 플랫폼 Saturn 에뮬레이터 Yabause.
 멀티 플랫폼 PlayStation Portable 에뮬레이터인 PPSSPP는 기본적으로 JIT 동적 재컴파일러를 사용한다.

 같이 보기 
 바이너리 재컴파일러
 이진 번역
 플랫폼 가상화 소프트웨어 비교
 적시 컴파일
 계측(컴퓨터 프로그래밍)

 각주 

 외부 링크 
 동적 재컴파일러 튜토리얼 
 MIPS를 PPC 동적 재컴파일러로 작성하는 방법에 대한 블로그 게시물

분류:에뮬레이션 소프트웨어
분류:컴파일러 구성