Logo GNU
Kodovani P°edchozφ Nßsledujφcφ Obsah

8. EMX - p°ekladaΦ pro OS/2, DOS, Windows3.1 a Windows95/NT

EMX je port GCC pro OS/2, DOS, Windows3.1 a Windows95/NT vytvo°en² Eberhardem Mattesem. Naprostß v∞t╣ina GNU program∙ je pod OS/2 p°elo╛ena prßv∞ tφmto p°ekladaΦem. Na rozdφl od DJGPP Φi CygWin32 EMX pou╛φvß extendery, kterΘ vytvo°φ shodnΘ API na v╣ech zmφn∞n²ch platformßch. Pokud aplikace nepou╛φvß ╛ßdnΘ nativnφ slu╛by n∞kterΘho z podporovan²ch systΘm∙, je mo╛nΘ spustit v²sledn² program na libovolnΘm z nich.

Ka╛d² z podporovan²ch systΘm∙ mß vlastnφ extender. Ty zprost°edkovßvajφ nejd∙le╛it∞j╣φ slu╛by zßvislΘ na architektu°e, jako memory management, textov² vstup a v²stup (DOS-box i fullscreen), prßci se soubory, multithreading (nekompatibilnφ s POSIXem), multitasking (fork, komunikaci pomocφ pipe), a dal╣φ. Je to vlastn∞ emulßtor jednoduchΘho EMX operaΦnφho systΘmu s API velmi podobnΘmu UNIXu. P°es celkem velkou komplikovanost extender∙ se jejich velikost se pohybuje od 50 do 110KB, a to je stßle mΘn∞ ne╛ DOS4GW. Samotn² emx.exe (09c) mß 50943 B, rsx.exe (5.10) mß 107804 B. Pokud ale aplikace pot°ebuje jinΘ slu╛by, nap°φklad grafiku, musφ mφt specißlnφ k≤d pro podporovanΘ operaΦnφ systΘmy.

Program si nejd°φve o╣ahß prost°edφ, v n∞m╛ b∞╛φ, a podle toho si bu∩ zavede OS/2 dynamickou knihovnu (emx.dll), anebo pod Φist²m DOSem nebo VCPI prost°edφm extender emx.exe (od E. Mattese), Φi pod DPMI prost°edφm (nap°. DOS box v OS/2 Φi ve Windowsech) si zavede extender rsx.exe (o ten se starß R. Schnitker). Vlastnost, ╛e jedin² spustiteln² soubor (mnoho z vßs jist∞ znß tex386.exe anebo mf.exe z emTeXu) funguje pod v╣emi t∞mito platformami, je jeho nespornou v²hodou oproti DJGPP.

Navφc EMX umφ generovat i nativnφ programy pro OS/2 a Windows v p°φpad∞, ╛e program je p°φli╣ zßvisl² na danΘm prost°edφ a nenφ t°eba po╛adovat jeho p°enositelnost.

D∙vodem pro vznik EMX byl p°eklad emTeXu, kter² se do tΘ doby p°eklßdal v komerΦnφch p°ekladaΦφch. Proto je EMX navr╛eno tak, aby prost°edφ poskytovanΘ aplikaci (API knihoven apod.) bylo co nejpodobn∞j╣φ UNIXu. Dφky tomu v n∞m byly pozd∞ji p°elo╛eny i dal╣φ GNU programy jako Emacs, texinfo apod. SpoΦßtku EMX neposkytovalo velk² komfort pro v²voj nov²ch aplikacφ (bylo urΦeno hlavn∞ pro p°evod hotov²ch program∙), ale postupem Φasu se v²vojovΘ prost°edφ emx rozrostlo a╛ do souΦasnΘ podoby (verze emx09c, zß°φ 1997), kdy jsou k dispozici ve╣kerΘ programy sdru╛enΘ kolem GNU C/C++ p°ekladaΦe. Jsou podporovßny i dal╣φ jazyky, nap°φklad fortran (f2c a g77), pascal (p2c), GNU ada. P°ekladaΦ optimalizovan² pro procesory Pentium je pgcc. Jako debugger je mo╛nΘ pou╛φvat pou╛φvat gdb (textov²) anebo pmgdb (OS/2 Presentation Manager verze, neboli GUI verze gdb), Φi fullscreen. Programy lze optimalizovat profilerem.

