Co se stane v procesu spouštění systému Mac OS X?

Anonim

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 typu mkext 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 vlastnosti OSBundleRequired v souboru Info.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 s start 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 nastaveny sysctl 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 a netinfo 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říklad Description, Provides, Vyžaduje, Předvolby objednávky, zprávy start/stop atd. Můžete spustit SystemStarter -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!

Co se stane v procesu spouštění systému Mac OS X?