Emulátor

Az emulátor egy olyan számítógépes program vagy hardver, ami más programoknak vagy eszközöknek a környezetét (vagy annak részét) „szimulálja”, vagyis lehetővé teszik az adott rendszerrel nem kompatibilis programok (vagy operációs rendszerek) vagy számítógépek futtatását. Természetesen (a szükséges átalakítások miatt) az emulátorok néha lassabban működnek, mint az eredeti környezet. Tesztelésre is ideálisak lehetnek az emulátorok, mivel hiba esetén csak az álkörnyezet fagy le és nem kell újraindítani a teljes rendszert.

A számítástechnikában az emulátor egy olyan hardver, szoftver vagy mindkettő, amely lemásolja ill. utánozza (emulálja) egy kiinduló számítástechnikai rendszer funkcióit egy második, eltérő számítógépes rendszeren, úgy, hogy a második rendszer viselkedése minél jobban megközelítse a kiinduló rendszer viselkedését. A hangsúly a külső viselkedés pontos visszaadásán van, ellentétben a szimulációval, amelyben egy rendszer absztrakt modelljét állítják elő. Emiatt például egy hurrikán vagy kémiai reakció szimulációja nem emuláció.

Az emulátor leggyakrabban tehát egy olyan program, amely más rendszereket vagy konkrét gépeket "utánoz", például játékkonzolokat. Az emulátorok megpróbálják értelmezni vagy végrehajtani az eredeti szoftver kódját az adott rendszeren. A kártyával (cartridge) működő játékkonzolok játékai úgynevezett ROM fájlokban, míg a lemezes adattárolást használó játékkonzolok (pl. Nintendo GameCube, PlayStation) szoftverei lemezképfájlokban vannak eltárolva.

Néhány tipikus alkalmazás 

 Más operációs rendszer alá írt programok futtatása (pl. Linux alatti wine Windows-os programok futtatásához)
 Az új operációs rendszer alatt egyes régebbi programok használatára is szükség van (pl. Windows vagy Linux alatti DOS emulátor)
 A hardver fejlődése miatt egyes régi gépeken működő operációs rendszer és szoftver már nem működik az új számítógépeken (pl. Solaris 10 alatt un. branded zóna létesíthető régebbi változatok (Solaris 8 és 9) számára)
 Virtualizáció (pl. vmware, vagy Solaris 10 alatti zónák, amikben egy gépen több solaris 10-es rendszer futhat, mintha külön számítógépek lennének)

Emulátorok a számítástechnikában 

Az emuláció azt jelenti, hogy egy adott számítógépen futó program képes egy másik programkódot végrehajtani vagy egy másik eszköz működését pontosan visszaadni, utánozni. Például sok nyomtató a Hewlett-Packard LaserJet nyomtató viselkedését emulálja, a HP nyomtatókhoz írt nagy mennyiségű szoftver miatt. Amikor egy nem-HP nyomtató egy HP nyomtatót emulál, az összes valódi HP nyomtatókra írt program működni fog az emulált környezetben és ugyanazt a nyomtatási eredményt állítja elő.

A hardver-emulátor (hardware emulator) egy hardvereszközzel megvalósított emulátor. Ilyen emulátorok például a régi DOS-kompatibilis Macintosh gépekbe (pl. Centris 610 vagy Performa 630) épített DOS bővítőkártyák, amelyek lehetővé tették PC (DOS) környezetre készült programok futtatását ezeken a gépeken; vagy újabban az FPGA-kkal felépített hardveremulátorok.

Elméleti értelemben a Church-Turing tézisből következik, hogy bármilyen operációs környezetben emulálható bármely másik operációs környezet. A gyakorlatban azonban ezt elég nehéz lehet megvalósítani, különösen akkor, ha az emulálni szándékozott rendszer nincs kellően dokumentálva és a működését visszafejtéssel kell kikövetkeztetni. Az állítás semmit sem mond az időbeli viselkedésről; ha az emulátor működése lassabb az eredeti hardveren működő rendszernél, akkor az emulált szoftver is lassabban fut az eredetinél, így az időzítések gyakran eltérnek attól, ami teljesítménybeli vagy működési hibákat okozhat.

Az emuláció szerepe a digitális megőrzésben 

Az emuláció a digitális megőrzés egyik módszere a technikai elavulás elleni küzdelemben. Az emuláció az eredeti számítástechnikai környezet újraalkotására helyezi a hangsúlyt, ami gyakran időigényes és nehezen elérhető cél, azonban igen értékes, mert ez a technika sokkal közelebbi ill. szorosabb kapcsolatot biztosít az eredeti digitális objektumokhoz.