Hlavnφ v²hody oproti DJGPP:

  1. Funguje i core dump. Pokud program spadne, vytvo°φ se obraz pam∞ti na disku, ze kterΘho potom m∙╛ete debuggerem zjistit, co bylo ╣patn∞. Na rozdφl od DJGPP se nedozvφte jenom Φφslo °ßdky, kde program spadnul, ale m∙╛ete si prohlΘdnout i obsah prom∞nn²ch apod.
  2. Vyvφjet m∙╛ete na libovolnΘ z podporovan²ch platforem.

Standardnφ knihovny se dodßvßjφ hned ve dvou verzφch: single-threaded a multi-threaded. Single-threaded jsou rychlej╣φ a krat╣φ a je mo╛nΘ je pou╛φvat i v programech pou╛ivajφcφ thready. Pokud ale vφce thread∙ pou╛φvß knihovnφ funkce, mohou se dφt podivnΘ v∞ci. Multi-threaded knihovna je na tom lΘpe, mß errno pro ka╛d² thread a dal╣φ. V²stup do souboru pr² ale je╣t∞ ·pln∞ thread safe nenφ. Dal╣φ knihovny dodßvßnΘ ve standardnφ distribuci jsou: bsd, termcap, curses, fl (pro flex), gcc, graph (podporujφcφ jednoduchou VGA, EGA a CGA grafiku), os2, regexp, socket, video (interface pro fulscreen text podporovan² extenderem). Nezßvislφ programßto°i p°isp∞li dal╣φmi p°φdavky: VESA, SVGA, multimedia atd.

K jednotliv²m platformßm:

8.1 OS/2

Toto je nativnφ platforma EMX, tudφ╛ je detailn∞ rozpracovßna co se t²Φe jak podpory OS/2, tak i v²vojovΘho prost°edφ. N∞kterΘ utility ji╛ byly zmφn∞ny v ·vodu, jako nap°. Presentation Manager verze gdb, mezi dal╣φmi m∙╛eme uvΘst nap°φklad gcc zavad∞Φ, kter² po jistou dobu ponechß v pam∞ti gcc kompiler, aby se potom rychleji zavßd∞l - to m∙╛e znaΦn∞ urychlit p°eklad rozsßhl²ch knihoven. Programy se v∞t╣inou pφ╣φ v editoru EPM (free editor od IBM), emacsu, resp. se vyvinou v n∞jakΘm vφce user-friendly IDE a pod emx/gcc se jenom p°elo╛φ, proto╛e gcc/emx je znßm jako jeden z v²poΦetn∞ nejrychlej╣φch p°ekladaΦ∙. Visual Development Tools pro emx jsou tΘ╛ dostupnΘ.

P°i p°ekladu je mo╛nΘ zvolit v²sledn² .exe soubor hned n∞kolika zp∙soby. Jednak "nativnφ emx", vy╛adujφcφ dynamickou knihovnu emx.dll, ov╣em s tou v²hodou, ╛e tent²╛ .exe lze spustit i pod DOSem Φi Windowsy, kde si automaticky natßhne pat°iΦn² extender. Dßle je mo╛nΘ program slinkovat standardnφm IBM linkerem LINK386 namφsto GNU linkeru. Pokud chceme zmen╣it velikost v²slednΘho p°elo╛enΘho programu (anebo ho slinkujeme emx linkerem, ale nechceme, aby byl dan² program pou╛φvßn pod DOSem), m∙╛eme vyu╛φt podpory jßdra OS/2 pro zavßd∞nφ a multitaskovßnφ komprimovan²ch exe soubor∙ a p°ejet ho programem lxlite (kompresnφ pom∞r je v∞t╣inou 1:2).

