Comment le serveur démarre


Le démarrage d'un serveur est une séquence d'actions longue et complexe, en fonction du composant matériel, des paramètres et du logiciel utilisé. De nombreux administrateurs système, même expérimentés et qualifiés, ont une mauvaise idée de ce qui se passe exactement au démarrage du serveur, nous avons donc décidé d'analyser ce processus en détail.

Afin de ne pas démonter tous les cas possibles, nous envisagerons le chargement dans les conditions suivantes:

  • Processeur Intel 64 bits;
  • Mode de démarrage hérité
  • Partitionnement du disque MBR;
  • chargeur de démarrage GRUB2.

Réveillez-vous et chantez


La mise sous tension du serveur est initiée de différentes manières, parmi lesquelles appuyer sur le bouton Power On est le plus courant, mais pas le seul. Une autre option est via une commande sur le réseau ( Wake-on-LAN ) ou via des commandes de périphériques externes ( Wake-on-PCIe , Wake-on-Keyboard , Wake-on-Mouse ). Les commandes ne sont exécutées que si les paramètres correspondants sont activés dans l' utilitaire de configuration du BIOS , dont nous parlerons un peu plus tard.

Un module distinct est le module BMC, qui offre des capacités avancées de gestion de serveur. En savoir plus sur cette technologie dans notre blog .

Les méthodes précédentes sont intelligentes et nécessitent l'envoi d'une commande spécialement formée sur les bus de données. Une manière plus simple: allumez-le lorsque l'alimentation est fournie à l'alimentation. Dans les paramètres du BIOS, ce paramètre est appelé AC Power Loss et prend l'un des trois états suivants:

  • Power Off - le serveur restera éteint.
  • Power On - le serveur s'allumera.
  • Dernier état - le serveur ne s'allumera que s'il a été allumé au moment de la panne de courant.

L'utilisation de ces méthodes conduit également à envoyer au processeur un signal de réinitialisation et au début de la procédure de démarrage.

Téléchargez le premier programme


La première étape du démarrage du serveur consiste à mettre sous tension et à définir le signal de réinitialisation pour le processeur. S'il y a un signal de réinitialisation , le générateur de fréquence du processeur ne fonctionne pas et les registres du processeur sont réinitialisés aux valeurs définies par le fabricant du processeur.

Lors du démarrage, des transitoires se produisent dans l'alimentation, en raison desquels la tension de sortie peut être en dehors des limites autorisées, ce qui affectera négativement le processeur de travail. Par conséquent, le signal de réinitialisation n'est pas supprimé tant que l'alimentation entrante n'est pas complètement stabilisée.

Après stabilisation de la tension, l'alimentation définit le signal Power Good . Ce signal signifie que la carte mère peut démarrer tous les composants du serveur. Ensuite, le chipset affiche dans l'espace d'adressage tous les périphériques connectés, y compris la ROM (mémoire morte) avec le code BIOS ( Basic Input / Output System ). Ensuite, le signal de réinitialisation est supprimé et le générateur de fréquence du processeur démarre.

BIOS - un système qui fournit une API pour travailler avec des équipements et des appareils connectés. L'un des objectifs importants du BIOS est d'initialiser et de tester le matériel au démarrage.


Quel que soit le nombre de processeurs du système, au démarrage du serveur, un seul cœur d'un processeur se réveille et les cœurs restants restent en mode veille. Le noyau éveillé est désigné par le processeur Bootstrap (BSP, ci-après dénommé le processeur). Après la disparition du signal de réinitialisation , les registres du processeur sont remplis de telle sorte que le processeur fonctionne dans un mode spécial de 32 bits appelé mode de processeur initial .

Mode processeur initial - un mode de fonctionnement dans lequel un processeur 64 bits obtient uniquement après une réinitialisation. Dans ce mode, le processeur est capable d'exécuter des instructions 32 bits et l'espace d'adressage est de 4 Gio.

