Was passiert beim Startvorgang von Mac OS X?

Anonim

Haben Sie sich jemals gefragt, was während des Boot- und Startvorgangs von Mac OS X passiert? Mit Mac OS X ist es etwas komplizierter als früher, und die Zeiten des klassischen Mac OS (System 9, 8, 7, 6) sind lange vorbei, wo wir zusehen mussten, wie unsere Macs mit einer Reihe von Erweiterungen und Bedienfeldern hochfuhren Wir könnten immer nur an ihrem Symbol erkennen und dann im Erweiterungsordner herumstöbern, um einfach anzupassen, was beim Mac-Start geladen wird und auftritt.Heute mit den Unix-Untermauerungen von Mac OS X wissen viele Benutzer überhaupt nicht, was hinter den Kulissen vor sich geht.

Was genau passiert also während des Startvorgangs von Mac OS X? Sie können immer besser aussehen, indem Sie einen Mac im ausführlichen Modus starten, aber das erklärt nicht unbedingt alles, was Sie sehen. Glücklicherweise ist über Segment bei KernelThread eine hervorragende Erklärung verfügbar, die die Abfolge der Mac OS X-Boot-Ereignisse von Anfang bis Ende sorgfältig auflistet. Es ist ziemlich gründlich und eine Lektüre wert, die unten für die neugierigen Mac-Benutzer da draußen wiederholt wird.

Hinweis: Wie ein Leser darauf hingewiesen hat, verwendet PPC OF (Openfirmware), i386 verwendet EFI (Extensible Firmware Interface)