Aplikace pod OS/2 mohou b²t typu textovΘ (windowed i full-screen), workplace shell (WPS) anebo Presentation Manager, vΦetn∞ statick²ch i dynamick²ch DLL knihoven. Jsou k dispozici v╣echny hlaviΦkovΘ soubory OS/2 a je mo╛nΘ linkovat a volat v╣echny 16ti i 32bitovΘ funkce. Dßle je mo╛nΘ p°eklßdat aplikace pro XFree86-OS2, tj. pro free X-Windows pro OS/2.

8.2 DOS

V DOSu b∞hajφ 32bitovΘ emx programy pod extendery. Pou╛φvajφ se dva: EMX, kter² za°izuje podporu protected mode sßm, a RSX, kter² funguje jako DPMI klient. Ten prvnφ je men╣φ a rychlej╣φ, RSX zase funguje v situacφch, kde nenφ mo╛nΘ procesor p°epnout do supervisorskΘho re╛imu pod DPMI serverem (DOS prompt v OS/2 anebo Windows, QEMM, Novell Φi jin² DPMI server). Jejich funkce je p°ibli╛n∞ stejnß a program si p°i spu╣t∞nφ sßm vybere ten sprßvn². EMX podporuje VCPI, XMS2.00 a pozd∞j╣φ, normßlnφ nebo fast A20 gate, n∞kterΘ nestandardnφ obstaro╛nφ mainboardy a ramdisky, tak╛e by s nφm snad nem∞ly b²t potφ╛e. Umφ vyu╛φt ve╣kerou dostupnou fyzickou pam∞t a v p°φpad∞ nutnosti swapovat na disk. Pokud nenφ k dispozici koprocesor, pokusφ se zavΘst p°φdavn² emulßtor koprocesoru (emxfpemu). Existuje takΘ roz╣φ°enß verze s debuggerem. Extender je navφc mo╛nΘ zaintegrovat do .exe souboru (tzv. bounded executable).

RSX mß o n∞co mΘn∞ prßce, proto╛e 32bitov² DPMI server je ji╛ spu╣t∞n. P°esto je RSX ze zßhadn²ch d∙vod∙ o cel²ch 50 KB v∞t╣φ ne╛ EMX. Emulaci koprocesoru mß zaintegrovanou do samotnΘho extenderu na rozdφl od debuggeru, o kter² se starß zvlß╣tnφ program. Funguje spolehliv∞ pod OS/2 (dos box), Windows, cwsdpmi a qdpmi. Naopak mohou nastat potφ╛e pod Dosemu a pmode, jeliko╛ oba majφ pouze ΦßsteΦnou implementaci DPMI. Dokumentace takΘ °φkß, ╛e funguje pod 386max a umφ spou╣t∞t Win32 console apps (aplikace pro Win95 vyu╛φvajφcφ emulaci terminßlu). Mß takΘ podporu pro kompatibilitu s DJGPP 1.1. Podporuje dlouhΘ nßzvy u Win95. Pokud nenφ DPMI server k dispozici, umφ nastartovat program jmΘnem CSX (krycφ nßzev pro CWSDPMI) - oba jsou souΦßstφ distribuce RSX. Toto °e╣enφ je v╣ak o n∞co pomalej╣φ. Poslednφ verze takΘ obsahuje experimentßlnφ verzi scheduleru, tak╛e funguje nap°φklad i gcc -pipe.

Rozhodl jsem se takΘ ud∞lat srovnßnφ s DJGPP. Zajφmala m∞ rychlost extender∙, tedy jakΘ zpomalenφ p°inß╣φ p°evod volßnφ EMX jßdra na volßnφ cφlovΘho operaΦnφho systΘmu. Proto jsem ud∞lal jednoduch² program, kter² mß za ·kol zam∞stnat extendery a DOS tφm, ╛e 1000krßt otev°e soubor, po jednotliv²ch bytech tam zapφ╣e 100 nul a potom jej zase uzav°e.

