Logo GNU
Kodovani Předchozí Následující Obsah

14. Hurd - Moderní mikrojádrový operační systém

Hurd je jádro operačního systémy podobně jako Linux. Je podporován přímo Richardem Stallmanem a měl by být ten pravý GNU operační systém. Narozdíl od Linuxu se nedrží přesně návrhu UNIXu a má poněkud modernější návrh. Jeho první použitelné verze už existují, ale nepatří zatím k nejstabilnějším ani k nejrychlejším.

V čem je tedy tak nový? Genialita UNIXu spočívala v tom, že jádro bylo relativně malé a jednoduché a tak na něm není moc věcí, které by zastaraly. Hurd to ale dovádí ještě dál. Používá tzv. mikrojádro Mach. To je jádro, které už neumí skoro nic mimo memory managementu, multitaskingu a jednoduché komunikace mezi procesy. Například práce se sítí, nebo diskem už není záležitost jádra. Toto jádro používají i jiné systémy (jako třeba NeXtStep). Ty ale fungují tak, že mají monolitické makrojádro jako jeden z procesů. V Hurdu už žádné makrojádro neexistuje. O všechno se starají speciální servery. To jsou samostatné programy, které umí s ostatnímy komunikovat v určitém protokolu. Nejdůležitější je authentication server. Ten zařizuje uživatelská práva. Když se program chce s jiným serverem spojit, požádá o to authentication server a ten rozhodne, jestli může a potom spojení provede. Další důležitý server zařizuje spouštění programů. Protože Hurd nemá v podstatě žádná systémová volání, tedy je téměř bez API, je mu jedno, jaké API emuluje. Standardní API je C knihovna, ale může se zavést i jiný emulátor, který může emulovat API třeba Linuxu nebo jakéhokoliv jiného OS. Zajímavé je, že díky takové podpoře různých formátů může jako spustitelný soubor fungovat třeba program v lispu. Server pro zavádění procesů potom prostě pozná, že se jedná o lispový soubor a zavede jako emulátor interpreter lispu. Tím mizí rozdíl mezi spustitelnými programy, scripty (dávkami), programy v ostatních interpretovaných jazycích nebo třeba Javovými applety.

O filesystém se samozřejmě stará také program. Ten komunikuje v souborovém protokolu. Hurd umožňuje každému souboru nastavit tzv. translator. Tedy program, kterému filesystémový server předá řízení, když se na něj bude přistupovat. Například když chci vytvořit soubor, který funguje jako UNIXová device - speciální soubor jako com nebo prn v DOSu , založím normální soubor a potom jako translator nastavím vlastní server k hardwarovému zařízení. Každý uživatel může nastavovat translatory na soubory, které vlastní. Například když mám program, který funguje jako filesystémový server pro .zip soubory, a nastavím jej jako translator k souboru aa.zip, mohu se potom dívat do souboru jako do adresáře a se zabalenými soubory pracovat jako s každým jiným. Jiné translátory potom mohou zařizovat věci jako adresář /ftp, kde podadresář je adresa počítače a zařizuje ftp clienta. Například, když chci nahrát soubor 00index ze serveru sunsite.unc.edu napíšu něco jako: cp /ftp/sunsite.unc.edu/pub/00index . a vše je hotovo. Podobný souborový interface mohou mít i další servery (TCP/IP, okenní server apod). Protokoly jsou navrženy rozšiřitelně a tak je možné dodělávat i další služby, než jsou klasické služby na souborech.

Protože každý uživatel může takové servery startovat a upravovat, může předělat vlastně celý operační systém, aniž by tím ovlivnil ostatní. Je celkem hračkou psát takové servery, protože jejich chyby při ladění neohrozí stabilitu systému a nejsou k tomu třeba superuživatelská práva, jako v UNIXu. Je to prostě OS neomezených možností. Hurd je také geniální v tom, že v podstatě zrušil rozdíl mezi knihovnou, programem a jádrem. Protože programy spolu komunikují protokolem, je jim jedno jestli běží na jednom stroji nebo na více. To znamená, že Hurd se může distribuovat na více počítačů, kde na každý bude poskytovat nějaké služby. Navíc to usnadňuje podporu pro symetrický multiprocessoring, která v makrojádrech působí potíže.

Oproti makrojádrům systémům tu odpadají složité otázky, jako jestli patří grafika do jádra. Pokud v makrojádrovém OS není grafika v jádře (jako v Linuxu) je nutné, aby systém dovolil grafické aplikaci přímý přístup na hardware, což odporuje jeho filozofii. Takovou věc nemůže dovolit aplikaci s právy normálního uživatele, protože tím aplikace může zhroutit celý počítač. Proto všechny grafické aplikace musí mít superuživatelská práva, což ale zase způsobuje nepříjemné díry do bezpečnosti. V UNIXu se to řeší pomocí X window. To je grafický server, který zařizuje grafiku za aplikace a proto potřebuje práva pouze on. I toto řešení ale přináší potíže - i X window občas obsahuje díry v bezpečnosti, může se zhroutit a nechat tak obrazovku v grafickém módu, nehodí se příliš pro aplikace jako jsou počítačové hry apod. Opačné řešení - přidání grafiky do jádra - zase přináší nepříjemné zvětšení jádra a další otázku, jak komplikované služby do jádra dát - pokud tam zahrneme pouze službu na zapnutí grafického modu a  namapování videoram do paměti procesu, znemožníme využití grafických akcelerátorů. Druhý extrém - zahrnutí do jádra celého okenního systému - jsou windows - vznikne nerozšiřitelné rychle zastarávající a velké jádro.

Na druhou stranu má mikojádrový návrh některé problémy. Asi nejdůležitější je rychlost. Dobře napsané makrojádro je samozřejmě rychlejší. Těžko se v mikrojásrových systémech implementuje cache. Klasická cache s pevně danou velikostí velký problém není, ale taková cache jako má Linux je téměř nemožná. Téměř všechno, co jde napsat v mikrojádrovém systému, jde také napsat v makrojadře. A proto se o Hurdu se vedou nekonečné spory mezi RMS a Linusem. Linus je zavilý nepřítel mikrojádrových OS a tvrdí, že to nikdy nebude pořádně fungovat. Je pravda, že Hurd není jediný mikrojádrový operační systém (další jsou například VSTA, Spring, Plan9) a přesto nevím o žádném, který by přestal být experimentální a stal se běžně používaným.


Předchozí Následující Obsah

Dotazy a připomínky ohledně stránky posílejte na hubicka@paru.cas.cz