동적 재컴파일
(동적 리컴파일에서 넘어옴)
컴퓨터 과학 에서 동적 재컴파일은 일부 에뮬레이터 및 가상 머신의 기능으로, 시스템은 실행 중에 프로그램의 일부를 재컴파일 할 수 있다. 실행 중에 컴파일함으로써 시스템은 프로그램의 런타임 환경을 반영하도록 생성된 코드를 조정할 수 있으며 잠재적으로 기존의 정적 컴파일러 에서 사용할 수 없는 정보를 활용하여 보다 효율적인 코드를 생성할 수 있다.
용도
편집대부분의 동적 재컴파일러는 런타임 시 아키텍처 간에 기계 코드를 변환하는 데 사용된다. 이것은 레거시 게임 플랫폼의 에뮬레이션에서 종종 필요한 작업이다. 다른 경우에 시스템은 적응형 최적화 전략의 일부로 동적 재컴파일을 사용하여 Java 또는 .NET 공용 언어 런타임 바이트코드와 같은 프로그램을 실행할 수 있다. 디버거는 또한 동적 재컴파일을 활용하여 대부분의 역최적화 기술 및 동적 스레드 마이그레이션 과 같은 기능에서 발생하는 공간 오버헤드를 줄인다.
작업
편집동적 재컴파일러가 수행해야 하는 주요 작업은 다음과 같다.
- 소스 플랫폼에서 기계 코드 읽기
- 대상 플랫폼에 대한 기계어 코드 방출
동적 재컴파일러는 일부 보조 작업도 수행할 수 있다.
애플리케이션
편집- 많은 JVM(Java Virtual Machine)에는 동적 재컴파일 기능이 있다.
- x86의 Mac OS X 용 Apple의 Rosetta는 PowerPC 코드가 x86 아키텍처 에서 실행되도록 한다.
- PowerPC 하드웨어에서 680x0 코드를 실행하기 위해 클래식 Mac OS에서 사용되는 최신 버전의 Mac 68K 에뮬레이터.
- Python 전용 컴파일러인 Psyco.
- 투명한 바이너리 동적 최적화 프로그램 의 예인 HP Dynamo 프로젝트.[1]
- ARM, x86-64 및 IA-64 (Itanium) 명령어 세트와 함께 작동하는 Dynamo의 오픈 소스 후속 제품인 DynamoRIO.[2][3]
- Vx32 가상 머신은 동적 재컴파일을 사용하여 안전한 애플리케이션 플러그인을 위한 OS 독립적인 x86 아키텍처 샌드박스를 생성한다.
- PowerPC에서 x86 코드를 실행하는 데 사용되는 Mac용 Microsoft Virtual PC.
- 사용자 구성(선택한 기능, 언어, 레이아웃) 및 실제 런타임 환경(OS 변형)을 기반으로 메모리 내 이미지를 최소화하기 위해 자체 수정 코드 및 동적 데드 코드 제거를 활용하여 사용 편의성이 향상된 국제 DOS 키보드 및 콘솔 드라이버인 FreeKEYB 에서 버전, 로드된 드라이버, 기본 하드웨어), 종속성 자동 해결, 바이트 수준 세분성에서 코드 섹션을 동적으로 재배치 및 재결합, 소스 코드에 제공된 의미 정보를 기반으로 opstring 최적화, 조립 중 특수 도구에 의해 생성된 재배치 정보 및 획득한 프로필 정보 로드 시간에 동적 재컴파일을 사용한다.
- Xbox 360의 이전 버전과의 호환성 기능(예: 원래 Xbox 용으로 작성된 게임 실행)은 동적 재컴파일을 사용하는 것으로 널리 알려져 있다.
- Apple 실리콘용 Apple의 Rosetta 2는 x86-64 기반 프로세서용으로 컴파일된 많은 응용 프로그램이 Apple 실리콘에서 실행되도록 변환되도록 허용한다.
에뮬레이터
편집- [4] PlayStation 2 에뮬레이터인 PCSX2 에는 "SuperVU"의 후속 제품인 "microVU"라는 재컴파일러가 있다.
- GCemu,[5] GameCube 에뮬레이터.
- GEM,[6] MSX 용 Game Boy 에뮬레이터는 최적화 동적 재컴파일러를 사용한다.
- Nintendo DS 에뮬레이터인 DeSmuME[7] 에는 dynarec 옵션이 있다.
- Soywiz의 Psp[8] PlayStation Portable 에뮬레이터에는 dynarec 옵션이 있다.
- Mupen64Plus, 멀티 플랫폼 Nintendo 64 에뮬레이터.[9]
- 멀티 플랫폼 Saturn 에뮬레이터 Yabause.[10]
- 멀티 플랫폼 PlayStation Portable 에뮬레이터인 PPSSPP는 기본적으로 JIT 동적 재컴파일러를 사용한다.[11]
같이 보기
편집- 바이너리 재컴파일러
- 이진 번역
- 플랫폼 가상화 소프트웨어 비교
- 적시 컴파일
- 계측(컴퓨터 프로그래밍)
각주
편집- ↑ “HP Labs' technical report on Dynamo”. 2008년 7월 7일에 원본 문서에서 보존된 문서. 2023년 2월 19일에 확인함.
- ↑ “DynamoRIO Dynamic Instrumentation Tool Platform”. 2019년 9월 5일에 원본 문서에서 보존된 문서. 2016년 4월 12일에 확인함.
- ↑ “DynamoRIO”. 《GitHub》. 2021년 10월 15일.
- ↑ “PCSX 2”. 2005년 10월 29일에 원본 문서에서 보존된 문서. 2023년 2월 19일에 확인함.
- ↑ petebernert. “GCemu”. 《SourceForge》.
- ↑ “Gameboy Emulator for MSX | The New Image”. GEM. 2002년 11월 28일에 원본 문서에서 보존된 문서. 2014년 1월 12일에 확인함.
- ↑ “DeSmuME v0.9.9”.
- ↑ Publicado por Carlos Ballesteros Velasco (2013년 7월 28일). “Soywiz's PSP Emulator: Release : Soywiz's Psp Emulator 2013-07-28 (r525)”. Pspemu.soywiz.com. 2014년 1월 12일에 확인함.
- ↑ Mupen64Plus
- ↑ “SH2”.
- ↑ “PPSSPP - PPSSPP - PSP emulator for Android, Windows, Linux, iOS, MacOSX”. 《ppsspp.org》. 2021년 11월 17일에 확인함.
외부 링크
편집- 동적 재컴파일러 튜토리얼 Archived 2021년 6월 11일 - 웨이백 머신
- MIPS를 PPC 동적 재컴파일러로 작성하는 방법에 대한 블로그 게시물