Hvad sker der i Mac OS X-startprocessen?
Har du nogensinde spekuleret på, hvad der sker under Mac OS X-start- og opstartsprocessen? Med Mac OS X er det lidt mere kompliceret, end tingene engang var, og for længst forbi er tiden med Classic Mac OS (System 9, 8, 7, 6), hvor vi ser vores Mac'er starte op med en række udvidelser og kontrolpaneler, der vi kunne altid identificere ved deres ikon alene og derefter gå rundt i mappen Udvidelser for nemt at justere, hvad der indlæses og sker ved Mac-opstart.I dag med Unix-grundlaget for Mac OS X er mange brugere fuldstændig uvidende om, hvad der foregår bag kulisserne.
Så hvad sker der præcist under Mac OS X-startprocessen? Du kan altid få et bedre udseende ved at starte en Mac i Verbose Mode, men det forklarer ikke nødvendigvis alt det, du ser. Heldigvis er en glimrende forklaring tilgængelig via segment på KernelThread, som omhyggeligt oplister rækkefølgen af Mac OS X-opstartsbegivenheder fra start til slut. Den er ret grundig og værd at læse, gentaget nedenfor for de nysgerrige Mac-brugere derude.
note: Som en læser påpegede, bruger PPC OF (Openfirmware), i386 bruger EFI (Extensible Firmware Interface)
Så hvad sker der under Mac OS X-startprocessen? Du tænder for din Mac, og det er hvad der sker:
- Strøm er tændt.
- OF eller EFI-kode udføres.
- Hardwareoplysninger indsamles, og hardware initialiseres.
- Noget (norm alt OS, men også ting som Apple Hardware Test osv.) er valgt til at starte. Brugeren kan blive bedt om at vælge, hvad der skal startes.
- Kontrollen overføres til
/System/Library/CoreServices/BootX, opstartsindlæseren. BootX indlæser kernen og tegner også OS badges, hvis nogen.
- BootX forsøger at indlæse en tidligere cachelagret liste over enhedsdrivere (oprettet/opdateret af
/usr/sbin/kextcache
). En sådan cache er af typenmkext
og indeholder infoordbøgerne og binære filer til flere kerneudvidelser. Bemærk, at hvis mkext-cachen er korrupt eller mangler, vil BootX kigge i/System/Library/Extensions
for udvidelser, der er nødvendige i det aktuelle scenarie (som bestemt af værdien af OSBundleRequired
egenskaben iInfo.plist filen i udvidelsens bundt.
-
init rutinen for kernen udføres. Opstartssystemets rodenhed bestemmes. På dette tidspunkt er firmware ikke længere tilgængelig.
- Forskellige Mach/BSD-datastrukturer initialiseres af kernen.
- I/O-sættet er initialiseret.
- Kernen starter
/sbin/mach_init
, Mach-tjenestens navngivningsdæmon (bootstrap).mach_init vedligeholder tilknytninger mellem tjenestenavne og de Mach-porte, der giver adgang til disse tjenester.
Herfra bliver opstarten brugerniveau:
mach_init
starter/sbin/init
, den traditionelle BSD indlede processen. init bestemmer kørselsniveauet og kører/etc/rc.boot, som sætter maskinen nok op til at køre enkeltbruger.
Under dens udførelse, rc.boot
og den anden rc
scripts kilde /etc/rc.common
, et shell-script, der indeholder hjælpefunktioner, såsom
CheckForNetwork() (kontrollerer, om netværket er oppe),
GetPID (), purgedir() (sletter kun mappeindhold, ikke strukturen), osv.
rc.boot
finder ud af opstartstypen (Multi-User, Safe, CD-ROM, Network osv.). I tilfælde af netværksstart (sysctl
-variablenkern.netboot
indstilles til1
, i så fald kører den/etc/rc.netboot
med enstart argument.
/etc/rc.netboot
håndterer forskellige aspekter af netværksopstart. For eksempel udfører den netværks- og (hvis nogen) lokale mounts. Den kalder også /usr/bin/nbst for at knytte en skyggefil til det diskbillede, der bruges som rodenheden.Ideen er at omdirigere skrivninger til skyggefilen, som forhåbentlig er på lok alt lager.
rc.boot
finder ud af, om et filsystemkonsistenstjek er påkrævet. Single-user og CD-ROM boots kører ikke fsck. SafeBoot kører altid fsck.rc.boot håndterer også returstatus for fsck.
- Hvis
rc.boot
afsluttes,/etc/rc
, multi-user startup scriptet køres derefter. Hvis der startes op 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
findes og kører/etc/rc.installer_cleanup, hvis der findes en (efterladt af et installatør før genstart).
/etc/rc.cleanup er kørt. Det "renser" en række Unix- og Mac-specifikke mapper/filer.
- BootCache er startet.
- Forskellige
sysctl
variabler indstilles (såsom for det maksimale antal vnodes, System V IPC osv.). Hvis/etc/sysctl.conf
findes (plus/etc/sysctl-macosxserver.conf
på Mac OS X Server), læses den, ogsysctl variabler indeholdt deri indstilles.
syslogd er startet.
- Mach-symbolfilen er oprettet.
/etc/rc
starterkextd, dæmonprocessen der indlæser kerneudvidelse efter behov fra kerne- eller klientprocesser.
/usr/libexec/register_mach_bootstrap_servers
køres for at indlæse forskellige Mach bootstrap-baserede tjenester indeholdt i/ etc/mach_init.d
portmap
ognetinfo startes.
- Hvis
/System/Library/Extensions.mkext
er ældre end/System/Library/Extensions
,/etc/rc sletter den eksisterende mkext og opretter en ny. Det opretter også en, hvis en ikke findes.
/etc/rc
starter/usr/sbin/update , dæmonen, der ofte tømmer interne filsystem-caches til disken.
/etc/rc
starter det virtuelle hukommelsessystem./private/var/vm
er sat op som swap-mappe. … filer eller slet eksisterende)./etc/rc
starter/usr/libexec/fix_prebindingfor at rette forkert forudbundne binære filer.
/etc/rc
udfører/etc/rc.cleanupfor at rydde op og nulstille filer og enheder.
/etc/rc
lancerer endelig/sbin/SystemStarter
til at håndtere startelementer fra steder som/System/Library/StartupItems
og/Library/StartupItems
Et StartupItem er et program, norm alt et shell-script, hvis navn matcher mappenavnet. Mappen indeholder en egenskabslistefil, der indeholder nøgleværdi-par såsomDescription
,Provides
,Kræver
,OrderPreference
, start/stop beskeder osv. Du kan køreSystemStarter -n -D som root for at få programmet til at udskrive fejlretnings- og afhængighedsoplysninger (uden egentlig at køre noget).
CoreGraphics
opstartselementet starter Apple Type Services-dæmonen (ATSServer
) samt Window Server (WindowServer).
Og så er din Mac startet op!
Du kan selv se lidt af denne aktivitet med Verbose Mode (som du kan starte i Verbose Mode pr. boot, eller du kan endda indstille en Mac til altid at starte i Verbose Mode, hvis du altid vil se støvlen i unix-stil), men dette er en ret grundig forklaring.
Apple har også noget tilgængelig dokumentation om Mac-opstartsprocessen tilgængelig her på deres udviklerdokumentaiton-bibliotek her.
Bemærk, at den originale URL, der giver ovenstående oplysninger, ikke længere er aktiv, så det indlæg er blevet inkluderet ovenfor for eftertiden via cache. Den oprindelige kilde var en tråd på KernelThread på følgende url: http://www.kernelthread.com/mac/osx/arch_startup.html som i øjeblikket er offline og ikke omdirigerer til en ny placering.
Hvis du har nogle godbidder eller andre tilføjelser at tilføje til Mac OS X-startsekvensen, så del i kommentarerne!