Hva skjer i oppstartsprosessen for Mac OS X?

Langt borte er dagene til OS 9, ser på at våre Mac-maskiner starter opp med en rekke utvidelser og kontrollpaneler som vi alltid kunne identifisere. I dag med Unix-grunnlaget for OS X er mange brukere helt uvitende om hva som skjer bak kulissene. Så hva skjer akkurat under Mac OS X oppstartsprosessen? Et segment på KernelThread viser nøye rekkefølgen av hendelser, fra start til slutt. Det er ganske grundig og verdt å lese. Det gjentas under for de nysgjerrige Mac OS X-brukerne der ute.


Merk: Som en leser påpekt, bruker PPC OF, i386 bruker EFI

Du slår på Mac, og dette er hva som skjer:

  • Strømmen er slått på.
  • OF eller EFI-kode utføres.
  • Maskinvareinformasjon samles inn og maskinvaren initialiseres.
  • Noe (vanligvis OS, men også ting som Apple Hardware Test, etc.) er valgt for å starte opp. Brukeren kan bli bedt om å velge hva du skal starte.
  • Kontrollen går til /System/Library/CoreServices/BootX, oppstartsladeren. BootX laster kjernen og trekker også OS-merkene, hvis noen.
  • BootX prøver å laste inn en tidligere hurtigbufret liste over enhetsdrivere (opprettet / oppdatert av /usr/sbin/kextcache ). Et slikt cache er av typen mkext og inneholder mkext og binære filene for flere kjerneutvidelser. Merk at hvis mkext-cachen er skadet eller mangler, vil BootX se i /System/Library/Extensions for utvidelser som trengs i det nåværende scenariet (som bestemt av verdien av OSBundleRequired egenskapen i Info.plist filen i utvidelsesbuntet .
  • init rutinen til kjernen utføres. Rotenheten til oppstartssystemet er bestemt. På dette tidspunktet er Firmware ikke tilgjengelig lenger.
  • Ulike Mach / BSD datastrukturer initialiseres av kjernen.
  • I / O-settet er initialisert.
  • Kjernen starter /sbin/mach_init, Mach-tjenestenavn (bootstrap) -demonen. mach_init opprettholder mappings mellom servicenavn og Mach-porter som gir tilgang til disse tjenestene.

Fra nå av blir oppstarten brukernivå:

  • mach_init starter /sbin/init, den tradisjonelle BSD init prosessen. init bestemmer runlevel, og kjører /etc/rc.boot, som setter opp maskinen nok til å kjøre enkeltbruker.

Under utførelsen, rc.boot og de andre rc skriptene kilde /etc/rc.common, et shell-skript som inneholder verktøyfunksjoner, for eksempel CheckForNetwork() (kontroller om nettverket er oppe), GetPID(), purgedir() (sletter kun kataloginnhold, ikke strukturen), etc.

  • rc.boot viser ut hvilken type oppstart (Multi-User, Safe, CD-ROM, Network etc.). I tilfelle en nettverksstart (den sysctl variable kern.netboot vil bli satt til 1 i hvilket tilfelle), kjører den /etc/rc.netboot med et kern.netboot .

/etc/rc.netboot håndterer ulike aspekter ved nettverksstart. For eksempel utfører det nettverk og (hvis noen) lokale monteringer. Den ringer også /usr/bin/nbst å knytte en skyggefil med diskbildet som brukes som /usr/bin/nbst . Tanken er å omdirigere skriver til skyggefilen, som forhåpentligvis er på lokal lagring.

  • rc.boot viser ut om en kontroll av filsystemet er nødvendig. Enkeltbruker- og CD-ROM-støvler kjører ikke fsck. SafeBoot kjører alltid fsck. rc.boot håndterer også rc.boot til fsck.
  • Hvis rc.boot avsluttes vellykket, /etc/rc, kjøres deretter flerbruker oppstartskriptet. Hvis du starter opp fra en CD-ROM, skifter manuset til /etc/rc.cdrom (installasjon).
  • /etc/rc monterer lokale filsystemer (HFS +, HFS, UFS, /dev/fd, /.vol ), sikrer at katalogen /private/var/tmp eksisterer, og kjører /etc/rc.installer_cleanup, hvis en eksisterer etterlatt av et installasjonsprogram før reboot).
  • /etc/rc.cleanup kjøres. Det "renser" en rekke Unix og Mac-spesifikke kataloger / filer.
  • BootCache er startet.
  • Forskjellige sysctl variabler er angitt (for eksempel for maksimalt antall vnodes, System V IPC, etc.). Hvis /etc/sysctl.conf eksisterer (pluss /etc/sysctl-macosxserver.conf på Mac OS X Server), er det lest og sysctl variabler som er inkludert i det, er satt.
  • syslogd er startet.
  • Mach-symbolfilen er opprettet.
  • /etc/rc starter kextd, daemon prosessen som laster kjerne forlengelse på etterspørsel fra kjernen eller klient prosesser.
  • /usr/libexec/register_mach_bootstrap_servers kjøres for å laste inn ulike Mach bootstrap-baserte tjenester som finnes i /etc/mach_init.d
  • netinfo og netinfo er startet.
  • Hvis /System/Library/Extensions.mkext er eldre enn /System/Library/Extensions, /etc/rc sletter eksisterende mkext og oppretter en ny. Det skaper også en hvis man ikke eksisterer.
  • /etc/rc starter /usr/sbin/update, daemonen som spyler internt filsystem caches til disk ofte.
  • /etc/rc starter det virtuelle minnesystemet. /private/var/vm er satt opp som byttekatalog. /sbin/dynamic_pager startes med de riktige argumentene (bytt filnavn malemåte, størrelse på swap-filer opprettet, høy og lav vann varsling utløser angi når du skal opprette flere byttefiler eller slette eksisterende).
  • /etc/rc starter /usr/libexec/fix_prebinding å fikse feil forgående binarier.
  • /etc/rc kjører /etc/rc.cleanup å rydde opp og tilbakestille filer og enheter.
  • /etc/rc lanserer endelig /sbin/SystemStarter å håndtere oppstartsposter fra steder som /System/Library/StartupItems og /Library/StartupItems . En StartupItem er et program, vanligvis et shell script, hvis navn samsvarer med mappenavnet. Mappen inneholder en eiendomslistefil som inneholder nøkkelverdigepar, for eksempel Description, Provides, Requires, OrderPreference, start / stopp meldinger etc. Du kan kjøre SystemStarter -n -D som root for å få programmet til å skrive ut feilsøkings- og avhengighetsinformasjon (uten faktisk kjører noe).
  • CoreGraphics oppstartsposten starter Apple Type Services-demonen ( ATSServer ), så vel som Window Server ( WindowServer ).

Kilde: KernelThread