DPMI server Φas v DJGPP Φas v EMX pou╛it² extender
cwsdpmi 4.88 6.37 rsx
pmode 2.91 - -
bez DPMI - 3.52 emx
Win DOS 6.04 6.15 rsx
Windows - 8.51 rsxwin
QDPMI 6.81 9.78 rsx
V²stedky testu (Φasy jsou v sekundßch)
Z test∙ je vid∞t, ╛e cena za extender je cca 24% pod DOSem. To nenφ mßlo, ale na druhou stranu v∞t╣ina aplikacφ nenφ natolik zßvislß na rychlosti systΘmov²ch volßnφch. Pokud pracujete se soubory, pou╛φvßte bufferovan² vstup/v²stup - stdio. Verze programu pro stdio u╛ trvala ob∞ma pouze 0.66 sekundy. ZajφmavΘ je, ╛e nebuffrovanß verze byla na BC v²razn∞ rychlej╣φ (2.86) - cena za protected mod je minimßln∞ 10%. Stdio (bufferovanß) verze u╛ byla pomalej╣φ (0.71) - cena za neoptimalizujφcφ kompiler a ╣patn∞ napsanΘ knihovny. ZajφmavΘ takΘ je, ╛e Windows verze je pomalej╣φ oproti DOSovΘ b∞╛φcφ v DOS promptu. Zklamßnφm pro mn∞ byla takΘ rychlost EMX extenderu, kterou jsem oΦekßval o n∞co lep╣φ ne╛ u DPMI, proto╛e implementace DPMI je komplikovan∞j╣φ. Pouze pro zajimavost: Pod Linuxem test trval 0.66 sekund a stdio verze pouze 0.25 sekund.

EMX programy takΘ pot°ebujφ o n∞co del╣φ Φas ke spu╣t∞nφ ne╛ DJGPP programy, proto╛e musφ zavßd∞t extender. Jednß se ale pouze o n∞kolik setin sekundy, tak╛e se to v∞t╣inou neprojevφ.

Pro v²voj EMX program∙ lze pou╛φt i v∞t╣inu utilit z DJGPP (jako nap°φklad RHIDE)

8.3 Windows 3.1

O podporu Windows 3.1 se starß extender rsxwin. KlasickΘ textovΘ aplikace se tam startujφ v okn∞, kterΘ se objevφ po prvnφm pou╛itφ vstupn∞ v²stupnφch funkcφ a vypadß trochu jako okna r∙zn²ch telnet∙ pro Windows. B∞╛n∞ zkompilovanΘ programy pod EMX nezavßdφ rsxwin automaticky a je t°eba pou╛φt rsxwin jmΘno_programu, pou╛φt jin² zavad∞Φ, programy startovat z okna rsshellu (to je jak²si command.com zkompilovan² pod EMX), nebo pou╛φt program rsxwlink, kter² umo╛≥uje vytvo°it startovacφ program (novΘ .EXE), kter² sßm nastartuje rsxwin a navφc programu p°edß zvolenΘ parametry. Pod Windows95 rsxwin takΘ podporuje dlouhΘ nßzvy. Modul RSXIO.DLL umφ emulovat textovΘ v²stupnφ funkce, vΦetn∞ VT100 escape sekvencφ.

Programy jsou 32bitovΘ, ale nepot°ebujφ ╛ßdnΘ roz╣φ°enφ do Windows (jako Win32) a pou╛φvajφ 16ti bitovΘ API. Pomocφ balφku jmΘnem rsxwdk m∙╛ete vyvφjet i plnohodnotnΘ Windowsφ aplikace. Je mo╛nΘ pou╛φvat DLL knihoven, psßt novΘ DLL knihovny i linkovat aplikace tak, ╛e nepot°ebujφ rsxwin. Pot°ebujete k tomu ale soubor windows.h, kter² je k dispozici ve v∞t╣in∞ komerΦnφch kompiler∙. Jeho freewarov² p°epis je obsa╛en ve Wine (Windows emulator pro UNIX) ale nemusφ b²t 100% spolehliv². Navφc pot°ebujete resource compiler. GNU resource compiler je obsa╛en v nov∞j╣φ verzi tohoto balφku pro Win32. Nevφm, jestli je pou╛iteln² i zde. Volßnφ 16ti bitov²ch funkcφ Windows je pon∞kud komplikovanΘ, proto╛e je nutnΘ p°evßd∞t ukazatele a formßt dat na zßsobnφku je odli╣n². Toho se dociluje pomocφ n∞kolika maker. Pro hlavnφ funkce (z user.exe, gdi.exe, kernel.exe, sound.drvkeyboard.drv) jsou ud∞lßny knihovnφ funkce. Stejn²m zp∙sobem je ale mo╛nΘ p°idat dal╣φ.

