Hva skjer i Mac OS X-oppstartsprosessen?

Anonim

Har du noen gang lurt på hva som skjer under oppstarts- og oppstartsprosessen for Mac OS X? Med Mac OS X er det litt mer komplisert enn ting en gang var, og lenge forbi er dagene med Classic Mac OS (System 9, 8, 7, 6), hvor vi ser Mac-ene våre starte opp med en rekke utvidelser og kontrollpaneler som vi kunne alltid identifisere ved ikonet deres alene, og deretter grave rundt i Extensions-mappen for enkelt å justere hva som laster og skjer ved Mac-oppstart.I dag med Unix-grunnlaget til Mac OS X, er mange brukere fullstendig uvitende om hva som skjer bak kulissene.

Så hva skjer egentlig under Mac OS X-oppstartsprosessen? Du kan alltid få et bedre utseende ved å starte en Mac i Verbose Mode, men det forklarer ikke nødvendigvis alt det du ser. Heldigvis er en utmerket forklaring tilgjengelig via segment på KernelThread, som nøye lister opp sekvensen av Mac OS X-oppstartshendelser, fra start til slutt. Den er ganske grundig og verdt å lese, gjentatt nedenfor for nysgjerrige Mac-brukere der ute.

notat: Som en leser påpekte, bruker PPC OF (Openfirmware), i386 bruker EFI (Extensible Firmware Interface)

