Hva skjer i Mac OS X-oppstartsprosessen?
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 typenmkext
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 avOSBundleRequired
-egenskapen iInfo.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
-variabelenkern.netboot
settes til1
i så fall), kjører den/etc/rc.netboot
med enstart 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, ogsysctl variablene som finnes deri, settes.
syslogd er startet.
- Mach-symbolfilen er opprettet.
/etc/rc
starterkextd, 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
ognettinfo 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 somDescription
,Provides
,Requires
,OrderPreference
, start/stopp-meldinger osv. Du kan kjøreSystemStarter -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!