UWAGA! Tekst dla uūytkowników 80x86 (x>2)

DJGPP - po co to komu?

Wstėp - jak na artykuī przystaīo

Dawno, dawno temu, pewien czīowiek, niesīusznie okreōlany jako red. nacz. magazynu YouBall ^H^H^H^H^H^H^H znaczy siė Fakt Agnus kolega Mirosīaw Baran znany szerszej gawiedzi jako Jubal namówiī mnie na napisanie artykuīu nt. kompilatora C dla MSDOSa - DJGPP. O ile dobrze pamiėtam, chciaī coō poleciź swojemu siostrzeļcowi, który posiada PC i zaczyna coō pisaź (kodowaź?). Szczerze mówiāc daīem siė wrobiź w to dzieīo ale nie jestem przekonany co z niego wyszīo, chociaū obiecywaīem Jubalowi niski poziom (tak Jubal! Pamiėtasz?) Po dīugich bólach, ciāgle przesuwajāc terminy narodzin oto jest.

Szybkie overview

DJGPP to porting kompilatora GNU C/C++ dla systemu MSDOS. Sīuūy do tworzenia programów w 32 bitowym ōrodowisku na 32 bitowych procesorach Intel, dziaīajācych w protected mode (czyli z ochronā pamiėci). Korzystajāc z bezpīatnego serwera DPMI (Dual Protected Mode Interface) moūna uzyskaź do 4GB tzw. flat memory czyli ciāgīej pamiėci bez segmentacji ani stronicowania. Oprócz pamiėci fizycznej mamy do dyspozycji do 256MB swap file'a, czyli dodatkowe 256MB pamiėci (traktowanej na równi z fizycznā) zrzucanej w locie na dysk twardy. Korzystanie ze swapa odbywa siė automatycznie, bez specjalnych komend alokujācych pamiėź na swapie czy teū w pamiėci fizycznej - po prostu malloc ();
Dziėki swojej konstrukcji jest to idealne narzėdzie do przenoszenia programów napisanych pod system Unix (wīācznie z zaimplementowanymi dla kompatybilnoōci, lecz nie dziaīajācymi niestety funkcjami typowo multitaskingowymi, np. fork ();). Co najwaūniejsze - DJGPP jest caīkowicie bezpīatny (oprócz dosīownie kilku wyjātków zawartych w bibliotece C++). Caīy projekt zostaī zapoczātkowany przez niejakiego DJ Delorie, który pozostaje gīównym koordynatorem, ale tworzeniem DJGPP zajmuje siė wielu ludzi z caīego ōwiata.

Kawaīek historii

