Co se stane v procesu spouštění systému Mac OS X?
Napadlo vás někdy, co se stane během procesu spouštění a spouštění systému Mac OS X? S Mac OS X je to o něco složitější než věci kdysi a dávno pryč jsou dny klasického Mac OS (System 9, 8, 7, 6), kdy sledovat, jak se naše Macy spouštějí s řadou rozšíření a ovládacích panelů, které vždy jsme se mohli identifikovat pouze podle jejich ikony a pak se prohrabat ve složce Rozšíření, abychom snadno upravili, co se načítá a děje při spouštění Macu.Dnes, kdy Mac OS X podporuje Unix, mnoho uživatelů si vůbec neuvědomuje, co se děje v zákulisí.
Co se tedy přesně stane během procesu spouštění systému Mac OS X? Vždy můžete získat lepší pohled spuštěním Macu v podrobném režimu, ale to nutně nevysvětluje vše, co vidíte. Naštěstí je k dispozici vynikající vysvětlení prostřednictvím segmentu na KernelThread, který pečlivě uvádí posloupnost spouštěcích událostí Mac OS X od začátku do konce. Je to docela důkladné a stojí za přečtení, níže zopakováno pro zvídavé uživatele počítačů Mac.
poznámka: Jak upozornil čtenář, PPC používá OF (Openfirmware), i386 používá EFI (Extensible Firmware Interface)
Co se tedy stane během procesu spouštění systému Mac OS X? Zapnete svůj Mac a stane se toto:
- Napájení je zapnuto.
- OF nebo EFI kód je spuštěn.
- Shromažďují se informace o hardwaru a inicializuje se hardware.
- Něco (obvykle OS, ale také věci jako Apple Hardware Test atd.) je vybráno ke spuštění. Uživatel může být vyzván, aby vybral, co má zavést.
- Řízení přechází do
/System/Library/CoreServices/BootX, zavaděče. BootX načte jádro a také vykreslí odznaky OS, pokud existují.
- BootX se pokusí načíst dříve uložený seznam ovladačů zařízení (vytvořený/aktualizovaný uživatelem
/usr/sbin/kextcache
). Taková mezipaměť je typumkext
a obsahuje informační slovníky a binární soubory pro více rozšíření jádra. Všimněte si, že pokud je mezipaměť mkext poškozená nebo chybí, BootX vyhledá v/System/Library/Extensions
rozšíření, která jsou v aktuálním scénáři potřebná (jak je určeno hodnotu vlastnostiOSBundleRequired
v souboruInfo.plist balíčku rozšíření.
- Provede se rutina
init jádra. Je určeno kořenové zařízení zaváděcího systému. V tuto chvíli již není firmware přístupný.
- Různé datové struktury Mach/BSD jsou inicializovány jádrem.
- Sada I/O je inicializována.
- Jádro se spustí
/sbin/mach_init
, démon pojmenování (bootstrap) služby Mach.mach_init udržuje mapování mezi názvy služeb a porty Mach, které poskytují přístup k těmto službám.
Od této chvíle bude spouštění na uživatelské úrovni:
mach_init
začíná/sbin/init
, tradiční BSD init proces. init určí úroveň běhu a spustí/etc/rc.boot, což nastaví počítač dostatečně pro běh pro jednoho uživatele.
Během provádění rc.boot
a další rc
zdroj skriptů /etc/rc.common
, skript shellu obsahující pomocné funkce, jako je
CheckForNetwork() (kontroluje, zda je síť aktivní),
GetPID (), purgedir() (smaže pouze obsah adresáře, nikoli strukturu) atd.
rc.boot
určuje typ spouštění (Víceuživatelské, Bezpečné, CD-ROM, Síť atd.). V případě spouštění ze sítě (proměnnásysctl
kern.netboot
bude nastavena na1
v tom případě), běží/etc/rc.netboot
sstart argument.
/etc/rc.netboot
řeší různé aspekty zavádění ze sítě. Například provádí síťové a (pokud existuje) místní připojení. Také volá /usr/bin/nbst, aby přiřadil stínový soubor k obrazu disku používanému jako kořenové zařízení.Cílem je přesměrovat zápisy do stínového souboru, který je doufejme v místním úložišti.
rc.boot
zjistí, zda je vyžadována kontrola konzistence souborového systému. Zavádění pro jednoho uživatele a zavádění z CD-ROM nespustí fsck. SafeBoot vždy spustí fsck.rc.boot také zpracovává návratový stav fsck.
- Pokud
rc.boot
úspěšně skončí,/etc/rc
, poté se spustí spouštěcí skript pro více uživatelů. Při bootování z CD-ROM se skript přepne na/etc/rc.cdrom (instalace).
/etc/rc
připojí místní systémy souborů (HFS+, HFS, UFS,/dev/ fd
,/.vol
), zajišťuje, že adresář/private/var/tmp
existuje a běží/etc/rc.installer_cleanup, pokud takový existuje (zanechaný instalačním technikem před restartem).
/etc/rc.cleanup je spuštěno. „Vyčistí“ řadu adresářů/souborů specifických pro Unix a Mac.
- BootCache je spuštěna.
- Nastavují se různé
sysctl
proměnné (např. maximální počet vnodů, System V IPC atd.). Pokud/etc/sysctl.conf
existuje (plus/etc/sysctl-macosxserver.conf
na Mac OS X Server), je načten a jsou nastavenysysctl proměnné v něm obsažené.
syslogd je spuštěno.
- Je vytvořen soubor symbolů Mach.
/etc/rc
začínákextd, proces démona který načte rozšíření jádra na vyžádání procesů jádra nebo klienta.
/usr/libexec/register_mach_bootstrap_servers
se spouští k načtení různých služeb založených na Mach bootstrap obsažených v/ etc/mach_init.d
portmap
anetinfo jsou spuštěny.
- Pokud
/System/Library/Extensions.mkext
je starší než/System/Library/Extensions
,/etc/rc smaže existující mkext a vytvoří nový. Vytvoří také jeden, pokud žádný neexistuje.
/etc/rc
začíná/usr/sbin/update , démon, který často vyprázdní mezipaměť interního systému souborů na disk.
/etc/rc
spouští systém virtuální paměti./private/var/vm
je nastaven jako odkládací adresář./sbin/dynamic_pager se spustí s příslušnými argumenty (šablona cesty k odkládacímu souboru, velikost vytvořených odkládacích souborů, spouštěče upozornění na vysokou a nízkou hladinu vody určující, kdy vytvořit další swap soubory nebo odstranit stávající).
/etc/rc
začíná/usr/libexec/fix_prebindingopravit nesprávně předem navázané binární soubory.
/etc/rc
provede/etc/rc.cleanupk vyčištění a resetování souborů a zařízení.
/etc/rc
konečně spouští/sbin/SystemStarter
ke zpracování položek při spuštění z umístění, jako jsou/System/Library/StartupItems
a/Library/StartupItems
StartupItem je program, obvykle shell skript, jehož název odpovídá názvu složky. Složka obsahuje soubor seznamu vlastností obsahující páry klíč–hodnota, napříkladDescription
,Provides
,Vyžaduje
,Předvolby objednávky
, zprávy start/stop atd. Můžete spustitSystemStarter -n -D jako root, aby program vytiskl informace o ladění a závislostech (aniž by ve skutečnosti cokoliv spouštěl).
- Položka
CoreGraphics
spouští démona Apple Type Services (ATSServer
) a také Windows Server (WindowServer).
A pak je váš Mac spuštěn!
Málo z této aktivity můžete sami vidět v podrobném režimu (který můžete spustit do podrobného režimu při každém spuštění, nebo můžete dokonce nastavit, aby se Mac vždy spouštěl v podrobném režimu, pokud chcete vždy vidět boot ve stylu unix), ale toto je docela důkladné vysvětlení.
Apple má také k dispozici určitou dokumentaci k procesu spouštění systému Mac, která je k dispozici zde ve své knihovně dokumentace pro vývojáře zde.
Všimněte si, že původní adresa URL poskytující výše uvedené informace již není aktivní, takže příspěvek byl zahrnut výše pro další generace prostřednictvím mezipaměti. Původním zdrojem bylo vlákno na KernelThread na následující adrese URL: http://www.kernelthread.com/mac/osx/arch_startup.html, které je aktuálně offline a nepřesměrovává na nové místo.
Pokud máte nějaké drobnosti nebo jiné doplňky, které byste chtěli přidat do zaváděcí sekvence Mac OS X, podělte se v komentářích!