Stejně užitečný vám může být emulátor ve chvíli, kdy vás někdo přesvědčí o tom, že byste měli vyzkoušet nový kernel, jiný operační systém či nějaké neoficiální patche do kernelu. Zabýval jsem se zkoumáním emulátorů všeho možného, leč jelikož toto je server zaměřený na Linux, pojednám zejména o emulátorech věcí dodnes aspoň trochu živých a s Linuxem souvisejících.
Z čeho emulátor sestává?
- Ze samotného interpretačního programu, což je obvykle konečný automat interpretující strojový kód emulovaného počítače (kdo tomu nerozumí, může tuto informaci ignorovat, dále použita nebude).
- z obtisků „imagí“ pamětí (ROM-image),
- z obrazů disků (disk-image).
První zpravidla nebývá problém sehnat, najdete je většinou na různých ftp serverech. S druhým bývá obtížně překonatelný problém, jelikož ROM-image jsou chráněny všemi možnými druhy autorských práv, dokonce i BIOSy v osobních počítačích. Třetí obvykle též bývá problémem, neboť každý autor emulátoru vymyslí nějakou reprezentaci disku, pokud možno co nejhůře pochopitelnou všem ostatním, což znesnadňuje údržbu emulovaných disků. Nejzákeřnější byl v tomto směru emulátor Bochs, u něhož jsem po dni stráveném marnými pokusy o výrobu alespoň částečně použitelného disku, tj. disku naformátovaného a osazeného něčím bootovatelným (nebo aspoň partitionou) po pročtení zdrojáků zjistil, že disk je reprezentován jako „syrové médium“, takže image lze snadno vytvořit sekvencí:
cat /dev/hda > soubor.disk
(předpokládá se, že nestojíte na /dev/hda B-) )
Nyní okomentujme jednotlivé emulátory, tedy jejich deklarované a fyzické vlastnosti:
DOSEMU je emulátor hardwaru, na němž lze rozběhnout něco jako MS-DOS. Jelikož Microsoft své produkty (jak každý dobře ví) nedává k dispozici zdarma, byl pod tento emulátor vyvinut Free DOS, který sice v některých ohledech hapruje, ale zdá se, že až se naimplementuje ještě pár dalších (nedokumentovaných) funkcí MS-DOSu, bude jej možné tímto plnohodnotně nahradit. Vývoj DOSEMU však jeví jisté, dle mého názoru neuspokojivé tendence. Měl jsem zkušenosti s verzí 0.8(?), která za svých dřevních dob fungovala bez větších potíží, pak však nastalo zemětřesení, které mělo mít za následek jistá údajná zlepšení. Současná verze je 1.0.2.
Podporuje se přístup na zařízení (diskety, partitiony, CD), je ale možno je nahradit souborem. Ve starých verzích šlo udat jako místo, na němž se disk nachází, adresář, a tento pak byl zpřístupněn. V současné době byly tyto vlastnosti přesunuty z konfigurace emulátoru až za start, tedy do souboru CONFIG.SYS. Patrně proto, že nikdo nemůže říci, zda se v emulátoru bude spouštět MS DOS, Free DOS, či něco úplně jiného. Když jsem posledně DOSEMU zkoušel, byly zrovna s tímhle menší problémy.
WINE (Wine Is Not Emulator) je emulátor MS-Windows ve všech verzích, které mohou smrtelníka napadnout (3.0, 3.1, 95, 98, NT, 2K, XP…) (zlí jazykové říkají, že Windows 3.0 a 3.1 se lišily jen tím, že první měly kernel napsaný v C, zatímco druhé v assembleru a byly tudíž použitelné. Jestli emulátor tuto vlastnost zohledňuje, jsem vyzkoušet zapomněl, můžete to otestovat sami (máte-li čas, náladu a otestovatelné programy). Emulátor obsahuje wine server, wine-libu a wine. Wine-library by měla obsahovat knihovní funkce a API windowsů. Emulátoru je potřeba nastavit, kde má hledat disketu, kde disk C, kde jsou Windows doma, kde je temp,… Na rozdíl od dosemu tento emulátor používá mateřský souborový systém, tedy nemá vlastní disky. Z toho vyplývají některé problémy, například, že různé programy nemohou zapisovat, kam je napadne, třebas do dynamických knihoven, nemáte-li k tomu práva (a modifikovat knihovnu se mi před očima ve WINE pokusilo už několik programů). Mimo to má občas menší problémy s překreslováním oken. Poslední verzi WINE jsem kompiloval (sice úspěšně, zato celých) 6 hodin na Pentiu 83.
Bochs je emulátorem PC. Umí emulovat procesory od i386 až do 686, a to ve verzi pro 1, 2 nebo 4 procesory. S instrukční sadou sice problémy nejsou, zato jsou na pomalejších strojích problémy s rychlostí. Koukal jsem se, nešlo-li by nějak nenásilně tyto problémy opravit, ale nic jsem nevymyslel, jelikož doba emulace jednotlivých instrukcí se pohybovala (na Pentiu 83) od 2 do 20 mikrosekund s mnou očekávaným rozdělením (ty operace, které jsem při četbě výstupu profilu považoval za těžší, trvají déle). Emulátor je napsán v C++. Jeho napsání v C by možná rychlost zvýšilo, nicméně autoři se patrně pokoušejí interpretaci stále zrychlovat. Stroj, na němž jsem prováděl testy posledně, má za normálního počasí výkon kolem 1000 BOGOMipsů, Bochs v něm spuštěný však dosahuje výkonnosti méně než 2 BOGOMipsy (měřeno linuxím kernelem). Seženete-li dostatečně rychlý stroj, je Bochs příjemný. Podporuje CD mechaniky, dvě diskety a hejno pevných disků (autoři uvádějí, že až osm, myslím, že včetně CD mechanik). Všechny diskové entity můžete používat buďto přímo, nebo přes loopback, tedy ze souboru. Je též podporována emulace síťové karty (NE2000). Podotýkám, že nedáte-li si pozor a budete s ní experimentovat v cizí síti, může se stát, že vás bude hledat komando s vysílačkami (i když pravděpodobně neúspěšně).
Lepších výsledků co do výkonnosti dosahuje VMware, který je sice výkonnější, zato však komerční. Není to v pravém smyslu emulátor, vývojáři mu říkají virtualizér. Jedná se o to, že instrukce se provádějí přímo na procesoru, čímž se dosahuje efektivity při provádění, jen některé instrukce se odchytávají a šidí (in, out, int…). Tudíž jej lze použít pouze na PC. VMware má osobitou strukturu diskových imagí, která umožňuje rozhodnout, zdali chceme disky měnit, neměnit, nebo se rozhodnout až při vypnutí virtuálního stroje (zkrátka když uděláte svým jednáním do disku díru, tak to necháte zrušit, jinak zapsat). Lze nastavit podobné vlastnosti jako u Bochsu. K VMware existuje modul do kernelu, který má virtualizéru nějakým způsobem zlepšovat podmínky. Jsou lidé, kteří říkají, že instalace tohoto modulu je cestou do pekel pro celkovou zabugovanost modulu i VMware, kterému tento údajně umožňuje převzít kontrolu nad počítačem, já jsem s tím ale žádné problémy neměl.
K Bochsu si neodpustím ještě pár šťouravých připomínek, a to předně, že padá příliš civilizovaně. Když spadne počítač, obvykle obrazovka zčerná, disky se zůstanou točit, nebo ne a nic se neděje. Když Bochs odhalí chybu, řekne, kde na ni přišel, tedy je protkán množstvím všech možných záchytných mechanismů. Člověka trochu mate, když Bochs zastaví interpretaci třeba proto, že nenalezl bootovatelné médium a čeká na odpověď uživatele z konzole. Na druhou věc, která mě osobně znepokojuje o něco víc, jsem přišel při pokusu o instalaci Open BSD. Ty si zapnuly syrovou klávesnici, takže jim měly chodit akorát signály „klávesa zmáčknuta“ a „klávesa puštěna“. Ony signály ale chodily neustále, dokud byla klávesa držena. Chtěl jsem ohlásit chybu, ale na stránce se seznamem chyb jsem se dočetl, že tutéž chybu hlásil někdo jiný už před více než rokem a podobné hlášení poslal někdo další i letos. Každopádně, jelikož autoři oznámili brzký release, předpokládám, že v něm opraví i tuto závadu.
Jak vidíte, s emulátory to, stejně jako s čímkoliv jiným, není jednoduché. Přesto však tvrdím, že mohou být výkonnými pomocníky nejen vývojářům kernelu, kterým mohou ochránit obsah disku, ale třeba i správcům, kteří si na nich mohou vyzkoušet různé úpravy, aniž by riskovali poškození skutečných dat, nebo obyčejným uživatelům, kteří jsou třeba jenom zvědaví, jak se ovládá fdisk.
Linky:
Bochs
Wine
FreeDOS
VmWare
Windows je ochrannou známkou firmy Mircosoft, Linux Linuse Torvaldse, Pentium je ochrannou známkou firmy INTEL, PerM je paňáček s plastikovými brýlemi, doufám, že jsem na nic nezapomněl (pozn. red.: a kolegyně Doležalová je držka ;) –Johanka).