Qui charge le BIOS dans la RAM lors du démarrage de l'ordinateur

8

Au démarrage de l'ordinateur, le code du BIOS est exécuté en premier. Cependant, comment le code du BIOS est-il chargé dans la RAM pour l'exécution?

Je me suis référé à cette question - Le BIOS est-il lu à partir de la puce du BIOS ou copié dans la RAM au démarrage? . Cependant, cela m'a davantage troublé. Si le BIOS est chargé à partir de la ROM et que la ROM est une puce distincte, quel est l'intérêt de parler des adresses de segment dans la RAM? En outre, où le code BIOS est-il chargé - se trouve-t-il dans le dernier 1 Mo d'espace d'adressage en mode réel ou dans un autre emplacement?

Si quelqu'un pouvait lister les étapes depuis le démarrage de l'ordinateur jusqu'à l'exécution de la première instruction du BIOS, y compris les adresses mémoire utilisées, il serait très utile

Cygnus
la source

Réponses:

7

Comme je l'ai écrit dans ma réponse à cette question, la sagesse populaire reçue sur le sujet - comme malheureusement illustrée par d'autres réponses là-bas (et ailleurs dans SuperUser) - est bloquée dans le monde comme vers 1991, malgré la richesse des références techniques disponibles expliquant comment il en est maintenant autrement.

Vous n'auriez pas été aussi confus si vous aviez lu ma réponse, parce que vous ne vous interrogeriez pas sur "BIOS chargé à partir de la ROM" en premier lieu.

Votre "puce BIOS" n'est pas une ROM; il n'y a pas de code machine entre le démarrage du processeur et la première instruction du firmware; et le "M" dans "RAM" et "ROM" signifie "mémoire".

Comme je l'ai écrit auparavant, dans les PC modernes, le micrologiciel de la machine est conservé dans une RAM non volatile . Ce n'est plus la ROM comme avant. Voir la réponse précédente pour plus de détails sur la puce NVRAM connectée au bus LPC. (Par exemple: sur une machine assise démontée à côté de moi pendant que je tape ceci, la NVRAM contenant le firmware est une Pm49FL004T, une puce de RAM Flash LPC.)

Les processeurs 32 bits ne démarrent pas en mode réel et ne démarrent pas avec une adresse inférieure à la ligne 1 Mo. Ce sont des décades obsolètes de l'époque des processeurs x86 16 bits. Ils commencent dans ce qui est familièrement connu comme le mode irréel , et encore une fois dans ma réponse précédente, j'ai donné les détails de ce qui s'est réellement passé depuis l'avènement du 80386 . Ils chargent leur première instruction à partir d' une adresse qui est en fait juste au - dessus de l'espace d'adressage 32 bits, FFFFFFF0.

Dans ma réponse précédente, je vous ai expliqué en détail où le micrologiciel de la machine est principalement mappé dans l'espace d'adressage physique sur les machines x86 32 bits et 64 bits. N'oubliez pas: la RAM et la ROM sont de la mémoire . Les adresses physiques sont des adresses mémoire , sur le bus système. Ils peuvent adresser soit la RAM soit la ROM. (Ils peuvent même aborder d'autres choses également, mais cela ne fait que compliquer cette discussion.) L'adresse physique FFFFFFF0est de 16 octets sous le haut de la plage de 512 Ko où les 512 Ko du micrologiciel, en RAM non volatile, sont toujours mappés sur le bus système par le "chipset".

Il n'y a pas de «chargement» à partir d'une puce ROM mythique qui se poursuit lors de l'initialisation ou de la réinitialisation du processeur. La puce contenant le firmware est une RAM non volatile . Il conserve son contenu, écrit lorsqu'il est "flashé", à travers les cycles d'alimentation. Et le processeur lit simplement les instructions et les données du micrologiciel, sur le bus système et sur un bus LPC (et éventuellement un pont LPC / FWH) connecté au bus système via le chipset, en utilisant une adresse de mémoire physique.

Lectures complémentaires

JdeBP
la source
Merci, cela me semble beaucoup plus clair. Cependant, lorsque vous dites que la RAM non volatile et les données qui y sont lues, cela signifie-t-il que le BIOS est couplé à la RAM d'une manière ou d'une autre? Chaque puce RAM est-elle livrée avec un BIOS? Je sais que cela peut sembler stupide, mais je suis un débutant dans ce sujet.
Cygnus
Lorsqu'il parle de mémoire à accès aléatoire non volatile (NVRAM), il fait référence à une technologie différente de la RAM utilisée comme mémoire système principale (Typiquement Dynamic Random Access Memory, DRAM). C'est une puce distincte de la RAM principale qui contient le firmware même lorsqu'il est éteint, donc la partie "non volatile".
Dougvj
@Dougvj: Dans ce cas, pourquoi avons-nous une adresse distincte de FFFFFFF0 pour cela? La taille de la NVRAM ne serait-elle pas juste la taille du firmware?
Cygnus
Je pense que vos questions sont mieux traitées comme des questions réelles, pas des commentaires sur cette réponse. Examinez certaines des questions «connexes» à droite, puis trouvez une question à poser qui vous aidera à mieux comprendre. (Il y a certainement de la place sur SuperUser pour quelques questions + réponses sur les bases, semble-t-il d'un bref shufti.)
JdeBP
@JdeBP: J'ai ajouté une nouvelle question
Cygnus