Que se passe-t-il dans le processus de démarrage de Mac OS X?

Longtemps disparu, OS 9 a vu nos Mac démarrer avec une série d'extensions et de panneaux de contrôle que nous pouvions toujours identifier. Aujourd'hui, avec les fondements Unix d'OS X, de nombreux utilisateurs ignorent totalement ce qui se passe dans les coulisses. Alors que se passe-t-il exactement pendant le processus de démarrage de Mac OS X? Un segment de KernelThread liste soigneusement la séquence des événements, du début à la fin. C'est assez complet et mérite d'être lu. Il est répété ci-dessous pour les utilisateurs curieux de Mac OS X là-bas.


Note: Comme un lecteur l'a souligné, PPC utilise OF, i386 utilise EFI

Vous allumez votre Mac, et voici ce qui se passe:

  • L'alimentation est activée.
  • Le code OF ou EFI est exécuté.
  • Les informations sur le matériel sont collectées et le matériel est initialisé.
  • Quelque chose (généralement le système d'exploitation, mais aussi des choses comme l'Apple Hardware Test, etc.) est sélectionné pour démarrer. L'utilisateur peut être invité à sélectionner ce qu'il doit démarrer.
  • Le contrôle passe à /System/Library/CoreServices/BootX, le chargeur de démarrage. BootX charge le noyau et dessine également les badges du système d'exploitation, le cas échéant.
  • BootX essaie de charger une liste précédemment mise en cache de pilotes de périphériques (créée / mise à jour par /usr/sbin/kextcache ). Un tel cache est du type mkext et contient les dictionnaires d'informations et les fichiers binaires pour plusieurs extensions de noyau. Notez que si le cache mkext est corrompu ou manquant, BootX recherchera dans /System/Library/Extensions extensions nécessaires dans le scénario actuel (comme déterminé par la valeur de la propriété OSBundleRequired dans le fichier Info.plist du Info.plist de l'extension .
  • La routine init du noyau est exécutée. Le périphérique racine du système de démarrage est déterminé. À ce stade, le firmware n'est plus accessible.
  • Différentes structures de données Mach / BSD sont initialisées par le noyau.
  • Le kit d'E / S est initialisé.
  • Le noyau démarre /sbin/mach_init, le démon de nommage de service Mach (bootstrap). mach_init gère les mappages entre les noms de service et les ports Mach qui fournissent l'accès à ces services.

A partir de maintenant, le démarrage devient au niveau de l'utilisateur:

  • mach_init démarre /sbin/init, le processus d'initialisation BSD traditionnel. init détermine le niveau d'exécution et exécute /etc/rc.boot, ce qui permet à la machine de fonctionner en mode mono-utilisateur.

Au cours de son exécution, rc.boot et les autres scripts rc source /etc/rc.common, un script shell contenant des fonctions utilitaires, comme CheckForNetwork() (vérifie si le réseau est GetPID() ), GetPID(), purgedir() (supprime le contenu du répertoire seulement, pas la structure), etc.

  • rc.boot détermine le type de démarrage (multi-utilisateur, coffre-fort, CD-ROM, réseau, etc.). Dans le cas d'un démarrage réseau (la variable kern.netboot sera définie sur 1 dans ce cas), il exécute /etc/rc.netboot avec un argument start .

/etc/rc.netboot gère différents aspects du démarrage réseau. Par exemple, il effectue des montages en réseau et (le cas échéant) des montages locaux. Il appelle également /usr/bin/nbst pour associer un fichier shadow à l'image disque utilisée comme périphérique racine. L'idée est de rediriger les écritures vers le fichier shadow, qui, espérons-le, est sur le stockage local.

  • rc.boot détermine si une vérification de cohérence du système de fichiers est requise. Les amorces mono-utilisateur et CD-ROM n'exécutent pas fsck. SafeBoot exécute toujours fsck. rc.boot gère également le statut de retour de fsck.
  • Si rc.boot avec succès, /etc/rc, le script de démarrage multi-utilisateur est alors exécuté. Si vous démarrez à partir d'un CD-ROM, le script bascule sur /etc/rc.cdrom (installation).
  • /etc/rc monte les systèmes de fichiers locaux (HFS +, HFS, UFS, /dev/fd, /.vol ), s'assure que le répertoire /private/var/tmp existe et exécute /etc/rc.installer_cleanup, s'il en existe un ( laissé par un installateur avant le redémarrage).
  • /etc/rc.cleanup est exécuté. Il "nettoie" un certain nombre de répertoires / fichiers spécifiques à Unix et Mac.
  • BootCache est démarré.
  • Différentes variables sysctl sont définies (par exemple, pour le nombre maximum de vnodes, System V IPC, etc.). Si /etc/sysctl.conf existe (plus /etc/sysctl-macosxserver.conf sur Mac OS X Server), il est lu et les variables sysctl contenues dans ce sysctl sont définies.
  • syslogd est démarré.
  • Le fichier de symboles Mach est créé.
  • /etc/rc démarre kextd, le processus démon qui charge l'extension du noyau à la demande du noyau ou des processus clients.
  • /usr/libexec/register_mach_bootstrap_servers est exécuté pour charger divers services basés sur le bootstrap de Mach contenus dans /etc/mach_init.d
  • portmap et netinfo sont démarrés.
  • Si /System/Library/Extensions.mkext est plus ancien que /System/Library/Extensions, /etc/rc supprime le mkext existant et en crée un nouveau. Il en crée aussi un s'il n'en existe pas.
  • /etc/rc démarre /usr/sbin/update, le démon qui vide fréquemment les caches du système de fichiers interne sur le disque.
  • /etc/rc lance le système de mémoire virtuelle. /private/var/vm est configuré comme le répertoire d'échange. /sbin/dynamic_pager est démarré avec les arguments appropriés (modèle de chemin du fichier d'échange, taille des fichiers d'échange créés, déclencheurs d'alerte d'eau haute et basse spécifiant quand créer des fichiers d'échange supplémentaires ou supprimer ceux existants).
  • /etc/rc démarre /usr/libexec/fix_prebinding pour corriger les binaires prématurés.
  • /etc/rc exécute /etc/rc.cleanup pour nettoyer et réinitialiser les fichiers et les périphériques.
  • /etc/rc lance enfin /sbin/SystemStarter pour gérer les éléments de démarrage à partir d'emplacements tels que /System/Library/StartupItems et /Library/StartupItems . Un StartupItem est un programme, généralement un script shell, dont le nom correspond au nom du dossier. Le dossier contient un fichier de liste de propriétés contenant des paires clé-valeur telles que Description, Provides, Requires, OrderPreference, démarrer / arrêter les messages, etc. Vous pouvez exécuter SystemStarter -n -D tant que root pour que le programme imprime les informations de débogage et de dépendance. courir n'importe quoi).
  • L' CoreGraphics démarrage CoreGraphics démarre le démon Apple Type Services ( ATSServer ) ainsi que le serveur WindowServer ( WindowServer ).

Source: KernelThread