Translacja binarna

Translacja binarna jest techniką pozwalającą uruchamiać programy przeznaczone dla jednej architektury i systemu operacyjnego w innym środowisku bez konieczności rekompilacji kodu źródłowego.

Wyróżnia się trzy typy systemów opartych na binarnej translacji:

  • emulatory
  • dynamiczne translatory
  • statyczne translatory

Emulator

Emulator interpretuje instrukcje programu w czasie wykonywania lecz nie zapamiętuje interpretowanych instrukcji i nie optymalizuje kodu. Ponowne przetwarzanie wcześniej przetłumaczonych instrukcji powoduje często spadek wydajności. Jednakże emulator jest całkowicie niezależny od systemu hosta co gwarantuje łatwą przenaszalność. Ponadto, emulatory są dokładne i stosunkowo łatwe w implementacji.

Emulatory najlepiej sprawdzają się w przypadku, gdy system hosta jest sprawniejszy niż system, który ma być na nim emulowany. Stąd najczęściej używa się emulatorów do uruchamiania programów pisanych dla starych, zwykle już nie produkowanych systemów. Jako przykład mogą posłużyć konsole gier, szczególnie te starsze, będące 8 lub 16 - bitowymi systemami o małej pamięci, prostym OS i prostym I/O. Emulatory konsol dostępne są dla wielu różnych systemów: na przykład: Nintendo, Super Nintendo, Sega czy Playstation.

Gra Doom uruchomiona pod emulowanym przez Bochs DOS-em na systemie Linux

Gra Doom uruchomiona pod emulowanym przez 
Bochs DOS-em na systemie Linux

Na podstawie informacji ze strony projektu bochs

Dynamiczny translator

Dynamiczny translator, prócz tłumaczenia instrukcji cache'ują fragmenty kodu do przyszłego zastosowania, co powoduje wzrost wydajności wraz z upływem czasu działania programu. Z faktu, że proces ten odbywa się na bieżąco nie jest możliwa optymalizacja kodu. Dynamiczne translatory są szybsze niż emulatory, jednakże trudniejsze w implementacji. Przykładem jest Java JIT (kompilator just-in-time).

Translator statyczny

Translator statyczny dokonuje tłumaczenie kodu offline, co daje możliwość zoptymalizowania kodu. Możliwe jest także wykorzystanie wcześniej przetłumaczonych fragmentów kodu. Nie rozwiązuje to jednak problemu samomodyfikującego się kodu (self-modifying-code). W przypadku modyfikacji kodu podczas działania programu translacja nie jest możliwa .

Powyższe trzy rozwiązania mają swoje wady i zalety. Istnieje więc szereg hybrydowych rozwiązań, które łączą ich pozytywne własności. Więcej informacji na ten temat można znaleźć w sieci, na przykład w artykule Welcome to the opportunities of binary translation..

Innym źródłem jest artykuł Machine Emulation, Virtualization, and Translation J.R.Petrusa.