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 tri 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. Kotelnik ......a ten nejkotlivejsi......