Så hva skjer under Mac OS X-oppstartsprosessen? Du slår på Mac-en, og dette er hva som skjer:

  • Strøm er slått på.
  • OF eller EFI-kode utføres.
  • Maskinvareinformasjon samles inn og maskinvare initialiseres.
  • Noe (vanligvis OS, men også ting som Apple Hardware Test osv.) er valgt for å starte opp. Brukeren kan bli bedt om å velge hva som skal startes.
  • Kontrollen overføres til /System/Library/CoreServices/BootX, oppstartslasteren. BootX laster inn kjernen og trekker også OS-merkene, hvis noen.
  • BootX prøver å laste en tidligere bufret liste over enhetsdrivere (opprettet/oppdatert av /usr/sbin/kextcache). En slik cache er av typen mkext og inneholder infoordbøkene og binære filene for flere kjerneutvidelser. Merk at hvis mkext-bufferen er korrupt eller mangler, vil BootX se i /System/Library/Extensions for utvidelser som er nødvendige i det gjeldende scenariet (som bestemt av verdien av OSBundleRequired-egenskapen i Info.plist-filen i utvidelsens pakke.
  • init-rutinen til kjernen kjøres. Rotenheten til oppstartssystemet bestemmes. På dette tidspunktet er fastvaren ikke lenger tilgjengelig.
  • Ulike Mach/BSD-datastrukturer initialiseres av kjernen.
  • I/O-settet er initialisert.
  • Kjernen starter /sbin/mach_init, Mach-tjenesten (bootstrap)-demonen. mach_init opprettholder tilordninger mellom tjenestenavn og Mach-portene som gir tilgang til disse tjenestene.

Herfra av blir oppstarten på brukernivå:

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

Under utførelsen, rc.boot og den andre rc skriptkilden /etc/rc.common , et skallskript som inneholder verktøyfunksjoner, for eksempel CheckForNetwork() (sjekker om nettverket er oppe), GetPID (), purgedir() (sletter bare kataloginnhold, ikke strukturen), osv.

  • rc.boot finner ut hvilken type oppstart (Multi-User, Safe, CD-ROM, Network etc.). Ved nettverksoppstart (sysctl-variabelen kern.netboot settes til1 i så fall), kjører den /etc/rc.netboot med en start argument.

/etc/rc.netboot håndterer ulike aspekter ved nettverksoppstart. For eksempel utfører den nettverks- og (hvis noen) lokale monteringer. Den kaller også /usr/bin/nbst for å knytte en skyggefil til diskbildet som brukes som rotenhet.Tanken er å omdirigere skrivinger til skyggefilen, som forhåpentligvis er på lokal lagring.

  • rc.boot finner ut om en konsistenssjekk av filsystemet er nødvendig. Enbruker- og CD-ROM-oppstarter kjører ikke fsck. SafeBoot kjører alltid fsck. rc.boot håndterer returstatusen til fsck også.
  • Hvis rc.boot avsluttes, /etc/rc , flerbrukeroppstartsskriptet kjøres deretter. Hvis du starter opp fra en CD-ROM, bytter skriptet til /etc/rc.cdrom (installasjon).
  • /etc/rc monterer lokale filsystemer (HFS+, HFS, UFS, /dev/ fd, /.vol), sikrer at katalogen /private/var/tmp finnes, og kjører /etc/rc.installer_cleanup, hvis en finnes (etterlatt av et installatør før omstart).
  • /etc/rc.cleanup kjøres. Den "renser" en rekke Unix- og Mac-spesifikke kataloger/filer.
  • BootCache er startet.
  • Ulike sysctl variabler er satt (som for maksim alt antall vnoder, System V IPC, etc.). Hvis /etc/sysctl.conf finnes (pluss /etc/sysctl-macosxserver.conf på Mac OS X Server), leses den, og sysctl variablene som finnes deri, settes.
  • syslogd er startet.
  • Mach-symbolfilen er opprettet.
  • /etc/rc starter kextd, daemonprosessen som laster inn kjerneutvidelse på forespørsel fra kjerne- eller klientprosesser.
  • /usr/libexec/register_mach_bootstrap_servers kjøres for å laste ulike Mach bootstrap-baserte tjenester som finnes i / etc/mach_init.d
  • portmap og nettinfo startes.
  • Hvis /System/Library/Extensions.mkext er eldre enn /System/Library/Extensions , /etc/rc sletter den eksisterende mkext og oppretter en ny. Det oppretter også en hvis en ikke eksisterer.
  • /etc/rc starter /usr/sbin/update , demonen som tømmer interne filsystembuffer til disk ofte.
  • /etc/rc starter det virtuelle minnesystemet. /private/var/vm er satt opp som swap-katalogen. … filer eller slett eksisterende).
  • /etc/rc starter /usr/libexec/fix_prebindingfor å fikse feil forhåndsbundne binære filer.
  • /etc/rc utfører /etc/rc.cleanupfor å rydde opp og tilbakestille filer og enheter.
  • /etc/rc lanserer endelig /sbin/SystemStarter for å håndtere oppstartselementer fra steder som /System/Library/StartupItems og /Library/StartupItems Et StartupItem er et program, vanligvis et shell-skript, hvis navn samsvarer med mappenavnet. Mappen inneholder en egenskapslistefil som inneholder nøkkelverdi-par som Description, Provides, Requires, OrderPreference, start/stopp-meldinger osv. Du kan kjøre SystemStarter -n -D som root for å få programmet til å skrive ut feilsøkings- og avhengighetsinformasjon (uten egentlig å kjøre noe).
  • CoreGraphics oppstartselementet starter Apple Type Services-demonen (ATSServer ) samt Window Server (WindowServer).

Og så er Mac-en din startet opp!

Du kan se litt av denne aktiviteten selv med Verbose Mode (som du kan starte opp i Verbose Mode per oppstart, eller du kan til og med sette en Mac til alltid å starte opp i Verbose Mode hvis du alltid vil se støvelen i unix-stil), men dette er en ganske grundig forklaring.

Apple har også noe tilgjengelig dokumentasjon om Mac-oppstartsprosessen tilgjengelig her på utviklerdokumentasjonsbiblioteket her.

Vær oppmerksom på at den opprinnelige URL-adressen som gir informasjonen ovenfor, ikke lenger er aktiv, så innlegget er inkludert ovenfor for ettertiden via cache. Den opprinnelige kilden var en tråd på KernelThread på følgende url: http://www.kernelthread.com/mac/osx/arch_startup.html som for øyeblikket er frakoblet og ikke omdirigerer til en ny plassering.

Hvis du har noen godbiter eller andre tillegg å legge til i Mac OS X-oppstartssekvensen, del i kommentarfeltet!

Hva skjer i Mac OS X-oppstartsprosessen?