Zapewne niektórzy wiedzā - bo juū siedzā na PC parė latek i liznėli nieco dziwacznej konstrukcji tego komputera, ūe kiedy Intel produkowaī tylko 8 bitowe procesorki, a IBM PC znaczyīo IBM PC, a nie klon pewien czīowiek napisaī DOS-a 1.0. Nie byī to gATES (oddświerny ?) jak niektórzy sādzā, ale juū wersja 2.0 (po zakupie licencji od owego tajemniczego programisty) powstaīa w Micro Sofcie (tak siė wówczas to nazywaīo) i dostaīa prefiks "MS". Od tej pory spóīka Intela z Microsoftem zatruwaīa ūycie programistom i uūytkownikom komputerów tzw. PC (ja preferujė jednak nazwė IBM lub klon, gdyū PC to w/g mnie nieco szersze pojėcie, Amiga teū PC nie?). Przez lata Microsoft dāūyī do peīnej kompatybilnoōci starych aplikacji w nowych wersjach syftemu DOS. I wszystko byīoby piėknie, gdyby Intel nie stworzyī najpierw 16bitówki, a potem wiekopomnego procesora 386. Byī to zaiste wielki krok naprzód - peīny 32 bitowy procesor (myōlė tu o maszynach DX a nie SX - te miaīy obciėtā szynė pamiėci do 24 bitów). Ale MS nie próbowaī zmieniaź ani systemu, ani aplikacji. I dalej MSDOS pozostawaī single user - single task, mimo niezīych moūliwoōci procesorów serii 386 (o czym moūe ōwiadczyź Linux). Brak multitaskingu nie byī jednak najgorszy - ale fakt, ūe maīo kto potrafiī wycisnāź z poczciwego Intela tryb 32 bitowy, a stronicowanie pamiėci w trybie rzeczywistym , w którym tak naprawdė to i386 byīo tylko szybszā wersjā 8 bitowych procesorków typu 8008 lub 8086 staīo siė koszmarem wszystkich koderów. Pamiėtam wiele dem chodzācych w trybie rzeczywistym - byī to okres, kiedy demka na A500 biīy na gīowe pecetyczne demosy nie tylkod designem i muzykā, ale równieū efektami. Tak dziaīo siė, aū niektórzy koderzy posiedli wiedzė tajemnā (np. niejaki Tran) i porozdawali swoje 32 bitowe extendery (czyli programiki umoūliwiajāce korzystanie z 32bitowego kodu w protected mode). Jednak uūytkownicy Borlanda (tak C jak i Pascala) mėczyli siė z ograniczeniem pamiėci do 640KB (dziėki kochanemu MSDOSowi), alokowali sobie maksymalnie tablice po 64KB kaūda. Pamiėź powyūej pierwszego megabajta miaīa za to coraz radoōniejsze nazwy - extended, expanded, ale maīo kto potrafiī jā wykorzystaź. Wspomnė np. o pamiėci expanded - stronicowanie po 16KB. Fajnie nie? Np. przy 4 MB, stron byīo "tylko" 256. Powstaī wiėc projekt stworzenia 32 bitowego ōrodowiska - kompilatora C pod nazwā DJGPP. Dziėki niemu (jak juū wyūej napisaīem) mamy do dyspozycji caīā pamiėź bez ūadnych segmentów, szybkoōź 32 bitowego kodu (m.in. specyficznych 32 bitowych instrukcji i386 i lepszych) oraz ochronė pamiėci, swap, obsīugė koproca fa fa fa fa. Niestety, jako ūe pracuje on pod MSDOSem nie mamy do dyspozycji multitaskingu w odróūnieniu od "oryginalnej" wersji DJGPP czyli GNU C.

Sprzėt


To tyle jeōli chodzi o minimalne wymagania. Ja ze swej strony polecam co najmniej 486 DX 33, 8 mega RAM, bardzo szybki twardy i kawaīek wolnego miejsca na twardym (tak z 30 MB), gdyū instalacja minimalna nie jest zbyt sensowna (bez helpów ?). Osobiōcie pracowaīem prawie rok na takiej konfiguracji i uwaūam, ūe jest ona wystarczajāca. Aktualnie uūywam P150 ale dalej nie narzekam na zbyt szybkā kompilacjė. Wynika to z faktu, ūe szczególnie liczy siė twardy - przydaje siė jakiō cache dyskowy i mnóstwo pamiėci. I mimo ūe mój Caviar jest jednym z najszybszych aktualnie dysków, kompilacja nie przebiega najlepiej. Cóū, wina kompilatora. Procesor jest mniej waūny - chyba 486DX4/100 Mhz to caīkowicie wystarcza. Przydaje siė za to tzw. L2 cache w iloōci np. 512KB i pīyta PCI.

Gdzie to moūna dostaź?

Kraków, Poland: ftp.cyf-kr.edu.pl:      pub/mirror/Simtel.Net/gnu/djgpp
Poznaļ, Poland:  ftp.man.poznan.pl:     pub/simtelnet/gnu/djgpp
Warszawa, Poland: ftp.icm.edu.pl:       pub/simtelnet/gnu/djgpp
Stockholm, Sweden: ftp.sunet.se:
London, UK: sunsite.doc.ic.ac.uk
Concord, California, USA: ftp.cdrom.com
California, USA: ftp.digital.com,
a na innych serwerach podobnie.

