Binäärikäännös

Binäärikäännös ( eng.  binary translation ) - yhden käskyjoukon emulointi toiseen konekoodin kääntämisen vuoksi . Käskysekvenssit käännetään lähdejoukosta käskyjen kohdejoukoksi. Binaarikäännös mahdollistaa yhden arkkitehtuurin sovellusten ajamisen toisessa, ja binäärikääntäjien optimoinnissa koodin suoritusnopeus on usein alkuperäistä nopeampi.

Binäärikäännös voi olla staattista tai dynaamista. Dynaaminen käännös tapahtuu käyttäjälle näkymättömästi, kun sovellus käynnistyy. Staattinen kääntäjä muuttaa lähdearkkitehtuurin binaarikoodin valmiiksi täysimittaiseksi sovellukseksi kohdearkkitehtuurille. Staattisessa dynaamisessa käännöksessä koko lähdesuoritettava tiedosto käännetään kohdearkkitehtuurin suoritustiedostoksi. Tämä on erittäin vaikea tehtävä - suorittaa tämä käännös täysin oikein, koska kääntäjä ei lue kaikkea koodia heti. Esimerkiksi jotkut suoritettavan koodin osat ovat käytettävissä vain epäsuorien hyppyjen kautta , joiden parametrit tunnetaan vain ajon aikana.

Toisaalta dynaaminen käännös ottaa huomioon lyhyet koodisekvenssit (yleensä peruslohko : silmukka tai menetelmä), kääntää sen ja tallentaa tuloksena olevan sekvenssin välimuistiin . Koodia ei käännetä kokonaisuudessaan, vaan sitä luettaessa ja vastaavasti sen kääntämisen mahdollisuus, ja haarakäskyjä varten käännettyyn koodiin luodaan tarkistuspiste.

Dynaaminen binaarikäännös eroaa yksinkertaisesta emuloinnista poistamalla tärkeimmän luku-dekoodaus-suorita -emulaattorisilmukan (joka on sen tärkein pullonkaula) ja maksaa tästä suurella lisäkululla käännösprosessin aikana. Tämä yläraja (kuorma) tasoittuu tulevaisuudessa jonkin verran, koska käännetty koodi suoritetaan useita kertoja (eli ilman uudelleenkääntämistä).

Edistyneemmät dynaamiset kääntäjät käyttävät dynaamista uudelleenkääntämistä : käännettävä koodi on instrumentoitu selvittämään "koodin lämpötila", eli mitkä fragmentit suoritetaan melko usein, ja niihin sovelletaan aggressiivista optimointia . Tämä lähestymistapa muistuttaa JIT - kääntäjää, ja pohjimmiltaan tällaisia ​​kääntäjiä (kuten Sunin HotSpot -tekniikkaa) voidaan pitää dynaamisina kääntäjinä virtuaalisesta käskyjoukosta ( tavukoodi ) todelliseen.

Toteutukset

Apple otti M68K live-koodin käännösemulaattorin käyttöön PowerPC- prosessoreilla varustetuissa Macintosh-tietokoneissaan , mikä saavutti erittäin korkean luotettavuuden, suorituskyvyn ja yhteensopivuuden (katso Mac 68K -emulaattori ). Tämä antoi Applelle mahdollisuuden tuoda markkinoille koneita vain osittain alkuperäisellä käyttöjärjestelmällä , ja loppukäyttäjät voivat kokeilla uutta, nopeampaa arkkitehtuuria vaarantamatta investointejaan ohjelmistopäivityksiin. "Osittain", koska emulaattori oli niin onnistunut, että monia käyttöjärjestelmän osia emuloitiin edelleen. Lopullinen siirtyminen alkuperäiseen PowerPC-käyttöjärjestelmään tapahtui vasta Mac OS X :n (10.0) julkaisussa vuonna 2001, mutta tässä uudessa käyttöjärjestelmässä " Classic " ajonaika tuki edelleen PowerPC Macin ominaisuuksien emulointia.

Apple otti myöhemmin käyttöön Rosetta-käännöskerroksen (sisältyy Mac OS 10.4 -julkaisuihin ) Intel-keskisille Maceille, jota käytettiin helpottamaan siirtymistä PPC:stä x86:een, esimerkkinä dynaamisesta käännöksestä. Transitiven Applelle kehittämä Rosetta on Transitiven QuickTransit -ratkaisun toteutus, jota voidaan käyttää dynaamiseen käännökseen SPARC-, PowerPC-, MIPS-, Itanium- ja x86-arkkitehtuureihin perustuvien alustojen välillä.

