Traducere binară

Traducere binară ( eng.  traducere binară ) - emularea unui set de instrucțiuni pe altul datorită traducerii codului mașină . Secvențele de instrucțiuni sunt traduse din setul sursă în setul țintă de instrucțiuni. Traducerea binară vă permite să rulați aplicații cu o arhitectură în timp ce rulați pe a doua, iar pentru optimizarea compilatoarelor binare, viteza de execuție a codului este adesea mai mare decât cea originală.

Traducerea binară poate fi statică sau dinamică. Compilarea dinamică se întâmplă în mod invizibil pentru utilizator atunci când pornește aplicația. Un compilator static transformă codul binar al arhitecturii sursă într-o aplicație completă gata făcută pentru arhitectura țintă. În traducerea dinamică statică, întregul executabil sursă este tradus într-un executabil pentru arhitectura țintă. Aceasta este o sarcină foarte dificilă - pentru a efectua această traducere în mod absolut corect, deoarece nu tot codul este citit imediat de traducător. De exemplu, unele părți ale codului executabil sunt accesibile doar prin salturi indirecte , ai căror parametri sunt cunoscuți doar în timpul execuției.

Pe de altă parte, traducerea dinamică ia în considerare secvențe scurte de cod (de obicei un bloc de bază : o buclă sau o metodă), îl traduce și memorează în cache secvența rezultată. Codul nu este tradus în întregime, ci pe măsură ce este citit și, în consecință, posibilitatea de traducere a acestuia, iar pentru instrucțiunile de ramură este creat un punct de control în codul tradus.

Traducerea binară dinamică diferă de emularea simplă prin eliminarea buclei principale de emulator de citire-decodare-execuție (care este principalul blocaj al acesteia), plătind pentru aceasta cu o suprasarcină mare în timpul procesului de traducere. Această suprasarcină (încărcare) este oarecum nivelată în viitor datorită faptului că codul tradus va fi executat de mai multe ori (adică fără retraducere).

Traducătorii dinamici mai avansați folosesc recompilarea dinamică : codul care este tradus este instrumentat pentru a afla „temperatura codului”, adică ce fragmente sunt executate destul de des și li se aplică o optimizare agresivă . Această abordare amintește de un compilator JIT și, în esență, astfel de compilatoare (cum ar fi tehnologia Sun HotSpot ) pot fi considerate ca traducători dinamici de la un set de instrucțiuni virtuale ( bytecode ) la unul real.

Implementări

Apple a implementat emulatorul de traducere a codului live M68K în linia sa de computere Macintosh cu procesoare PowerPC , care a atins un nivel foarte ridicat de fiabilitate, performanță și compatibilitate (vezi emulator Mac 68K ). Acest lucru a permis Apple să introducă pe piață mașini cu doar un sistem de operare nativ parțial , iar utilizatorii finali au putut încerca noua arhitectură, mai rapidă, fără a-și risca investiția în actualizări de software. „Parțial” pentru că emulatorul a avut atât de mult succes încât multe părți ale sistemului de operare au continuat să fie emulate. Tranziția finală la sistemul de operare nativ PowerPC nu a avut loc până la lansarea Mac OS X (10.0) în 2001, dar în cadrul acestui nou sistem de operare, runtime -ul „ Classic ” încă mai suporta emularea capabilităților PowerPC Mac.

Ulterior, Apple a implementat stratul de traducere Rosetta (inclus în versiunile Mac OS 10.4 ) pentru Mac-urile centrate pe Intel, care a fost folosit pentru a ușura tranziția de la PPC la x86, un exemplu de traducere dinamică. Dezvoltat pentru Apple de Transitive , Rosetta este o implementare a soluției QuickTransit de la Transitive, care poate fi folosită pentru a traduce dinamic între platforme bazate pe arhitecturile SPARC, PowerPC, MIPS, Itanium și x86.

Sun ( SPARCx86 ), IBM (x86 → Power Architecture , PowerVM Lx86 ) și SGI ( MIPSItanium2 ) [1] au folosit de asemenea tehnologia QuickTransit de la Transitive.

DEC a implementat traducători pentru a migra de la arhitectura CISC VAX la arhitectura RISC Alpha . DEC a implementat, de asemenea, traducătorul binar FX!32 pentru a converti aplicațiile de arhitectură x86 în aplicații Alpha.

Translatorul MCST Lintel vă permite să rulați aplicații x86 pe procesorul Elbrus 2000 (arhitectura e2k ).

Intel a folosit traducătorul Intel IA-32 EL pentru a rula aplicații x86 pe 32 de biți pe familia de procesoare Itanium .


În ianuarie 2000, Transmeta a anunțat un design pentru un procesor actualizat numit Transmeta Crusoe [2] [3] . După cum urmează din Întrebări frecvente [4] , cu nivelul de program Code Morphing încorporat, care oferă traducere binară dinamică a instrucțiunilor x86 în instrucțiuni Crusoe.

HP ARIES ( Automatic Re-translation and Integrated Environment Simulation ) este un  sistem dinamic de traducere binară care combină interpretarea rapidă a codului cu traducerea dinamică în două faze pentru a rula în mod transparent și precis aplicațiile HP 9000 HP-UX pe HP-UX 11i pentru serverele HP Integrity . Interpretul ARIES emulează setul complet de instrucțiuni PA-RISC neprivilegiate fără intervenția utilizatorului, în timp ce numai codul folosit frecvent este tradus în cod Itanium - se folosește traducerea dinamică în două faze, în care informațiile despre profilul de lansare sunt colectate în prima. Etapa. ARIES stochează codul tradus dinamic într-un buffer de memorie numit cache de cod sau cache de fragmente. Blocurile de cod țintă care sunt traduse sunt marcate pentru a asigura execuția în memoria cache a codului în majoritatea cazurilor. Când emularea este completă, ARIES renunță la tot codul tradus fără a modifica aplicația originală. Motorul de emulare ARIES implementează, de asemenea, Environment Emulation, care emulează apelurile de sistem ale aplicației HP 9000 HP-UX , semnalizarea, gestionarea excepțiilor, threadingul, emularea HP GNU Debugger pentru depanare și generarea de fișiere de bază pentru aplicație.

Microprocesoarele chineze din seria Loongson folosesc sistemul de traducere binară qemu cu modificări de la producătorul procesorului ICT. Aproximativ 200 de instrucțiuni au fost adăugate procesorului cu arhitectură asemănătoare MIPS pentru a simplifica emularea x86.

Cel mai dezvoltat traducător dinamic software gratuit este QEMU . Acceptă traducerea pentru un număr mare de platforme și în orice combinație de arhitecturi emulate și emulate.

Vezi și

Note

  1. Copie arhivată (link nu este disponibil) . Preluat la 1 august 2009. Arhivat din original la 6 iulie 2009. 
  2. Ars Technica: Transmeta Crusoe Explored - Pagina 1 - (1/2000) . Consultat la 12 noiembrie 2017. Arhivat din original la 2 decembrie 2017.
  3. ChipGeek - Microprocesorul Crusoe al Transmeta
  4. Transmeta Corporation: crusoe

Literatură

Link -uri