Où est le chargeur de démarrage stocké - en ROM, RAM ou ailleurs?

30

Selon l'entrée de wikipedia, un chargeur de démarrage est un petit programme stocké dans la ROM (une partie de la mémoire principale (RAM), n'est-ce pas ??) qui ne peut être lu et pas effacé. Je suis un peu perplexe ici. Est-ce à dire 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 MBR (Master Boot Record) sur le disque dur qui comprend un chargeur de démarrage ...

Alors, où se trouve exactement ce chargeur de démarrage? Les différents systèmes d'exploitation stockent-ils leur chargeur de démarrage à différents endroits?

xczzhh
la source

Réponses:

43

La ROM est une puce distincte de la RAM. Il ne nécessite pas d'alimentation pour conserver son contenu, et à l'origine ne pouvait être modifié par aucun moyen, mais était câblé en usine. Une PROM ultérieure ou une mémoire morte programmable a remplacé la véritable ROM. Ces puces sont vides de l'usine et peuvent être écrites une seule fois à l'aide d'une procédure spéciale qui a essentiellement brûlé des morceaux de la puce provoquant un changement d'état. Celui-ci a ensuite été remplacé par EPROM ou mémoire programmable effaçable. Ces puces avaient une petite fenêtre sur elles et si vous y dirigiez une lumière ultraviolette, elles pourraient être effacées, ce qui permettrait de les programmer à nouveau. Ceux-ci ont ensuite été remplacés par EEPROM, ou mémoire programmable effaçable électriquement. Ces puces ont une procédure logicielle spéciale pour les effacer afin qu'elles puissent être reprogrammées.

La carte mère possède un type de puce ROM contenant le firmware, qui dans le langage PC est généralement appelé BIOS, ou Basic Input Output System, bien qu'il soit remplacé de nos jours par le firmware EFI. Il s'agit du logiciel que le CPU commence par exécuter au démarrage. Tous les micrologiciels effectuent l'initialisation du matériel, fournissent généralement une sortie de diagnostic et permettent à l'utilisateur de configurer le matériel, puis localise et charge le chargeur de démarrage, qui à son tour localise et charge le système d'exploitation.

Avec le BIOS du PC, il charge et exécute simplement le premier secteur du disque à partir duquel 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é Master Boot Record, contient une table de partition DOS répertoriant les emplacements des partitions sur le disque et laisse de l'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 trouver l'emplacement de /boot/grub/core.imgest trop difficile à faire correctement dans l'espace très limité disponible dans le MBR .

L'image principale de grub contient le code grub de base, plus tous les modules nécessaires pour y accéder /boot/grubafin de pouvoir y charger des modules supplémentaires, ainsi que le fichier de configuration grub qui décrit les systèmes d'exploitation qui peuvent être démarrés et où ils peuvent être trouvés.

Le firmware EFI utilisé sur les Mac Intel et devenant disponible en remplacement du BIOS sur les cartes mères PC les plus récentes nécessite une partition dédiée qui contient les fichiers du chargeur de démarrage, et le firmware est suffisamment intelligent pour trouver ces fichiers et en charger un au lieu de simplement charger et exécuter quoi que ce soit est dans le premier secteur du disque.

psusi
la source
Voici un paragraphe extrait de Computer Science de Glenn Brookshear , An OverviewA small portion of a computer's main memory where the CPU expects to find its initial program is constructed from special nonvolatile memory cells. Such memory is known as read-only memory(ROM) D'après lui. La mémoire principale est composée de deux parties, RAM et ROM. Je veux juste savoir si le soi-disant bootloader est installé sur la partie ROM de la mémoire principale ... @Sergey
xczzhh
@xczzhh - oui le BIOS est stocké dans la ROM, qui détecte le chargeur de démarrage présent dans les partitions. Lors de l'installation de tout système d'exploitation, il crée un type d'entrée d'indicateur dans le BIOS pour détecter le BOOTLOADER respectif.
atenz
1
@xczzhh, non, le chargeur de démarrage se trouve sur le disque dur ou sur un autre disque. Il est installé avec le système d'exploitation. À moins que vous ne téléchargiez et installiez une mise à jour depuis le fabricant de votre carte mère, la ROM ne change jamais.
psusi
EFI utilise des applications EFI à la place. Il charge l'application EFI dans la NVRAM
Suici Doga
@SuiciDoga, non, les applications EFI (qui sont essentiellement limitées à quelques utilitaires de mise à niveau du micrologiciel et chargeurs de démarrage) sont stockées dans la partition système EFI du disque dur. La NVRAM est l'endroit où EFI stocke certaines variables de configuration, telles que l'ordre de démarrage.
psusi
23

