맨위로가기

이진 변환

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

1. 개요

이진 변환은 대상 플랫폼에서 실행할 바이너리가 없거나, 소스 코드를 컴파일하기 어려운 경우, 다른 아키텍처에서 실행될 수 있도록 바이너리 코드를 변환하는 기술이다. 정적 이진 변환은 실행 파일 전체를 변환하는 반면, 동적 이진 변환은 실행 중인 코드의 일부를 변환하며, 캐싱과 최적화를 통해 성능을 향상시킨다. 동적 이진 변환은 에뮬레이션보다 오버헤드가 적고, JIT 컴파일러와 유사한 방식으로 동작한다. 이 기술은 매킨토시 68K 에뮬레이터, 퀵트랜짓, FX!32 등 다양한 소프트웨어 및 하드웨어에서 활용되었다.

더 읽어볼만한 페이지

  • 인터프리터 - Gnash
    GNU 프로젝트에서 개발 중인 Gnash는 자유 소프트웨어 플래시 플레이어로서, SWF 파일 재생 및 ActionScript 2.0 지원을 통해 어도비 플래시 플레이어와의 호환성을 목표로 하지만, 높은 CPU 사용률 및 일부 플래시 게임과의 호환성 문제 등의 어려움이 있다.
  • 인터프리터 - REPL
    REPL은 사용자의 입력을 읽고 평가하여 결과를 출력하는 과정을 반복하는 인터랙티브한 프로그래밍 환경으로, 인터프리터 환경에서 주로 사용되며 소프트웨어 프로토타이핑, 디버깅, 언어 학습에 유용하고 다양한 기능을 제공한다.
  • 에뮬레이션 소프트웨어 - 에뮬레이터
    에뮬레이터는 다른 프로그램이나 장치를 모방하는 컴퓨터 프로그램 또는 전자기기의 능력으로, 하드웨어 및 소프트웨어 모방을 포함하며 디지털 아카이빙과 뉴 미디어 아트 분야에서 중요한 역할을 한다.
  • 에뮬레이션 소프트웨어 - 시그윈
    Cygwin은 윈도우에서 유닉스 시스템과 유사한 환경을 제공하는 소프트웨어로, POSIX API 구현 및 다양한 개발 도구를 통해 유닉스 기반 소프트웨어의 개발, 빌드, 실행을 지원한다.
  • 가상화 소프트웨어 - X86 가상화
    X86 가상화는 x86 아키텍처 기반 시스템에서 가상 머신을 구현하는 기술로, 소프트웨어 기반 가상화와 하드웨어 지원 가상화로 나뉘며, CPU 제조사의 가상화 확장 기술을 활용하여 가상 머신의 성능을 향상시킨다.
  • 가상화 소프트웨어 - VM웨어 v스피어
    VM웨어 v스피어는 VM웨어에서 개발한 서버 가상화 플랫폼으로, 다양한 운영체제 지원, 가상 시스템 확장, vMotion 개선, 스토리지 관리 효율성 향상 등의 특징을 가지며 클라우드 환경 지원 강화 및 관리 효율성 증대에 초점을 맞추어 지속적으로 업데이트되고 있다.
이진 변환
일반 정보
이름이진 변환
다른 이름바이너리 변환
Binary translation
설명한 종류의 컴파일
세부 정보
종류이진 재컴파일
적용 대상명령어 집합 아키텍처
관련 기술
관련 기술에뮬레이터
가상 머신

2. 동기

이진 변환이 생겨난 주된 이유는 대상 플랫폼에 맞는 바이너리가 없거나, 소스 코드를 구하기 어렵거나, 소스 코드를 컴파일하기 어려운 상황 때문이었다.

정적 재컴파일된 바이너리는 에뮬레이션 부하가 없어 에뮬레이트된 바이너리보다 속도가 빠르다. 이는 인터프리트 방식 프로그램과 컴파일된 프로그램 간의 성능 차이와 비슷하다.

동적 바이너리 변환은 코드 변환 시간 오버헤드가 있지만, 에뮬레이터의 읽기-디코딩-실행 루프가 없어 성능 병목 현상이 적다. 변환된 코드가 여러 번 실행되면 변환 오버헤드는 상쇄된다.

