Vad händer i startprocessen för Mac OS X?
Långt borta är OS 9-dagarna och tittar på att våra Mac-datorer startar med en serie av tillägg och kontrollpaneler som vi alltid kunde identifiera. Idag med Unix-underlag för OS X är många användare helt omedvetna om vad som händer bakom kulisserna. Så vad händer exakt under Mac OS X startprocessen? Ett segment på KernelThread listar noggrant arrangemanget, från början till slut. Det är ganska grundligt och värt att läsa. Det upprepas nedan för de nyfikna Mac OS X-användarna där ute.
Obs! Som läsaren påpekade använder PPC OF, i386 använder EFI
Du startar din Mac, och det här är vad som händer:
- Strömmen är påslagen.
- OF eller EFI-kod exekveras.
- Maskinvaruinformation samlas in och hårdvara initialiseras.
- Något (vanligtvis OS, men även saker som Apple Hardware Test, etc.) väljs för att starta. Användaren kan bli uppmanad att välja vad som ska startas.
- Kontrollen övergår till
/System/Library/CoreServices/BootX
, startläsaren. BootX laddar kärnan och drar även OS-märkena, om sådana finns. - BootX försöker ladda en tidigare cachad lista över drivrutiner (skapad / uppdaterad av
/usr/sbin/kextcache
). En sådan cache är av typenmkext
och innehåller infoordböcker och binära filer för flera kärntillägg. Observera att om mkext-cacheminnet är korrupt eller saknas, skulle BootX se in/System/Library/Extensions
för tillägg som behövs i det aktuella scenariot (bestämt av värdet förOSBundleRequired
egenskapen iInfo.plist
filen i utvidgningsbuntet . init
för kärnan utförs. Rotenheten för uppstartssystemet bestäms. Vid denna punkt är Firmware inte tillgänglig längre.- Olika Mach / BSD datastrukturer initieras av kärnan.
- I / O-paketet initieras.
- Kärnan startar
/sbin/mach_init
, namnet Mach-namnet (bootstrap).mach_init
upprätthåller mappings mellan servicenamn och Mach-portarna som ger tillgång till dessa tjänster.
Härifrån blir uppstarten användarnivå:
mach_init
startar/sbin/init
, den traditionella BSD init processen. init bestämmer runlevel och kör/etc/rc.boot
, som sätter upp maskinen tillräckligt för att köra enanvändare.
Under dess körning, rc.boot
och andra rc
skript källa /etc/rc.common
, ett skalskript som innehåller verktygsfunktioner, såsom CheckForNetwork()
(kontrollerar om nätverket är uppe), GetPID()
, purgedir()
(raderar endast kataloginnehåll, inte strukturen) etc.
rc.boot
visar vilken typ av boot (Multi-rc.boot
, Safe, CD-ROM, Network etc.). Vid en nätverksstart (densysctl
variablakern.netboot
kommer att ställas till1
i vilket fall), körs det/etc/rc.netboot
med ett/etc/rc.netboot
.
/etc/rc.netboot
hanterar olika aspekter av nätverksstart. Det utför till exempel nätverk och eventuella lokala fästen. Det ringer också /usr/bin/nbst
att associera en skuggfil med den skivavbild som används som rotenhet. Tanken är att omdirigera skriver till skuggfilen, vilket förhoppningsvis finns på lokal lagring.
rc.boot
visar om en kontroll av filsystemet är nödvändigt. Singel-användare och CD-ROM-stövlar kör inte fsck. SafeBoot kör alltid fsck.rc.boot
hanterar också fscks returstatus.- Om
rc.boot
framgångsrikt,/etc/rc
,rc.boot
flera användare. Om du startar från en CD-skiva, växlar manuset till/etc/rc.cdrom
(installation). /etc/rc
monterar lokala filsystem (HFS +, HFS, UFS,/dev/fd
,/.vol
), säkerställer att katalogen/private/var/tmp
existerar och kör/etc/rc.installer_cleanup
, om en existerar lämnat av en installatör innan omstart)./etc/rc.cleanup
körs. Det "rensar" ett antal Unix- och Mac-specifika kataloger / filer.- BootCache startas.
- Olika
sysctl
variabler är inställda (t.ex. för maximalt antal vnodes, System V IPC, etc.). Om/etc/sysctl.conf
existerar (plus/etc/sysctl-macosxserver.conf
på Mac OS X Server), är det läst ochsysctl
variabler som finns i det är inställda. syslogd
startas.- Mach-symbolfilen skapas.
/etc/rc
startarkextd
, daemon processen som laddar kärnan förlängning på begäran från kärna eller klient processer./usr/libexec/register_mach_bootstrap_servers
körs för att ladda olika Mach bootstrap-baserade tjänster som finns i/etc/mach_init.d
portmap
ochnetinfo
startas.- Om
/System/Library/Extensions.mkext
är äldre än/System/Library/Extensions
,/etc/rc
raderar den befintliga mkexten och skapar en ny. Det skapar också en om man inte existerar. /etc/rc
startar/usr/sbin/update
, daemonen som spolar internt filsystem caches ofta till disken./etc/rc
startar det virtuella minnesystemet./private/var/vm
är inställd som swap katalog./sbin/dynamic_pager
startas med lämpliga argument (byt filnamnsmall, storlek på swap-filer skapade, hög- och lågvattenvarningsutlösare som anger när du ska skapa ytterligare bytfiler eller radera befintliga)./etc/rc
startar/usr/libexec/fix_prebinding
att fixa felaktigt förbundna binärer./etc/rc
kör/etc/rc.cleanup
att städa upp och återställa filer och enheter./etc/rc
lanserar slutligen/sbin/SystemStarter
att hantera uppstartsposter från platser som/System/Library/StartupItems
och/Library/StartupItems
. En StartupItem är ett program, vanligtvis ett skalskript, vars namn matchar mappnamnet. Mappen innehåller en egenskapslista som innehåller nyckelvärdespar somDescription
,Provides
,Requires
,OrderPreference
, start / stopp meddelanden etc. Du kan köraSystemStarter -n -D
som root för att få programmet att skriva ut felsökning och beroendet kör något).CoreGraphics
startar Apple Type Services-demonen (ATSServer
) samt Window Server (WindowServer
).
Källa: KernelThread