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 typenmkext
og inneholdermkext
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 avOSBundleRequired
egenskapen iInfo.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 (densysctl
variablekern.netboot
vil bli satt til1
i hvilket tilfelle), kjører den/etc/rc.netboot
med etkern.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 ogsysctl
variabler som er inkludert i det, er satt. syslogd
er startet.- Mach-symbolfilen er opprettet.
/etc/rc
starterkextd
, 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
ognetinfo
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 eksempelDescription
,Provides
,Requires
,OrderPreference
, start / stopp meldinger etc. Du kan kjøreSystemStarter -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