Hvad sker der i Mac OS X-opstartsprocessen?

Langt gået er OS 9-dage og ser på vores Mac'er starter op med en række udvidelser og kontrolpaneler, som vi altid kunne identificere. I dag med Unix-understøttelsen af ​​OS X er mange brugere helt uvidende om, hvad der foregår bag kulisserne. Så hvad sker der netop under opstartsprocessen i Mac OS X? Et segment på KernelThread fortæller omhyggeligt arrangementets rækkefølge fra start til slut. Det er ret grundigt og værd at læse. Det gentages nedenfor for de nysgerrige Mac OS X-brugere derude.


Bemærk: Som læser påpegede, bruger PPC OF, i386 bruger EFI

Du tænder din Mac, og det sker der:

  • Strømmen er tændt.
  • OF eller EFI kode udføres.
  • Hardwareoplysninger indsamles, og hardware er initialiseret.
  • Noget (normalt OS, men også ting som Apple Hardware Test, etc.) er valgt til at starte. Brugeren kan blive bedt om at vælge, hvad der skal startes.
  • Kontrol passerer til /System/Library/CoreServices/BootX, boot loader. BootX indlæser kernen og trækker også OS-mærkerne, hvis nogen.
  • BootX forsøger at indlæse en tidligere cachelageret liste over enhedsdrivere (oprettet / opdateret af /usr/sbin/kextcache ). En sådan cache er af typen mkext og indeholder informationsordbøgerne og binære filer til flere kerneudvidelser. Bemærk, at hvis mkext-cachen er korrupt eller mangler, vil BootX se i /System/Library/Extensions til udvidelser, der er nødvendige i det aktuelle scenario (som bestemt af værdien af OSBundleRequired ejendommen i Info.plist filen i udvidelsens bundle .
  • init rutinen for kernen udføres. Rodenheden af ​​opstartssystemet bestemmes. På dette tidspunkt er Firmware ikke tilgængelig mere.
  • Forskellige Mach / BSD datastrukturer initialiseres af kernen.
  • I / O-pakken initialiseres.
  • Kernen starter /sbin/mach_init, Mach-servicenavn (bootstrap) -demonen. mach_init opretholder mappings mellem servicenavne og Mach-portene, der giver adgang til disse tjenester.

Herfra bliver idriftsættelsen brugerniveau:

  • mach_init starter /sbin/init, den traditionelle BSD init-proces. init bestemmer runlevel og kører /etc/rc.boot, som opretter maskinen nok til at køre enkeltbruger.

Under udførelsen er rc.boot og de andre rc scripts kilde /etc/rc.common et shell script, der indeholder hjælpefunktioner, såsom CheckForNetwork() (kontroller om netværket er op), GetPID(), purgedir() (sletter kun katalogindhold, ikke strukturen) osv.

  • rc.boot angiver typen af ​​boot (Multi-User, Safe, CD-ROM, Network etc.). I tilfælde af en netværksstart (den sysctl variable kern.netboot vil blive indstillet til 1 i hvilket tilfælde), kører den /etc/rc.netboot med et kern.netboot .

/etc/rc.netboot håndterer forskellige aspekter af netværksstart. For eksempel udfører det netværk og (hvis nogen) lokale monteringer. Det kalder også /usr/bin/nbst at knytte en skyggefil med det diskbillede, der bruges som root-enheden. Tanken er at omdirigere skriver til skyggefilen, som forhåbentlig er på lokal lagring.

  • rc.boot, om en filsystem konsistens kontrol er påkrævet. Enkeltbruger- og cd-rom-støvler kører ikke fsck. SafeBoot kører altid fsck. rc.boot håndterer også returneringsstatus for fsck.
  • Hvis rc.boot succesfuldt, /etc/rc, køres multibrugeropstartsskriptet. Hvis du starter fra en cd-rom, skifter scriptet til /etc/rc.cdrom (installation).
  • /etc/rc monterer lokale filsystemer (HFS +, HFS, UFS, /dev/fd, /.vol ), sikrer, at mappen /private/var/tmp eksisterer og kører /etc/rc.installer_cleanup, hvis der eksisterer efterladt af et installationsprogram inden genstart).
  • /etc/rc.cleanup køres. Det "renser" en række Unix og Mac-specifikke mapper / filer.
  • BootCache er startet.
  • Forskellige sysctl variabler er indstillet (som for maksimalt antal vnodes, System V IPC osv.). Hvis /etc/sysctl.conf eksisterer (plus /etc/sysctl-macosxserver.conf på Mac OS X Server), er den læst og sysctl variabler indeholdt deri er indstillet.
  • syslogd er startet.
  • Mach-symbolfilen oprettes.
  • /etc/rc starter kextd, daemon processen, der indlæser kernel extension på efterspørgsel fra kernel eller klient processer.
  • /usr/libexec/register_mach_bootstrap_servers køres for at indlæse forskellige Mach bootstrap-baserede tjenester indeholdt i /etc/mach_init.d
  • portmap og netinfo er startet.
  • Hvis /System/Library/Extensions.mkext er ældre end /System/Library/Extensions, /etc/rc sletter den eksisterende mkext og opretter en ny. Det skaber også en, hvis man ikke eksisterer.
  • /etc/rc starter /usr/sbin/update, daemonen, der springer intern filsystem caches ofte til disk.
  • /etc/rc starter det virtuelle hukommelsessystem. /private/var/vm er oprettet som swap directory. /sbin/dynamic_pager startes med de relevante argumenter (swap filnavn skabelon, størrelse af swap filer oprettet, høj og lav vand advarsel udløser angiver, hvornår du skal oprette yderligere swap filer eller slette eksisterende).
  • /etc/rc starter /usr/libexec/fix_prebinding at rette ukorrekt forbundne binære filer.
  • /etc/rc udfører /etc/rc.cleanup at rydde op og nulstille filer og enheder.
  • /etc/rc lancerer endelig /sbin/SystemStarter til at håndtere opstartsposter fra steder som /System/Library/StartupItems og /Library/StartupItems . Et StartupItem er et program, normalt et shell script, hvis navn matcher mappenavnet. Mappen indeholder en ejendomslistefil, der indeholder nøgleværdipar såsom Description, Provides, Requires, OrderPreference, start / stop meddelelser osv. Du kan køre SystemStarter -n -D som root for at få programmet til at udskrive debugging og afhængighedsinformation (uden faktisk kører noget).
  • Startup-elementet CoreGraphics starter Apple Type Services-dæmonen ( ATSServer ) samt Window Server ( WindowServer ).

Kilde: KernelThread