Démarrer un système d'exploitation
Contenus
Comment gérez-vous ce premier programme?
26 janvier 2015
Un système d’exploitation est parfois décrit comme «le premier programme».
celui qui vous permet d’exécuter d’autres programmes. Cependant, il est généralement stocké
en tant que fichier (ou, plus généralement, une collection de fichiers) sur un disque.
Comment fonctionne ce "premier" programme?
Le système d'exploitation est chargé via un amorçage processus, plus
succinctement appelé démarrage. UNE chargeur de démarrage est un programme dont
tâche est de charger un plus grand
programme, tel que le système d'exploitation.
Lorsque vous allumez un ordinateur, sa mémoire est généralement non initialisée. Par conséquent,
il n'y a rien à courir. De bonne heure
les ordinateurs auraient du matériel qui permettrait à l'opérateur de
appuyez sur un bouton pour charger une séquence d'octets à partir de cartes perforées,
bande de papier perforée, ou un lecteur de bande. Allume l’ordinateur
panneau définirait la source des données et l'adresse de la mémoire cible.
Dans certains cas, le logiciel du chargeur de démarrage serait câblé comme
mémoire non volatile (dans les premiers ordinateurs, ce serait une grille de
fils avec des coupures aux endroits appropriés où un 0-bit était nécessaire).
Dans les premiers systèmes de mini-ordinateurs et de micro-ordinateurs,
un opérateur informatique utiliserait les interrupteurs
le panneau avant de l’ordinateur pour basculer dans le code et le charger dans un fichier plus volumineux.
programme, en programmant chaque emplacement de mémoire, puis en démarrant la
programme. Ce programme peut faire quelque chose de fondamental, comme lire successivement
octets en mémoire d’une bande de papier attachée à un téléscripteur.
Dans les systèmes ultérieurs, la mémoire en lecture seule contiendrait un petit chargeur de démarrage
qui aurait l'intelligence de base pour lire, par exemple, le premier secteur
(512 octets) d'un disque.
Comme ce programme initial devait être aussi réduit que possible, il serait
avoir des capacités minimales. Ce qui est souvent arrivé c'est que la botte
chargeur chargerait un autre chargeur de démarrage, appelé un Deuxième étape
chargeur, qui était plus sophistiqué. Ce chargeur de deuxième étape
aurait une erreur de vérification, parmi éventuellement d'autres fonctionnalités, telles que
donnant à l'utilisateur un choix de systèmes d'exploitation à démarrer, la possibilité
charger un logiciel de diagnostic ou activer les modes de diagnostic dans
système opérateur. Ce chargeur de démarrage en plusieurs étapes, avoir une botte
loader charger un plus gros chargeur de démarrage, est appelé chargement de la chaîne.
Le chargeur de démarrage effectue souvent une initialisation de base du système
matériel et chargera ensuite le système d'exploitation. Une fois le fonctionnement
système est chargé, le chargeur de démarrage lui transfère le contrôle et est
ne sont plus nécessaires. Le système d'exploitation va s'initialiser,
configurer le matériel du système (par exemple, configurer la gestion de la mémoire, définir
minuteries, définissez les interruptions) et chargez les pilotes de périphérique, si nécessaire.
Pour concrétiser l’exemple du processus de démarrage, prenons un exemple.
Regardez les ordinateurs compatibles Intel 32 bits (nous allons arriver un peu aux systèmes 64 bits). Ce
L’architecture est appelée IA – 32 (architecture Intel, 32 bits) et
définit le jeu d'instructions de la plupart des microprocesseurs Intel depuis le
Intel 80386 introduit en 1986. Il est toujours pris en charge sur
Derniers processeurs d’Intel.
Un ordinateur basé sur IA – 32 devrait avoir un BIOS (Système d'entrée / sortie de base,
qui comprend le firmware du chargeur de démarrage) en mémoire non volatile
(ROM dans le passé et mémoire flash NOR ces jours-ci). Le BIOS est un
descendant du BIOS trouvé sur les premiers systèmes CP / M en ce qu'il contient
fonctions de bas niveau pour accéder à certains périphériques de base du système, tels que
effectuer des E / S sur le disque, lire à partir du clavier et accéder au
affichage vidéo. Il contient également du code pour charger un chargeur de démarrage étape 1.
Lorsque la CPU est réinitialisée au démarrage, l’ordinateur démarre à l’exécution.
emplacement mémoire 0xffff0
(L’architecture IA – 32 utilise un
segment: forme d'adressage offset; le segment de code est défini sur
0xf000
et le pointeur d'instruction est réglé sur fff0
).
Le processeur démarre dans mode réel, ce qui lui donne accès à
seulement un espace d'adressage mémoire de 20 bits et lui fournit un accès direct à
E / S, interruptions et mémoire (adressage 32 bits et mémoire virtuelle)
entre en jeu lorsque le processeur est mis en mode protégé).
L'emplacement sur 0xffff0
est en fait à la fin de la
BIOS ROM et contient une instruction de saut à une région du
BIOS contenant le code de démarrage.
Au démarrage, le BIOS passe par la séquence suivante:
- Auto-test à la mise sous tension (POST)
- Détecter le BIOS de la carte vidéo (puce) et exécuter son code pour initialiser le matériel vidéo
- Détecter tout autre BIOS de périphérique et invoquer ses fonctions d'initialisation
- Afficher l'écran de démarrage du BIOS
- Effectuer un bref test de mémoire (identifier la quantité de mémoire disponible dans le système)
- Définir les paramètres de mémoire et de lecteur
- Configurer les périphériques Plug & Play (traditionnellement les périphériques à bus PCI)
- Attribuer des ressources (canaux DMA et IRQ)
- Identifier le périphérique de démarrage
Lorsque le BIOS identifie le périphérique d’amorçage (généralement l’un des plusieurs
disques qui ont été étiquetés en tant que disque amorçable), il lit
bloquer 0 de cet appareil dans l'emplacement mémoire 0x7c00
et
saute là.
Étape 1: le Master Boot Record
Ce premier bloc de disque, le bloc 0, est appelé le Enregistrement de démarrage principal (MBR) et contient
la première étape du chargeur de démarrage. Comme la taille de bloc standard est de 512 octets, le chargeur de démarrage complet doit tenir
dans cet espace. Le contenu du MBR est:
- Premier chargeur de démarrage (≤ 440 octets)
- Signature de disque (4 octets)
- Table de partition de disque, qui identifie différentes régions du disque (16 octets par partition × 4 partitions)
Étape 2: l'enregistrement de démarrage en volume
Une fois que le BIOS transfère le contrôle au début du MBR qui était
chargé en mémoire, le code MBR parcourt sa table de partition
et charge le Enregistrement de démarrage en volume (VBR) pour cette partition.
Le VBR est une séquence de blocs consécutifs commençant
au premier bloc de disque du destinataire
cloison. Le premier bloc du VBR identifie le type de partition
et la taille et contient un Chargeur de programme initial (IPL), qui est un code qui
chargera les blocs supplémentaires qui composent le deuxième étape démarrage
chargeur. Sur les systèmes dérivés de Windows NT (Windows Server, par exemple)
2012, Windows 8), l’IPL charge un programme appelé NTLDR, qui charge ensuite
le système d'exploitation.
Une des raisons pour lesquelles les chargeurs de démarrage de bas niveau ont des difficultés avec
charger un système d’exploitation complet, en particulier un système pouvant être composé de plusieurs
fichiers, est que cela nécessite la possibilité d'analyser un système de fichiers
structure. Cela signifie comprendre comment les répertoires et les noms de fichiers
sont disposés et comment trouver les blocs de données qui correspondent à un
fichier spécifique. Sans beaucoup de code, il est beaucoup plus facile de simplement
lire des blocs consécutifs. Un chargeur de niveau supérieur, tel que NTLDR de Microsoft,
peut lire les formats de fichier NTFS, FAT et ISO 9660 (CD).
Au-delà de Windows
Il existe de nombreuses variantes pour démarrer d'autres systèmes d'exploitation sur un PC Intel.
Un chargeur de démarrage populaire sur les systèmes Linux est
GRUB, ou GRand Unified
Chargeur de démarrage. GRUB est également un chargeur de démarrage multi-étages. Le BIOS, bien sûr, fait ce qu’il fait toujours:
identifie un périphérique amorçable, charge le Master Boot Record et transfère le contrôle à ce dernier
code.
Sous GRUB, le MBR contient généralement un chargeur de démarrage de première étape appelé GRUB Stage 1. Ce chargeur de démarrage de l'étape 1 se charge GRUB Stage 2.
Le chargeur de l'étape 2 présente à l'utilisateur un choix de systèmes d'exploitation à démarrer et permet à l'utilisateur de spécifier
tous les paramètres de démarrage supplémentaires pour ces systèmes (par exemple, forcer la mémoire maximale, activer le débogage). Alors
lit dans le noyau du système d’exploitation sélectionné et lui transfère le contrôle.
Un problème spécifique lié à l’utilisation de GRUB pour démarrer Windows est que Windows n’est pas compatible.
Multiboot
conforme. Multiboot est une spécification de la Free Software Foundation permettant de charger plusieurs systèmes d'exploitation à l'aide de
un chargeur de démarrage unique. Dans ce cas, GRUB simule un processus de démarrage Windows classique. Il
démarre un chargeur de démarrage qui résiderait normalement dans le MBR
(ou exécutez le programme de menu de démarrage Windows). À partir de ce moment, GRUB n’a plus sa place, Windows
n'a aucune idée de ce qui s'est passé et le processus de démarrage natif de Windows prend le relais.
Au revoir, BIOS. Bonjour UEFI
Lorsque les architectures 64 bits ont émergé pour remplacer les architectures 32 bits, le BIOS commençait à paraître
assez daté. Intel a entrepris de créer une spécification du successeur du BIOS sans restrictions sur
avoir à exécuter le code de démarrage en mode 16 bits avec un adressage 20 bits. Cette spécification est appelée Interface de micrologiciel extensible unifiée,
ou UEFI.
Bien que développé par Intel, il était géré depuis 2005 par le Unified EFI Forum. Il
est utilisé par de nombreux systèmes 64 bits plus récents, y compris les Mac, qui prennent également en charge le BIOS existant pour exécuter Windows.
Parmi les fonctionnalités prises en charge par EFI, citons:
- Composants du BIOS
- préservé certains composants du BIOS, y compris l'alimentation
gestion (configuration avancée et interface d'alimentation, ACPI)
et des composants de gestion du système (par exemple, lecture et définition de la date). - Prise en charge des disques plus grands
- Le BIOS ne supportait que quatre partitions par disque, avec une capacité
jusqu'à 2,2 To par partition. UEFI supporte une partition maximale
taille de 9,4 ZB (9,4 × 1021 octets). - Pas besoin de démarrer en mode 16 bits (réel)
- L’environnement d’exécution préalable au démarrage vous donne un accès direct à toute la mémoire système.
- Pilotes de périphérique
- UEFI inclut les pilotes de périphérique, y compris la capacité d'interpréter
EFI Byte Code (EBC) indépendant de l'architecture. Utilisation des systèmes d'exploitation
Cependant, comme avec le BIOS, leurs propres pilotes
les pilotes ne sont généralement utilisés que pour le processus de démarrage. - Gestionnaire de démarrage
- Ceci est important. L'ancien BIOS n'avait que l'intelligence
charger un seul bloc, ce qui nécessite un démarrage en plusieurs étapes
processus. L'UEFI a son propre interpréteur de commande
et gestionnaire de démarrage complet. Vous n'avez plus besoin d'un démarrage dédié
chargeur. Tant que vous placez les fichiers de démarrage dans le fichier de démarrage UEFI
partition, formatée en tant que système de fichiers FAT (la norme
format du système de fichiers dans les anciens systèmes Windows; un qui à peu près
chaque système d'exploitation sait comment gérer). - Extensibilité
- Le firmware est extensible. Les extensions au format UEFI peuvent être chargées dans une mémoire non volatile.
Démarrer avec UEFI
Avec UEFI, le Master Boot Record n’est plus nécessaire.
stocker un chargeur de démarrage de niveau 1; L'UEFI a l'intelligence d'analyser un fichier
système et charger un fichier seul, même si ce fichier n’occupe pas
blocs de disques contigus.
Au lieu de cela, l'UEFI lit le GUID (Unique au monde
IDentifier) Table de partition (TPG), qui est situé dans
bloque immédiatement après le bloc 0 (où se trouve toujours le MBR)
pour des raisons d'héritage). Le GPT décrit la disposition de la partition
table sur un disque. A partir de là, le chargeur de démarrage EFI identifie le fichier EFI.
Partition système. Cette partition système contient des chargeurs de démarrage pour
tous les systèmes d'exploitation installés sur d'autres partitions du
dispositif. Pour les systèmes Windows compatibles EFI,
L'UEFI charge le
Gestionnaire de démarrage de Windows (bootmgfw.efi). Pour les anciens systèmes NT 64 bits, EFI
chargerait IA64ldr. Pour Linux, il y a beaucoup d'options. Deux communs
d’utiliser une version compatible EFI de GRUB (le Grand Unified
Bootloader) et chargez un fichier tel que grub.efi ou avoir une charge EFI
charge elilo.efi, le chargeur EFI.
En général, même avec UEFI, l’approche dominante consiste à charger un
chargeur dédié à un système d'exploitation spécifique plutôt que de charge
ce système d'exploitation directement. Cependant, la nécessité d'un système multi-étapes
processus de démarrage qui nécessite le chargement de plusieurs chargeurs de démarrage est non
plus nécessaire.
Notre discussion entière jusqu’à présent s’est concentrée sur le démarrage avec Intel
Architecture basée sur PC (qui comprend la compatibilité IA – 32 / IA – 64
architectures, telles que celles de AMD). C'est l'architecture dominante
d’aujourd’hui (ordinateurs portables par le biais de serveurs), mais il existe de très nombreuses
périphériques non-Intel, en particulier dans les périphériques intégrés, tels que
comme les téléphones cellulaires. Et eux?
Il existe de nombreuses implémentations du processus de démarrage. Beaucoup intégré
Les périphériques ne chargeront pas de système d’exploitation mais en auront déjà un.
stocké dans une mémoire non volatile (telle que flash ou ROM). Ceux qui
charger un système d'exploitation, comme les téléphones Android basés sur ARM, par exemple,
exécuter le code dans la mémoire en lecture seule (généralement dans la mémoire flash NOR)
lorsque l'appareil est allumé. Ce
Le code d’amorçage est intégré à l’ASIC de la CPU sur certains périphériques.
n'avez pas besoin d'une puce de mémoire flash séparée sur la carte.
Lorsque le système est réinitialisé (ce qui inclut une mise sous tension), le processeur
est en mode superviseur (SVC) et les interruptions sont désactivées. Sur ARM
systèmes le processeur commence l'exécution à l'adresse
0x00000000
. La mémoire flash contenant le code de démarrage est
mappé à l'adresse 0x00000000
à la réinitialisation. Ce code effectue divers
initialisations, y compris la mise en place d'une table de vecteur d'exception
dans la DRAM et la copie du code d’application de la ROM vers la DRAM (le code est exécuté plus rapidement)
en DRAM). Le code remappe la DRAM à l'adresse 0, donc
masquer la mémoire flash (le processeur a
un bit REMAP pour changer le mappage de la mémoire flash). La mémoire
le système est ensuite initialisé. Cela implique la configuration de la protection de la mémoire
et mettre en place les piles système. Les périphériques d’E / S sont ensuite initialisés et le
le processeur est changé en mode utilisateur. Le firmware de démarrage détecte le démarrage
support, charge et exécute le chargeur de démarrage de deuxième étape (si nécessaire).
La deuxième
Le chargeur de démarrage est souvent GRUB pour les grands systèmes ou uBoot pour
systèmes embarqués. Ce chargeur de seconde étape charge les charges d’exploitation
système et lui transfère le contrôle.
Anciennes versions basées sur PowerPC des systèmes Apple Macintosh,
OS 8 et OS X, étaient basés sur Open Firmware. Firmware ouvert
est originaire de Sun et était utilisé sur des ordinateurs Sun non Intel.
Une fois que Apple est passé aux systèmes Intel, il a adopté UEFI comme microprogramme au niveau de l’amorçage.
Mac plus anciens
Open Firmware est stocké dans la ROM et, à l'instar du BIOS de l'ordinateur, est exécuté à la mise sous tension.
Depuis que Open Firmware a été conçu pour être indépendant de la plate-forme, il est
implémenté en Forth (un langage simple basé sur une pile) et compilé en bytecodes plutôt que natif
instructions de la machine. Le firmware contient un interpréteur de code d'octet.
Contrairement au BIOS, Open Firmware fournit à l’utilisateur une ligne de commande
processeur à partir duquel on peut éditer les paramètres de configuration du système,
tels que réduire la quantité de mémoire physique, déboguer le système ou
même démarrer un serveur telnet pour pouvoir interagir avec le firmware
et démarrez le processus à partir d’une machine distante via une connexion Ethernet.
Avant de démarrer le système d’exploitation, Open Firmware génère une arborescence de périphériques en analysant les composants de la carte mère et des périphériques d’extension.
Comme le BIOS du PC, Open Firmware contient des pilotes de périphérique que le logiciel
processus de démarrage dans le firmware peut utiliser pour accéder au disque, clavier,
surveiller et réseau. Cependant, ces pilotes sont tous implémentés en FCode,
le quatrième système de bytecode. Aussi, comme le BIOS, ces pilotes sont
utilisé uniquement pendant le processus de démarrage. Le système d'exploitation lui-même a
ses propres pilotes d'exécution natifs.
Contrairement au BIOS, Open Firmware pourrait analyser les systèmes de fichiers HFS / HFS +
(le système de fichiers natif sur Mac), vous pouvez donc utiliser le logiciel Open Firmware
interprète de commande à charger dans un fichier de démarrage à partir du disque dur et
exécuter. Par défaut, Open Firmware charge un fichier à partir du système.
cloison. Sur les systèmes OS 9, il s’agissait du fichier intitulé «Mac OS ROM».
dans le Système dossier. Sur les systèmes OS X, il se charge
/ Système / Bibliothèque / CoreServices / BootX
. BootX
est le chargeur de démarrage
qui se charge ensuite dans le noyau.
Le Mac aujourd'hui
Le Mac utilise UEFI pour le micrologiciel de son système.
Lorsque le Mac démarre, le premier code qui est exécuté est le
BootROM. Ceci configure les pilotes EFI pour les périphériques matériels pertinents,
initialise certaines des interfaces matérielles, valide que suffisamment
la mémoire est disponible et effectue un bref test automatique à la mise sous tension.
Contrairement au BIOS du PC, qui ne connaissait rien des systèmes de fichiers et pouvait
lire des blocs de disque bruts, UEFI sur Mac a
été prolongé pour analyser les deux FAT
(systèmes de fichiers hérités DOS / Windows) et HFS + (Mac natif) sur un disque.
Il lit le GPT (GUID Partition Table) pour identifier les partitions de disque.
Le volume de démarrage par défaut est stocké dans la NVRAM.
Au lieu de spécifier un chemin d'accès à un chargeur de démarrage, le volume HFS +
en-tête (données au début d’un système de fichiers HFS +) pointe vers
une dossier béni ou répertoire béni (voir le
bénisse la commande.
Si un répertoire est béni, cela indique au micrologiciel EFI de regarder dans
ce répertoire pour le chargeur de démarrage. Si un fichier est béni,
qui indique au micrologiciel EFI de charger ce fichier en tant que chargeur de démarrage
(il existe des variantes supplémentaires, telles que le démarrage à partir d’un disque non monté
le volume).
Par défaut, le chargeur de démarrage est situé dans
/System/Library/CoreServices/boot.efi
sur la racine (souvent
seulement) partition du disque.
Sinon, le micrologiciel prend en charge le téléchargement d’une seconde étape.
chargeur de démarrage ou un noyau à partir d'un serveur de réseau (serveur netboot).
Quand le boot.efi
fichier est chargé, l’ordinateur affiche un
logo Apple métallique sur l'écran. Le chargeur de démarrage se charge dans le
noyau ainsi que les extensions de pilote essentielles, qui s'exécutent ensuite
lancé, qui exécute les divers scripts et programmes de démarrage.
Une fois le noyau chargé, l’engrenage en rotation apparaît sous le
Logo Apple. Lorsque le noyau exécute le premier processus, lancé, la
l'écran devient bleu.
Vous trouverez une description du démarrage d’OS X dans
Qu'est-ce que Mac OS X?
Pour prendre en charge l’amorçage des systèmes d’exploitation basés sur le BIOS, tels que les anciens
Systèmes Windows et Linux utilisant GRUB ou un autre logiciel compatible BIOS
chargeurs de démarrage, l’EFI installe un «module de support de compatibilité»
(CSM) du firmware du système. Cela commence alors un
Processus de démarrage basé sur le BIOS. Ce module de support de compatibilité est
chargé uniquement lorsque l'utilisateur sélectionne Windows comme système d'exploitation par défaut à démarrer. le
Le processus de démarrage est maintenant un démarrage standard basé sur le BIOS. Le maître botte
Record (MBR) est chargé et exécuté, ce qui localise et charge
l'enregistrement de démarrage en volume de la partition Windows (ou Linux).
Références de démarrage Mac
Références Mac OS X:
Ceci est une version mise à jour du document original qui a été écrit le 14 septembre 2010.
Commentaires
Laisser un commentaire