Binární překlad

Binární překlad ( angl.  binary translation ) - emulace jedné sady instrukcí na druhou kvůli překladu strojového kódu . Sekvence instrukcí se překládají ze zdrojové sady do cílové sady instrukcí. Binární překlad umožňuje spouštět aplikace jedné architektury, zatímco běží na druhé, a pro optimalizaci binárních kompilátorů je rychlost provádění kódu často vyšší než u originálu.

Binární překlad může být statický nebo dynamický. Dynamická kompilace probíhá neviditelně pro uživatele při spuštění aplikace. Statický kompilátor promění binární kód zdrojové architektury v hotovou plnohodnotnou aplikaci pro cílovou architekturu. Při statickém dynamickém překladu je celý zdrojový spustitelný soubor přeložen do spustitelného souboru pro cílovou architekturu. To je velmi obtížný úkol - provést tento překlad naprosto správně, protože ne veškerý kód překladatel okamžitě přečte. Například některé části spustitelného kódu jsou přístupné pouze prostřednictvím nepřímých skoků , jejichž parametry jsou známy pouze za běhu.

Na druhou stranu dynamický překlad bere v úvahu krátké sekvence kódu (obvykle základní blok : smyčku nebo metodu), překládá je a výslednou sekvenci ukládá do mezipaměti. Kód se nepřekládá celý, ale při čtení a tím i možnost jeho překladu a pro instrukce větve je v přeloženém kódu vytvořen kontrolní bod.

Dynamický binární překlad se od jednoduché emulace liší tím, že odstraňuje hlavní smyčku emulátoru čtení-dekódování-provádění (což je jeho hlavní úzké hrdlo) a platí za to velkou režii během procesu překladu. Tato režie (zatížení) je v budoucnu poněkud vyrovnána vzhledem k tomu, že přeložený kód bude proveden několikrát (tj. bez opětovného překladu).

Pokročilejší dynamické překladače používají dynamickou rekompilaci : překládaný kód je vybaven tak, aby zjistil „teplotu kódu“, tedy jaké fragmenty se spouštějí poměrně často, a aplikuje se na ně agresivní optimalizace . Tento přístup připomíná kompilátor JIT a v podstatě lze takové kompilátory (jako je technologie HotSpot od Sunu ) považovat za dynamické překladače z virtuální instrukční sady ( bytecode ) do skutečné.

Implementace

Apple implementoval emulátor překladu živého kódu M68K do své řady počítačů Macintosh s procesory PowerPC , které dosáhly velmi vysoké úrovně spolehlivosti, výkonu a kompatibility (viz emulátor Mac 68K ). To Applu umožnilo uvést na trh stroje pouze s částečně nativním operačním systémem a koncoví uživatelé mohli vyzkoušet novou, rychlejší architekturu, aniž by riskovali své investice do aktualizací softwaru. "Částečně", protože emulátor byl tak úspěšný, že mnoho částí operačního systému bylo nadále emulováno. Ke konečnému přechodu na nativní operační systém PowerPC došlo až po vydání Mac OS X (10.0) v roce 2001, ale v rámci tohoto nového operačního systému „ klasické “ běhové prostředí stále podporovalo emulaci schopností PowerPC Mac.

Apple později implementoval překladovou vrstvu Rosetta (obsaženou ve verzích Mac OS 10.4 ) pro Macy zaměřené na Intel, která byla použita pro usnadnění přechodu z PPC na x86, což je příklad dynamického překladu. Rosetta, vyvinutá pro Apple společností Transitive , je implementací řešení QuickTransit společnosti Transitive, které lze použít k dynamickému překladu mezi platformami založenými na architekturách SPARC, PowerPC, MIPS, Itanium a x86.

Technologie QuickTransit od Transitive využívaly také Sun ( SPARCx86 ), IBM (x86 → Power Architecture , PowerVM Lx86 ) a SGI ( MIPSItanium2 ) [1] .

DEC implementoval překladače pro migraci z architektury CISC VAX na architekturu RISC Alpha . DEC také implementoval binární překladač FX!32 pro převod aplikací architektury x86 na aplikace Alpha.

Překladač MCST Lintel umožňuje spouštět x86 aplikace na procesoru Elbrus 2000 (architektura e2k ).

Intel použil překladač Intel IA-32 EL ke spouštění 32bitových x86 aplikací na procesorech řady Itanium .


V lednu 2000 společnost Transmeta oznámila návrh aktualizovaného procesoru nazvaného Transmeta Crusoe [2] [3] . Jak vyplývá z FAQ [4] , s vestavěnou úrovní programu Code Morphing, která poskytuje dynamický binární překlad x86 instrukcí do instrukcí Crusoe.

HP ARIES ( Automatic Re-translation and Integrated Environment Simulation ) je  dynamický binární překladový systém, který kombinuje rychlou interpretaci kódu s dvoufázovým dynamickým překladem pro transparentní a přesné spouštění aplikací HP 9000 HP-UX na HP-UX 11i pro servery HP Integrity . Interpret ARIES emuluje celou sadu neprivilegovaných instrukcí PA-RISC bez zásahu uživatele, přičemž do kódu Itanium je překládán pouze často používaný kód - používá se dvoufázový dynamický překlad, při kterém se v prvním shromažďují informace o spouštěcím profilu. krok. ARIES ukládá dynamicky přeložený kód do vyrovnávací paměti nazývané mezipaměť kódu nebo mezipaměť fragmentů. Cílové bloky kódu, který se překládá, jsou označeny, aby bylo ve většině případů zajištěno spuštění v mezipaměti kódu. Po dokončení emulace ARIES zahodí veškerý přeložený kód, aniž by upravil původní aplikaci. Emulační jádro ARIES také implementuje emulaci prostředí, která emuluje systémová volání aplikací HP 9000 HP-UX , signalizaci, zpracování výjimek, vytváření vláken, emulaci HP GNU Debugger pro ladění a generování základních souborů pro aplikaci.

Čínské mikroprocesory řady Loongson využívají systém binárního překladu qemu s úpravami od výrobce procesorů ICT. Do procesoru architektury podobné MIPS bylo přidáno přibližně 200 instrukcí, aby se zjednodušila emulace x86.

Nejrozvinutějším dynamickým překladačem svobodného softwaru je QEMU . Podporuje překlad pro velké množství platforem a v jakékoli kombinaci emulovaných a emulovaných architektur.

Viz také

Poznámky

  1. Archivovaná kopie (odkaz není dostupný) . Získáno 1. srpna 2009. Archivováno z originálu dne 6. července 2009. 
  2. Ars Technica: Transmeta Crusoe Explored - Strana 1 - (1/2000) . Získáno 12. listopadu 2017. Archivováno z originálu 2. prosince 2017.
  3. ChipGeek – mikroprocesor Crusoe společnosti Transmeta
  4. Transmeta Corporation: crusoe

Literatura

Odkazy