Binær oversættelse ( eng. binær oversættelse ) - emulering af et sæt instruktioner på et andet på grund af oversættelse af maskinkode . Instruktionssekvenser oversættes fra kildesættet til målsættet af instruktioner. Binær oversættelse giver dig mulighed for at køre applikationer af én arkitektur, mens du kører på den anden, og for at optimere binære compilere er hastigheden af kodeudførelse ofte højere end originalen.
Binær oversættelse kan være statisk eller dynamisk. Dynamisk kompilering sker usynligt for brugeren, når applikationen starter. En statisk compiler gør kildearkitekturens binære kode til en færdiglavet fuldgyldig applikation til målarkitekturen. I statisk dynamisk oversættelse oversættes hele den eksekverbare kilde til en eksekverbar for målarkitekturen. Dette er en meget vanskelig opgave - at udføre denne oversættelse helt korrekt, da ikke al kode straks læses af oversætteren. For eksempel er nogle dele af den eksekverbare kode kun tilgængelige via indirekte spring , hvis parametre kun er kendt under kørsel.
På den anden side betragter dynamisk oversættelse korte sekvenser af kode (normalt en grundlæggende blok : en løkke eller en metode), oversætter den og cacher den resulterende sekvens. Koden oversættes ikke i sin helhed, men efterhånden som den læses og dermed muligheden for dens oversættelse, og for afdelingsinstruktioner oprettes et kontrolpunkt i den oversatte kode.
Dynamisk binær oversættelse adskiller sig fra simpel emulering ved at fjerne hovedlæse-afkode-eksekvere-emulatorsløjfen (som er dens vigtigste flaskehals), og betale for dette med en stor overhead under oversættelsesprocessen. Denne overhead (belastning) er noget udjævnet i fremtiden på grund af det faktum, at den oversatte kode vil blive udført flere gange (det vil sige uden genoversættelse).
Mere avancerede dynamiske oversættere bruger dynamisk rekompilering : koden, der oversættes, er instrumenteret til at finde ud af "kodetemperatur", det vil sige, hvilke fragmenter der udføres ret ofte, og aggressiv optimering anvendes på dem . Denne tilgang minder om en JIT - compiler, og i bund og grund kan sådanne compilere (såsom Suns HotSpot -teknologi) opfattes som dynamiske oversættere fra et virtuelt instruktionssæt ( bytecode ) til et rigtigt.
Apple implementerede M68K live - kodeoversættelsesemulatoren i sin serie af Macintosh-computere med PowerPC-processorer , som opnåede et meget højt niveau af pålidelighed, ydeevne og kompatibilitet (se Mac 68K-emulator ). Dette gjorde det muligt for Apple at bringe maskiner på markedet med kun et delvist oprindeligt operativsystem , og slutbrugere kunne prøve den nye, hurtigere arkitektur uden at risikere deres investering i softwareopdateringer. "Dels" fordi emulatoren var så vellykket, at mange dele af styresystemet fortsatte med at blive emuleret. Den endelige overgang til det oprindelige PowerPC-operativsystem fandt ikke sted før udgivelsen af Mac OS X (10.0) i 2001, men inden for dette nye OS understøttede " Classic " runtime stadig emulering af PowerPC Mac'ens muligheder.
Apple implementerede senere Rosetta-oversættelseslaget (inkluderet i Mac OS 10.4-udgivelser ) til Intel-centrerede Macs, som blev brugt til at lette overgangen fra PPC til x86, et eksempel på dynamisk oversættelse. Rosetta er udviklet til Apple af Transitive og er en implementering af Transitives QuickTransit -løsning , der kan bruges til dynamisk oversættelse mellem platforme baseret på SPARC-, PowerPC-, MIPS-, Itanium- og x86-arkitekturerne.
Sun ( SPARC → x86 ), IBM (x86 → Power Architecture , PowerVM Lx86 ) og SGI ( MIPS → Itanium2 ) [1] brugte også Transitives QuickTransit-teknologi.
DEC implementerede oversættere til at migrere fra CISC VAX- arkitekturen til RISC Alpha - arkitekturen . DEC implementerede også den binære FX!32 -oversætter til at konvertere x86- arkitekturapplikationer til Alpha-applikationer.
MCST Lintel- oversætteren giver dig mulighed for at køre x86-applikationer på Elbrus 2000 -processoren ( e2k- arkitektur).
Intel brugte Intel IA-32 EL-oversætteren til at køre 32-bit x86-applikationer på Itanium -familien af processorer .
I januar 2000 annoncerede Transmeta et design til en opdateret processor kaldet Transmeta Crusoe [2] [3] . Som følger af FAQ [4] , med det indbyggede Code Morphing-programniveau, som giver dynamisk binær oversættelse af x86 - instruktioner til Crusoe-instruktioner.
HP ARIES ( Automatic Re-translation and Integrated Environment Simulation ) er et dynamisk binært oversættelsessystem, der kombinerer hurtig kodefortolkning med to-faset dynamisk oversættelse til transparent og præcis kørsel af HP 9000 HP-UX-applikationer på HP-UX 11i til HP Integrity -servere . ARIES-fortolkeren emulerer det fulde sæt af ikke-privilegerede PA-RISC- instruktioner uden brugerindblanding, mens kun hyppigt brugt kode oversættes til Itanium -kode - to-faset dynamisk oversættelse bruges, hvor information om lanceringsprofilen indsamles i den første trin. ARIES gemmer dynamisk oversat kode i en hukommelsesbuffer kaldet kodecachen eller fragmentcachen. Målblokkene med kode, der bliver oversat, er markeret for at sikre eksekvering i kodecachen i de fleste tilfælde. Når emuleringen er færdig, kasserer ARIES al oversat kode uden at ændre den originale applikation. ARIES-emuleringsmotoren implementerer også Environment Emulation, som emulerer HP 9000 HP-UX- applikationssystemkald , signalering, undtagelseshåndtering, threading, HP GNU Debugger -emulering til debugging og generering af kernefiler til applikationen.
Kinesiske mikroprocessorer i Loongson -serien bruger det binære oversættelsessystem qemu med modifikationer fra processorproducenten ICT. Cirka 200 instruktioner er blevet tilføjet til den MIPS-lignende arkitekturprocessor for at forenkle x86-emulering.
Den mest udviklede gratis software dynamiske oversætter er QEMU . Det understøtter oversættelse til et stort antal platforme og i enhver kombination af emulerede og emulerede arkitekturer.