Binær oversættelse - Binary translation

I computing , binær oversættelse er en form for binær genkompilering hvor sekvenserne af instruktioner translateres fra en kilde instruktionssæt til mål- instruktionssæt. I nogle tilfælde, såsom simulering af instruktions-sæt, kan målinstruktions-sættet være det samme som kildeinstruktions-sæt, hvilket giver test- og fejlfindingsfunktioner såsom instruktionssporing, betingede breakpoints og hot spot- detektion.

De to hovedtyper er statisk og dynamisk binær oversættelse. Oversættelse kan udføres i hardware (for eksempel ved kredsløb i en CPU ) eller i software (f.eks. Kørselsmotorer, statisk recompiler, emulatorer).

Motivering

Binær oversættelse er motiveret af mangel på en binær til en målplatform, manglen på kildekode til kompilering til målplatformen eller på anden måde vanskeligheder med at kompilere kilden til målplatformen.

Statisk rekompilerede binære filer kører potentielt hurtigere end deres respektive emulerede binære filer, da emuleringsomkostningerne fjernes. Dette svarer til forskellen i ydeevne mellem fortolkede og kompilerede programmer generelt.

Statisk binær oversættelse

En oversætter, der bruger statisk binær oversættelse, har til formål at konvertere al koden i en eksekverbar fil til kode, der kører på målarkitekturen uden at skulle køre koden først, som det gøres i dynamisk binær oversættelse. Dette er meget vanskeligt at gøre korrekt, da ikke alle koder kan blive opdaget af oversætteren. For eksempel kan nogle dele af den eksekverbare kun være tilgængelig via indirekte grene , hvis værdi kun er kendt ved kørselstid.

Et sådant statisk binær oversætter bruger universel superoptimizer kighul teknologi (udviklet af Sorav Bansal , og Alex Aiken fra Stanford University ) til at udføre effektiv oversættelse mellem muligvis mange kilde- og mål-par, med omkostningerne meget lave udviklingsomkostninger og høj ydeevne af målet binære. I eksperimenter med PowerPC-til-x86-oversættelser overgik nogle binære filer endda native versioner, men i gennemsnit kørte de med to tredjedele af den oprindelige hastighed.

Eksempler på statiske binære oversættelser

Honeywell leverede et program kaldet Liberator til deres Honeywell 200- serie af computere; det kunne oversætte programmer til IBM 1400-serien af computere til programmer til Honeywell 200-serien.

I 2014 blev en ARM-arkitekturversion af videospillet StarCraft fra 1998 genereret ved statisk rekompilering og yderligere reverse engineering af den originale x86- version. Den Pandora håndholdte samfund var i stand til at udvikle de nødvendige værktøjer på egen hånd og opnå sådanne oversættelser med succes flere gange.

F.eks. Blev der genereret en vellykket x86-til- x64 statisk rekompilering til den processuelle terrængenerator af videospillet Cube World i 2014.

Et andet eksempel er NES -to- x86 statisk genkompileret version af videospillet Super Mario Bros., som blev genereret under brug af LLVM i 2013.

I 2004 udviklede Scott Elliott og Phillip R. Hutchinson hos Nintendo et værktøj til at generere "C" -kode fra Game Boy- binær, som derefter kunne kompileres til en ny platform og kobles til et hardwarebibliotek til brug i flyselskabers underholdningssystemer.

I 1995 udviklede Norman Ramsey ved Bell Communications Research og Mary F. Fernandez ved Institut for Computervidenskab, Princeton University The New Jersey Machine-Code Toolkit, der havde de grundlæggende værktøjer til oversættelse af statisk samling.

Dynamisk binær oversættelse

Dynamisk binær oversættelse (DBT) ser på en kort sekvens med kode - typisk i rækkefølgen af ​​en enkelt grundlæggende blok - derefter oversætter den og cachelagrer den resulterende sekvens. Kode oversættes kun, som den bliver opdaget, og når det er muligt, og greninstruktioner foretages for at pege på allerede oversat og gemt kode ( memoization ).

Dynamisk binær oversættelse adskiller sig fra simpel emulering (eliminerer emulatorens hoved-læs-dekod-udfør-sløjfe - en stor præstationsflaskehals) og betaler for dette med store omkostninger under oversættelsestiden. Denne overhead afskrives forhåbentlig, da oversatte kodesekvenser udføres flere gange.

