컴퓨터 과학 에서 동적 재컴파일은 일부 에뮬레이터 및 가상 머신의 기능으로, 시스템은 실행 중에 프로그램의 일부를 재컴파일 할 수 있다. 실행 중에 컴파일함으로써 시스템은 프로그램의 런타임 환경을 반영하도록 생성된 코드를 조정할 수 있으며 잠재적으로 기존의 정적 컴파일러 에서 사용할 수 없는 정보를 활용하여 보다 효율적인 코드를 생성할 수 있다.
용도
대부분의 동적 재컴파일러는 런타임 시 아키텍처 간에 기계 코드를 변환하는 데 사용된다. 이것은 레거시 게임 플랫폼의 에뮬레이션에서 종종 필요한 작업이다. 다른 경우에 시스템은 적응형 최적화 전략의 일부로 동적 재컴파일을 사용하여 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 프로젝트.[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 실리콘에서 실행되도록 변환되도록 허용한다.
에뮬레이터
같이 보기
각주
외부 링크