Čo sa stane v procese zavádzania systému Mac OS X?
Premýšľali ste niekedy nad tým, čo sa stane počas procesu zavádzania a spúšťania systému Mac OS X? S Mac OS X je to o niečo komplikovanejšie ako veci kedysi a dávno preč sú dni klasického Mac OS (System 9, 8, 7, 6), kde sledovať, ako sa naše Macy spúšťajú pomocou série rozšírení a ovládacích panelov, ktoré vždy sme sa mohli rozpoznať iba podľa ich ikony a potom sa prehrabať v priečinku Rozšírenia, aby sme jednoducho upravili, čo sa načítava a vyskytuje pri zavádzaní Macu.Dnes, keď je Mac OS X podporovaný Unixom, mnohí používatelia si vôbec neuvedomujú, čo sa deje v zákulisí.
Čo presne sa teda stane počas procesu zavádzania systému Mac OS X? Vždy môžete získať lepší vzhľad spustením počítača Mac v podrobnom režime, ale to nemusí nevyhnutne vysvetľovať všetko, čo vidíte. Našťastie je k dispozícii vynikajúce vysvetlenie prostredníctvom segmentu v KernelThread, ktorý starostlivo uvádza postupnosť spúšťacích udalostí Mac OS X od začiatku do konca. Je pomerne podrobný a stojí za prečítanie, zopakovaný nižšie pre zvedavých používateľov počítačov Mac.
poznámka: Ako čitateľ zdôraznil, PPC používa OF (Openfirmware), i386 používa EFI (Extensible Firmware Interface)
Čo sa teda stane počas procesu zavádzania systému Mac OS X? Zapnete svoj Mac a stane sa toto:
- Napájanie je zapnuté.
- OF alebo EFI kód sa spustí.
- Hardvérové informácie sa zhromažďujú a hardvér sa inicializuje.
- Niečo (zvyčajne OS, ale aj veci ako Apple Hardware Test atď.) sa vyberie na spustenie. Používateľ môže byť vyzvaný, aby vybral, čo má zaviesť.
- Kontrola prechádza do
/System/Library/CoreServices/BootX, zavádzač. BootX načíta jadro a tiež nakreslí odznaky operačného systému, ak nejaké existujú.
- BootX sa pokúsi načítať predtým uložený zoznam ovládačov zariadení (vytvorený/aktualizovaný
/usr/sbin/kextcache
). Takáto vyrovnávacia pamäť je typumkext
a obsahuje informačné slovníky a binárne súbory pre viaceré rozšírenia jadra. Upozorňujeme, že ak je vyrovnávacia pamäť mkext poškodená alebo chýba, BootX vyhľadá v/System/Library/Extensions
rozšírenia, ktoré sú potrebné v aktuálnom scenári (podľa hodnotu vlastnostiOSBundleRequired
v súboreInfo.plist balíka rozšírenia.
- Vykoná sa rutina
init jadra. Je určené koreňové zariadenie zavádzacieho systému. V tomto bode už nie je firmvér prístupný.
- Rôzne dátové štruktúry Mach/BSD inicializuje jadro.
- Súprava I/O je inicializovaná.
- Jadro sa spustí
/sbin/mach_init
, démon pomenovávania služby Mach (bootstrap).mach_init udržiava mapovania medzi názvami služieb a portami Mach, ktoré poskytujú prístup k týmto službám.
Odteraz bude spustenie na úrovni používateľa:
mach_init
začína/sbin/init
, tradičné BSD iniciačný proces. init určí úroveň spustenia a spustí/etc/rc.boot, čo nastaví počítač dostatočne na spustenie pre jedného používateľa.
Počas vykonávania rc.boot
a ďalšie rc
zdroj skriptov /etc/rc.common
, skript shellu obsahujúci pomocné funkcie, ako napríklad
CheckForNetwork() (skontroluje, či je sieť zapnutá),
GetPID (), purgedir() (vymaže len obsah adresára, nie štruktúru) atď.
rc.boot
určuje typ zavádzania (Multi-User, Safe, CD-ROM, Network atď.). V prípade zavádzania zo siete (premennásysctl
kern.netboot
bude nastavená na1
v tom prípade) beží/etc/rc.netboot
sstart argument.
/etc/rc.netboot
rieši rôzne aspekty zavádzania siete. Napríklad vykonáva sieťové a (ak existujú) lokálne pripojenia. Tiež volá /usr/bin/nbst na priradenie tieňového súboru k obrazu disku, ktorý sa používa ako koreňové zariadenie.Cieľom je presmerovať zápisy do tieňového súboru, ktorý je, dúfajme, na lokálnom úložisku.
rc.boot
zisťuje, či je potrebná kontrola konzistencie súborového systému. Zavádzanie pre jedného používateľa a zavádzanie z CD-ROM nespustí fsck. SafeBoot vždy spúšťa fsck.rc.boot spracováva aj návratový stav fsck.
- Ak
rc.boot
úspešne skončí,/etc/rc
, potom sa spustí spúšťací skript pre viacerých používateľov. Pri zavádzaní z CD-ROM sa skript prepne na/etc/rc.cdrom (inštalácia).
/etc/rc
pripája lokálne súborové systémy (HFS+, HFS, UFS,/dev/ fd
,/.vol
), zabezpečuje, že adresár/private/var/tmp
existuje a beží/etc/rc.installer_cleanup, ak existuje (zanechaný inštalátorom pred reštartom).
/etc/rc.cleanup je spustené. „Vyčistí“ množstvo adresárov/súborov špecifických pre Unix a Mac.
- BootCache je spustená.
- Nastavujú sa rôzne
sysctl
premenné (napríklad pre maximálny počet vnode, System V IPC atď.). Ak/etc/sysctl.conf
existuje (plus/etc/sysctl-macosxserver.conf
na Mac OS X Server), načíta sa a nastaví sasysctl premenné v ňom obsiahnuté.
syslogd je spustené.
- Vytvoril sa súbor so symbolom Mach.
/etc/rc
sa spustíkextd, proces démona ktorý načíta rozšírenie jadra na požiadanie z jadra alebo klientskych procesov.
/usr/libexec/register_mach_bootstrap_servers
sa spúšťa na načítanie rôznych služieb založených na Machovom bootstrape obsiahnutých v/ etc/mach_init.d
portmap
anetinfo sú spustené.
- Ak
/System/Library/Extensions.mkext
je staršie ako/System/Library/Extensions
,/etc/rc vymaže existujúci mkext a vytvorí nový. Vytvorí sa aj vtedy, ak neexistuje.
/etc/rc
začína/usr/sbin/update , démon, ktorý často vyprázdni vyrovnávaciu pamäť interného systému súborov na disk.
/etc/rc
spustí systém virtuálnej pamäte./private/var/vm
je nastavený ako odkladací adresár./sbin/dynamic_pager sa spustí s príslušnými argumentmi (šablóna cesty k vymeniteľnému názvu, veľkosť vytvorených odkladacích súborov, spúšťače upozornení na vysokú a nízku hladinu vody určujúce, kedy sa má vytvoriť ďalší swap súbory alebo odstrániť existujúce).
/etc/rc
začína/usr/libexec/fix_prebindingopraviť nesprávne vopred viazané binárne súbory.
/etc/rc
vykoná/etc/rc.cleanupna vyčistenie a resetovanie súborov a zariadení.
/etc/rc
sa konečne spúšťa/sbin/SystemStarter
na spracovanie položiek pri spustení z umiestnení, ako sú/System/Library/StartupItems
a/Library/StartupItems
StartupItem je program, zvyčajne shell skript, ktorého názov sa zhoduje s názvom priečinka. Priečinok obsahuje súbor so zoznamom vlastností obsahujúci páry kľúč – hodnota, ako napríkladDescription
,Provides
,Vyžaduje
,Preferencia objednávky
, správy spustenia/zastavenia atď. Môžete spustiťSystemStarter -n -D ako root, aby program vytlačil informácie o ladení a závislosti (bez toho, aby v skutočnosti niečo spustil).
CoreGraphics
spúšťacia položka spúšťa démona Apple Type Services (ATSServer
), ako aj Windows Server (WindowServer).
A potom je váš Mac spustený!
Málo z tejto aktivity môžete vidieť sami pomocou podrobného režimu (ktorý môžete spustiť do podrobného režimu pri každom spustení alebo môžete dokonca nastaviť počítač Mac, aby sa vždy spúšťal v podrobnom režime, ak chcete vždy vidieť zavádzanie v štýle unix), ale toto je dosť dôkladné vysvetlenie.
Apple má tiež k dispozícii určitú dokumentáciu o procese zavádzania systému Mac, ktorá je k dispozícii tu vo svojej knižnici dokumentácie pre vývojárov tu.
Všimnite si, že pôvodná adresa URL poskytujúca vyššie uvedené informácie už nie je aktívna, takže príspevok bol zahrnutý vyššie pre potomkov prostredníctvom vyrovnávacej pamäte. Pôvodným zdrojom bolo vlákno na KernelThread na nasledujúcej adrese URL: http://www.kernelthread.com/mac/osx/arch_startup.html, ktoré je momentálne offline a nepresmeruje na nové miesto.
Ak máte nejaké drobnosti alebo iné dodatky, ktoré by ste chceli pridať do zavádzacej sekvencie Mac OS X, podeľte sa v komentároch!