Vnitřnosti aneb co provádí Mac OS X pod pokličkou III

Po drobné přestávce pokračujeme v seriálu o vnitřnostech nejlepšího desktopového operačního systému Smiling Zatímco první díly vznikly především jako impulz na šíření různých omylů, které vyvolala informace o nepodpoře 64 bitů ze strany příští verze Photoshopu, dnes to vezmeme skutečně od základů a povíme si, z čeho že se ten náš systém skládá.

Historií jsme se již trochu zabývali, navíc jsou tu od toho povolanější, kteří ji i prožili. Proto nám bude stačit informace, že dnešní OS X je kombinací technologií pocházejících z více zdrojů – původního NeXTSTEPU, od kterého je odvozen, ze starého systému Mac OS (nazývaného dnes také Classic) a samozřejmě nechybí mnoho technologií, které byly vyvinuty přímo pro OS X již v době, kdy jej vyvíjela firma Apple. Pojďme to tedy vzít skutečně od základů, abychom věděli, kde se skrývá jádro pudla....

Jádro
Jak vidno, jádro má dnes leccos. Kromě onoho pudla i každý slušný operační systém. V odborné hantýrce je nazýváno kernel (odtud tedy slavný Kernel Panic). Tradičně se operační systémy dělí podle toho, je-li jejich jádro monolitické, či se jedná o tzv. mikrokernel. V čem spočívá rozdíl? Jak již název napovídá, monolitický kernel uzavírá (skoro) všechny služby systému do jednoho "balvanu" a poskytuje je navenek programům a dalším vrstvám, které pak zpravidla interagují s uživatelem. Naproti tomu mikrokernel se sám o sobě stará jen o minimum služeb skutečně nízké úrovně a ostatní nechává na dalších objektech, které se nazývají servery nebo, chcete-li, moduly či procesy (tedy, zpravidla se nazývají servers, moduls and processes; v češtině se pojednání o nich příliš nepíší). Výhody a nevýhody jednotlivých řešení jsou tedy nasnadě. Zatímco monolitickému jádru hrozí, že defekt v některé z jeho bezpočtu služeb zasáhne celý systém, mikrokernel je vůči chybám jednotlivých serverů výrazně odolnější. Za každou výhodu se ovšem platí, v tomto případě výkonem. Komunikace mezi jednotlivými procesy stojí poměrně dost prostředků, takže operační systém jako takový je o poznání pomalejší.
Na přelomu 80. a 90. let se vedly velké spory o tom, který typ architektury je výhodnější. Všeobecně panoval dojem, že do poloviny 90. let bude většina operačních systémů postavená na mikrokernelech, především pak na jádru Mach, které zažívalo velký rozvoj. Velkým odpůrcem této myšlenky byl například Linus Torvalds, otec Linuxu. A hle, měl pravdu. Prakticky žádný významný operační systém pravý mikrokernel nepoužívá. Oproti zažitému názoru ani Mac OS X. Když totiž vznikal NeXTSTEP, existoval Mach teprve ve verzi 2.5 (a Šebestová i Jonatán teprve beta 0.9.... ne, teď vážně Laughing out loud), která nebyla pravým mikrokernelem, ale jakýmsi hybridem. Teprve třetí (a tuším i poslední funkční) verze se jím stala. Navíc jádro OS X netvoří (pouze) technologie Mach. Co tedy?

Xnu is Not Unix
Nevím proč, ale z nějakého důvodu, který asi budou znát věkově pokročilejší, byla svého času ohromná móda vyvolávat do světa, že náš nový úžasný systém není Unix. Asi jako je dnes móda vykřikovat, že jím je Laughing out loud Stará pravda o tom že každý, kdo se pokusí sestavit nový OS, je vždy nucen znovu vynalézt Unix, tak vyznívá dosti přesvědčivě (jen si nemohu vzpomenout, kdo tento výrok první použil, budu rád za odkazy).
XNU je de facto hybridním jádrem, které je poskládáno z více částí. Jednu z hlavních skutečně tvoří Mach, původně verze 2.5, dnes již značně zmodernizovaný. Ten se stará o služby velmi nízké úrovně, prakticky o přímou komunikaci s HW počítače. Jedná se především o využívání procesoru a paměti, tedy o takové věci, jako preemtivní a jiné multitaskingy, chráněnou operační paměť, virtuální paměť a v neposlední řadě o "real time computing", což je technologie, o které si třeba někdy řekneme víc (kdo je nedočkavý, může se podívat na článek na MujMacu od Lubora Přikryla, který o tom něco málo píše). Pokud vás stresuje, že nevíte, o co tady běží, nenechte se! Prostě a jednoduše Mach je tak hluboko, že si tyká s hardwarem, zatímco Vy se s ním nikdy přímo nesetkáte (leda při velké smůle a zmíněném Kernel Panicu).

