MAC OS X je taky unix (2): Přehled

12. 5. 2005
Doba čtení: 4 minuty

Sdílet

Vítejte u druhého dílu našeho seriálu o Mac OS X. Minule jsme si pověděli něco o historii tohoto systému, jeho kořenech a zdrojích, ze kterých jeho autoři čerpali. Dnes si ukážeme, jak se programátorům Applu podařilo celý systém sestavit dohromady a co vlastně obsahuje.

Co se tedy nachází pod kapotou? Především tu máme mikrojádro Mach 4.0, které se stará o základní komunikaci s Open Firmware nebo BIOS (podle platformy), správu paměti, vláken a procesů a podobně. To je dále obaleno klasickým BSD kernelem; Apple použil FreeBSD jako referenci a snaží se o kompatibilitu. Tyto dvě komponenty z více-méně praktických důvodů sdílejí stejný prostor v paměti a nejedná se tak o skutečný mikro kernel v tradičním smyslu. Mach a BSD dohromady tvoří unixové jádro systému zvané XNU (XNU's Not Unix). Kompletní systém obsahující více než 250 částí se jmenuje Darwin a je dodáván včetně poměrně bohatého výběru BSD a GNU nástrojů, Apache, PHP a kompilátoru gcc. Prakticky všechny součásti této úrovně systému jsou Open Source. Nejčastější použitá licence je APL (Apple Public Licence), ale některé soubory jsou kryty GPL nebo úplně jinou licencí.

Ostřílenému uživateli GNU/Linuxu by se mohl Darwin na první pohled zdát prakticky stejný jako jeho oblíbená distribuce Linuxu, ale hlubší pohled odhalí některé poměrně zásadní rozdíly. Linux totiž vychází z větvě Unixu zvané System V, zatímco Darwin je, technicky vzato, BSD systém. Marně byste hledali například /proc nebo linuxové run levely, a když se ukáže, že chybí i adresář boot a místo něj je v kořenovém adresáři jakýsi záhadný mach_kernel, pochopí i absolutní neznalec, že něco je jinak. Apple se ale rozhodl nejít cestou pravověrného BSD, takže oproti svému FreeBSD bratranci má Darwin navíc například GNU Bash nebo Vim (BSD systémy tradičně používají C Shell a Vi). Zkrátka Mac OS X je hybrid – jakýsi kříženec mezi systémy BSD a GNU s trochou vlastních technologií.

Pro usnadnění orientace v systému jsem pro vás připravil stručné srovnání konvencí a utilit v Linuxu, Darwinu a FreeBSD, kterému se Mac OS X nejvíce podobá.

Informace o systému
Linux: /proc
FreeBSD: utilita sysctl
Darwin: utilita sysctl
Výchozí shell
Linux: většinou Bash
FreeBSD: C Shell
Darwin: Bash
Řízení služeb
Linux: run levely & /etc/init.d
FreeBSD: příkaz shutdown & /etc/rc.d
Darwin: příkaz shutdown, /etc/rc.d & BootX
Výchozí firewall
Linux: iptables
FreeBSD: ipfw
Darwin: ipfw
Disková terminologie
Linux: hd [písmeno disku] [číslo partition]
FreeBSD: [rozhranní] d [číslo disku] s [číslo slice] [písmeno partition]
Darwin: disk [číslo disku] s [číslo slice]

V této úrovni systému se dále nachází také I/O Kit, jakýsi framework pro jaderné ovladače. Na rozdíl od svých kolegů v jiných systémech je I/O Kit v XNU založen na knihovně libkern a jazyku Embedded C+ +. Tato podmnožina klasického C+ + sice umožňuje dosáhnout vysoké přenositelnosti kódu a virtualizace hardware, ale neobsahuje některé výhody C++, jako například výjimky, vícenásobné dědění nebo objektové šablony. API tohoto systému umí pracovat s vlákny, má obvykle velmi krátkou odezvu a je schopen se vypořádat se špatnými ovladači. V systému dostupné třídy pro jednotlivá zařízení jsou uloženy v I/O Catalogu a řazeny podle typu. Jakmile dojde k připojení nového zařízení, systém automaticky vybere příslušnou třídu, vytvoří její instanci (ovladač) a uloží ji v I/O Registru, odkud může komunikovat se zbytkem systému. Po odpojení zařízení se spustí destruktor a ovladač je vymazán z paměti. Tento framework umožňuje jednoduše a intuitivně pracovat s mnoha různými zařízeními pomocí jednotného rozhranní a značně zjednodušuje implementaci nových ovladačů. Systém také umožňuje v kterýkoliv moment sledovat počet instancí kterékoliv třídy, řeší problémy s odlišnou implementací mateřské a dceřiné třídy (více o tomto problému si můžete přečíst například na http://www.cas­.mcmaster.ca/~e­mil/publicati­ons/fragile/) a nabízí přístup k mnoha vysokoúrovňovým funkcím.

bitcoin školení listopad 24

Darwin není omezen na PowerPC architekturu, existuje i verze pro i386 udržovaná samotným Applem. Zajímavá je také možnost zkompilovat XNU v tzv. fat módu, tedy do binárky spustitelné na obou cílových platformách bez rozdílu. Open Source licence Darwinu využívají dva projekty: Open Darwin, sponzorovaný samotným Applem, se snaží vytvořit plnohodnotný unixový systém nejen pro PowerPC. Druhý projekt, GNU Darwin, jde cestou linuxových distribucí, jen zvolil jiný kernel. Najdete v něm kompletní grafické prostředí včetně OpenOffice.org a podobných programů.

Až do této úrovně je Mac OS X běžný Unix, dál se však už liší. Nad Darwinem/XNU stojí set služeb a knihoven přejatých většinou z NextStepu, které se starají o grafické rozhraní a uživatelské aplikace. V příštím dílu našeho seriálu se podíváme na služby typické pro Mac OS X, framework Cocoa a Applovskou implementaci Javy a OpenGL. V dalších dílech přijdou na řadu postupně zbylé části Mac OS X a NeXT Stepu a technologie přejaté z Mac OS 9 včetně prostředí Classic.