Après la disparition du signal de réinitialisation , le compteur de commandes du processeur pointe vers l'adresse 0xFFFFFFF0 , qui est appelée vecteur de réinitialisation . A cette adresse se trouve la première commande que le processeur décode et exécute.
Placer la première instruction à la fin de l'espace d'adressage a une justification historique. Lors du développement du processeur Intel 8086, au début de l'espace d'adressage se trouvait un vecteur d'interruption, suivi de la RAM, dont la quantité pouvait être quelconque. Afin d'éviter les intersections avec la RAM, l'adresse de la première commande a été prise à la fin de l'espace d'adressage.

Plus tard, avec l'arrivée d'Intel 80286, le vecteur d'interruption pourrait être déplacé n'importe où. Cependant, même les processeurs modernes fonctionnent en mode de compatibilité avec 8086 et le vecteur d'interruption à 0x0.
Lors de l'accès à l'adresse 0xFFFFFFF0, le processeur reçoit la première commande de la ROM. En mode hérité, cette commande est un saut en longueur ou un saut en longueur dans un segment de mémoire avec un code BIOS. Après avoir terminé le premier saut en longueur, le processeur passe en mode réel 16 bits et procède à l'exécution du code BIOS.

Mode réel - mode de compatibilité avec les processeurs 16 bits obsolètes. Dans ce mode, seules les commandes 16 bits sont disponibles et l'espace d'adressage, appelé «mémoire inférieure», ne contient que 1 Mio.

Comme indiqué précédemment, le code exécutable du BIOS est stocké sur un périphérique externe, dont le fonctionnement n'est pas très rapide, donc la première chose que fait le BIOS est d'initialiser la RAM et de copier son propre code de la ROM dedans. Le BIOS conserve la compatibilité avec les processeurs obsolètes; par conséquent, il effectue toutes les actions en mode 16 bits.

Auto-test de mise sous tension


L'autotest de mise sous tension (POST) est une étape clé du BIOS. POST est abrégé et complet. Full POST vérifie tous les contrôleurs disponibles et teste toute la RAM disponible, ce qui peut prendre du temps.

Le POST abrégé accélère le processus de démarrage et comprend l'ensemble minimal d'actions nécessaires:

  • vérifier l'intégrité des programmes BIOS dans la ROM en utilisant le mécanisme de vérification de la somme de contrôle;
  • détection et initialisation des principaux contrôleurs, bus système et appareils connectés;
  • déterminer la taille de la RAM et tester le premier segment (64 kilo-octets);
  • transfert de contrôle au bootloader.

Lors de la réussite du test POST, le serveur utilise plusieurs méthodes pour refléter les informations sur le passage des tests. Les moyens les plus courants:

  • afficher l'identifiant du test, le code POST sur l'écran ou utiliser des indicateurs à sept segments sur la carte mère;
  • indication sonore;
  • alarme lumineuse avec une combinaison de LED.


La manière la plus informative d'obtenir des informations sur d'éventuels dysfonctionnements est d'afficher le code POST actuel. Une fois les tests réussis, les codes se remplacent rapidement, mais en cas de dysfonctionnement, le POST s'arrête et vous pouvez voir l'identifiant du test qui a échoué. Les fabricants de cartes mères attachent toujours un décodage, ce qui signifie un code particulier.


Sur les cartes mères modernes, il y a une indication LED qui vous permet d'identifier un composant défectueux. Si le serveur démarre correctement, vous pouvez entendre un bip qui indique que le POST a réussi. Par la durée et le nombre de signaux sonores, il est également possible de déterminer un composant défaillant.


Dans certains cas, lorsqu'une précision maximale est requise pour les diagnostics, vous pouvez recourir à un périphérique externe appelé carte POST. Les cartes mères envoient des informations sur les tests POST sur les bus de données, et une carte POST traite ces informations et les affiche à l'aide des indicateurs disponibles.

Utilitaire de configuration du BIOS