Az emuláció a digitális objektum eredeti hardver- és szoftverkörnyezetét célozza és építi fel újra egy aktuális, újabb számítógépen.
Az emulátor használata esetén a felhasználó használhatja az aktuális (jelenlegi, modern) számítástechnikai platformon elérhető operációs rendszert vagy bármely alkalmazást, miközben az emulált szoftver az eredeti környezetében megszokott módon működik.

Jeffery Rothenberg, a digitális megőrzési stratégia korai előterjesztőjének állítása szerint „az ideális megközelítés egyetlen kiterjeszthető és hosszútávú megoldást ad, amelyet csak egyszer kell megtervezni, és egységesen, automatikusan és kellő időben (pl. minden frissítési ciklusban) alkalmazható az összes dokumentum- és médiatípusra.”
Továbbá kijelenti, hogy ez a módszer nem csak a kiöregedő rendszerek esetében használható, hanem működik a jövőbeli ismeretlen rendszerek irányában is.
A gyakorlatban ez azt jelenti, hogy egy adott alkalmazás új verziójának megjelenésekor a korábbi változat által létrehozott digitális objektumok kompatibilitási és migrációs kérdéseinek megoldása helyett létrehozható az alkalmazás egy emulátora, amely lehetővé teszi a hozzáférést a szóban forgó digitális objektumokhoz.

Előnyök
 Az emulátorok fenntartják a digitális objektumok eredeti kinézetét és viselkedését, amely éppen olyan fontos, mint maga a digitális adat.
 Egy emulátor kifejlesztése költséges, hosszú időt tekintve mégis ez a legkifizetődőbb megoldás.
 A módszer csökkenti a digitális objektumok kezelésére fordított munkát, mivel megszünteti a folyamatos konvertálást: egy adott emulátorban realizált technológia folyamatosan alkalmazható az emulált platform összes dokumentumára.
 Sok emulátor készült és érhető el szabad szoftverként, GNU General Public License hatálya alatt, ami lehetővé teszi a széles körű együttműködést a fejlesztésben és felhasználásban.
 Az emulátorok lehetővé teszik a kizárólag egyetlen rendszerre írt videójátékok használatát más rendszereken is. Például egy kizárólag PlayStation 2 videójáték emulátor használatával (elméletileg) játszhatóvá válik PC vagy Xbox 360 gépeken.

Akadályok
 Szellemi tulajdon – Több technológiaszállító alkalmaz nem szabványos, egyedi megoldásokat a programfejlesztés során, a piaci jelenlét megszerzése vagy növelése érdekében, miközben folyamatos frissítéseket bocsát ki a versenyképesség fenntartása miatt. Ez jó hatással lehet a technológia fejlődésére és a szállító piaci részesedésére, azonban a felhasználók számára rémálommá válik az adatok megőrzése, miközben a hardver és szoftver védett jellege miatt kevés a támogató dokumentáció.
 Szerzői jog – Az egyedi fejlesztésű szoftver- és hardverspecifikációk és dokumentáció megőrzése egy emulátor-modulban nem esnek a szerzői jog hatálya alá.

Emulátorok az új médiaművészetben
Az új médiaművészet (new media art) elsősorban digitális formátumokat alkalmaz, emiatt erősen támaszkodik az emulációra mint megőrzési stratégiára. Cory Arcangel és hasonló művészek elavult technológiák feltámasztását alkalmazzák műveikben és kiállnak a digitális művészet decentralizált és nem-intézményesített módon való megőrzésének fontossága mellett.

Az új médiaművészetben az emulációt leginkább a digitális médium megőrzése céljából alkalmazzák, hogy az korlátlanul elmenthető és hibamentesen reprodukálható legyen, tehát ne támaszkodjon valamilyen adott fizikai hordozóra vagy hardverre, ami idővel tönkremehet vagy elavulhat. Érdekes ellentmondás, hogy az alkalmazott emulációnak és emulátoroknak jövőbeli számítógépeken kell működniük, tehát jelenleg még nemlétező gépekre kell el/felkészülniük.

Emuláció a jövőbeli rendszerek tervezésében
Új rendszerek tervezése és fejlesztése alatt gyakran használnak emulációs technikákat. Ez megkönnyíti a fejlesztési folyamatot, mivel lehetővé teszi a tervezési hibák korai felismerését és azok kijavítását még az adott rendszer elkészülése előtt.
Ez különösen hasznos a többmagos rendszerek tervezésénél, ahol nehezen detektálható konkurenciahibák jelentkezhetnek, amelyeket igen nehéz lehet javítani a virtuális hardver által biztosított kontrollált környezet nélkül.
Az emuláció lehetővé teszi a szoftverfejlesztést is a tervezés alatt álló, tehát fizikailag nemlétező hardverre, ami segítséget nyújthat a tervezési döntések értékelésében is.