La ROM n'est pas dans la mémoire principale:

La ROM ne fait pas partie de la mémoire principale. Il s'agit d'une puce séparée, qui est la plupart du temps intégrée à un CI plus grand. Plus d'exemple, Votre PC peut se compose de plusieurs ROM. Ceux-ci sont intégrés à votre carte mère.

Généralement :

  • La mémoire ROM est très petite. Cette mémoire n'est pas volatile, dans le sens où le programme stocké dans la ROM n'est pas effacé lors de la mise hors tension.
  • La ROM est utilisée pour stocker des programmes permanents, qui sont très essentiels à votre matériel pour fonctionner correctement.
  • Un exemple typique de ROM est la puce BIOS. Où le programme de démarrage et d'initialisation du matériel de très bas niveau est stocké

Vous avez mentionné cela, vous avez lu un article où l'auteur disait: "La ROM fait partie de la mémoire principale". C'est déroutant, car généralement, la mémoire principale fait référence à la mémoire de types volatils, comme la RAM. Mais oui, si vous utilisez le terme de mémoire principale pour tout l'espace mémoire d'un PC, alors la ROM fait partie de cet espace mémoire. Vous devez noter que, généralement, la mémoire principale exclut la mémoire de types comme ROM .

Où est stocké Bootloader:

Le système moderne utilise un chargement de démarrage en deux étapes. Dans la première étape, un petit programme est chargé à partir d'un secteur (appelé plus souvent secteur d'amorçage) du disque dur. Ce petit programme charge à son tour un programme à partir de certains endroits du disque, appelé bootloader. Et enfin, le chargeur de démarrage charge le système d'exploitation.

En termes de système Ubuntu, le processus est le suivant:

  1. Après avoir allumé votre PC, le BIOS (qui est stocké dans la ROM) s'exécute automatiquement et initialise diverses parties du matériel du PC. Il vérifie ensuite 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 fait 512 octets.

  2. 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 à charger ensuite en mémoire et sur l'emplacement de ce programme sur le disque ou le périphérique de démarrage. Il charge ce programme. Dans Ubuntu, c'est le cas /boot/grub/core.img.

  3. Dans la deuxième étape, le chargeur OS, GRUB, 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, Gui, etc.