고급 동적 변환 프로그램은 동적 재컴파일을 사용하여 실행 시간의 대부분을 차지하는 부분을 파악하고, 이 부분을 집중적으로 최적화한다. 이 기술은 JIT 컴파일러와 유사하며, 썬 마이크로시스템즈의 HotSpot 기술은 가상 머신의 명령어 집합(바이트코드)에서 실제 머신의 명령어 집합으로 변환하는 동적 바이너리 변환 프로그램으로 볼 수 있다.

몇몇 기업들은 이진 변환 기술을 활용하여 성공적인 결과를 얻었다.


  • 애플은 PowerPC 기반 Macintosh 제품용으로 M68K 코드를 동적으로 변환하는 에뮬레이터를 개발하여 높은 안정성, 성능, 호환성을 달성했다. (Mac 68K 에뮬레이터 참조) 이를 통해 애플은 일부 바이너리만 네이티브인 상태로 운영 체제(OS)를 출시할 수 있었고, 사용자는 기존 소프트웨어를 유지하면서 새로운 아키텍처를 채택할 수 있었다. OS의 일부도 에뮬레이션으로 작동했으며, 68K용 코드가 없는 OS로의 전환은 2001년 Mac OS X 출시 이후 "클래식" 환경을 통해 이루어졌다. Mac OS X v10.4에서는 인텔 칩 탑재 매킨토시용 Rosetta 변환 레이어를 통해 PowerPC에서 x86으로의 전환을 지원했다.
  • DEC은 사용자가 CISC의 VAX 아키텍처를 DEC Alpha RISC 아키텍처로 마이그레이션하도록 돕는 변환 도구를 개발했다.
  • DEC은 x86용 애플리케이션을 DEC Alpha 애플리케이션으로 변환하는 FX!32 바이너리 변환 프로그램도 개발했다.
  • 2006년 3월, 인텔(Intel)은 Transitive Binary Translator를 Itanium과 Xeon CPU에서 지원할 계획을 발표했다.
  • 썬 마이크로시스템즈, IBM, SGI는 각각[17] Transitive의 QuickTransit를 채택했다. (썬: SPARC → x86, IBM: x86 → Power 아키텍처, SGI: MIPS → Itanium2)
  • 2000년, 트랜스메타(Transmeta)는 Crusoe 프로세서 설계를 발표했다. 이 프로세서는 하드웨어 VLIW 코어와 Code Morphing 소프트웨어 레이어를 통해 x86 명령어를 Crusoe의 네이티브 명령어로 변환하고, 동적 컴파일과 코드 최적화를 수행하여 전력 소비를 줄이면서 성능을 향상시켰다.

3. 정적 이진 변환

정적 이진 변환은 실행 파일의 전체 코드를 대상 아키텍처에서 실행 가능한 코드로 미리 변환하는 방식이다. 이 방식은 실행 전에 모든 코드를 변환하므로 런타임 오버헤드가 적다는 장점이 있지만, 간접 분기와 같이 런타임에 결정되는 코드는 정확하게 변환하기 어렵다는 한계가 있다.[1]

정적 이진 변환은 주로 하위 섹션에서 예시들을 다룬다.

3. 1. 정적 이진 변환의 예시

허니웰사(Honeywell)는 자사의 허니웰 200 시리즈 컴퓨터를 위해 Liberator라는 프로그램을 제공했는데, 이 프로그램은 IBM 1400 시리즈 컴퓨터용 프로그램을 허니웰 200 시리즈용 프로그램으로 변환할 수 있었다.[2]

2014년에는 1998년 비디오 게임 ''스타크래프트''의 ARM 아키텍처 버전이 원본 x86 버전에 대한 정적 재컴파일 및 추가적인 리버스 엔지니어링을 통해 생성되었다.[3][4] 판도라 휴대용 기기 커뮤니티는 자체적으로 필요한 도구를 개발할 수 있었고, 여러 차례 이러한 번역을 성공적으로 수행했다.[5][6][7]

2014년에는 비디오 게임 ''큐브 월드''의 절차적 생성 지형 생성기에 대해 x86-to-x64 정적 재컴파일이 성공적으로 생성되었다.[8]

2013년에는 LLVM을 사용하여 생성된 NES-to-x86 정적으로 재컴파일된 ''슈퍼 마리오 브라더스'' 비디오 게임 버전이 있다.[9]