Az emulátorok fajtáiról

A legtöbb emulátor csak a hardveres architektúrát (hardverfelépítést) emulálja – ha a futtatni kívánt szoftverhez operációs rendszer, firmware vagy egyéb további szoftver szükséges, akkor azt külön biztosítani kell, és azok is emulálhatók. Mind az operációs rendszert, mind a szoftvert az emulátor értelmezi (értelmező segítségével futtatja), mivel ekkor a kód nem a natív hardveren fut. Az emulált bináris gépi nyelv értelmezője (interpretere) mellett szükség van egyéb hardverelemek, pl. be- és kimeneti eszközök, jelenlétére is virtuális formában. Például ha egy adott memóriahely írása befolyásolja a megjelenő képet, akkor ezt a kapcsolatot is emulálni kell.

Bár az emuláció szélsőséges esetben elérheti a legalsó elemi szintet, tehát kiszámítható az eredeti hardver áramköreinek működése és az emulátor által mutatott működés alapulhat ezen az alacsony szintű szimuláción is, ez a gyakorlatban egy nagyon szokatlan megoldás lenne. Az emulátorok általában a csak a dokumentált hardverspecifikációk és a digitális logika szintjéig mennek el a szimulációban. Bizonyos hardverplatformok megfelelő emulációja rendkívüli pontosságot igényel, gyakran szükség lehet akár a különálló órajelciklusok, a nem dokumentált tulajdonságok, kiszámíthatatlan analóg elemek és a végrehajtási hibák pontos visszaadására is. Pontosan ez a helyzet a klasszikus otthoni számítógépek esetén; erre példa, hogy a Commodore 64 gépre írt programok működése gyakran az intuitív játék- és demo-programozók által feltalált rendkívül kifinomult alacsony szintű programozási trükköktől függ.

Ezzel ellentétben, léteznek más hardverplatformok, amelyek sokkal kevésbé használják a hardver közvetlen elérését. Ezekben az esetekben elegendő lehet egy egyszerű kompatibilitási réteg, amely az eredeti rendszerhívásokat a gazdarendszerben található rendszerhívásokká fordítja az emulált rendszer számára, ilyen pl. a *BSD Linux kompatibilitási rétege, amit a FreeBSD, NetBSD és OpenBSD rendszerekben a zárt forrású natív Linux szoftverek futtatására használnak.

Beágyazott rendszerek szoftverei vagy videójátékok fejlesztése során gyakran különösen pontos, szimulátornak nevezett emulátorokat használnak, ezeken futtatják és tesztelik a programokat, még a valódi hardveren való kipróbálás előtt. Ez előnyös, mivel a szoftver elkészíthető és tesztelhető, mielőtt a végleges hardver nagyobb mennyiségben rendelkezésre állna, a tesztelés során nem kell azt a hardverre másolni, a hibakeresés (debug) alacsony szinten történhet, a hibakereső szoftver (debugger) mellékhatásainak figyelembevétele nélkül. Sok esetben a szimulátort a hardvergyártó készíti, ami elméletileg (illetve elvárható módon) növeli annak pontosságát.

A matematikai koprocesszor-emulátorok lehetővé teszik a matematikai utasításokat tartalmazó programok futtatását olyan gépeken is, amelyek nem rendelkeznek matematikai koprocesszorral, ilyenkor azonban a számításokat a fő processzor végzi, ami lassítja a rendszer működését. A koprocesszor hiánya esetén (a gépben nincs installált különálló vagy CPU-ba integrált koprocesszor) mikor a CPU-ba megkezdi egy koprocesszor-utasítás végrehajtását, ez az esemény egy meghatározott megszakítást okoz (példa: a Motorola 68000 processzor „1010 kód emulátor” és „1111 kód emulátor” megszakításai), ezután a megszakításkezelő a matematikai koprocesszor-emulátor rutinjai segítségével elvégzi a műveletet. Mikor ez sikeresen megtörtént, folytatódik a program végrehajtása.

