GNU HURD
Obsah:
Gnu-hurd je zcela novy operacni system od gnu-tedy volne siritelny jako linux
a mnohem novejsi. Jeho navrh je moooc zajimavy. Ja ho mam doma uz skoro tyden
a nestacim se divit co vsechno v nem funguje. Je to vlastne prvni scela
originalni os od 1972 tedy unixu. Myslim ze ma budoucnost.
Na to asi budu muset popsat celou jeho zakladni strukturu. Jeho zakladem
je cmu-mach. To je mikrojadro. To zarizuje UPLNE zakladni veci-tedy
hlavne memorymanagement a komunikaci pomoci portu. A vlastne nic vic. Je
to mikrojadro ktere se dneska pouziva treba v NextStepu. Ale nextstep
tedy system ktery hostuje je zcela zastarale(unixove :) navrzeny os.
Tedy nevyuziva ani 1/1000 toho co by na takove architekture slo delat.
Hlavni slabinou dnesnich unixovych systemu je to, ze vlastne vsechny
sluzby(drivery,filesystemy,komunikaci...) zdruzuji do jednoho velkeho
bloku-jadra. Jadro je vlastne jakasi cerna skrinka ktera je vpodstate
nerozsiritelna-mimo vyvojaru jadra, kteri mu hodne rozumi a riskuji
stratu dat, rezetuji dvacekrat do hodiny apod. Proste neexistuje ZADNA
cesta jak nejak elegantne jadro rozsirit aniz bychom museli delat neco
podobnyho. V kazdem pripade musime byt supervizori. Dalsi problem ktery
prinasi je to, ze cele jadro je souvisly blok, takze kdyz neco selze
vylitne pravdepodobne cely system a muze delat naprosto
nepredpokladatelne veci. Vetsina jader je jeste ke vsemu naprosto
neswapovatelnych-jsou i vyjimky aux apod. ale stejne algoritmus co
urcuje co swapovat a co ne je tak slozity, ze mu stejne nikdo nerozumi a
pro jistotu ho nepouziva takze je to zase jen jeden puntik na reklame.
I vlastni vyvoj systemu je pomalejsi a slozitejsi protoze pridelat neco
do jadra ani trochu nepripomina peknou a jednoducou praci na normalnich
aplikacich, vyzaduje vic testu a tak vyvoj jde pomalu. Pak tu vznikaji
problemy z driverama a prekompilovanim pri zmene konfigurace apod...
vzdyt to znate. Neumoznuji snadne a rychle testovani ruznych rozsireni-
treba v linuxu udelat filesystem,ktery by umoznival mountovat .tgz fajly
je temer nemozne a predstavte si to! jak by to bylo hezke.. Dalsim
problemem je multi-servering jeden z nejvetsich trendu-jeden os bezi na
nekolika serverech. Jak ma jedno jadro ridit vic pocitacu? Jak ma vic jader
dohromady pracovat jako jeden os?
Jina reseni pro problemy
Castecnym resenim byly lispovske masiny..Mel jsem tu cest na nich delat
a je to parada! Proste cely system je jeden velky interpretr lispu..
proto si ho muzete elegantne rozsirovat, menit. Podporuje multitasking
apod. Na druhou stranu naprosto selhava v tom, ze nejde udelat poradna
ochrana, nejsou aplikace atd..proste nesplnuje nektere ze zakladnich
pozadavku na OS.
Archutektura HURDU
To se snazi radikalne zmenit HURD. Jako mikrojadro si zvolil prave proto
mach. Je to totiz strasne krasne a jednoduche(asi 100KB) mikrojadro. Je
preneseno na fura platform-asi vsechny takze zadne problemy z portenim.
Je objektove navrzeno..pozor neni v C++. Nemel by ale vypadat jako
nexstep protoze to je zcela konzervativni os a nechava nejakou tu pevnou
caru-tohle je os a tohle aplikace a tohle knihovna...
Cely operacni system je vlastne soubor mnoha modulu ktere spolu komunikuji
pomoci macha.. To umoznuje multiservering-na vsech bezi mach mikrojadro
ale jednotlive moduly bezi na ruznych serverech a dohromady se bavi jako
kdyby se nechumelilo.. Vlastni jadro hurdu je malinke:mach a authentification
server.
Ahthentification server je zakladni modul hurdu. Ten zarucuje zpojeni mezi
procesy-tazda komunikace tady zacina..Jeden modul se zepta jestli muze
komunikovat z timto a jak a authentification server zjisti, jestli na to
ma pravo koukne se jestli je modul aktivni a pokud ne nastartuje ho. Potom
prideli machovsky port na komunikaci a prace muze zacit..
Protokoly
Na komunikaci se v hurdovi pouzivaji protokoly. Hurd nektere z nich definuje.
Naprosto nejzakladnejsi je I/O protokol na vstup/vystup potom jeho potomek
je file protokol na praci z filesystemama a jsou tu i dalsi jako socket apod.
Translatori
Vetsina dalsich serveru se vyvolava pomoci otevirani fajlu.. Je tu jeden
zakladni server na root filesystem a pak fura dalsich serveru,kteri jsou
"primountovani" k ruznym fajlum(takovym serverum se rika
translatori-pridelavaji nejaky interface pro ten fajl). Pokud vlastnite
fajl muzete si jakykoliv program takto primountovat. Takze si klidne ke
svemu .tar muzete pripojit tar filesystem server a potom rict cd
blbec.tar.. to otevre soubor blbec.tar-tim root fileserver se zepta
authentification servera o spojeni a spoji. Potom cd pouzije file
protokol na otevreni adresare. To uz ridi ten uzivatelsky program k
tarum. A muzete si v nem pekne delat.
Stejne jsou udelane vsechny drivery od filesystemu-proste jsou to
uzivatelske programy ktere umi komunikovat file protokolem. Pokud nejaky
z tehle programu krachne-je spatny nic strasneho se nestane.. Proste
spadne na nejaky ten fault jako todela treba midnight comander.. Protoze
z fajlama uz system nema nic spolecnyho o tom nevi.
Dalsi zajimava vec je to, ze takhle muzou funguvat i drivery-proste ridi
I/O protokol kdyz jsou znakovy nebo blokovy, sitovy drivery ridi socket
protokol-proste normalni programy jako kazdy jiny. Proto si muzete
udelat treba ftp filesystem-coz je filesystem ktery namountujete
do /ftp a potom:
ls /ftp/sunsite.unc.edu/pub/Linux/Incoming
vam proste vidiruje ten adresar..Tady vidite o co snadnejsi to budou mit
programatori..Nebodou se muset ucit ftp protokol kdyz budou chtit udelat
ftp support do svyho programu. Ftp se bude moct vyuzivat treba jako
network filesystem- I kdyz ne moc efektivni proste fantazie..
Tady vidite ze vlastne nejde uzcit co je system..ftp je normalni program
ale zarucuje systemove sluzby...authentification server je sice neco
jako kernel-vsechno jde prez nej ale zase nezarucuje nic z beznych
systemovych sluzeb.
Dulezitou soucasti hurdu jsou knihovny-zase servery co podporuji nejaky
protokol na startovani funkci. Je tu treba GNU CC knihovna ktera zarucuje
unix-like interface. Proto hurd v zadnem pripade nezavrhuje unixacky vyvoj
a je vlastne jakymsi nasledovnikem.
Interface pro klasicke programy
Dalsi zajimava vec je to. ze i startovani programu je rizeno nejakym serverem.
Proto neni problem startovat ruzne formaty-proste tu budete mit linux-elf
server na startovani elfich fajlu apouzivani knihovny pro linux-like interface.
Nebo FreeBSD startovac pro freebsd adresare..Proste programy co budou chtit
nejaky interface co vypada jako normalni klasicky os budou ho mit.
Jine sluzby
Prez translatory muze system delat i jine vylomeniny nez jenom adresare a
fajly. Protoze ke kazdemu fajlu muzete pridat jakykoliv translator muze
mluvit treba X protokolem a byt X server. Proste kazda X obrazovka je
jeden translator ta udela fajl a clienty ten fajl otevrou a pekne
v protokolu do nej pisou..
Translatori se tako pouzivaji na veci co nejsou strukturovany-treba password
server, network protokol apod..
Srandicky z filesystemama
Protoze filesystemy jsou uzivatelske programy muzete delat ruzne psi kusy0
treba filesystem co bere normalni adresar ale zmeny tam nezapisuje ale loguje
jinam a mate zpravu zdrojaku mnohem elegantneji..Vytvaret adresare co jsou
vlastne nekolik adresaru..proc filesystem../dev filesystem proste to vsechno
je detska hra..
Zakladni servery
- Authentification server
- Centralni server..zarucuje:
Zakladni otazky jestli muze/nemuze otevrit port
Uzivatel 0 muze zalozit novy authentification port
Umoznuje RPC mezi programy a mozna i servery
- Process server
-
Drzi zakladni informace jako hostname, ktere nejsou primo v machu.
Umoznuje posixacky procesovy skupiny
Dela jakesi mapovani mezi Machovskyma taskama a Hurdovyma procesama
Dela proste interface pro procesy-pid,enviroment,argc/argv
a je schopny dodavat informace pro procps-style translatory
- FTP server
-
To uz tuje popsano..dela interface pro prikazy stylu:
ls /ftp/sunsite.unc.edu/pub/Linux
- Filesystemovy servery
-
Jsou uz tu servery pro ext/2,BSD fast filesystem,NFS
- Terminalovy servery
-
Servery pro normalni I/O,jednoduche vytvareni pseudo terminalu
- Startovaci servery
-
execve volani delaj programy:
- knihovna marshals, ktera posle zpravu filesystemovymu serveru.
Ten zjisti jestli je file spustitelny
- exec server: ten se zavola potom. Ten pomoci BFD knihovny
(Binary file descriptor) nahraje image a vytvori task
Tato knihovna podporuje treba i shelly #!neco
Taky zjisti jestli jsou treba nejaky EXECSERVERY misto
standartniho hurdovyho-potom se spouzti emulace.. a startuje
se v gnu c knihovne ktera zavola process server a vytvori info.
Nove procesy se startuji volanim fork v C knihovne,ktera vola primo Macha
- Sitove protokoly
-
Samozdrejme tu bude na to knihovna. Zatim bezi TCP/IP pokud vim
Zaver
Jak vidite cely system je fura casti ktere je velmi snadne
menit,programovat predelavat rozsirovat. Proto si myslim ze je
jednoznacne lepsi nez stary navrh.
Jak je na tom hurd ted?
No je pre-alpha to znamena ze bezi-alespon u me doma ale ma celkem dost bug-
asi jako linux 0.99.11 a ne vsechno dela presne to co by melo..Emulace
ostatnich systemu-linux,dos je v zacatcich-ale dos bezi o neco
lepe nez dosemu.:) Startuje se pekne z meho linuxoveho ext/2 disku, bezi
X wokna, KOmpiluje se sam v sobe, Je relativne vykony a nevidel jsem
ho dokonale spadnout. Proste na to jak je mladej je dabelsky dobrej.
Tento soubor je soucasti rozsahle sbirky skolicek na
http://www.ucw.cz/~hubicka/skolicky
Take si muzete prohlidnout jeji puvodni textovou podobu
Nebo mi mailnout na
hubicka@ucw.cz
Copyright (C) Jan Hubicka 1995