Selon l'entrée de Wikipédia, un chargeur de démarrage est un petit programme stocké dans une ROM (une partie de la mémoire principale (RAM), n'est-ce pas ??) qui ne peut être que lu et non effacé. Je suis un peu perplexe ici. Cela signifie-t-il que chaque RAM que nous achetons a un chargeur de démarrage installé par défaut? Et aussi, j'ai lu dans un livre qui dit qu'il y a généralement une zone appelée le MBR (Master Boot Record) sur le disque dur qui inclut un chargeur de démarrage ...
Alors, où se trouve exactement ce chargeur de démarrage? Est-ce que différents systèmes d'exploitation stockent leur chargeur de démarrage à différents endroits?
La ROM est une puce distincte de la RAM. Il ne nécessite pas d’alimentation pour conserver son contenu, et à l’origine, il ne pouvait être modifié par aucun moyen, mais venait directement de l’usine. Une mémoire PROM ultérieure ou une mémoire programmable en lecture seule a remplacé la vraie ROM. Ces puces sont sorties de l'usine et peuvent être écrites une fois en utilisant une procédure spéciale qui consiste essentiellement à brûler des bits de la puce, ce qui a entraîné un changement d'état. Celle-ci a ensuite été remplacée par une mémoire EPROM ou une mémoire programmable effaçable. Ces puces avaient une petite fenêtre et si vous y projetiez de la lumière ultraviolette, elles pourraient être effacées, ce qui leur permettrait d'être à nouveau programmées. Celles-ci ont ensuite été remplacées par une mémoire EEPROM ou mémoire programmable effaçable électriquement. Ces puces ont une procédure logicielle spéciale pour les effacer afin de pouvoir les reprogrammer. ROM est généralement toujours utilisé pour faire référence à tous ces types de manière générique.
La carte mère possède un certain type de puce ROM qui contient le microprogramme (généralement appelé BIOS, ou système d’entrée-sortie de base), bien qu’il soit actuellement remplacé par le microprogramme EFI. C'est le logiciel que la CPU commence à exécuter à la mise sous tension. Tous les microprogrammes effectuent l'initialisation du matériel, fournissent généralement une sortie de diagnostic et permettent à l'utilisateur de configurer le matériel, puis de localiser et de charger le chargeur de démarrage, qui à son tour localise et charge le système d'exploitation.
Avec PC BIOS, il charge et exécute simplement le premier secteur du disque sur lequel il décide de démarrer, qui est généralement le premier disque dur détecté. Par convention, le premier secteur d'un disque dur, appelé enregistrement de démarrage principal, contient une table de partitions DOS répertoriant les emplacements des partitions sur le disque et laisse un peu d'espace pour le chargeur de démarrage. Ubuntu utilise le chargeur de démarrage GRUB, qui place suffisamment de code dans le MBR pour charger et exécuter /boot/grub/core.img
. Normalement, une copie de ce fichier est placée dans les secteurs suivant le MBR, mais avant la première partition, et c’est en fait ce que charge le MBR, car il est trop difficile de trouver l’emplacement de /boot/grub/core.img
dans le très petit espace disponible dans la mémoire. MBR.
L'image centrale grub contient le code grub de base, ainsi que tous les modules nécessaires pour accéder à /boot/grub
afin de pouvoir y charger des modules supplémentaires, ainsi que le fichier de configuration grub décrivant les systèmes d'exploitation pouvant être démarrés et leur emplacement.
Le micrologiciel EFI utilisé sur les Mac Intel et qui devient disponible en remplacement du BIOS sur les cartes mères PC les plus récentes nécessite une partition dédiée contenant les fichiers du chargeur de démarrage. Le micrologiciel est suffisamment intelligent pour trouver ces fichiers et en charger un au lieu de les charger et les exécuter. est dans le premier secteur du disque.
La ROM n'est pas dans la mémoire principale:
La ROM ne fait pas partie de la mémoire principale. C'est une puce séparée, qui est la plupart du temps intégrée à un plus grand IC. Plus exemple, votre PC peut se composer de plusieurs ROM. Ceux-ci sont construits dans votre carte mère.
Généralement :
Vous avez mentionné que, vous avez lu un article dans lequel l'auteur disait: "La mémoire ROM fait partie de la mémoire principale". Ceci est déroutant, car généralement mémoire principale fait référence à la mémoire de types volatiles, tels que la RAM. Mais oui, si vous utilisez Mémoire principale terme pour tout l’espace mémoire d’un PC, alors ROM fait partie de cet espace mémoire. Il est à noter que, généralement, la mémoire principale exclut les types de mémoire ROM.
Où est stocké Bootloader:
Le système moderne utilise le chargement de démarrage en deux étapes. Dans la première étape, un programme minuscule est chargé à partir d'un secteur (appelé plus souvent secteur d'amorçage) du disque dur. Ce minuscule programme charge à son tour un programme situé dans le disque appelé bootloader. Et enfin, bootloader charge le système d'exploitation.
En terme de système Ubuntu, le processus est le suivant:
Après avoir allumé votre PC, le BIOS (qui est stocké dans la ROM) s'exécute et initialise automatiquement diverses parties du matériel du PC. Ensuite, il recherche un secteur spécifique dans le premier périphérique de démarrage défini (généralement le disque dur). Ce secteur est le secteur de démarrage, qui a une taille de 512 octets.
Le programme dans le secteur de démarrage est chargé en mémoire (1ère étape). Ce petit programme contient des informations sur les programmes qui doivent être chargés en mémoire et sur l’emplacement de ce programme sur le disque ou le périphérique d’amorçage. Il charge ce programme. Dans Ubuntu, il s'agit de /boot/grub/core.img
.
Au cours de la deuxième étape, GRUB, le chargeur d’OS, charge Ubuntu en chargeant le noyau et le disque RAM initial dans la mémoire et le contrôle de transfert au noyau. Ensuite, le noyau s'exécute et charge tous les programmes nécessaires tels que le gestionnaire d'affichage, les interfaces graphiques, etc.
Ainsi, nous pouvons clairement dire que le chargeur de démarrage n’est ni stocké dans la ROM, ni dans la RAM. Il est en fait stocké sur un disque dur (ou un autre périphérique d’amorçage, comme un CD-ROM amorçable, des clés USB, etc.), en parlant précisément du premier secteur de l’écran. Disque dur, de taille 512 octets et souvent appelé secteur de démarrage. Et ce chargeur de démarrage charge le chargeur de système d’exploitation (sous Ubuntu, c’est grub), qui réside également sur le disque dur (dossier i.e /boot/grub/
), et sa tâche est de charger le système d’exploitation (par exemple, Ubuntu).
À titre de test, retirez le disque dur (et tous les autres périphériques d’amorçage) et essayez de démarrer. Vous pouvez passer à l'étape du BIOS, mais après cette étape, vous ne pouvez plus rien démarrer. Le BIOS indiquera probablement "Aucun périphérique d'amorçage trouvé" ou "Aucun système d'exploitation trouvé" ou quelque chose de similaire.
J'espère que cette réponse aidera.
Pour plus d'informations, vous pouvez visiter ces liens:
Un processeur compatible x86 démarre toujours en mode dit "réel", qui est un mode 16 bits avec 1 mégaoctet de mémoire adressable disponible. À partir de cet espace adresse, 640 Ko sont disponibles pour les programmes et les adresses ci-dessus mappées vers différents périphériques.
Par exemple, les adresses commençant à partir de 0xA000: 0x0000 sont mappées sur la RAM vidéo. Par conséquent, l'écriture de données à cet emplacement écrirait des données dans la mémoire de la carte vidéo, affichant des pixels à l'écran.
De même, BIOS ROM commence à partir de 0xF000: 0000. Ainsi, à la mise sous tension, la CPU commence simplement à exécuter les instructions une par une à partir de cette adresse prédéfinie. Le BIOS ROM contient le programme initial qui commence par un "test automatique à la mise sous tension" ou POST. De Wikipedia:
Le logiciel du BIOS est intégré au PC. Il s’agit du premier code exécuté par un PC lorsqu’il est allumé ("micrologiciel d’amorçage"). Lorsque le PC démarre, le premier travail du BIOS est le test automatique à la mise sous tension, qui initialise et identifie les périphériques du système tels que le processeur, la mémoire vive, la carte vidéo, le clavier et la souris, le lecteur de disque dur, le lecteur de disque optique et les périphériques. autre matériel. Le BIOS localise ensuite le logiciel du chargeur d’amorçage stocké sur un périphérique (un "périphérique d’amorçage"), tel qu’un disque dur ou un CD/DVD, puis charge et exécute ce logiciel en lui donnant le contrôle du PC . 2 Ce processus est appelé démarrage, ou amorçage, qui est l'abréviation de bootstrapping.
Le micrologiciel du BIOS est chargé de lire le premier secteur du disque dans la mémoire et de passer le contrôle à un petit programme qui se trouve là aussi à une adresse spécifique. Le chargeur de démarrage MBR peut alors commencer à charger le système d'exploitation directement (comme ce fut le cas avec MS-DOS) ou à charger le "deuxième étage", qui n'est pas limité aux limites d'un seul secteur de disque.
Les chargeurs de démarrage qui utilisent l'approche à plusieurs étapes peuvent être assez complexes avec une interface textuelle ou graphique qui permet à l'utilisateur de choisir à partir de quel disque ou partition charger un système d'exploitation.
Donc, si, comme le suggère Uri, si vous souhaitez savoir si le chargeur de démarrage Windows et GRUB peuvent coexister, la réponse est la suivante: le MBR réel ne peut contenir qu'un seul chargeur de démarrage de première étape (allez, le tout secteur ne représente que 512 octets), mais la deuxième étape d’un chargeur de démarrage peut éventuellement "charger en chaîne" des systèmes d’exploitation à partir de partitions différentes. Le chargeur de démarrage Windows est seulement capable de reconnaître et de charger Windows, tandis que GRUB est capable de charger Linux ou de passer le contrôle à un autre chargeur de démarrage stocké dans un enregistrement de démarrage en volume de l'une des partitions, qui permet de démarrer Windows ou un autre système d'exploitation. Ce dernier processus s'appelle le chargement en chaîne.
Lorsque vous installez Ubuntu sur un ordinateur sur lequel Windows est installé, GRUB sera installé dans le MBR et vous pourrez démarrer Ubuntu et Windows.
Cependant, si Windows est installé après Ubuntu, GRUB sera remplacé par le chargeur de démarrage Windows et vous devrez réinstaller GRUB pour pouvoir redémarrer Ubuntu à nouveau.
Le conflit entre ce que vous dites à propos du chargeur de démarrage se trouvant dans ROM et de celui-ci dans le MBR est peut-être dû à un chargeur de démarrage utilisé pour tout code qui explique comment charger le moins de code possible pour que l'ordinateur fasse quelque chose d'utile, y compris chaque état lors d'un démarrage en plusieurs étapes.
Donc, l’état de départ est d’avoir un ordinateur, qui est un appareil programmable, mais qui ne sait pas comment charger un logiciel, car aucun logiciel n’a été chargé. (Et donc boot à partir de se tirer de ses bootstraps ).
Historiquement, il y avait quelques solutions différentes à ce problème, mais ces jours-ci, nous commençons avec du code dans ROM (la plupart du temps vraisemblablement strictement EEPROM), ce qui est suffisant pour qu'il soit possible d'examiner différents périphériques et de les essayer. tournez jusqu'à ce qu'il en trouve un qui est bootable.
(C’est la raison pour laquelle de nombreux systèmes démarreront à partir d’un CD ou d’un DVD si vous insérez une disquette d’installation du système d’exploitation dans le disque dur, sinon le BIOS [le code sur la ROM, y compris le code dont nous parlons et un autre les commandes de niveau supérieur qui permettent de démarrer] sont configurées pour examiner le lecteur de CD/DVD en premier, puis sur un disque dur s'il ne trouve rien, les tweakers le configurent pour ignorer le lecteur de CD/DVD sauf demande manuelle. ne perd pas de temps à faire tourner un disque non amorçable laissé dans le lecteur).
Ce code dans la ROM est parfois appelé chargeur de démarrage .
Quand il saura quel lecteur regarder, il regardera ensuite le MBR, qui contient des informations sur les partitions principales - comment pourriez-vous regarder plus tard/ou/boot ou C:/(sur un système Windows) si vous n'aviez même pas savoir quelle partie du disque était quelle partition, peu importe comment chaque partition a été montée? - et du code avec des instructions supplémentaires à exécuter. (Incidemment, cela explique pourquoi certains systèmes d'exploitation - comme Windows - ne peuvent être installés que sur une partition principale, les détails de ces partitions sont dans le MBR et c'est la seule information de partition que leur chargeur d'amorçage a lue, et il ne charge pas le en savoir plus sur les partitions logiques, en ce qui le concerne, ces partitions n’existent même pas encore).
Ce code exécutable est aussi appelé chargeur de démarrage . Lorsque nous tenons à faire la distinction entre ceci et ce qui vient ensuite, cela s'appelle un chargeur de démarrage principal (car si nous ne créons pas notre propre BIOS, nous ignorons le ROM un peu en dehors de notre contrôle).
Ce code sera très petit, car il ne devrait y avoir que 400 octets environ. Ainsi, pour faire quoi que ce soit de vrai, il en chargera plus, ce qui peut être plus volumineux, car il n'a pas à gérer cette contrainte.
Ce code est aussi connu sous le nom de chargeur de démarrage . Lorsque nous tenons à faire la distinction entre ceci et ce qui précède, cela s'appelle un chargeur de démarrage secondaire .
Ce code pourrait peut-être être la dernière étape du processus. Cela se produirait si vous n’aviez qu’un système d’exploitation ou si tous les systèmes de votre système utilisaient des chargeurs de démarrage compatibles (par exemple, deux installations Linux utilisant GRUB, de sorte que le dernier GRUB mis à jour puisse offrir de démarrer. l’un d’eux) puis il présente les menus (si vous le souhaitez) chargés dans un noyau, et passe le contrôle du système d’exploitation.
Dans le cas où votre système d'exploitation n'est pas compatible avec ce chargeur de démarrage, il peut charger en chaîne. Par exemple. Si vous avez Windows et Linux sur le même ordinateur, l'option GRUB de chargement de Windows chargera en réalité un autre chargeur de démarrage ne connaissant que les installations de Windows, et le lui transférera. Bien que ce soit une troisième étape du processus, il s’appelle toujours un chargeur de démarrage secondaire , car il ne sait ni ne se soucie du fait qu’un autre chargeur de démarrage secondaire est en cours d’exécution. avant cela. Ce serait également le cas avec une installation Linux utilisant un type différent de chargeur de démarrage secondaire.
Généralement, lorsque nous parlons du chargeur de démarrage en termes de Linux, nous ne parlons généralement pas du code ROM (il ne fait pas partie de Linux, ou modifié en installant Linux). Lorsque nous faisons update-grub
, nous modifions le chargeur de démarrage secondaire, qui se trouve généralement dans/boot d'une installation particulière. Lorsque nous faisons install-grub
, nous le changeons ainsi que le chargeur de démarrage principal dans le MBR afin qu’il dispose de suffisamment de code pour savoir où se trouve/boot (peut-être en commençant par un logiciel RAID au fur et à mesure) et le chargera et l’exécutera lui-même. réalisé.
Donc, en résumé, vous aviez tort lorsque vous avez dit que ROM faisait partie de la mémoire principale *, car elle est séparée. (En effet, BIJ est considéré comme antonyme de ROM ). Vous aviez raison de dire qu'il y avait un chargeur de démarrage sur place et dans le MBR, car ce sont deux étapes du processus et les deux sont parfois appelées de ce nom. Et la réponse à "Est-ce que différents OS stockent leur chargeur de démarrage à différents endroits?" est "la plupart du temps", parce que si les chargeurs de démarrage secondaires incompatibles cachent les autres (si vous installez Windows après l’installation de Linux) ou chainload dans l’autre, si vous le souhaitez (si vous corrigez cette situation, ou installez Linux après Windows), mais un système d’exploitation pouvez partager un chargeur de démarrage secondaire s’ils sont compatibles (si vous installez Linux après un autre Linux qui utilise le même type de chargeur de démarrage secondaire et que vous pouvez voir l’autre Linux [le logiciel RAID confond parfois les choses et rend le chargement par chaîne nécessaire].
* Les jours où l'on utilisait par programmation ROM et RAM, c'était différent. Sur un ZX Spectrum, par exemple, le ROM aurait une valeur de 16kiB et inclurait un interpréteur BASIC, ce qui vous donnerait le point de départ pour le chargement de quelque chose Dans ce cas, il s’agit essentiellement de démarrer dans cet interpréteur BASIC, puis de l’utiliser pour démarrer sur ce qui était sur la bande), il existait un tas de fonctions de l’interprète BASIC que les programmes dans RAM pourraient utiliser (pourquoi écrire une trig fonctionne lorsque l’ordinateur en a déjà un à une position connue - en particulier lorsque vous n’avez que 48 ko pour que votre propre code soit exécuté). Cette ROM était également visible de la même manière que la RAM, mais à des adresses différentes. Dans un tel cas, la ROM faisait autant partie de la mémoire principale que la RAM, mais n'était pas inscriptible. Ces jours-ci, vous ignorez à peu près le ROM une fois que vous avez dépassé la première étape du démarrage.
Créez un exemple de travail minimal et exécutez-le sur un émulateur pour comprendre ces concepts:
printf '\364%509s\125\252' > main.img
qemu-system-x86_64 -hda main.img
C'est un "chargeur de démarrage" super simple qui effectue une seule instruction hlt
. Plus d'infos sur: https://stackoverflow.com/a/32483545/895245
Vous pouvez ensuite l'exécuter sur du matériel réel avec:
Sudo dd if=main.img of=/dev/sdX
et brancher la clé USB sur votre ordinateur et démarrer à partir de celui-ci.
Lorsque vous faites cela, il devient clair que le chargeur de démarrage est quelque chose qui vit sur un disque de stockage permanent comme les clés USB ou les disques durs.
Ce qui vit sur ROM est le code qui démarre le chargeur de démarrage pour nous, appelé firmware (ou moins précisément le BIOS).
Dans les temps anciens, le programme de démarrage résidait sur du papier perforé similaire à celui utilisé par les machines télégraphiques ou sur des supports de cartes perforées ("ne les voyez plus tous les deux). Le processus s'appelait IPL, abréviation de Initial Program Load. Parfois, si aucun lecteur de bande ou de carte n’était disponible, il fallait saisir le code IPL binaire directement dans le processeur via une console située sur le panneau avant. ouf!
De nos jours, le code IPL réside dans des pROM qui, une fois exécutés, chargent et exécutent tous les chargeurs de démarrage secondaires conçus pour charger (amorcer) le système d'exploitation souhaité. le chargeur secondaire peut se trouver sur n’importe quel support ou partie de la configuration connue ou adressable par le code IPL.