Wat gebeurt er in het opstartproces van Mac OS X?

Lang geleden waren de dagen van OS 9, het kijken naar onze Macs opstarten met een reeks van extensies en bedieningspanelen die we altijd konden identificeren. Vandaag de dag, met de Unix-onderbouwing van OS X, zijn veel gebruikers helemaal niet op de hoogte van wat er achter de schermen gebeurt. Dus wat gebeurt er precies tijdens het opstartproces van Mac OS X? Een segment op KernelThread geeft een zorgvuldig overzicht van de volgorde van gebeurtenissen, van start tot finish. Het is vrij grondig en het lezen waard. Dit wordt hieronder herhaald voor de nieuwsgierige Mac OS X-gebruikers die er zijn.


Opmerking: zoals een lezer heeft opgemerkt, gebruikt PPC OF, i386 gebruikt EFI

Je zet je Mac aan, en dit is wat er gebeurt:

  • De voeding is ingeschakeld.
  • OF EFI-code wordt uitgevoerd.
  • Hardware-informatie wordt verzameld en hardware wordt geïnitialiseerd.
  • Iets (meestal het besturingssysteem, maar ook dingen zoals de Apple Hardware Test, enz.) Is geselecteerd om op te starten. De gebruiker kan worden gevraagd om te selecteren wat op te starten.
  • Controle gaat naar /System/Library/CoreServices/BootX, de bootloader. BootX laadt de kernel en tekent ook de OS-badges, indien aanwezig.
  • BootX probeert een eerder in de cache opgeslagen lijst met apparaatstuurprogramma's te laden (gemaakt / bijgewerkt door /usr/sbin/kextcache ). Een dergelijke cache is van het type mkext en bevat de info-woordenboeken en binaire bestanden voor meerdere mkext . Merk op dat als de mkext cache corrupt is of ontbreekt, BootX in /System/Library/Extensions zou kijken voor extensies die nodig zijn in het huidige scenario (zoals bepaald door de waarde van de eigenschap OSBundleRequired in het bestand Info.plist van de bundel van de extensie .
  • De init van de kernel wordt uitgevoerd. Het root-apparaat van het opstartsysteem wordt bepaald. Op dit moment is Firmware niet meer toegankelijk.
  • Verschillende Mach / BSD-datastructuren worden door de kernel geïnitialiseerd.
  • De I / O-set is geïnitialiseerd.
  • De kernel start /sbin/mach_init, de Mach-service benaming (bootstrap) daemon. mach_init onderhoudt toewijzingen tussen servicenamen en de Mach-poorten die toegang bieden tot die services.

Vanaf hier wordt het opstarten op gebruikersniveau:

  • mach_init start /sbin/init, het traditionele BSD init-proces. init bepaalt het runlevel en voert /etc/rc.boot, waarmee de machine voldoende wordt ingesteld om single-user uit te voeren.

Tijdens de uitvoering zijn rc.boot en de andere rc scripts bron /etc/rc.common, een shellscript met hulpprogramma-functies, zoals CheckForNetwork() (controleert of het netwerk actief is), GetPID(), purgedir() (verwijdert alleen directory-inhoud, niet de structuur), etc.

  • rc.boot het type boot (Multi-User, Safe, CD-ROM, Network etc.). In het geval van een netwerk-opstart (de sysctl variabele kern.netboot wordt in dat geval op 1 ), wordt /etc/rc.netboot met een kern.netboot .

/etc/rc.netboot behandelt verschillende aspecten van het opstarten van het netwerk. Het voert bijvoorbeeld netwerk- en (indien aanwezig) lokale mounts uit. Het roept ook /usr/bin/nbst om een ​​schaduwbestand te koppelen aan de schijfkopie die wordt gebruikt als het /usr/bin/nbst . Het idee is om schrijfbewerkingen om te leiden naar het schaduwbestand, dat hopelijk lokaal wordt opgeslagen.

  • rc.boot uit of een consistentiecontrole van het bestandssysteem vereist is. Single-user en CD-ROM-boots werken niet met fsck. SafeBoot draait altijd fsck. rc.boot behandelt ook de retourstatus van fsck.
  • Als rc.boot succes wordt afgesloten, /etc/rc, wordt het multi-user opstartscript uitgevoerd. Als u opstart vanaf een cd-rom, schakelt het script over naar /etc/rc.cdrom (installatie).
  • /etc/rc mount lokale bestandssystemen (HFS +, HFS, UFS, /dev/fd, /.vol ), zorgt ervoor dat de directory /private/var/tmp bestaat en voert /etc/rc.installer_cleanup, indien aanwezig ( achtergelaten door een installatieprogramma voordat opnieuw wordt opgestart).
  • /etc/rc.cleanup wordt uitgevoerd. Het "reinigt" een aantal Unix- en Mac-specifieke mappen / bestanden.
  • BootCache is gestart.
  • Verschillende sysctl variabelen zijn ingesteld (zoals voor maximaal aantal vnodes, System V IPC, enz.). Als /etc/sysctl.conf bestaat (plus /etc/sysctl-macosxserver.conf op Mac OS X Server), worden deze gelezen en zijn sysctl variabelen die daarin zijn ingesteld ingesteld.
  • syslogd is gestart.
  • Het Mach-symboolbestand wordt aangemaakt.
  • /etc/rc start kextd, het daemon-proces dat kextd laadt op verzoek vanuit kernel- of clientprocessen.
  • /usr/libexec/register_mach_bootstrap_servers wordt uitgevoerd om verschillende op mach-bootstrap gebaseerde services te laden die zich bevinden in /etc/mach_init.d
  • portmap en netinfo worden gestart.
  • Als /System/Library/Extensions.mkext ouder is dan /System/Library/Extensions, verwijdert /etc/rc de bestaande mkext en maakt een nieuwe. Het creëert ook een als een niet bestaat.
  • /etc/rc start /usr/sbin/update, de daemon die het interne bestandssysteem regelmatig naar de harde schijf doorspoelt.
  • /etc/rc start het virtuele geheugensysteem. /private/var/vm is ingesteld als de wisselmap. /sbin/dynamic_pager wordt gestart met de juiste argumenten (padsjabloon swapbestandsnaam, grootte van gemaakte swapbestanden, hoog / laag waterwaarschuwingstriggers die aangeven wanneer extra wisselbestanden moeten worden gemaakt of bestaande moeten worden verwijderd).
  • /etc/rc start /usr/libexec/fix_prebinding om onjuist binom binaries te corrigeren.
  • /etc/rc voert /etc/rc.cleanup om bestanden en apparaten op te schonen en opnieuw in te stellen.
  • /etc/rc uiteindelijk gestart /sbin/SystemStarter om /sbin/SystemStarter te handelen van locaties zoals /System/Library/StartupItems en /Library/StartupItems . Een StartupItem is een programma, meestal een shellscript waarvan de naam overeenkomt met de mapnaam. De map bevat een eigenschappenlijstbestand met sleutel / waarde-paren, zoals Description, Provides, Requires, OrderPreference, start / stop-berichten, enz. U kunt SystemStarter -n -D als root uitvoeren om het programma foutopsporings- en afhankelijkheidsinformatie te laten afdrukken (zonder feitelijk iets uitvoeren).
  • Het CoreGraphics start de Apple Type Services-daemon ( ATSServer ) en de Window Server ( WindowServer ).

Bron: KernelThread