Donc, 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 le disque dur (ou un autre périphérique de démarrage, tel qu'un CD-ROM de démarrage, des lecteurs USB, etc.), en parlant précisément du premier secteur du disque dur, d'une taille de 512 octets et souvent appelé secteur d'amorçage . Et ce chargeur de démarrage charge le chargeur du système d'exploitation (dans Ubuntu, c'est grub) qui réside également dans le disque dur (c'est-à-dire le /boot/grub/dossier), et sa tâche consiste à charger le système d'exploitation (disons, Ubuntu).

À titre de test, retirez le disque dur (et tous les autres périphériques de démarrage) et essayez de démarrer. Vous pouvez passer à l'étape du BIOS, mais après cette étape, vous ne pouvez rien démarrer. Très probablement, le BIOS dira " Aucun périphérique de démarrage trouvé " ou " Aucun système d'exploitation trouvé " ou quelque chose de similaire.

J'espère que cette réponse vous aidera.


Pour plus d'informations, vous pouvez visiter ces liens:

  1. http://en.wikipedia.org/wiki/Read-only_memory
  2. http://en.wikipedia.org/wiki/Random-access_memory
Anwar
la source
2
La ROM n'a pas été plus rapide que la RAM depuis environ une décennie maintenant. En fait, l'une des premières choses qu'un BIOS moderne fait est de se copier dans la RAM car la RAM est beaucoup plus rapide.
David Schwartz
1
@DavidSchwartz, Cela fait plus d'une décennie maintenant. Chaque BIOS PC que j'ai utilisé au milieu des années 90 avait une option pour masquer le bios dans la RAM pour la vitesse.
psusi
@Anwar, le lien vers la mémoire principale est mort.
Le Matt
15

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 d'adressage, 640 Ko sont disponibles pour les programmes et les adresses ci-dessus qui sont mappées à différents appareils.

Par exemple, les adresses commençant par 0xA000: 0x0000 sont mappées à la RAM vidéo, ainsi, l'écriture de données là-bas écrirait en fait des données dans la mémoire de la carte vidéo affichant des pixels à l'écran.

De même, la ROM du BIOS commence à partir de 0xF000: 0000 de sorte que le processeur, lorsqu'il est allumé, commence simplement à exécuter les instructions une par une à partir de cette adresse prédéfinie. La ROM du BIOS contient le programme initial qui commence par effectuer un "auto-test de mise sous tension", ou POST. De Wikipédia:

Le logiciel du BIOS est intégré au PC et est le premier code exécuté par un PC lorsqu'il est allumé («firmware de démarrage»). Au démarrage du PC, la première tâche du BIOS est l'auto-test de mise sous tension, qui initialise et identifie les périphériques système tels que le processeur, la RAM, la carte d'affichage vidéo, le clavier et la souris, le disque dur, le lecteur de disque optique et autre matériel. Le BIOS localise ensuite le logiciel du chargeur de démarrage sur un périphérique (désigné comme un `` périphérique de démarrage ''), tel qu'un disque dur ou un CD / DVD, et charge et exécute ce logiciel, lui donnant le contrôle du PC. 2 Ce processus est connu sous le nom de démarrage, ou démarrage, 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à encore, à une adresse spécifique. Le chargeur de démarrage MBR peut alors commencer à charger le système d'exploitation directement (comme c'était le cas avec MS-DOS) ou à charger la «deuxième étape», ce 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 du texte ou une interface graphique qui permet à l'utilisateur de sélectionner à partir de quel disque ou partition charger un système d'exploitation.

Donc, si, comme le suggère Uri, vous souhaitez savoir si le chargeur de démarrage Windows et GRUB peuvent coexister ensemble, la réponse est: le MBR réel ne peut contenir qu'un seul chargeur de démarrage de premier étage (allez, tout le secteur ne fait que 512 octets) , mais la deuxième étape d'un chargeur de démarrage peut être capable de "charger en chaîne" des systèmes d'exploitation à partir de différentes partitions. Le chargeur de démarrage Windows est uniquement 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 de volume de l'une des partitions, ce qui permet de démarrer Windows ou un autre système d'exploitation. Ce dernier processus est appelé chargement en chaîne.

Lorsque vous installez Ubuntu sur un ordinateur équipé de Windows, GRUB sera installé dans 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.

Sergey
la source
Je suppose qu'il veut savoir si le chargeur de démarrage Windows et GRUB peuvent coexister ou non. Les disques UEFI et GPT n'utilisent pas MBR, comment cela les affecte-t-il?.
Uri Herrera
La ROM du BIOS est située dans le segment F000: qui est juste en dessous de 1 Mo. Le 640k est issu des segments ci-dessous A000 :, qui sont disponibles pour le système d'exploitation et les programmes en mode réel à utiliser.
psusi
@psusi: vous avez raison, j'ai reformulé cette partie
Sergey
Merci pour la réponse. Voulez-vous dire qu'il existe plusieurs chargeurs de démarrage (un dans le BIOS et un autre dans MBR?) Impliqués pour démarrer un système d'exploitation? C'est nouveau pour moi ... :)
xczzhh
@xczzhh Eh bien, ok, le code dans le BIOS ne s'appelle pas "bootloader", celui stocké sur le disque le fait. J'ai mis à jour ma réponse pour que cela soit clair.
Sergey
4

