Čo sa stane v procese zavádzania systému Mac OS X?

Anonim

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 typu mkext 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 vlastnosti OSBundleRequired v súbore Info.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 rczdroj 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 s start 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í sa sysctl 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 a netinfo 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íklad Description, 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!

Čo sa stane v procese zavádzania systému Mac OS X?