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 Typmkext
und enthält diemkext
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 derOSBundleRequired
Eigenschaft in der DateiInfo.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 zwischenmach_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 (diesysctl
Variablekern.netboot
wird in diesem Fall auf1
), 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 dasrc.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 enthaltenensysctl
Variablen werden gesetzt. syslogd
wird gestartet.- Die Mach-Symboldatei wird erstellt.
/etc/rc
startetkextd
, 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
undnetinfo
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 wieDescription
,Provides
,Requires
,OrderPreference
, Start / Stop-Nachrichten usw. enthält. Sie könnenSystemStarter -n -D
als RootSystemStarter -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