Was passiert also während des Startvorgangs von Mac OS X? Sie sch alten Ihren Mac ein und Folgendes passiert:

  • Strom ist eingesch altet.
  • OF- oder EFI-Code wird ausgeführt.
  • Hardwareinformationen werden gesammelt und Hardware wird initialisiert.
  • Irgendetwas (normalerweise das Betriebssystem, aber auch Dinge wie der Apple-Hardwaretest usw.) ist zum Booten ausgewählt. Der Benutzer wird möglicherweise aufgefordert, auszuwählen, was gestartet werden soll.
  • Die Steuerung geht an /System/Library/CoreServices/BootX, den Bootloader. BootX lädt den Kernel und zeichnet auch die Betriebssystem-Badges, falls vorhanden.
  • BootX versucht, eine zuvor zwischengespeicherte Liste von Gerätetreibern zu laden (erstellt/aktualisiert von /usr/sbin/kextcache). Ein solcher Cache ist vom Typ mkext und enthält die Info-Wörterbücher und Binärdateien für mehrere Kernel-Erweiterungen. Beachten Sie, dass BootX, wenn der mkext-Cache beschädigt ist oder fehlt, in /System/Library/Extensions nach Erweiterungen suchen würde, die im aktuellen Szenario benötigt werden (wie von den Wert der Eigenschaft OSBundleRequired in der Datei Info.plist des Pakets der Erweiterung.
  • Die Routine init des Kernels wird ausgeführt. Das Root-Gerät des bootenden Systems wird ermittelt. Zu diesem Zeitpunkt ist die Firmware nicht mehr zugänglich.
  • Verschiedene Mach/BSD-Datenstrukturen werden vom Kernel initialisiert.
  • Das E/A-Kit wird initialisiert.
  • Der Kernel startet /sbin/mach_init, den Mach Service Naming (Bootstrap) Daemon. mach_init verw altet Zuordnungen zwischen Dienstnamen und den Mach-Ports, die Zugriff auf diese Dienste bieten.

Von hier an wird das Startup auf Benutzerebene:

  • mach_init startet /sbin/init, das traditionelle BSD init-Prozess. init ermittelt den Runlevel und führt /etc/rc.boot aus, wodurch die Maschine so eingerichtet wird, dass sie als Einzelbenutzer ausgeführt werden kann.

Während der Ausführung rc.boot und die anderen rc scripts source /etc/rc.common , ein Shell-Skript mit Hilfsfunktionen wie CheckForNetwork() (überprüft, ob das Netzwerk aktiv ist), GetPID (), purgedir() (löscht nur Verzeichnisinh alte, nicht die Struktur), etc.

  • rc.boot ermittelt die Art des Bootens (Multi-User, Safe, CD-ROM, Netzwerk etc.). Im Falle eines Netzwerkstarts (wird die Variable sysctl kern.netboot aufgesetzt 1 in diesem Fall) wird /etc/rc.netboot mit einem ausgeführt. Start Argument.

/etc/rc.netboot behandelt verschiedene Aspekte des Netzwerk-Bootens. Beispielsweise führt es Netzwerk- und (falls vorhanden) lokale Mounts durch. Es ruft auch /usr/bin/nbst auf, um eine Shadow-Datei mit dem Disk-Image zu verknüpfen, das als Root-Gerät verwendet wird.Die Idee ist, Schreibvorgänge in die Schattendatei umzuleiten, die sich hoffentlich im lokalen Speicher befindet.

  • rc.boot ermittelt, ob eine Konsistenzprüfung des Dateisystems erforderlich ist. Einzelbenutzer- und CD-ROM-Boots führen fsck nicht aus. SafeBoot führt immer fsck aus. rc.boot verarbeitet auch den Rückgabestatus von fsck.
  • Falls rc.boot erfolgreich beendet wird, /etc/rc , dann wird das Startskript für mehrere Benutzer ausgeführt. Beim Booten von CD-ROM wechselt das Skript zu /etc/rc.cdrom (Installation).
  • /etc/rc Mountet lokale Dateisysteme (HFS+, HFS, UFS, /dev/ fd, /.vol), stellt sicher, dass das Verzeichnis /private/var/tmp existiert und führt /etc/rc.installer_cleanup aus, falls vorhanden (von einem Installationsprogramm vor dem Neustart hinterlassen).
  • /etc/rc.cleanup wird ausgeführt. Es „reinigt“ eine Reihe von Unix- und Mac-spezifischen Verzeichnissen/Dateien.
  • BootCache wird gestartet.
  • Verschiedene sysctl Variablen werden gesetzt (zB für maximale Anzahl vnodes, System V IPC etc.). Wenn /etc/sysctl.conf existiert (plus /etc/sysctl-macosxserver.conf auf Mac OS X Server), wird es gelesen und sysctl darin enth altene Variablen werden gesetzt.
  • syslogd wird gestartet.
  • Die Mach-Symboldatei wird erstellt.
  • /etc/rc startet kextd, den Daemon-Prozess die die Kernel-Erweiterung bei Bedarf von Kernel- oder Client-Prozessen lädt.
  • /usr/libexec/register_mach_bootstrap_servers wird ausgeführt, um verschiedene Mach-Bootstrap-basierte Dienste zu laden, die in / enth alten sind etc/mach_init.d
  • portmap und netinfo werden gestartet.
  • If /System/Library/Extensions.mkext ist älter als /System/Library/Extensions , /etc/rc löscht den vorhandenen mkext und erstellt einen neuen. Es erstellt auch einen, wenn keiner existiert.
  • /etc/rc startet /usr/sbin/update , der Daemon, der interne Dateisystem-Caches häufig auf die Festplatte leert.
  • /etc/rc startet das virtuelle Speichersystem. Als Auslagerungsverzeichnis wird /private/var/vm eingerichtet. /sbin/dynamic_pager wird mit den entsprechenden Argumenten gestartet (Pfadvorlage für Auslagerungsdateinamen, Größe der erstellten Auslagerungsdateien, Hoch- und Niedrigwasser-Alarmauslöser, die angeben, wann zusätzliche Auslagerungsdateien erstellt werden sollen Dateien löschen oder vorhandene löschen).
  • /etc/rc startet /usr/libexec/fix_prebindingum falsch vorgebundene Binärdateien zu reparieren.
  • /etc/rc führt /etc/rc.cleanup auszum Bereinigen und Zurücksetzen von Dateien und Geräten.
  • /etc/rc startet endlich /sbin/SystemStarter um Startelemente von Orten wie /System/Library/StartupItems und /Library/StartupItems zu handhaben Ein StartupItem ist ein Programm, normalerweise ein Shell-Skript, dessen Name mit dem Ordnernamen übereinstimmt. Der Ordner enthält eine Eigenschaftslistendatei mit Schlüsselwertpaaren wie Description, Provides, Requires, OrderPreference, Start-/Stop-Meldungen usw. Sie können ausführen SystemStarter -n -D als root, damit das Programm Debugging- und Abhängigkeitsinformationen ausgibt (ohne tatsächlich etwas auszuführen).
  • Das Startelement CoreGraphics startet den Apple Type Services-Daemon (ATSServer ) sowie den Windows-Server (WindowServer).

Und dann wird Ihr Mac hochgefahren!

Sie können ein wenig von dieser Aktivität selbst mit dem Verbose-Modus sehen (den Sie per Booten in den Verbose-Modus booten können, oder Sie können sogar einen Mac so einstellen, dass er immer im Verbose-Modus startet, wenn Sie dies immer sehen möchten das Booten im Unix-Stil), aber dies ist eine ziemlich gründliche Erklärung.

Apple stellt auch einige Dokumentationen zum Mac-Startvorgang zur Verfügung, die hier in ihrer Entwickler-Dokumentationsbibliothek hier verfügbar sind.

Beachten Sie, dass die ursprüngliche URL, die die obigen Informationen bereitstellt, nicht mehr aktiv ist, daher wurde dieser Beitrag für die Nachwelt oben über den Cache eingefügt. Die ursprüngliche Quelle war ein Thread auf KernelThread unter der folgenden URL: http://www.kernelthread.com/mac/osx/arch_startup.html, der derzeit offline ist und nicht an einen neuen Ort umleitet.

Wenn Sie Leckerbissen oder andere Ergänzungen zur Startsequenz von Mac OS X hinzufügen möchten, teilen Sie dies in den Kommentaren!

Was passiert beim Startvorgang von Mac OS X?