Emuláció kontra szimuláció 
A „emulátor” szót az IBM-nél alkották meg 1963-ban az NPL (IBM 360) termékcsalád fejlesztése során, miközben „a szoftver, mikrokód és hardver új kombinációját” alkalmazták a működés felgyorsítására. A IBM-nél nagy hangsúlyt kapott az az elv, hogy a hardveres változások során a programok minden változtatás nélkül futtathatóak maradjanak. Ezt a célt az újabb rendszereken gyakran szoftveres szimulációval érték el, ami viszont lassította a programok végrehajtását. Felfedezték, hogy a szimuláció sebessége mikrokódolt hardver használatával drasztikusan felgyorsítható. 1957-ben az IBM az IBM 709, majd később az IBM 7090 gépet is egy interpreter programmal látta el, hogy az képes legyen futtatni az „örökölt”, IBM 704 gépre írt programokat. 1963-ban használták először a mikrokódos gyorsítást a szimulációhoz, ekkor alkották az IBM mérnökei a kifejezést az új elv leírására, rátalálva a létező „emuláció” kifejezésre. A szó latin eredetű, jelentése kb.: törekvés valaki utolérésére vagy meghaladására.

Az „emuláció” szó szoftveres értelemben való használata csak nemrégiben terjedt el. 1980 előtt a szót csak a mikrokóddal segített hardveres működésre használták, és a „szimuláció” a tiszta szoftveres megoldást jelentette. Ezek szerint egy számítógép, amelyet külön arra terveztek, hogy egy másik architektúrára írt programokat futtasson, az egy emulátor, ellenben a szimulátor pl. lehet egy személyi számítógépen futó program, amely lehetővé teszi régi Atari játékok futtatását. A puristák továbbra is ragaszkodnak az elméleti különbségtételhez, de jelenleg az „emuláció” leggyakrabban egy teljes gép és az azon futó bináris kód végrehajtásának utánzását jelenti.

Játékkonzol-emulátorok

Sony

PlayStation

PlayStation 2

PlayStation Portable

Nintendo

videójáték-konzolok

Nintendo Entertainment System

Super Nintendo Entertainment System

Nintendo 64

GameCube

Wii

kézikonzolok

Game Boy és Game Boy Color

Game Boy Advance

Nintendo DS

Sega

Master System

Sega Genesis / Sega CD / Sega 32X

Sega Saturn

Sega Dreamcast

Microsoft

Xbox emulátorok 
 Xeon
 Cxbx

Egyéb emulátorok 
 Bochs - x86 PC emulátor
 DOSBox - DOS alapú x86 PC emulátor
 Dosemu - DOS alapú x86 PC emulátor
 FreeSCI - SCI-alapú játékok emulátora
 QEMU - többfajta architektúra emulátora
 ScummVM - Scumm-alapú játékok emulátora
 Wine - Windows alapú szoftver Unix alapú rendszeren való futtatásához
 Hercules emulátor – IBM nagyszámítógép emulátor, multiplatformos, IBM System/370, System/390, zSeries/System z és egyéb kompatibilis (pl. Amdahl) gépeket emulál
 SoftMac emulátorcsalád – Macintosh gépek emulációja Windows környezetben

Néhány emulátorok által használt fájlkiterjesztés 
A régebbi játékkonzolok programjai leginkább csak-olvasható formában – kazettákon, CD-ROM-on – kerültek forgalomba. A játékok / programok ROM-kép formában archiválhatóak; a játékkonzol-emulátorok általában ilyen ROM-kép fájlokat használnak, amelyek sok eltérő fájlformátumban és kiterjesztéssel érhetők el. Ezek általában jogvédett programokat vagy egyéb alkotásokat tartalmaznak, ezért terjesztésük gyakran jogi akadályokba ütközik.

Néhány közismert fájlkiterjesztés:

 .a26 – Atari 2600 játékkazetta
 .bin – bináris állomány, több emulátor is használja
 .cdi – DiscJuggler szoftverrel készített lemezkép
 .crt – C64 CaRTridge Image, a kiterjesztés-foglalatba (cartridge port) illeszthető ROM-modulok tartalma
 .cso – tömörített ISO, pl. PlayStation Portable UMD játékoknál
 .dci – Dreamcast játék
 .elf – általános végrehajtható fájlformátum (Executable and Linkable Format)
 .gb, .gbc, .gba – Game Boy, Game Boy Color és Game Boy Advance ROM-képek
 .gdi – Sega Dreamcast játékok
 .iso – CD, UMD, DVD lemezképfájl
 .n64, .z64 – Nintendo 64 ROM (tömörítetlen, zip-tömörített)
 .nds – Nintendo DS
 .nes – Nintendo Entertainment System
 .smc – Super Nintendo ROM
 .smd – Sega Mega Drive ROM (Super Magic Drive másolóval készített kép)
 .sms – Sega Master System
 .xbe, .xex – Xbox Executable

Jegyzetek 

Informatika