Vlastnφ WDK nenφ ·pln∞ free. Pokud chcete vytvß°et komerΦnφ programy, je nutnΘ jej za $55 registrovat. To je stßle ale mΘn∞ ne╛ cena v∞t╣iny komerΦnφch p°ekladaΦ∙.

8.4 Win32

Tento port vychßzφ z portu pro Windows3.1, proto o n∞m platφ v∞t╣ina toho, co jsem napsal v p°edchßzejφcφch odstavcφch. Balφk se jmenuje RSXNT, je o n∞co v∞t╣φ a obsahuje navφc nap°φklad i jednoduchΘ IDE nebo resource compiler. Stßle jsou ale t°eba headery z WinSDK (nebo Wine). Pou╛φvß se tu extender jmΘnem rsxwin32. TakΘ existuje verze RSXNTDJ, kterou je mo╛nΘ pou╛φt s DJGPP.

8.5 Dokumentace

Dokumentace k EMX je rozsßhlß a podrobnß, podobn∞ jako k samotnΘmu GNU C/C++ p°ekladaΦi. Je distribuovßna jednak ve formßtu OS/2kovsk²ch hypertextov²ch knφ╛ek (.INF), jednak jako Φist∞ textovΘ soubory. (Pro mΘn∞ znalΘ uve∩m∞, ╛e .INF formßt je standardnφm formßtem ve╣kerΘ dokumentace v OS/2, podobn∞ jako .HLP ve Windows Φi texinfo pro GNU. Prohlφ╛eΦ view.exe je souΦßstφ operaΦnφho systΘmu OS/2. Prohlφ╛eΦ pro DOS je souΦßstφ operaΦnφho systΘmu PC-DOS. Prohlφ╛eΦ pro Windows je na sφti voln∞ k dispozici.)

To, ╛e na rozdφl od v∞t╣iny GNU programu dokumentace ale nenφ v texinfo formßtu, ale ve formßtu be╛nΘm na danΘm operaΦnφm systΘmu p°inß╣φ ale i n∞kterΘ potφ╛e. Pokud nemßte OS/2 nebo PC-DOS, jste odkßzßnφ na textovou podobu .INF dokumentace. Na╣t∞stφ jsou ale k dispozici free prohlφ╛eΦe tohoto formßtu pro DOS a Windows V∞t╣φ potφ╛e p∙sobφ dokumentace pro RSX, RSXWIN a RSXWIN32, kterß je k dispozici pouze v .HLP formßtu. Navφc dokumentace k RSXWIN32 je v .HLP formßtu pro Windows95, kter² si nep°eΦtete ani ve Windows3.1.

Z°ejm∞ nejznßm∞j╣φ aplikacφ vyvinutou pod gcc/emx je emTeX, kompletnφ prost°edφ pro TeXovßnφ, kterΘ se pou╛φvß pod OS/2, DOSem i Windowsy. Lze jen poznamenat, ╛e je obecn∞ velice roz╣φ°en²m omylem, ╛e emTeX je DOSovsk² TeX; pouze u╛ivatelΘ OS/2 majφ mo╛nost mφt na obrazovce souΦasn∞ pu╣t∞n² editor, p°ekladaΦ i dvipm (dvi prohlφ╛eΦ pod OS/2), tedy skoro-WYSIWYG systΘm.

Rozhodn∞ nejv∞t╣φm balφkem program∙ pro p°ekladaΦ OS/2 (b∞hajφcφ pouze pod OS/2), kterß nejsou dφlem E. Mattese, jsou XFree86 for OS/2. Tento p°φklad tΘ╛ nßzorn∞ dokazuje, jak blφzko mß OS/2 k Unixu.


P°edchozφ Nßsledujφcφ Obsah

Dotazy a p°ipomφnky ohledn∞ strßnky posφlejte na hubicka@paru.cas.cz