GNU HURD


Obsah:


co to je hurd?

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.

V cem je tak revolucni?

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.

Chyby dnesnich OSu

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: 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