Mere avancerede dynamiske oversættere anvender dynamisk rekompilering, hvor den oversatte kode er instrumenteret til at finde ud af, hvilke dele der udføres et stort antal gange, og disse dele optimeres aggressivt. Denne teknik minder om en JIT-compiler , og i virkeligheden sådanne compilere (f.eks Sun 's HotSpot teknologi) kan ses som dynamiske oversættere fra et virtuelt instruktionssæt (den bytekode ) til en rigtig én.

Eksempler på dynamiske binære oversættelser i software

  • Apple Computer implementeret en dynamisk oversætte emulator til m68k kode i deres PowerPC linje af Macintosh , der opnåede et meget højt niveau af pålidelighed, ydeevne og kompatibilitet (se Mac 68K emulator ). Dette tillod Apple at bringe maskinerne på markedet med kun et delvis oprindeligt operativsystem , og slutbrugere kunne vedtage den nye, hurtigere arkitektur uden at risikere deres investering i software. Dels fordi emulatoren var så succesrig, forblev mange dele af operativsystemet emuleret. En fuld overgang til et PowerPC- operativsystem (OS) blev ikke foretaget før frigivelsen af Mac OS X (10.0) i 2001. (Mac OS X " Classic " runtime-miljøet fortsatte med at tilbyde denne emuleringsfunktion på PowerPC Mac'er indtil Mac OS X 10.5 .)
  • Mac OS X 10.4.4 til Intel-baserede Mac-computere introducerede det dynamiske Rosetta- oversættelseslag for at lette Apples overgang fra PPC-baseret hardware til x86. Rosetta-softwaren er udviklet til Apple af Transitive Corporation og er en implementering af Transitive's QuickTransit- løsning.
  • QuickTransit i løbet af produktets levetid leverede også SPARCx86 , x86 → PowerPC og MIPSItanium 2 oversættelsessupport.
  • DEC opnåede lignende succes med sine oversættelsesværktøjer til at hjælpe brugere med at migrere fra CISC VAX- arkitekturen til Alpha RISC- arkitekturen.
  • HP ARIES (Automatic Re-translation and Integrated Environment Simulation) er et softwaredynamisk binært oversættelsessystem, der kombinerer hurtig kodetolkning med tofaset dynamisk oversættelse for at udføre transparent og præcis HP 9000 HP-UX- applikationer på HP-UX 11i til HPE Integrity-servere . ARIES hurtige tolk emulerer et komplet sæt ikke-privilegerede PA-RISC instruktioner uden brugerintervention. Under fortolkningen overvåger det applikationens eksekveringsmønster og oversætter kun den ofte udførte kode til native Itanium- kode ved kørsel. ARIES implementerer dynamisk to-faset oversættelse, en teknik, hvor oversat kode i første fase indsamler runtime-profilinformation, der bruges under anden fase oversættelse for yderligere at optimere den oversatte kode. ARIES gemmer den dynamisk oversatte kode i hukommelsesbuffer kaldet kodecache. Yderligere referencer til oversatte grundlæggende blokke udføres direkte i kodecachen og kræver ikke yderligere fortolkning eller oversættelse. Målene for oversatte kodeblokke er back-patched for at sikre, at udførelsen finder sted i kodecache det meste af tiden. I slutningen af ​​emuleringen kasserer ARIES al den oversatte kode uden at ændre den oprindelige applikation. ARIES-emuleringsmotoren implementerer også miljøemulering, der emulerer et HP 9000 HP-UX- applikations systemopkald, signallevering, undtagelsesadministration, trådstyring, emulering af HP GDB til debugging og oprettelse af kernefiler til applikationen.
  • DEC oprettede FX! 32 binær oversætter til konvertering af x86 applikationer til Alpha applikationer.
  • Sun Microsystems ' Wabi- software inkluderede dynamisk oversættelse fra x86 til SPARC-instruktioner.
  • I januar 2000 annoncerede Transmeta Corporation et nyt processordesign ved navn Crusoe . Fra ofte stillede spørgsmål på deres websted

    Den smarte mikroprocessor består af en hardware- VLIW- kerne som motor og et softwarelag kaldet Code Morphing-software. Code Morphing-softwaren fungerer som en shell [...] morphing eller oversættelse af x86- instruktioner til native Crusoe-instruktioner. Derudover indeholder Code Morphing-softwaren en dynamisk kompilator og kodeoptimering [...] Resultatet er øget ydeevne med mindst mulig effekt. [...] [Dette] giver Transmeta mulighed for at udvikle VLIW-hardware og Code Morphing-software separat uden at påvirke den enorme base af softwareapplikationer.

  • Intel Corporation udviklede og implementerede et IA-32 Execution Layer - en dynamisk binær oversætter designet til at understøtte IA-32 applikationer på Itanium- baserede systemer, som blev inkluderet i Microsoft Windows Server til Itanium- arkitektur såvel som i flere varianter af Linux , herunder Red Hat og Suse . Det tillod IA-32-applikationer at køre hurtigere, end de ville bruge den oprindelige IA-32-tilstand på Itanium-processorer.
  • Dolphin (en emulator til GameCube / Wii ) udfører JIT-rekompilering af PowerPC-kode til x86 og AArch64.

Eksempler på dynamiske binære oversættelser i hardware

  • x86 Intel-CPU'er siden Pentium Pro oversætter komplekse CISC x86-instruktioner til mere RISC- lignende interne mikrooperationer .
  • Nvidia Tegra K1 Denver oversætter ARM- instruktioner over en langsom hardwaredekoder til dens oprindelige mikrokodeinstruktioner og bruger en binær softwareoversætter til hot code.

Se også

Referencer

Yderligere læsning