Le BIOS possède un menu de configuration spécial appelé BIOS Setup Utility . Vous pouvez le saisir en appuyant sur une touche spéciale tout en passant POST. Le plus souvent, les clés pour entrer dans le BIOS sont Del et F2 , cependant, lors du chargement, il est toujours indiqué quelle clé ouvrira les paramètres du BIOS.


L'utilitaire de configuration du BIOS fournit une interface de configuration, qui ne nécessite qu'un clavier pour communiquer. L'utilitaire de configuration du BIOS fournit des informations sur le matériel installé et vous permet de modifier les paramètres de fonctionnement de la carte mère et de l'équipement connecté.

Les noms et options possibles de tel ou tel paramètre dépendent de nombreux facteurs, parmi lesquels:

  • Version du BIOS
  • modèle de carte mère;
  • modèle de l'équipement installé dans la carte mère.

Parmi les paramètres, nous nous intéressons à la priorité de démarrage . La priorité de démarrage définit l'ordre dans lequel le BIOS interroge les périphériques pour y trouver la zone de démarrage. Dès que le BIOS trouve la zone de démarrage, le contrôle est transféré au chargeur de démarrage et l'étape suivante commence.


Chargeur OS


Après avoir passé le POST, le BIOS recherche la zone de démarrage, interrogeant les périphériques dans l'ordre spécifié. En mode hérité , la zone de démarrage sur le disque est appelée Master Boot Record (MBR). MBR est une structure spéciale située dans les 512 premiers octets du disque. Ces 512 octets contiennent les données suivantes:

  • code de la première étape du chargeur de démarrage - de 0 à 445 octets;
  • table de partition - de 446 à 509 octets;
  • Le nombre magique est 0xAA55 - de 510 à 511 octets.

S'il n'y a pas de nombre magique 0xAA55 , il est considéré que l'enregistrement MBR sur ce disque n'a pas été trouvé et le BIOS procède à l'interrogation du disque suivant.

Lorsque le BIOS trouve l'enregistrement MBR, il le copie du disque vers la RAM à l'adresse 0x7C00 et passe à cette adresse. Après le saut, la première étape ( étape 1 ) du chargeur de démarrage commence. En raison de la taille limitée, l'objectif de la première étape est de charger le code de la deuxième étape ( étape 2 ) dans la mémoire et de lui transférer le contrôle.

Le code de l' étape 2 est stocké immédiatement après la structure MBR et jusqu'au début de la première partition de disque. Historiquement, cet espace contient 31 Ko de mémoire et, dans les systèmes modernes, il atteint 1 Mo. Cependant, pour conserver la compatibilité, la taille du deuxième étage ne dépasse pas 31 Ko.

La deuxième étape prépare l'environnement pour le lancement de la troisième étape:

  • Charge les pilotes de système de fichiers nécessaires
  • trouve le code de la troisième étape sur le système de fichiers;
  • charge le code dans la RAM et lui transfère le contrôle.

Les tâches de l' étape 3 se résument à une configuration minimale de l'environnement et du chargeur de démarrage:

  • transférer le processeur en mode protégé ;
  • Télécharger les extensions GRUB2 installées
  • trouver l' étape 4 sur le système de fichiers et lui donner le contrôle.

Mode protégé - mode de compatibilité avec les processeurs x86. Dans ce mode, le processeur est capable d'exécuter des instructions 32 bits et l'espace d'adressage s'étend à 4 Gio. Des innovations importantes sont apparues en mode protégé, par exemple:


La quatrième étape ( étape 4 ) fonctionne déjà en mode 32 bits, si nécessaire, elle est chargée à partir du disque d'extension GUI, "analyse" le fichier grub.cfg et affiche le menu de sélection du système d'exploitation familier.


Noyau OS


GRUB2 suit la spécification Multiboot pour charger l'exécutable du noyau. Le chargeur de démarrage vérifie le nombre magique 0x1BADB002 au début du noyau et vérifie la somme de contrôle pour s'assurer que le noyau est compatible avec la spécification. Après une vérification réussie, le noyau peut être chargé dans la RAM et y être transféré.