Le conflit entre ce que vous dites sur le chargeur de démarrage se trouvant dans la ROM et dans le MBR est peut-être dû au fait que le chargeur de démarrage est utilisé pour tout code qui explique comment faire le minimum pour charger du code afin que l'ordinateur fasse quelque chose d'utile, y compris chaque dans un démarrage en plusieurs étapes.

Donc, l'état de départ est d'avoir un ordinateur, qui est un appareil programmable, mais ne sait pas comment charger le logiciel à exécuter car il n'a pas de logiciel chargé. (Et donc boot 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 la ROM (principalement probablement strictement EEPROM), ce qui est suffisant pour lui permettre de regarder différents appareils et de les essayer à tour de rôle jusqu'à ce qu'il en trouve un qui soit amorçable.

(C'est pourquoi de nombreux systèmes démarrent à partir d'un CD ou d'un DVD si vous placez un disque d'installation du système d'exploitation dans et à partir du disque dur sinon, le BIOS [le code sur la ROM, y compris le code dont nous parlons et certains autres bas de niveau supérieur qui fait démarrer les choses] est configuré pour regarder d'abord le lecteur de CD / DVD, puis sur un disque dur s'il ne trouve rien, les tweakers le configurent souvent pour ignorer le lecteur de CD / DVD, sauf demande manuelle pour qu'il ne perd pas de temps à faire tourner un disque non amorçable qui a été laissé dans le lecteur).

Ce code dans la ROM est parfois appelé chargeur de démarrage .

Quand il sait quel lecteur regarder, il va alors regarder le MBR, qui contient des informations sur les partitions primaires - comment pourriez-vous regarder plus tard / ou / boot ou C: / (sur un système Windows) si vous ne l'avez même pas savez 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 de démarrage a lue, et il ne charge pas l'EBR sur en savoir plus sur les partitions logiques, en ce qui concerne ces partitions n'existent même pas encore).

Ce code exécutable est également appelé chargeur de démarrage . Lorsque nous souhaitons faire la distinction entre cela et ce qui vient ensuite, cela s'appelle un chargeur de démarrage principal (car à moins que nous ne fabriquions notre propre BIOS, nous ignorons le bit ROM comme hors de notre contrôle).

Ce code sera très petit car il ne contient que 400 octets environ, donc pour faire quoi que ce soit de réel, il chargera un peu plus de code, qui peut être plus grand car il n'a pas à gérer cette contrainte.

Ce code est également appelé chargeur de démarrage . Lorsque nous voulons distinguer ce qui précède, ce qu'on appelle un chargeur de démarrage secondaire .

Ce code pourrait peut-être être la dernière étape du processus. Ce serait le cas si vous n'avez qu'un seul système d'exploitation, ou si tous les systèmes d'exploitation de votre système utilisent des chargeurs de démarrage compatibles (par exemple, deux installations Linux qui utilisent toutes les deux GRUB, de sorte que celui qui a été mis à jour le dernier peut proposer de démarrer dans l'un ou l'autre), alors il présente les menus (si vous le souhaitez) charge dans un noyau, et passe le contrôle sur le système d'exploitation.

