Que se passe-t-il dans le processus de démarrage de Mac OS X ?
Vous êtes-vous déjà demandé ce qui se passe pendant le processus de démarrage et de démarrage de Mac OS X ? Avec Mac OS X, c'est un peu plus compliqué qu'auparavant, et l'époque du Mac OS classique (système 9, 8, 7, 6) est révolue depuis longtemps, où regarder nos Mac démarrer avec une série d'extensions et de panneaux de contrôle qui nous pourrions toujours identifier par leur seule icône, puis aller fouiller dans le dossier Extensions pour ajuster facilement ce qui se charge et se produit au démarrage du Mac.Aujourd'hui, avec les fondements Unix de Mac OS X, de nombreux utilisateurs ignorent totalement ce qui se passe dans les coulisses.
Que se passe-t-il exactement pendant le processus de démarrage de Mac OS X ? Vous pouvez toujours avoir un meilleur aperçu en démarrant un Mac en mode verbeux, mais cela n'explique pas nécessairement tout ce que vous voyez. Heureusement, une excellente explication est disponible via le segment de KernelThread, qui répertorie soigneusement la séquence des événements de démarrage de Mac OS X, du début à la fin. Il est assez complet et mérite d'être lu, répété ci-dessous pour les utilisateurs curieux de Mac.
ote : Comme l'a souligné un lecteur, PPC utilise OF (Openfirmware), i386 utilise EFI (Extensible Firmware Interface)
Que se passe-t-il pendant le processus de démarrage de Mac OS X ? Vous allumez votre Mac et voici ce qui se passe :
- L'alimentation est allumé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 Apple Hardware Test, etc.) est sélectionné pour démarrer. L'utilisateur peut être invité à sélectionner quoi 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 tente de charger une liste de pilotes de périphériques précédemment mise en cache (créée/mise à jour par
/usr/sbin/kextcache
). Un tel cache est du typemkext
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
les extensions nécessaires dans le scénario actuel (comme déterminé par la valeur de la propriétéOSBundleRequired
dans le fichierInfo.plist du bundle de l'extension.
- La routine
init du noyau est exécutée. Le périphérique racine du système d'amorçage est déterminé. À ce stade, le micrologiciel n'est plus accessible.
- Diverses 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 du service Mach (bootstrap).mach_init maintient les mappages entre les noms de service et les ports Mach qui permettent d'accéder à ces services.
À partir d'ici, le démarrage passe au niveau utilisateur :
mach_init
démarre/sbin/init
, le BSD traditionnel processus d'initialisation. init détermine le niveau d'exécution et exécute/etc/rc.boot, ce qui configure la machine suffisamment pour fonctionner en mode mono-utilisateur.
Lors de son exécution, rc.boot
et l'autre rc
source des scripts /etc/rc.common
, un script shell contenant des fonctions utilitaires, telles que
CheckForNetwork() (vérifie si le réseau est opérationnel),
GetPID (), purgedir() (supprime uniquement le contenu du répertoire, pas la structure), etc.
rc.boot
détermine le type de démarrage (multi-utilisateur, coffre-fort, CD-ROM, réseau, etc.). En cas de démarrage réseau (la variablesysctl
kern.netboot
sera définie sur1
auquel cas), il exécute/etc/rc.netboot
avec unstart argument.
/etc/rc.netboot
gère divers aspects du démarrage réseau. Par exemple, il effectue des montages réseau et (le cas échéant) locaux. Il appelle également /usr/bin/nbst pour associer un fichier fantôme à l'image disque utilisée comme périphérique racine.L'idée est de rediriger les écritures vers le fichier fantôme, qui, espérons-le, se trouve sur le stockage local.
rc.boot
détermine si une vérification de la cohérence du système de fichiers est requise. Les démarrages mono-utilisateur et CD-ROM n'exécutent pas fsck. SafeBoot exécute toujours fsck.rc.boot gère également l'état de retour de fsck.
- Si
rc.boot
se termine avec succès,/etc/rc
, le script de démarrage multi-utilisateurs est alors exécuté. Si vous démarrez à partir d'un CD-ROM, le script bascule vers/etc/rc.cdrom (installation).
/etc/rc
monte les systèmes de fichiers locaux (HFS+, HFS, UFS,/dev/ fd
,/.vol
), garantit que le répertoire/private/var/tmp
existe et exécute/etc/rc.installer_cleanup, s'il existe (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é.
- Diverses variables
sysctl
sont définies (comme 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 etsysctl variables qu'il contient sont définies.
syslogd est démarré.
- Le fichier de symboles Mach est créé.
/etc/rc
démarrekextd, le processus démon qui charge l'extension du noyau à la demande à partir des processus du noyau ou du client.
/usr/libexec/register_mach_bootstrap_servers
est exécuté pour charger divers services basés sur Mach bootstrap contenus dans/ etc/mach_init.d
portmap
etnetinfo 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 également 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
démarre le système de mémoire virtuelle./private/var/vm
est configuré comme répertoire d'échange./sbin/dynamic_pager est démarré avec les arguments appropriés (modèle de chemin de nom de fichier d'échange, taille des fichiers d'échange créés, déclencheurs d'alerte haute et basse spécifiant quand créer un espace d'échange supplémentaire fichiers ou supprimer ceux qui existent).
/etc/rc
démarre/usr/libexec/fix_prebindingpour corriger les binaires incorrectement préliés.
/etc/rc
exécute/etc/rc.cleanuppour 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 queDescription
,Provides
,Requires
,OrderPreference
, démarrer/arrêter les messages, etc. Vous pouvez exécuterSystemStarter -n -D en tant que root pour que le programme imprime les informations de débogage et de dépendance (sans rien exécuter).
- L'élément de démarrage
CoreGraphics
démarre le démon Apple Type Services (ATSServer
) ainsi que le serveur Windows (WindowServer).
Et puis votre Mac est démarré !
Vous pouvez voir un peu de cette activité vous-même avec le mode Verbose (que vous pouvez démarrer en mode Verbose par démarrage, ou vous pouvez même configurer un Mac pour qu'il démarre toujours en mode Verbose si vous voulez toujours voir le démarrage de style Unix), mais c'est une explication assez complète.
Apple a également une documentation disponible sur le processus de démarrage Mac disponible ici dans leur bibliothèque de documentation pour développeurs ici.
Notez que l'URL d'origine fournissant les informations ci-dessus n'est plus active, ce message a donc été inclus ci-dessus pour la postérité via le cache. La source d'origine était un fil sur KernelThread à l'url suivante : http://www.kernelthread.com/mac/osx/arch_startup.html qui est actuellement hors ligne et ne redirige pas vers un nouvel emplacement.
Si vous avez des informations ou d'autres ajouts à ajouter à la séquence de démarrage de Mac OS X, partagez-les dans les commentaires !