Selon la même spécification, le chargeur de démarrage fournit au noyau des informations système, telles que:

  • mode processeur actuel;
  • quantité de RAM détectée;
  • type de sortie vidéo (texte ou pixel);
  • résolution d'écran.

Malgré le fait que le chargeur de démarrage utilise des pilotes de système de fichiers et, éventuellement, des extensions pour l'interface graphique, le noyau amorçable ne recevra pas toutes ces merveilleuses choses. Tout d'abord, après avoir pris le contrôle, le noyau "révèle" tout le potentiel du serveur et met le processeur en mode long .

Mode long - le mode principal des processeurs 64 bits. Dans ce mode, le processeur est capable d'exécuter des instructions 64 bits et d'utiliser des registres polyvalents 64 bits. L'espace d'adressage contient 16 EIB. Le mode long a supprimé l'organisation de la mémoire segmentée inhérente à l'architecture 32 bits.

Malgré l'énorme espace d'adressage pour l'adressage de la mémoire physique, seuls 48 bits sur les 64 possibles sont utilisés, ce qui réduit la quantité maximale de RAM à 256 TiB, soit 65 536 fois moins que l'espace d'adressage. Dans un avenir prévisible, il est prévu d' étendre l'adressage physique à 57 bits.

Après être passé en mode long, le noyau effectue l'ensemble minimal d'actions nécessaires au fonctionnement:

  • Configure la mémoire de pagination
  • charge les pilotes et initialise l'équipement utilisé;
  • Configure la mémoire et les planificateurs de processus
  • trouve et démarre init.

Il est important qu'avant de configurer le planificateur de processus, le serveur fonctionnait sur un seul cœur, appelé BSP. La configuration du planificateur réveille le reste du noyau appelé Processeur d'application (AP). Les noyaux n'ont pas de connexion directe entre eux et leur communication se fait via des gestionnaires d'interruption locaux appelés le contrôleur d'interruption programmable local avancé (LAPIC).

Le noyau du système d'exploitation est lancé sur le BSP, qui lors de l'initialisation a reçu des informations sur les processeurs disponibles dans le système à l'aide des tables ACPI. BSP, en utilisant son propre LAPIC, envoie une séquence d'interruptions « Init - StartUp - StartUp » pour réveiller tous les points d'accès. Après le démarrage, les processeurs d'application doivent également être initialisés et transférés en mode long, mais maintenant ce processus est plus rapide, car ce travail a déjà été effectué par le processeur principal.

Une fois tous les points d'accès initialisés, le planificateur de processus démarre un processus de service appelé « inaction » ou inactif . Comme son nom l'indique, ce processus ne fait rien et prend le processeur lorsqu'il n'y a pas d'autres processus.

Lorsque tout est configuré et prêt à fonctionner, le noyau du système d'exploitation démarre le premier processus dans l'espace utilisateur - Init . Cela, à son tour, démarre le reste des processus dans l'espace utilisateur. Après le démarrage du processus d'initialisation, le noyau passe en mode veille et est inactif jusqu'à ce que des tâches apparaissent dans l'espace du noyau.

Après avoir démarré tous les processus, le serveur devient disponible sur le réseau et sur la console, vous pouvez voir l'invite de connexion à l'écran.

Conclusion


À première vue, un démarrage simple et rapide du serveur et le chargement du système d'exploitation est en fait un processus complexe et déroutant avec de nombreuses nuances. Le passage de ce processus est une petite évolution qui développe la puissance de traitement du processeur des anciens processeurs 16 bits aux «monstres» 64 bits modernes.

Et que pensez-vous, lorsque les processeurs 128 bits apparaîtront, y aura-t-il un mode de compatibilité avec ceux 16 bits?

Source: https://habr.com/ru/post/fr471756/


All Articles