Hvad sker der i Mac OS X-opstartsprocessen?
Langt gået er OS 9-dage og ser på vores Mac'er starter op med en række udvidelser og kontrolpaneler, som vi altid kunne identificere. I dag med Unix-understøttelsen af OS X er mange brugere helt uvidende om, hvad der foregår bag kulisserne. Så hvad sker der netop under opstartsprocessen i Mac OS X? Et segment på KernelThread fortæller omhyggeligt arrangementets rækkefølge fra start til slut. Det er ret grundigt og værd at læse. Det gentages nedenfor for de nysgerrige Mac OS X-brugere derude.
Bemærk: Som læser påpegede, bruger PPC OF, i386 bruger EFI
Du tænder din Mac, og det sker der:
- Strømmen er tændt.
- OF eller EFI kode udføres.
- Hardwareoplysninger indsamles, og hardware er initialiseret.
- Noget (normalt OS, men også ting som Apple Hardware Test, etc.) er valgt til at starte. Brugeren kan blive bedt om at vælge, hvad der skal startes.
- Kontrol passerer til
/System/Library/CoreServices/BootX
, boot loader. BootX indlæser kernen og trækker også OS-mærkerne, hvis nogen. - BootX forsøger at indlæse en tidligere cachelageret liste over enhedsdrivere (oprettet / opdateret af
/usr/sbin/kextcache
). En sådan cache er af typenmkext
og indeholder informationsordbøgerne og binære filer til flere kerneudvidelser. Bemærk, at hvis mkext-cachen er korrupt eller mangler, vil BootX se i/System/Library/Extensions
til udvidelser, der er nødvendige i det aktuelle scenario (som bestemt af værdien afOSBundleRequired
ejendommen iInfo.plist
filen i udvidelsens bundle . init
rutinen for kernen udføres. Rodenheden af opstartssystemet bestemmes. På dette tidspunkt er Firmware ikke tilgængelig mere.- Forskellige Mach / BSD datastrukturer initialiseres af kernen.
- I / O-pakken initialiseres.
- Kernen starter
/sbin/mach_init
, Mach-servicenavn (bootstrap) -demonen.mach_init
opretholder mappings mellem servicenavne og Mach-portene, der giver adgang til disse tjenester.
Herfra bliver idriftsættelsen brugerniveau:
mach_init
starter/sbin/init
, den traditionelle BSD init-proces. init bestemmer runlevel og kører/etc/rc.boot
, som opretter maskinen nok til at køre enkeltbruger.
Under udførelsen er rc.boot
og de andre rc
scripts kilde /etc/rc.common
et shell script, der indeholder hjælpefunktioner, såsom CheckForNetwork()
(kontroller om netværket er op), GetPID()
, purgedir()
(sletter kun katalogindhold, ikke strukturen) osv.
rc.boot
angiver typen af boot (Multi-User, Safe, CD-ROM, Network etc.). I tilfælde af en netværksstart (densysctl
variablekern.netboot
vil blive indstillet til1
i hvilket tilfælde), kører den/etc/rc.netboot
med etkern.netboot
.
/etc/rc.netboot
håndterer forskellige aspekter af netværksstart. For eksempel udfører det netværk og (hvis nogen) lokale monteringer. Det kalder også /usr/bin/nbst
at knytte en skyggefil med det diskbillede, der bruges som root-enheden. Tanken er at omdirigere skriver til skyggefilen, som forhåbentlig er på lokal lagring.
rc.boot
, om en filsystem konsistens kontrol er påkrævet. Enkeltbruger- og cd-rom-støvler kører ikke fsck. SafeBoot kører altid fsck.rc.boot
håndterer også returneringsstatus for fsck.- Hvis
rc.boot
succesfuldt,/etc/rc
, køres multibrugeropstartsskriptet. Hvis du starter 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
eksisterer og kører/etc/rc.installer_cleanup
, hvis der eksisterer efterladt af et installationsprogram inden genstart)./etc/rc.cleanup
køres. Det "renser" en række Unix og Mac-specifikke mapper / filer.- BootCache er startet.
- Forskellige
sysctl
variabler er indstillet (som for maksimalt antal vnodes, System V IPC osv.). Hvis/etc/sysctl.conf
eksisterer (plus/etc/sysctl-macosxserver.conf
på Mac OS X Server), er den læst ogsysctl
variabler indeholdt deri er indstillet. syslogd
er startet.- Mach-symbolfilen oprettes.
/etc/rc
starterkextd
, daemon processen, der indlæser kernel extension på efterspørgsel fra kernel eller klient processer./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
er startet.- Hvis
/System/Library/Extensions.mkext
er ældre end/System/Library/Extensions
,/etc/rc
sletter den eksisterende mkext og opretter en ny. Det skaber også en, hvis man ikke eksisterer. /etc/rc
starter/usr/sbin/update
, daemonen, der springer intern filsystem caches ofte til disk./etc/rc
starter det virtuelle hukommelsessystem./private/var/vm
er oprettet som swap directory./sbin/dynamic_pager
startes med de relevante argumenter (swap filnavn skabelon, størrelse af swap filer oprettet, høj og lav vand advarsel udløser angiver, hvornår du skal oprette yderligere swap filer eller slette eksisterende)./etc/rc
starter/usr/libexec/fix_prebinding
at rette ukorrekt forbundne binære filer./etc/rc
udfører/etc/rc.cleanup
at rydde op og nulstille filer og enheder./etc/rc
lancerer endelig/sbin/SystemStarter
til at håndtere opstartsposter fra steder som/System/Library/StartupItems
og/Library/StartupItems
. Et StartupItem er et program, normalt et shell script, hvis navn matcher mappenavnet. Mappen indeholder en ejendomslistefil, der indeholder nøgleværdipar såsomDescription
,Provides
,Requires
,OrderPreference
, start / stop meddelelser osv. Du kan køreSystemStarter -n -D
som root for at få programmet til at udskrive debugging og afhængighedsinformation (uden faktisk kører noget).- Startup-elementet
CoreGraphics
starter Apple Type Services-dæmonen (ATSServer
) samt Window Server (WindowServer
).
Kilde: KernelThread