Was passiert beim Startvorgang von Mac OS X?

Die Zeiten von OS 9 sind vorbei. Wir beobachten, wie unsere Macs mit einer Reihe von Erweiterungen und Control Panels gestartet werden, die wir immer identifizieren können. Heute, mit den Unix-Grundlagen von OS X, wissen viele Benutzer gar nicht, was hinter den Kulissen vor sich geht. Was genau passiert also während des Mac OS X Bootprozesses? Ein Segment bei KernelThread listet sorgfältig die Reihenfolge der Ereignisse von Anfang bis Ende auf. Es ist ziemlich gründlich und eine Lektüre wert. Es wird unten für die neugierigen Mac OS X Benutzer da draußen wiederholt.


Hinweis: Wie ein Leser darauf hingewiesen hat, verwendet PPC OF, i386 EFI

Sie schalten Ihren Mac ein und das passiert:

  • Die Stromversorgung ist eingeschaltet.
  • OF- oder EFI-Code wird ausgeführt.
  • Hardwareinformationen werden gesammelt und die Hardware wird initialisiert.
  • Etwas (normalerweise das Betriebssystem, aber auch Dinge wie der Apple Hardware Test, etc.) ist zum Booten ausgewählt. Der Benutzer wird möglicherweise aufgefordert, auszuwählen, was gestartet werden soll.
  • Die Steuerung wird an /System/Library/CoreServices/BootX, der Bootloader, übergeben. BootX lädt den Kernel und zeichnet ggf. auch die Betriebssystem-Badges.
  • 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 mkext und Binärdateien für mehrere Kernel-Erweiterungen. Beachten Sie, dass BootX in /System/Library/Extensions nach Erweiterungen sucht, die im aktuellen Szenario erforderlich sind, wenn der Mkext-Cache beschädigt ist oder fehlt (wie durch den Wert der OSBundleRequired Eigenschaft in der Datei Info.plist des Erweiterungspakets festgelegt) .
  • Die init Routine des Kernels wird ausgeführt. Das Root-Gerät des Boot-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 verwaltet Zuordnungen zwischen mach_init und den Mach-Ports, die Zugriff auf diese Dienste bieten.

Von hier an wird der Start auf Benutzerebene:

  • mach_init startet /sbin/init, den traditionellen BSD-Init-Prozess. init bestimmt den Runlevel und führt /etc/rc.boot, wodurch der Computer so eingerichtet wird, dass er Einzelbenutzer ausführen kann.

Während seiner Ausführung, rc.boot und den anderen rc Skripten Quelle /etc/rc.common, ein Shell-Skript mit Utility-Funktionen, wie CheckForNetwork() (überprüft, ob das Netzwerk aktiv ist), GetPID(), purgedir() (löscht Verzeichnisinhalte nur, nicht die Struktur) usw.

  • rc.boot den Boot-Typ (Multi-User, Safe, CD-ROM, Netzwerk etc.). Im Falle eines Netzwerkstarts (die sysctl Variable kern.netboot wird in diesem Fall auf 1 ), wird /etc/rc.netboot mit einem /etc/rc.netboot .

/etc/rc.netboot behandelt verschiedene Aspekte des Netzwerk-Bootens. Zum Beispiel 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 besteht darin, Schreibvorgänge in die Shadow-Datei umzuleiten, die sich hoffentlich auf dem lokalen Speicher befindet.

  • rc.boot, ob eine Konsistenzprüfung des Dateisystems erforderlich ist. Einzelbenutzer- und CD-ROM-Boots führen fsck nicht aus. SafeBoot läuft immer fsck. rc.boot behandelt auch den Rückgabestatus von fsck.
  • Wenn rc.boot erfolgreich beendet wird, /etc/rc, wird das rc.boot mehrere Benutzer ausgeführt. Wenn von einer CD-ROM gebootet wird, schaltet das Skript auf /etc/rc.cdrom (Installation) um.
  • /etc/rc mountet lokale Dateisysteme (HFS +, HFS, UFS, /dev/fd, /.vol ), stellt sicher, dass das Verzeichnis /private/var/tmp existiert und /etc/rc.installer_cleanup, sofern vorhanden ( von einem Installer vor dem Neustart verlassen).
  • /etc/rc.cleanup wird ausgeführt. Es "bereinigt" eine Reihe von Unix- und Mac-spezifischen Verzeichnissen / Dateien.
  • BootCache wird gestartet.
  • Verschiedene sysctl Variablen werden festgelegt (z. B. für die maximale Anzahl von vnodes, System V IPC usw.). Wenn /etc/sysctl.conf vorhanden ist (plus /etc/sysctl-macosxserver.conf auf Mac OS X Server), wird es gelesen und die darin enthaltenen sysctl Variablen werden gesetzt.
  • syslogd wird gestartet.
  • Die Mach-Symboldatei wird erstellt.
  • /etc/rc startet kextd, den Daemon-Prozess, der die Kernel-Erweiterung bei Bedarf von Kernel- oder Client-Prozessen lädt.
  • /usr/libexec/register_mach_bootstrap_servers wird ausgeführt, um verschiedene auf Mach Bootstrap basierende Dienste zu laden, die in /etc/mach_init.d enthalten /etc/mach_init.d
  • portmap und netinfo werden gestartet.
  • Wenn /System/Library/Extensions.mkext älter als /System/Library/Extensions, löscht /etc/rc den vorhandenen mkext und erstellt einen neuen. Es erstellt auch einen, wenn einer nicht existiert.
  • /etc/rc startet /usr/sbin/update, der Daemon, der interne Dateisystem-Caches häufig auf die Festplatte löscht.
  • /etc/rc startet das virtuelle Speichersystem. /private/var/vm ist als Auslagerungsverzeichnis eingerichtet. /sbin/dynamic_pager wird mit den entsprechenden Argumenten gestartet (Auslagerungsdateipfadvorlage, Größe der erstellten Auslagerungsdateien, Trigger für hohe und niedrige /sbin/dynamic_pager, wann zusätzliche Auslagerungsdateien erstellt oder vorhandene gelöscht werden sollen).
  • /etc/rc startet /usr/libexec/fix_prebinding, um falsch vorhergehende Binärdateien zu reparieren.
  • /etc/rc führt /etc/rc.cleanup, um Dateien und Geräte zu bereinigen und zurückzusetzen.
  • /etc/rc startet schließlich /sbin/SystemStarter, um /sbin/SystemStarter von Orten wie /System/Library/StartupItems und /Library/StartupItems . Ein StartupItem ist ein Programm, normalerweise ein Shell-Skript, dessen Name mit dem Ordnernamen übereinstimmt. Der Ordner enthält eine Eigenschaftslistendatei, die Schlüssel / Wert-Paare wie Description, Provides, Requires, OrderPreference, Start / Stop-Nachrichten usw. enthält. Sie können SystemStarter -n -D als Root SystemStarter -n -D, damit das Programm Debugging- und Abhängigkeitsinformationen ausdrucken kann (ohne tatsächlich etwas laufen lassen).
  • Das CoreGraphics startet den Apple Type Services-Daemon ( ATSServer ) sowie den Window Server ( WindowServer ).

Quelle: KernelThread