Další složkou jádra OS X je I/OKit. Název je odvozen od Input (tedy vstup) a Output (výstup). Zjednodušeně si I/OKit můžeme popsat jako službu, která se stará o ovladače hardware a komunikaci s ním (jedná se tedy o jiný HW než je procesor a paměť). Mimo jiné jemu vděčíme za to, že na Macu máme skutečně "Plug&Play" technologii místo "Plug&Pray", jak je tomu na jiných platformách. Linuxoví nadšenci budou jistě nesouhlasit, ale právě oddělení jádra od ovladačů umožňuje OS X vypořádat se s mnoha věcmi, se kterými má Linux problémy (často nikoliv technologické, nýbrž ideologické). I/OKit mimo jiné umožňuje také dynamické zavádění ovladačů, takže kvůli jejich instalaci není potřeba restartovat systém. A v neposlední řadě se stará o využívání energie, takže pokud se Vám notebook vybíjí moc rychle, může být chyba zde (nebo si zkuste vypnout WiFi, to taky pomůže Eye-wink ). I/OKit je technologie, která byla napsána nově pro OS X, jejím ekvivalentem v NeXTSTEPU byl DriverKit. Zásadní rozdíl je v tom, že původní technolgie využívala Objective-C, zatímco I/OKit "okleštěnou" verzi C++. Neznám důvody, které k tomu vedly, ale asi měly něco společného s výkonem a větší přístupností technologií v C++.

Na řadu přichází silný hráč na poli operačních systémů – BSD. Rozšířenou pověstí je, že OS X je vlastně takové upravené BSD. Není! Pouze používá jeho služeb, a to především k těmto činnostem: přístupová práva k souborům, síťové komunikace, správa vláken a služby na úrovni POSIX standardů (právě tyhle standardy musí splňovat operační systém, aby byl uznán plnohodnotným UNIXem). Od Leoparda je BSD část jádra postavena především na FreeBSD verze 5 (to samotné je dnes ve verzi 7, ale nemusí Vás to nijak trápit). Napsáno takhle to nevypadá, ale BSD tvoří skutečně velkou porci jádra operačního sytému. Nejen, že přistupuje přímo k HW (síťová rozhraní), ale může si potykat i s Vámi (třeba když Vám HardwareGrowler zahlásí: "IP Address released" nebo když měníte přístupová práva nějakému souboru).

Třetí důležitou složkou je souborový systém (FileSystem). Ten je do značné míry také obsluhován BSD službami, na které jsou ovšem napojeny mnohé další – především výrazně vylepšený VFS design (Virtual File System). Díky těmto službám můžeme na Macu s klidem používat dlooooooouhé názvy souborů, nemusíme se zabývat souborovými příponami (respektive systém nám je skrývá všude tam, kde jsme si to při ukládání souboru vyžádali), máme dostupná přístupová práva i na vyjímatelných médiích, žurnálování (to se hodí po "naboření" diku a následné záchraně dat). A je toho skutečně mnohem víc, pro vývojáře je důležité také to, že souborový systém podporuje zadávání cest k souborům ve formě URL adres (dokonce se v Cocoa jedná o preferovanou variantu), což umožňuje jednodušší práci s webovými servery, funkci AppleShare a mám dojem, že i Bonjure těží z těchto schopností.

Teď by mohl následovat dlouhý seznam různých drobností, které ještě jsou součástí jádra. Jedná se o různé komunikační technologie, ale také kupříkladu X11 Window system atd. Těmi Vás ale již zatěžovat nebudu (a sebe také ne, jdu spát Smiling ).

Open Source
Last but not least.... Všechny výše popsané technologie jsou k dispozici včetně zdrojových kódů. To má kromě ideologických i mnohé praktické výhody (ono je to často to samé, ačkoliv se v Redmontu snaží tvrdit něco jiného). Velmi důležitá je tato skutečnost pro vývojáře ovladačů hardware. Umožňuje jim to efektivněji nacházet případné chyby v jejich kódu.

Ještě pár odkazů, z nichž jsem mimo jiné čerpal
http://en.wikipedia.org/wiki/Darwin_%28operating_system%29
http://en.wikipedia.org/wiki/Xnu
http://developer.apple.com/documentation/Darwin/Conceptual/KernelProgram...

Příště se posuneme o něco "výše" a podíváme se na úrovně, které sedí nad jádrem systému.

Průměr: 4.8 (5 hlasů)

Komentáře

diky

Hrochu,
díky, fajn svěží článek. Těším se na pokračování.

Dobrou,
M.

zrovna vcera sem si rikal...

jestli, a kdy bude dalsi dil Smiling opet skvele napsano, diky.

Hledam programatora Mac aplikaci

Dobry den, omlovam se ze tento prispevek bude trosku mimo, ale hledam programatora schopenho psat aplikace bezici pod Mac OSX. Jedna se o jednorazovy projekt. Nevite nahodou o nekom? Pokud ano, tak kontakt na mne najdete na http://www.touchbranding.com. Dekuji. Martin

Poslat nový komentář

Smajlíci
:);):(:D}:):P:O:?8):jawdrop::sick:
Obsah tohoto pole je soukromý a nebude veřejně zobrazen.
  • Webové a e-mailové adresy jsou automaticky převedeny na odkazy.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <center> <embed> <embed> <img> <table> <td> <tr> <th> <font> <hr>
  • Řádky a odstavce se zalomí automaticky.
  • Textové smajlíky budou nahrazeny grafickými variantami.

Více informací o možnostech formátování

CAPTCHA
Tento dotaz je zde pro otestování zda jste skutečný návštěvník a pro zabránění automatizovaným robotům ve vkládání spamu do komentářů a stránek.
1 + 4 =
Vyřešte tento jednoduchý matematický problém a zadejte výsledek. Např. pro 1+3, napište 4.