Sun ( SPARCx86 ), IBM (x86 → Power Architecture , PowerVM Lx86 ) ja SGI ( MIPSItanium2 ) [1] käyttivät myös Transitiven QuickTransit-tekniikkaa.

DEC toteutti kääntäjät siirtymään CISC VAX - arkkitehtuurista RISC Alpha - arkkitehtuuriin . DEC otti käyttöön myös FX!32 -binäärikääntäjän muuntaakseen x86 -arkkitehtuurisovellukset Alpha-sovelluksiksi.

MCST Lintel -kääntäjän avulla voit ajaa x86-sovelluksia Elbrus 2000 -prosessorilla ( e2k- arkkitehtuuri).

Intel käytti Intel IA-32 EL -kääntäjää ajaakseen 32-bittisiä x86-sovelluksia Itanium -perheen prosessoreissa .


Tammikuussa 2000 Transmeta ilmoitti suunnittelevansa päivitettyä prosessoria nimeltä Transmeta Crusoe [2] [3] . Kuten FAQ :sta [4] seuraa , sisäänrakennetulla Code Morphing -ohjelmatasolla, joka tarjoaa x86 - käskyjen dynaamisen binaarikäännöksen Crusoe-käskyiksi.

HP ARIES ( Automaattinen uudelleenkäännös ja integroitu ympäristösimulaatio ) on  dynaaminen binäärikäännösjärjestelmä, joka yhdistää nopean koodin tulkinnan kaksivaiheiseen dynaamiseen kääntämiseen, jotta HP 9000 HP-UX -sovelluksia voidaan ajaa läpinäkyvästi ja tarkasti HP-UX 11i: ssä HP Integrity -palvelimille . ARIES-tulkki emuloi kaikkia ei-etuoikeutettuja PA-RISC- ohjeita ilman käyttäjän väliintuloa, kun taas vain usein käytetty koodi käännetään Itanium -koodiksi - käytetään kaksivaiheista dynaamista käännöstä, jossa tiedot käynnistysprofiilista kerätään ensimmäisellä kerralla. askel. ARIES tallentaa dynaamisesti käännetyn koodin muistipuskuriin, jota kutsutaan koodivälimuistiksi tai fragmenttivälimuistiksi. Käännettävän koodin kohdelohkot on merkitty useimmissa tapauksissa koodivälimuistin suorittamisen varmistamiseksi. Kun emulointi on valmis, ARIES hylkää kaiken käännetyn koodin muuttamatta alkuperäistä sovellusta. ARIES-emulointimoottori toteuttaa myös Environment Emulationin, joka emuloi HP 9000 HP-UX -sovellusjärjestelmäkutsuja , signalointia, poikkeusten käsittelyä, ketjutusta, HP GNU Debugger -emulointia virheenkorjausta varten ja ydintiedostojen luomista sovellukselle.

Loongson- sarjan kiinalaiset mikroprosessorit käyttävät qemu-binäärikäännösjärjestelmää prosessorivalmistajan ICT:n muokkauksin. MIPS-tyyppiseen arkkitehtuuriprosessoriin on lisätty noin 200 käskyä x86-emuloinnin yksinkertaistamiseksi.

Kehitetyin ilmaisten ohjelmistojen dynaaminen kääntäjä on QEMU . Se tukee kääntämistä useille alustoille ja missä tahansa emuloitujen ja emuloitujen arkkitehtuurien yhdistelmässä.

Katso myös

Muistiinpanot

  1. Arkistoitu kopio (linkki ei saatavilla) . Haettu 1. elokuuta 2009. Arkistoitu alkuperäisestä 6. heinäkuuta 2009. 
  2. Ars Technica: Transmeta Crusoe Explored - Sivu 1 - (1/2000) . Haettu 12. marraskuuta 2017. Arkistoitu alkuperäisestä 2. joulukuuta 2017.
  3. ChipGeek - Transmetan Crusoe-mikroprosessori
  4. Transmeta Corporation: crusoe

Kirjallisuus

Linkit