QNX verze 2
QNX je NEPOSIXovy Unixovy mikrokernelovy distribuovany realtimovy OS
pro i86 a i286+. Tato veta
popisuje QNX se vsemi jeho dulezitymi vlastnostmi a zajimavostmi. Predem
Vas musim upozornit, ze verze 2 je dnes "obsolete" (1992) , misto ni se vyviji
QNX 4.x. Presto si ale QNX 2.x muzete stale koupit.
Spolu se systemem je take prekladac, utilitky a paperware. Manualy me dost
prekvapily, protoze se znacne lisi od tech dnesnich ktere nic nereknou.
Napriklad v knize "Zakladne informacie" naleznete popis instalace (MAUALNI i
za pouziti /cmds/install), IPC, sitovani, common problems, modemy, DETAILNI
popis filesystemu a dalsi. Kez by byl takovyto manual i k SCOcku ;-) Vlastni
OS je na jedne diskete, utilitky a development tools na dalsich dvou.
Instalace
je easy, zvladne ji i zacatecnik. Muzete bud' instalovat manualne, nebo
za pomoci /cmds/install. Co se mi moc libi je ze install vypisuje co prave
spousti vcetne vsech parametru. Po instalaci nabootuje QNX a muzete se
prilogovat do systemu. A uz
v tomto momente vznikaji problemy; diky NEPOSIXcnosti (Ugh) systemu chvili
trva, nez si zvyknete ze neni ps(1), ale tsk, misto 'ls -l' je files atd.
Dalsi vec, ktera se mi nelibi jsou disky. Podobne jako DOS, OS/2 ci Windoze
neumi QNX mountovat disky do stromu, ale oznacuje si je cisly.
Nastesti si je muzete (temer) libovolne mountovat, neni zde zadne omezeni ze
/dev/fd0 = A:, /dev/hda1 = C:, atd.
Napriklad prikazem mount disk 2 /drivers/disk.atc pa=qnx si
namountujete hda3 na 2:/. Jinak je temer vse v normalu.
QNX je mikrokernelovy
Mnoho lidi si mysli ze mikrokernelovy znamena maly. To ale nemusi byt pravda.
Monolyticky kernel (Linux,BSD,...) ma "v sobe" zabudovane vsechny drivery,
filesystemy, protokoly a ty bezi v kernel-modu. Pokud user-level aplikace
chce napriklad otevrit soubor, provede syscall "open". Tim se prepne do
kernel-modu a soubor se otevre. U mikrokernelovych systemu je tomu jinak.
Kernel umi jenom scheduling a interprocess communication. Pokud nejaky
proces chce otevrit soubor, posle zpravu "open" procesu "fs", ten otevre
soubor a odpovi volajicimu procesu. Stejne probihaji vsechny ostatni operace.
V QNXu je nekolik dulezitych procesu:
- task - stara se o memory management a tasky
- fsys - driver filesystemu
- dev - device drivery
- net - sitovani
- idle - ma nejnizsi prioritu a je volany kdyz jsou ostatni procesy
blocknute
Neni samozrejme vyjimkou, ze mezi sebou komunikuji i tyto procesy. Napriklad
"task" muze chtit po "net" aby poslal message procesu bezicimu na uplne jinem
stroji.
QNX je distribuovany
QNXy mezi sebou komunikuji po siti a to siti ARCnetove (jenom, zadny ethernet).
U ARCnetu se na chvili zastavim,
protoze se jiz temer nepouziva a neni tudiz prilis znamy. Je velice podobny
ethernetu, pomalejsi, ale mene choulostivy na chyby kabelaze. Existuje nekolik
variant ARCnetu - od 2.5Mbps az do 100Mbps. Ja mam jenom ty 2.5Mbps sitovky.
Skoda. Na propojeni ARCnetove site se pouziva tenky koaxial ci UTP zapojeny
bud' do sbernice (jako eth.) nebo do hvezdy. ARCnet neni zdaleka tolik
choulostivy na kabelaz jako ethernet. Mel by se terminovat 93 ohmovymi
odpory. Doma mam sdilenou kabelaz pro ethernet i arcnet (samozrejme ze
oboji nebezi soucastne!). Zapojeny mam jenom jeden terminator
50 ohm, coz je u kratkeho kabelu temer jako 2x 100 ohmovy terminator.
Sit' funguje 100%. Dokonce nevadilo ani kdyz jsem pridal dalsi terminator
na "druhou" stranu koaxialu. Dle dokumentace v Linuxu chodi nekterym lidem
ARCnet i bez terminatoru :-)) Adresace neni fixni jako u ethernetu (48bit),
ale nastavuje se (jumpery, v setupu ci pajeckou) jako 8bit cislo, tzn sit
muze mit maximalne 0x100 stanic (-2 rezervovane).
Zpet ale ke QNXu. Nekolik pocitacu spojenych siti muzete "spojit" dohromady,
takze se budou tvarit temer jako jeden stroj. Pro programatora to znamena
kompletni IPC pres sit, pro uzivatele moznost spoustet a pouzivat programy
na kteremkoliv pocitaci na siti (pokud k tomu ma prava). Uvedu par prikladu:
$ ls [4]3:/ - vypise obsah adresare 3:/ na stroji '4'
$ [4] ls 3:/ - spusti na stroji '4' prikaz "ls 3:/"
$ [4] ls [1]3:/ > [2]1:/out - Ze stroje 4 vypise obsah adresare 3:/ na
pocitaci '1' a vystup presmeruje do souboru
1:/out na pocitaci '2'.
Na vsech strojich vidite procesy sve i ostatnich QNXu. Tento problem je
resen pres "virtualni" PIDy, takze na kazdem stroji muze mit jeden proces
jiny PID. Pri dorucovani zprav/semaforu/signalu je 100% zarucene, ze
dojdou ve stejnem poradi jako byly vyslany. Pokud nejaky stroj vymrzne, ci
nekdo prekopne kabelaz, automaticky se vyradi dany stroj z provozu a zrusi
se vsechny odkazy na nej. Pokud prave probiha nejaka komunikace je
komunikujicimu procesu vracena chyba (v errno, ale nezkousel jsem).
QNX samozrejme umi bootovat pres sit'. O to se stara program netboot a musim
uznat ze diskless stanice bezi velice svizne. Cely system muzete nainstalovat
jen na jeden pocitac (bootserver) a ostatni stanice z nej bootovat. Kazda si
z /config/ bere zvlastni sys.init (sys.init.{n}, kde n je cislo uzlu podle
ARCnetu).
Realtimovy OS pro x86/286+
Co znamena slovo realtimovy doufam nemusim vysvetlovat ;) Existuji dve verze
QNXu; jedna pro XTcka a druha bezici v protected mode pro 286ky. Ta XTckova
verze nema ochranu pameti (samozrejme) a prepina mezi procesy pomoci interruptu
a syscallu. O poznani lepe je 286kova verze, kde ochrana pameti je, scheduling
je ale samozrejme softwarovy. Skoda ze Intel[R][TM][C] neimplementoval nejake
zakladni veci z schedulingu do prepinani procesu na 386+ (TSS).
Zaver?
Nevim co si mam o QNX 2 myslet. Neustale me prekvapuje. Jednou mile, potom
jsem sokovan. Ale pres to jde o *VELMI* zajimavy system. Dalsi info naleznete na
www.qnx.com, ovsem 99% je o QNX 4. Tam si muzete take
stahnout demodisketu s QNXem. S tou disketou se pripojite na sit (ppp,eth,tokenring,arcnet) a brouzdate (v GUI) ;-). Na jednu disketu se jim toho veslo docela dost, stoji opravdu za vyzkouseni.
PS: Nemate nekdo zbytecne ARCnety?
Copyright (c) 1999 Martin Hinner, All rights reserved.