Ile to pojedzie - czyli osiāgi

Na pewno wiele osób interesuje, jak niekomercyjny program wypada w porównaniu z kombajnami typu Watcom czy tez Borland. Okazuje siė, ūe prėdkoōź skompilowanego programu jest co najmniej taka, jak konkurencji. Czėsto zdarza siė jednak (przy wīāczonej optymalizacji, a przeīāczników optymalizacji jest duuuuuūo) ūe kompilat spod DJGPP jest szybszy. Generalnie - nieśle. Ale jest takūe rysa w tym nieskazitelnym dotād portrecie - bardzo czėsto zdarza siė, ūe niektóre programy dziaīajā wolniej niū 16bitowe aplikacje skompilowane Borlandem. Wynika to z faktu, ūe uūywanie funkcji I/O (np. obsīuga dysku) odbywa siė w trybie rzeczywistym (real mode) i program musi siė przeīāczyź z trybu prodected na tryb real, co trwa spory kawaīek czasu. Oprócz tego, ūeby DOS potrafiī odczytaź dane naleūy je przenieōź do bufora, który jest zlokalizowany w 1MB pamiėci. Tak wiėc, aby zapisaź dane program musi przenieōź dane (w porcjach po 16KB) do pierwszego megabajta, potem przeīāczyź siė w tryb real, potem uūyź odpowiedniej funkcji BIOSu, a na koniec znów przeīāczyź siė w tryb protected. To niestety powoduje duūe straty prėdkoōci. Dla przykīadu, odczytanie 2MB w DOSie zajmuje 1 sekundė, a spod DJGPP juū 1.2 - 1.5 sekundy. Niby duūo, bo od 20% do 50% róūnicy, ale chyba nikt nie przesyīa wiėcej niū 100 MB (skād wziāź tyle pamiėci), ūeby róūnica byīa odczuwalna. Oczywiōcie liczby sā przykīadowe, na szybkich pci'owych maszynach róūnica jest nieodczuwalna. Cóū, to juū koniec tego artykuīu. Mam nadziejė, ūe udaīo mi siė przybliūyź Wam wspaniaīe narzėdzie, jakim jest DJGPP.

Podsumowanko

Zalety:
Wady:

Zakoļczenie

No i to tyle. Na zakoļczenie, chciaībym gorāco poleciź ten kompilator wszystkim, którzy korzystajā z GNU C pod UNIXem, fanów C, tym, którzy nie majā za co kupiź Watcoma, poczātkujācym programistom - wspaniaīe biblioteki graficzne pod DJGPP i wszystkim, którzy lubiā popróbowaź róūnych kompilatorów. Jest to produkt na którym siė nie zawiodīem - np. kocham kiedy DJGPP wychodzi mi z bīėdem, wypisujāc zawartoōź rejestrów i kod bīėdu ale siė, do cholery nie zawiesza. Jest to piėkna sprawa dla maīo doōwiadczonych programistów. Poza tym w koļcu nie problemu z pamiėciā. Oprócz tego istnieje wiele doskonaīych dodatków - jak np. RHIDE, Allegro (biblioteka graficzna), biblioteki do obsīugi Sound Blastera. Na tyle zaufaīem DJGPP, ūe napisaīem pod nim komercyjnā grė, za którā juū nawet co nieco udaīo siė dostaź w postaci banknotów Narodowego Banku Polskiego.

LUDO/VD

e-mail: pajonk@ajax.umcs.lublin.pl
homepage: http://ajax.umcs.lublin.pl/~pajonk/ w tym /~pajonk/odjgpp.html

Opracowane na podstawie dokumentu djgppfaq.html (http://www.delorie.com/djgpp/v2faq/faq202s.zip) oraz wīasnych doōwiadczeļ z tym kompilatorem zdobytych od marca 1996 roku.