Dans le cas où vous avez un système d'exploitation qui 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 la même machine, l'option GRUB pour le chargement de Windows chargera en fait un autre chargeur de démarrage qui ne connaît que les installations Windows et y passera. Bien qu'il s'agissait d'une étape tertiaire dans le processus, il est toujours appelé chargeur de démarrage secondaire , car il ne sait ni ne se soucie qu'un autre chargeur de démarrage secondaire fonctionne avant. Ce serait également le cas avec une installation Linux utilisant un autre type 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 n'est pas modifié en installant Linux). Lorsque nous le faisons, update-grubnous modifions le chargeur de démarrage secondaire, qui se trouve généralement dans / boot d'une installation particulière. Lorsque nous le faisons, install-grubnous le modifions ainsi que le chargeur de démarrage principal dans le MBR afin qu'il ait suffisamment de code pour savoir où / boot se trouve (peut-être en démarrant un RAID logiciel au fur et à mesure) et le chargera et l'exécutera lorsqu'il sera lui-même exécuté .

Donc, en résumé, vous aviez tort lorsque vous avez dit que la ROM faisait partie de la mémoire principale * car elle est distincte. (En effet, la RAM est considérée comme antonyme de la ROM). Vous aviez raison à la fois de dire qu'il y avait un chargeur de démarrage là-bas et dans le MBR, car ce sont deux étapes du processus et les deux sont parfois appelés par ce nom. Et la réponse à "Différents systèmes d'exploitation stockent-ils leur chargeur de démarrage à différents endroits?" est "la plupart du temps", car si vos chargeurs de démarrage secondaires incompatibles masquent d'autres chargeurs de démarrage (si vous installez Windows après avoir installé Linux) ou chargent en chaîne dans l'autre si demandé (si vous corrigez cette situation, ou installez Linux après Windows), mais un système d'exploitation peut 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 qu'il peut voir l'autre Linux [parfois le RAID logiciel confond les choses et rend le chargement de chaîne nécessaire).

* À une époque où l'on utilisait par programme à la fois la ROM et la RAM, c'était différent. Sur un ZX Spectrum par exemple, la ROM serait de 16 Ko et inclurait un interpréteur BASIC, de sorte qu'il vous donnerait également le point de départ pour charger quelque chose dans ses 48 Ko ou 128 Ko (paginés) ou RAM (dans ce cas, il s'agit essentiellement de démarrer dans cet interpréteur BASIC et ensuite l'utiliser pour démarrer dans ce qui était sur la bande), il y avait tout un tas de fonctions de l'interpréteur BASIC que les programmes en RAM pouvaient utiliser (pourquoi écrire une fonction trig alors que l'ordinateur en a déjà une à une position connue) ? Surtout quand vous n'avez que 48 Ko pour que tout votre propre code puisse s'exécuter). Cette ROM était également visible de la même manière que la RAM, juste à différentes adresses. Dans un tel cas, la ROM faisait autant partie de la mémoire principale que la RAM, mais pas en écriture.

Jon Hanna
la source
0

Faites 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

Il s'agit d'un "bootloader" super simple qui exécute une seule hltinstruction. Plus d'informations 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 l'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 la ROM, c'est le code qui démarre le chargeur de démarrage pour nous, appelé firmware (ou moins précisément BIOS).

Ciro Santilli 改造 中心 六四 事件
la source
0

Autrefois, le programme de démarrage résidait sur du ruban de papier perforé similaire à ceux utilisés par les télégraphes ou les supports de cartes perforées (`` ne les voyez plus tous les deux). le processus s'appelait auparavant IPL, abréviation de Initial Program Load. Parfois, si un lecteur de bande ou de carte papier n'était pas disponible, il faudrait entrer le code IPL binaire directement dans le processeur via une console sur le panneau avant. ouf!

De nos jours, le code IPL réside dans des pROM qui, lorsqu'ils sont exécutés à leur tour, chargent et exécutent tous les chargeurs de démarrage secondaires adaptés pour charger (démarrer) le système d'exploitation souhaité. le chargeur secondaire peut être sur n'importe quel support sur n'importe quelle partie de la configuration connue ou adressable par le code IPL.

Loi
la source
-1

Le chargeur de démarrage se trouve généralement dans le premier secteur du disque dur, généralement appelé enregistrement de démarrage principal.

À votre santé

j0N45
la source