2004년 닌텐도의 Scott Elliott과 Phillip R. Hutchinson은 게임 보이 바이너리에서 "C" 코드를 생성하는 도구를 개발했는데, 이 코드는 새로운 플랫폼에 대해 컴파일되어 항공 엔터테인먼트 시스템에서 사용하기 위한 하드웨어 라이브러리에 링크될 수 있었다.[10]

1995년 벨 통신 연구소(Bell Communications Research)의 Norman Ramsey와 프린스턴 대학교 컴퓨터 과학과의 Mary F. Fernandez는 정적 어셈블리 변환을 위한 기본적인 도구를 갖춘 ''The New Jersey Machine-Code Toolkit''을 개발했다.[11]

4. 동적 이진 변환

동적 이진 변환(Dynamic Binary Translation, DBT)은 실행 중인 코드의 일부분(일반적으로 기본 블록 단위)을 동적으로 변환하는 방식이다. 코드가 실제로 실행될 때 변환이 이루어지므로, 정적 변환 방식으로는 처리하기 어려운 간접 분기 등을 다룰 수 있다. 변환된 코드는 캐시에 저장되어 재사용되므로, 반복 실행되는 코드의 경우 성능 향상을 기대할 수 있다.[17] 단순 에뮬레이션과 달리, 동적 이진 변환은 변환 과정의 오버헤드가 있지만, 에뮬레이터의 읽기-디코딩-실행 루프를 제거하여 성능 병목 현상을 완화한다.

고급 동적 변환 프로그램은 동적 재컴파일을 사용하여 자주 실행되는 코드 부분을 찾아내고, 이러한 부분을 최적화한다. 이 기술은 JIT 컴파일러를 연상시키며, 실제로 의 핫스팟 기술과 같은 컴파일러는 가상 명령어 집합(바이트코드)에서 실제 명령어 집합으로 변환하는 동적 변환기로 볼 수 있다.

트랜스메타는 2000년에 크루소라는 혁신적인 프로세서 설계를 발표했다. 이 프로세서는 하드웨어 VLIW 코어와 Code Morphing 소프트웨어라는 소프트웨어 레이어를 엔진으로 사용하는데, Code Morphing 소프트웨어는 x86 명령어를 크루소의 네이티브 명령어로 변환하고 동적 컴파일과 코드 최적화를 수행하여 전력 소비를 최소화하면서 성능을 향상시킨다.

4. 1. 소프트웨어에서의 동적 이진 변환 예시


  • 애플은 M68K 코드를 PowerPC 코드로 동적 변환하는 에뮬레이터를 매킨토시 제품군에 구현하여 높은 수준의 신뢰성, 성능 및 호환성을 달성했다. (매킨토시 68K 에뮬레이터 참조) 이를 통해 애플은 운영 체제의 일부만 네이티브로 지원하는 기기를 출시할 수 있었고, 최종 사용자는 소프트웨어 투자를 유지하면서 새롭고 더 빠른 아키텍처를 채택할 수 있었다. 에뮬레이터가 매우 성공적이어서 운영 체제의 많은 부분이 에뮬레이션 상태로 유지되었다. PowerPC 네이티브 운영 체제 (OS)로의 완전한 전환은 Mac OS X (10.0)이 출시된 2001년까지 이루어지지 않았다. (Mac OS X "클래식" 런타임 환경은 Mac OS X 10.5까지 PowerPC 맥에서 이 에뮬레이션 기능을 계속 제공했다.)
  • Mac OS X 10.4.4는 인텔 기반 맥용 로제타 동적 번역 계층을 도입하여 애플이 PPC 기반 하드웨어에서 x86으로 전환하는 것을 용이하게 했다. Transitive Corporation에서 애플을 위해 개발된 로제타 소프트웨어는 Transitive의 퀵트랜짓 솔루션을 구현한 것이다.
  • 퀵트랜짓은 제품 수명 동안 SPARC→x86, x86→PowerPC 및 MIPS→아이테니엄 2 번역 지원도 제공했다.
  • DEC는 x86 애플리케이션을 알파 애플리케이션으로 변환하기 위해 FX!32 이진 번역기를 개발했다.
  • 썬 마이크로시스템즈의 와비 소프트웨어에는 x86에서 SPARC 명령으로의 동적 번역이 포함되었다.
  • 2000년 1월, 트랜스메타 코퍼레이션은 크루소라는 새로운 프로세서 설계를 발표했다.[14][15] 웹사이트의 FAQ[16]에서는 스마트 마이크로프로세서는 하드웨어 VLIW 코어를 엔진으로 사용하고 Code Morphing 소프트웨어라는 소프트웨어 계층을 갖추고 있습니다. Code Morphing 소프트웨어는 셸 역할을 하며 […] x86 명령을 네이티브 크루소 명령으로 변환하거나 번역합니다. 또한 Code Morphing 소프트웨어에는 동적 컴파일러와 코드 최적화기가 포함되어 있습니다. […] 결과적으로 최소한의 전력으로 성능이 향상됩니다. […] [이는] 트랜스메타가 방대한 소프트웨어 애플리케이션 기반에 영향을 미치지 않으면서 VLIW 하드웨어와 Code Morphing 소프트웨어를 별도로 발전시킬 수 있게 해줍니다.영어라고 설명했다.
  • 인텔 코퍼레이션은 IA-32 실행 계층을 개발 및 구현했는데, 이는 아이테니엄 기반 시스템에서 IA-32 애플리케이션을 지원하도록 설계된 동적 이진 번역기로, 마이크로소프트 윈도우 서버 for 아이테니엄 아키텍처뿐만 아니라 레드햇 및 수세 리눅스를 포함한 여러 종류의 리눅스에 포함되었다. 이를 통해 IA-32 애플리케이션이 아이테니엄 프로세서에서 네이티브 IA-32 모드를 사용하는 것보다 더 빠르게 실행될 수 있었다.
  • 돌핀 (게임큐브/Wii용 에뮬레이터)은 PowerPC 코드를 x86 및 AArch64로 JIT 재컴파일을 수행한다.
  • 마이크로소프트 버추얼 PC는 32비트 게스트 운영 체제를 위한 이진 번역을 지원한다.
  • VMware Workstation 12 이하 버전은 32비트 게스트 운영 체제를 위한 이진 번역을 지원하는 것으로 알려져 있다.

