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 typen mkext 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ör OSBundleRequired egenskapen i Info.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 (den sysctl variabla kern.netboot kommer att ställas till 1 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 och sysctl variabler som finns i det är inställda.
  • syslogd startas.
  • Mach-symbolfilen skapas.
  • /etc/rc startar kextd, 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 och netinfo 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 som Description, Provides, Requires, OrderPreference, start / stopp meddelanden etc. Du kan köra SystemStarter -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