4. 2. 하드웨어에서의 동적 이진 변환 예시

Nvidia 테그라 K1 덴버는 느린 하드웨어 디코더를 통해 ARM 명령어를 자체 마이크로코드 명령어어로 변환하며, 핫 코드에 소프트웨어 바이너리 변환기를 사용한다.

참조

[1] conference Binary Translation Using Peephole Superoptimizers https://www.usenix.o[...] 2008-12-00
[2] book Honeywell Series 200 Summary Description http://bitsavers.org[...] Honeywell 1966-02-00
[3] 웹사이트 Starcraft für ARM-Handheld kompiliert http://www.golem.de/[...] golem.de 2014-03-25
[4] 웹사이트 StarCraft http://repo.openpand[...] repo.openpandora.org 2014-03-26
[5] 웹사이트 ia32rtools/ https://github.com/n[...] GitHub 2015-01-09
[6] 웹사이트 Starcraft http://boards.openpa[...] openpandora.org 2014-03-29
[7] 웹사이트 Warcraft: Orcs & Humans http://repo.openpand[...] repo.openpandora.org
[8] 웹사이트 Practical and Portable X86 Recompilation http://mp2.dk/blog/b[...] 2014-08-08
[9] 웹사이트 Statically Recompiling NES Games into Native Executables with LLVM and Go http://andrewkelley.[...] 2013-08-08
[10] patent System and method for trans-compiling video games http://www.google.co[...] 2010-00-00
[11] conference The New Jersey Machine-Code Toolkit https://www.usenix.o[...] USENIX Association Berkeley, CA, USA 1995-00-00
[12] book Itanium Rising: Breaking Through Moore's Second Law of Computing Power https://books.google[...] Prentice Hall PTR 2015-01-09
[13] 웹사이트 HP ARIES Dynamic Binary Translator https://web.archive.[...] HP 2015-01-09
[14] 웹사이트 Transmeta Crusoe Explored http://archive.arste[...] Ars Technica 2015-01-09
[15] 웹사이트 Transmeta's Crusoe Microprocessor https://web.archive.[...] geek.com 2007-09-27
[16] 웹사이트 Transmeta Crusoe Processor Frequently Asked Questions FAQ https://web.archive.[...] Transmeta 2007-01-10
[17] 문서 http://www.sgi.com/p[...]



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

문의하기 : help@durumis.com