Vous êtes sur la page 1sur 11

Le BIOS : qu'est-ce

que c'est ?
Par Guy Grave (Mewtow)

www.siteduzero.com

Licence Creative Commons 2 2.0


Dernière mise à jour le 18/11/2012
2/12

Sommaire
Sommaire ........................................................................................................................................... 2
Lire aussi ............................................................................................................................................ 1
Le BIOS : qu'est-ce que c'est ? .......................................................................................................... 3
Un peu d'archéologie informatique ................................................................................................................................... 3
Rappel sur les interruptions ........................................................................................................................................................................................ 3
Routines d'interruption du BIOS .................................................................................................................................................................................. 4
Conclusion .................................................................................................................................................................................................................. 8
Démarrage d'un ordinateur x86 ........................................................................................................................................ 8
On est tombé sur un OS ! ............................................................................................................................................................................................ 8
Rappels sur le disque dur ........................................................................................................................................................................................... 8
MBR ............................................................................................................................................................................................................................ 9
CMOS RAM et autres ...................................................................................................................................................... 10
CMOS RAM ............................................................................................................................................................................................................... 10
Autres paramètres du BIOS ...................................................................................................................................................................................... 10
Q.C.M. ............................................................................................................................................................................. 10
Partager ..................................................................................................................................................................................................................... 11

www.siteduzero.com
Sommaire 3/12

Le BIOS : qu'est-ce que c'est ?

Par Guy Grave (Mewtow)

Mise à jour : 18/11/2012


Difficulté : Intermédiaire Durée d'étude : 30 minutes

238 visites depuis 7 jours, classé 389/797


Vous avez sûrement déjà entendu parler du BIOS et on vous a sûrement dit que c'était quelque chose qui servait au démarrage de
votre ordinateur ? Eh bien, il est maintenant temps de passer aux choses sérieuses : ce tutoriel va vous expliquer et détailler un
peu plus le rôle du BIOS dans un ordinateur et son fonctionnement.

Vous savez sûrement que dans un ordinateur, il y a plusieurs composants (processeur, mémoire RAM…). Ces composants sont
tous installés sur une carte électronique qui est chargée de les faire communiquer entre eux et qu'on appelle la carte mère. Parmi
tous ces composants indispensables, chaque ordinateur contient au moins une mémoire ROM sur laquelle se trouve un
programme (un ordinateur sans programme serait vraiment inutile) : le BIOS.

Il s'agit d'un petit programme qui se lance au démarrage de l'ordinateur et dont le rôle est de :

s'occuper de la gestion de certains périphériques ;


faire ce qu'il faut pour allumer l'ordinateur ;
faire démarrer un système d'exploitation présent sur une mémoire de masse.

Autrefois, le BIOS était stocké dans une mémoire ROM placée sur la carte mère. De nos jours, on préfère utiliser de la mémoire
EEPROM (souvent de la flash) pour stocker celui-ci. On peut ainsi remplacer le programme contenu dans la mémoire EEPROM du
BIOS par un autre : on appelle cela flasher le BIOS.
Sommaire du tutoriel :

Un peu d'archéologie informatique


Démarrage d'un ordinateur x86
CMOS RAM et autres
Q.C.M.

Un peu d'archéologie informatique


Notre BIOS a comme première fonction de prendre en charge une partie de la gestion du matériel et de fournir quelques
abstractions matérielles minimales au système d'exploitation et à l'utilisateur. Pour simplifier le travail, on a incorporé de petits
programmes dans notre BIOS dont le rôle était de gérer une partie du matériel présent sur la carte mère. Ces programmes ont été
standardisés de façon à assurer la compatibilité des programmes utilisant ces routines sur tous les BIOS existants. Ce n'est pas
pour rien que « BIOS » est l'abréviation de Basic Input Output Software, ce qui signifie « programme basique d'entrée − sortie ».

Rappel sur les interruptions


Pour communiquer avec le matériel, le BIOS utilise des fonctionnalités de notre processeur qu'on appelle les interruptions.

Oh là, c'est quoi, une interruption ?

C'est une fonctionnalité de notre processeur qui permet d'arrêter temporairement l'exécution d'un programme pour en exécuter un
autre. On utilise les interruptions dans quelques cas bien précis, qui nécessitent un traitement ne pouvant attendre trop
longtemps : communiquer avec un ou des périphériques, par exemple. Ainsi, pour communiquer avec une carte graphique, un
disque dur ou un clavier, notre BIOS devra utiliser des interruptions.

Celles-ci ont pour but d'interrompre l'exécution d'un programme afin de réagir à un événement extérieur (matériel, erreur fatale
d'exécution d'un programme…) et de le traiter en temps voulu, avant de rendre la main au programme interrompu. Notre

www.siteduzero.com
Le BIOS : qu'est-ce que c'est ? 4/12

interruption va donc effectuer un petit traitement (ici, communiquer avec un périphérique). Ce traitement est effectué par un petit
programme auquel on a donné un nom technique : routine d'interruption.

Lorsqu'un processeur doit exécuter une interruption, celui-ci :

arrête l'exécution du programme en cours ;


exécute la routine d'interruption ;
reprend l'exécution du programme suspendu là où elle en était.

Il existe trois moyens pour déclencher une interruption :

une instruction un peu spéciale du processeur ;


les exceptions, qui se produisent automatiquement lorsque le processeur rencontre une erreur (par exemple une division
par zéro) ;
les requêtes d'interruption, qui sont déclenchées par un événement d'origine matérielle.

Comme vous le voyez, les interruptions peuvent non seulement être appelées par un programme quelconque, grâce à
l'instruction int, mais elles permettent aussi de réagir à des événements purement matériels, comme l'appui d'une touche au
clavier.

Comme on l'a dit, une interruption a été conçue pour réagir à un événement, mais c'est avant tout un programme, qui peut être
exécuté comme n'importe quel autre programme. Dans notre cas, ces interruptions seront simplement considérées comme des
programmes simplistes permettant d'agir sur un périphérique. Bien sûr, devant la multiplicité des périphériques, on se doute bien
qu'il n'existe pas d'interruption à tout faire : il va de soi qu'un programme envoyant un ordre au disque dur sera différent d'un
programme agissant sur une carte graphique. Dans chaque cas, on aura besoin d'effectuer un traitement différent, on doit donc
disposer de plusieurs routines d'interruption. Pour le cas de notre BIOS, celui-ci fournit beaucoup de routines de base pour
communiquer avec les périphériques de notre ordinateur.

Vecteur d'interruption

Cependant, il faut bien décider quelle est l'interruption à exécuter suivant la situation. Par exemple, exécuter l'interruption de
gestion du clavier alors qu'on souhaite communiquer avec notre disque dur produirait un résultat plutôt comique. Par
conséquent, on doit stocker plusieurs de ces routines dans sa mémoire. Mais comment les retrouver ? Comme les autres données
! Pour expliquer correctement cela, il va falloir faire un petit rappel.

La mémoire de notre ordinateur est un vulgaire amas de cellules mémoire, chacune capable de retenir des bits ; on rappelle qu'un
bit est une information qui peut prendre deux valeurs : 0 ou 1. Ces cellules sont regroupées en paquets de 8, qu'on appelle des
cases mémoire. Ces cases contiennent donc des données (ou des morceaux de données : un nombre entier occupe souvent
plusieurs cases). Pour savoir dans quelle case mémoire on a stocké notre donnée, notre ordinateur identifie chaque case par un
nombre unique : l'adresse mémoire. Chaque routine est alors placée dans la mémoire à un certain endroit, localisable par son
adresse, qui indique sa position dans la mémoire.

Pour retrouver la position de notre routine et savoir laquelle exécuter, certains ordinateurs utilisent une partie de leur mémoire
pour stocker les adresses de début de toutes les routines d'interruption. En gros, cette partie de la mémoire contient les adresses
permettant de localiser chaque routine. Cette portion de la mémoire s'appelle le vecteur d'interruption. Pour chaque interruption,
une partie fixe de la mémoire contient l'adresse de début de l'interruption à effectuer.

Pour ceux qui connaissent un peu la programmation, vous pouvez voir ce vecteur d'interruption comme un tableau de
pointeurs sur fonction, les fonctions étant les routines à exécuter.

Le BIOS initialise le vecteur d'interruption au démarrage de l'ordinateur et fournit quelques interruptions de gestion du matériel
fondamentales. Néanmoins, le système d'exploitation peut fournir ses propres routines. Pour que celles-ci soient exécutées, il
suffit à l'OS de détourner l'interruption. Cela consiste à remplacer l'adresse de l'interruption contenue dans le vecteur
d'interruption par l'adresse de la routine que l'OS a chargée en mémoire (bien sûr, l'ancienne adresse est sauvegardée).
En clair, le vecteur d'interruption ne contiendra plus l'adresse servant à localiser la routine du BIOS, mais celle localisant la
routine de l'OS.

Routines d'interruption du BIOS


Le BIOS fournit de base un grand nombre de routines d'interruption préprogrammées. Ces routines peuvent, par exemple, être
exécutées quand on appuie sur une touche du clavier, ou quand une information en provenance de la souris est disponible sur le
port PS/2.

www.siteduzero.com
Le BIOS : qu'est-ce que c'est ? 5/12

De nos jours (depuis Windows 95), une fois le système d'exploitation chargé, ces routines ne peuvent être utilisées que par les
noyaux des systèmes d'exploitation, et quelques pilotes. Pour ceux qui ne le savent pas, une fois le système d'exploitation
chargé, la mémoire d'un ordinateur x86 (architecture 32 bits, ce qui signifie que nous pouvons charger 32 bits de données en
même temps) est coupée en au moins deux portions, dont deux principales :

une partie dans laquelle tout programme qui s'y trouve peut gérer les périphériques et effectuer des manipulations
avancées sur la mémoire : l'espace noyau ;
une autre pour les programmes qui ne doivent ni manipuler les périphériques ni faire de manipulations avancées sur la
mémoire : l'espace utilisateur.

Nos routines sont alors inaccessibles par un programme localisé dans l'espace utilisateur. Uniquement les programmes localisés
dans l'espace noyau ont le droit d'accéder au matériel. Seule une partie du système d'exploitation, nommée noyau et contenant
quelques drivers, est placée dans l'espace noyau et peut donc faire exécuter les routines du BIOS si besoin est.
Mais attention : cela ne vaut qu'une fois que le système d'exploitation est chargé (en fait, une fois que le processeur passe du
mode réel où tout est permis au mode protégé où certaines opérations sont restreintes). Avant, la mémoire est gérée autrement, et
il n'existe pas de distinction entre espace noyau et espace utilisateur, ce qui permet au BIOS de s'exécuter librement.

Les routines du BIOS, voire l'intégralité de son contenu, étaient parfois recopiées dans la mémoire RAM afin de rendre leur
exécution plus rapide, à l'époque où celles-ci servaient encore (MS-DOS). La mémoire RAM est en effet bien plus rapide que la
mémoire (EEP)ROM dans laquelle le BIOS est stocké. Certaines options du BIOS, souvent nommées BIOS memory shadowing
(ou autres noms ressemblants), permettent justement de copier le BIOS dans une partie de la mémoire RAM afin d'accélérer
l'exécution de ses routines. Sachez que ce genre de choses est inutile depuis que le BIOS ne sert plus qu'à l'allumage de
l'ordinateur.

On va lister quelques routines importantes. Dans ce qui suit, l'adresse mentionnée sera l'adresse stockée dans le vecteur
d'interruption de ladite routine (relisez plusieurs fois si besoin). Il faudra cependant être vigilant : la grande majorité de ces
interruptions est détournée par notre système d'exploitation, et n'est utilisée que lors de l'allumage de l'ordinateur. En fait, dès
qu'il existe un driver pour un périphérique quelconque, sachez que les routines du BIOS sont complètement détournées par
votre OS.

Une grande partie de ces routines ont besoin qu'on leur fournisse des paramètres, des informations pour qu'elles fassent ce
qu'elles doivent faire. Par exemple, une routine devant afficher une lettre à l'écran aura besoin qu'on lui donne en entrée la lettre à
afficher. Pour chaque routine, il suffira de copier ces paramètres de la mémoire vers de petites mémoires ultra-rapides intégrées
dans le processeur qu'on appelle les registres. Chacun de ces registres possède un nom qui permet de l'identifier : AX, AH,
AL… Pour chaque routine, chaque registre contiendra une donnée ayant une signification bien précise pour notre routine. Ce
seront souvent les registres AH ou AL du processeur.

Dans ce qui suit, nous listerons quelques routines pour montrer un peu leur utilité. On nommera ces routines.
Chaque routine est identifiée par :

l'identifiant INT, qui sert à préciser que l'on souhaite exécuter une interruption ;
les registres, utilisés pour configurer notre routine ;
un numéro, qui permet d'identifier la routine à exécuter.

En effet, nos routines sont numérotées. Mais attention : ce numéro est un nombre hexadécimal ! En clair, INT 10 n'est pas la
dixième interruption, mais la seizième. Pour ceux qui ne connaissent pas l'hexadécimal, rassurez-vous, vous pourrez comprendre
la suite sans problème.

INT 10h : affichage


Nos cartes graphiques actuelles contiennent toutes une mémoire ROM (voire EEPROM) contenant elle-même des tas de routines
capables de faire afficher du texte et des graphismes monochromes ou 256 couleurs à l'écran. Dans les cartes graphiques
compatibles avec les formats VGA/ESA, ce firmware (programme intégré au composant — le BIOS est un firmware), appelé
improprement BIOS vidéo, est localisé dans l'espace d'adressage aux adresses 000C 0000 ou 000E 0000. Lors du démarrage de
l'ordinateur, ce sont ces routines qui sont utilisées pour gérer l'affichage avant que le système d'exploitation ne lance les drivers
graphiques. Ces fonctions sont extrêmement basiques, ce qui fait que les graphismes affichés à l'écran ont cet aspect si
caractéristique, moche, faisant penser à l'informatique des années 1950…

Mais faites attention : une fois le pilote de la carte graphique démarré, ces fonctions de base ne servent plus ; le système
d'exploitation, le driver vidéo et les programmes lancés gèrent eux-mêmes ce genre de choses et détournent sans vergogne les
interruptions qu'ils souhaitent.

Si aucune ROM vidéo n'est détectée, le BIOS peut quand même communiquer directement avec la carte graphique grâce à une

www.siteduzero.com
Le BIOS : qu'est-ce que c'est ? 6/12

routine qu'il possède. Cette routine a plusieurs fonctions différentes, et peut tout aussi bien envoyer un caractère à l'écran que
renvoyer la position du curseur. Pour spécifier le traitement à effectuer, on doit placer une certaine valeur dans le registre AH du
processeur : la routine est programmée pour déduire le traitement à effectuer uniquement à partir de la valeur du registre AH.
Exemple :

INT 0x10 Valeur à placer dans le registre AH Description


INT 0x10 0x00 Permet de régler la résolution et le nombre de couleurs de l'écran.

INT 0x10 0x01 Place le curseur de la souris à la position voulue sur l'écran.

INT 0x10 0x03 Renvoie la position qu'occupe le curseur de la souris à l'écran.

INT 0x10 0x0E Affiche un caractère ASCII.

INT 11h
Cette routine renvoie un nombre codé sur 16 bits contenant des informations sur certains périphériques présents sur l'ordinateur.

INT 12h

Cette routine ne prend aucun paramètre et renvoie la taille de la mémoire en kilo-octets dans le registre AX.

INT 13h : mémoires de masse


Une routine du BIOS permet de lire ou d'écrire sur le disque dur ou sur une disquette. Cette routine lui sert à lire les premiers
octets d'un disque dur afin de pouvoir charger le système d'exploitation, mais on verra cela au chapitre suivant.

Comme la routine INT 10, elle est polyvalente et on doit spécifier le traitement à effectuer en mettant le registre AH à une valeur
unique pour chaque traitement.
Exemple :

INT 0x13 Valeur à placer dans le registre AH Description

INT 0x13 0x00 Réinitialise le disque sélectionné.

INT 0x13 0x01 Vérifie l'état du disque.

INT 0x13 0x02 Lit une donnée à partir du disque sélectionné.

INT 0x13 0x03 Écrit une donnée sur le disque sélectionné.

… … …

Cette routine était utilisée par les systèmes d'exploitation du style MS-DOS pour lire ou écrire sur le disque dur. Mais cela
appartient à l'histoire, et les OS actuels n'hésitent plus à détourner ces interruptions pour fournir des méthodes de gestion du
disque bien plus efficaces.

INT 14h : port série

Cette interruption était utilisée pour communiquer avec le port série RS232 de notre ordinateur. Comme les autres, elle est
configurée par une valeur dans le registre AH.

INT 0x14 Valeur à placer dans le registre AH Description

INT 0x14 0x00 Initialise le port série.

INT 0x14 0x01 Émet un caractère sur le port série.

INT 0x14 0x02 Réceptionne un caractère.


INT 0x14 0x03 Renvoie l'état du port série (occupé, libre…).

www.siteduzero.com
Le BIOS : qu'est-ce que c'est ? 7/12

INT 15h : fonctions système avancées


Cette interruption a des fonctions diverses et variées, toutes plus ou moins rattachées à la gestion du matériel. Le BIOS était
autrefois en charge de la gestion de l'alimentation de notre ordinateur : il se chargeait de la mise en veille, de réduire la fréquence
du processeur, d'éteindre les périphériques inutilisés. Pour cela, la routine INT 15 était utilisée. Ses fonctions de gestion de
l'énergie étaient encore utilisées jusqu'à la création de Windows 95. De nos jours, avec l'arrivée de la norme ACPI, le système
d'exploitation gère tout seul la gestion de l'énergie de notre ordinateur et cette routine est donc obsolète.

À toute règle, il faut une exception : cette routine est utilisée par les systèmes d'exploitation modernes à leur démarrage afin
d'obtenir une description correcte et précise de l'organisation de la mémoire de l'ordinateur. Pour cela, nos OS configurent cette
routine en plaçant la valeur 0x0000e820 dans le registre EAX. C'est une des très rares exceptions à la règle : les routines du
BIOS sont obsolètes.

INT 16h : clavier


Notre clavier communique avec notre ordinateur en envoyant trois sortes de signaux, qui permettent de déterminer ce que
l'utilisateur fait avec son clavier. Chacun de ces signaux génère une interruption, qui sera interprétée par la routine adéquate.

Trois messages principaux sont utilisés :

touche appuyée : signal spécifiant qu'on a appuyé sur une touche ;


touche relâchée : signal spécifiant qu'on a relâché une touche ;
et touche répétée, qui spécifie que la touche du clavier est restée enfoncée depuis le dernier envoi de message. Ce
message sert quand on appuie continument sur une touche sans la relâcher.

Chacun de ces signaux spécifie la touche en question, évidemment.

Cette routine permet de gérer une partie du clavier, et souvent de le configurer. Comme la routine INT 10, elle est très polyvalente
et peut effectuer de nombreux traitements : on précise le traitement voulu en mettant le registre AH à une certaine valeur.

Valeur à placer
INT
dans le registre Description
0x16
AH

Identifie la touche tapée au clavier. Cette fonction est bloquante : on doit attendre la fin de
INT
0x00 l'exécution de cette routine avant de pouvoir faire exécuter quoi que ce soit d'autre par le
0x16
processeur.

INT
0x01 Identifie la touche tapée au clavier. Cette routine est non bloquante.
0x16

INT
0x02 Spécifie le nombre d'envois maximal de messages (comme « touche répétée ») par seconde.
0x16

Cette routine est utilisée tant que le système d'exploitation n'a pas démarré, c'est pour cela que vous pouvez utiliser le clavier
pour naviguer dans l'écran de configuration de votre BIOS.
En revanche, aucune routine standard ne permet la communication avec la souris : il est impossible d'utiliser la souris dans la
plupart des BIOS. Certains BIOS possèdent malgré tout des routines capables de gérer la souris, mais ils sont très rares. Encore
une fois, ces routines sont détournées par le système d'exploitation à son lancement.

INT 17h : port parallèle


Cette routine permet de communiquer avec une imprimante sur le port parallèle de l'ordinateur. Comme les autres, on la configure
avec le registre AH.

INT 0x17 Valeur à placer dans le registre AH Description

INT 0x17 0x00 Imprime un caractère.

INT 0x17 0x01 Initialise l'imprimante.

www.siteduzero.com
Le BIOS : qu'est-ce que c'est ? 8/12

INT 0x17 0x02 Vérifie l'état de l'imprimante (en cours d'impression, libre…).

INT 19h
C'est une surprise !

Vous verrez dans le chapitre sur le démarrage d'un ordinateur.

Conclusion
Comme vous le voyez, le BIOS fournit beaucoup de routines qui étaient au départ censées faciliter la gestion du matériel. Il y a
longtemps, cela simplifiait la conception des systèmes d'exploitation, et de nombreux OS, tel MS-DOS, utilisaient ces fonctions.
Mais de nos jours, connaître ce genre de choses est plus synonyme d'archéologie expérimentale qu'autre chose.

Démarrage d'un ordinateur x86


Comme je l'ai dit plus haut, le BIOS sert aussi à allumer l'ordinateur et à le configurer correctement avant de laisser la main au
système d'exploitation. Cette phase s'appelle le Power On Self Test , que l'on nomme communément POST. Durant cette phase,
les périphériques sont détectés, testés et configurés pour garantir leur fonctionnement. Le premier élément vérifié lors du POST
(Power On Self Test ) est la stabilité de l'alimentation électrique de l'ordinateur. Le BIOS teste les tensions 12 volts, 5 volts et 3,3
volts, et continue son exécution uniquement si celles-ci sont stables et à la bonne valeur. Si les tensions d'alimentation ne sont
pas stables ou ne sont pas à la bonne valeur, le BIOS arrête immédiatement le démarrage, pour éviter d'endommager le processeur
ou d'autres composants de l'ordinateur.

Ensuite, le BIOS vérifie la stabilité de l'horloge et de quelques autres composants : les 64 premiers kilo-octets de la mémoire, par
exemple.

Étape suivante : initialiser le vecteur d'interruption de notre ordinateur avec ses valeurs par défaut, fournies par le BIOS. Si le
vecteur d'interruption est écrit sans erreur dans la mémoire RAM, le BIOS émet un petit bip, pour signaler que tout va bien. En
effet, un buzzer est placé sur la carte mère et est directement commandable par le processeur. Au moindre problème à l'allumage,
le processeur demande à ce buzzer de bipper. Suivant l'erreur, la série de bips émise sera différente, afin de pouvoir identifier
l'erreur facilement. Attention, cependant : les séries de bips n'ont pas été standardisées par les fabricants de BIOS. Chaque
fabricant a sa propre manière de faire bipper le buzzer en cas d'erreur.

Ensuite, le clavier et la carte vidéo vont être configurés par les routines vues plus haut. Pour détecter la présence d'une carte
vidéo VGA/ESA, le BIOS regarde les adresses mémoire 0x000C 0000 et 0x000E 0000 : ce sont les adresses d'une mémoire
ROM, intégrée à la carte graphique, qui contient toutes les fonctions de base servant à afficher des graphismes à l'écran. Si tout
fonctionne bien, le BIOS va alors demander l'affichage d'un message à l'écran. Si un problème a lieu durant cette phase de test, le
BIOS émet un signal sonore.

À la suite du POST et après avoir détecté les périphériques en communiquant avec les différents bus système, notre BIOS va
chercher lesquels peuvent contenir un système d'exploitation qu'il peut charger.

On est tombé sur un OS !


Dans les anciens ordinateurs, le seul programme que pouvait exécuter l'ordinateur était un simple programme stocké dans une
mémoire ROM. Mais avec l'apparition d'ordinateurs plus sophistiqués, on a rendu possible l'exploitation par un ordinateur de
programmes différents de celui placé dans sa mémoire ROM. L'invention des systèmes d'exploitation a été un pas de plus dans
ce sens, mais il a fallu trouver un moyen de démarrer l'ordinateur de façon à charger un système d'exploitation à partir d'une
mémoire autre que la mémoire ROM placée sur sa carte mère.

Dans tous les ordinateurs, le système d'exploitation est placé sur le disque dur, la carte mère n'a alors aucun moyen de charger le
système d'exploitation directement depuis le disque dur dans la mémoire RAM pour qu'il puisse s'exécuter. Pour résoudre ce
problème, on laisse faire le BIOS.

Rappels sur le disque dur


Comme vous le savez tous, un disque dur est un périphérique servant à mémoriser des données de façon permanente : les
données inscrites sur un disque dur ne s'effacent pas quand on coupe le courant. Ce disque dur est composé de plusieurs
plateaux, fabriqués dans un matériau magnétique et sur lesquels on inscrit des données. Notre disque dur est découpé en petits
blocs de données, chacun capable de contenir un bit, qu'on aimantera dans une direction pour stocker un 1 et dans l'autre sens
pour stocker un 0.

www.siteduzero.com
Le BIOS : qu'est-ce que c'est ? 9/12

Secteurs, cylindres et têtes


Un disque dur contient plusieurs de ces plateaux. Mais il faut connaître un peu la façon dont chaque plateau est organisé avant
de poursuivre. J'ai parlé plus haut de ces cellules capables de stocker un bit ; eh bien, sachez que plusieurs de ces bits,
appartenant à différents plateaux, sont superposés les uns au-dessus des autres. Cela forme ce qu'on appelle un cylindre. Pour
un disque dur possédant cylindres, ceux-ci sont numérotés de à .

Les cellules d'un même plateau sont regroupées en paquets de plusieurs centaines de bits qui se suivent les uns à côté des
autres : les secteurs. Pour simplifier le travail de l'électronique du disque dur, on préfère utiliser des paquets ayant une taille de la
forme . Sur les disques durs actuels, un secteur a une taille de 512 octets, soit 4 096 bits. Ces secteurs sont numérotés en
commençant à 1.

Notre disque dur contient aussi de petits dispositifs mobiles capables de lire ou écrire une donnée sur le disque dur : les têtes de
lecture − écriture, avec une tête de lecture par plateau. Un disque dur en possède plusieurs. Pour un disque dur contenant
têtes de lecture − écriture, on les numérote de à .

Adressage CHS
Pour localiser un secteur sur un disque dur, il suffit alors de préciser le numéro du cylindre, le secteur et la tête de lecture (pour
préciser le bon plateau). Cette façon d'adresser un secteur du disque dur s'appelle l'adressage CHS. Le seul problème avec cet
adressage, c'est que le BIOS utilise 10 bits pour coder le numéro du cylindre, 8 bits pour le numéro de tête (parfois 4) et 6 bits
pour le numéro de secteur, ce qui limite la taille maximale possible du disque dur à environ 500 méga-octets. Pour contrer cette
limite et pour que le BIOS détecte les disques durs avec la bonne taille au démarrage, on a inventé diverses astuces.

Une de ces astuces consiste à transformer les coordonnées CHS codées sur 24 bits (10 bits pour le cylindre + 8 pour le numéro
de tête + 6 pour le numéro de secteur) en coordonnées de 28 bits. Pour cela, les routines de gestion du disque dur ont été
modifiées pour réaliser ces traductions de coordonnées, ce qui a repoussé la limite de taille des disques durs à environ 8 giga-
octets.

Enfin, devant la progression de la taille des disques durs, on a inventé l'adressage LBA. Celui-ci numérote simplement chaque
secteur du disque dur par un nombre, sans se préoccuper de son numéro de tête, de cylindre ou de secteur. Il est donc identifié
par un simple nombre : l'adresse logique, qui peut être traduite par le BIOS ou l'électronique intégrée dans le disque dur en une
adresse CHS codée sur suffisamment de bits.

Nos BIOS peuvent utiliser différents types d'adressage en fonction de la carte mère et certains peuvent en utiliser plusieurs
(aussi bien CHS que LBA, par exemple). En fait, la routine standardisée INT 13 manipule des coordonnées CHS, mais on peut
parfaitement trouver d'autres routines complémentaires qui travaillent avec des coordonnées LBA. Certaines ne sont pas
standardisées, mais d'autres le sont : on peut citer notamment les Enhanced Disk Drive.

MBR
Le MBR, abréviation de Master Boot Record , est le nom donné au premier secteur du disque dur (aussi bien en adressage LBA
qu'en adressage CHS). Ses coordonnées CHS sont donc (0, 0, 1). C'est dans ce MBR que toutes les informations nécessaires au
démarrage d'un système d'exploitation sont placées. Ce MBR est assez bien organisé et contient trois grandes parties aux usages
différents.

Code exécutable
Les premiers octets du MBR sont remplis par un programme servant à charger le système d'exploitation. Ceux-ci sont chargés à
la fin du POST, par la routine INT 19h, qui copie le premier secteur dans la mémoire RAM, à l'adresse 0x7C00. Cette routine
configure ensuite le processeur en plaçant l'adresse de base de ce code en mémoire (notre fameux 0x7C00) dans le registre
pointeur d'instruction E(IP) du processeur, ce qui permet d'exécuter ce programme et donc de lancer l'OS.

Toutefois, il existe quand même une condition à cela : à la toute fin du MBR, les deux derniers octets doivent avoir une valeur
bien précise pour que le BIOS autorise l'exécution de ce programme. Cette valeur, appelée le nombre magique, vaut 0xAA55, ce
qui correspond à 43 605 en décimal. Mais le résultat est encore plus joli en binaire : 1010101001010101.

Ce programme est suivi par quelques octets optionnels, souvent vides, puis par la table des partitions. Le programme en lui-
même fait 440 octets.

Table des partitions


La table des partitions contient des informations sur les différentes partitions installées sur le disque dur : leur « nom », leur

www.siteduzero.com
Le BIOS : qu'est-ce que c'est ? 10/12

taille, et leur localisation sur le disque dur. Chaque ligne d'une table de partition contient l'adresse CHS de début d'une partition
et sa taille. On ne peut créer que quatre lignes dans cette table, on se trouve donc limité à quatre partitions principales. Il faut dire
que cette table ne fait que 64 octets (elle a été conçue comme cela).

Messages d'erreur
Il existe enfin une zone contenant les messages d'erreur à afficher dans le cas où le lancement du système d'exploitation
échouerait. Par exemple, le message d'erreur NTDLR manquant est stocké dans cette zone.

CMOS RAM et autres


Vous avez sûrement remarqué que notre ordinateur est capable de retenir la date, et ce même débranché ? Eh bien notre BIOS a
un petit rapport avec cela !

CMOS RAM
Dans un ordinateur, et dans tout composant électronique capable de conserver une heure ou une date, on trouve une mémoire
capable de retenir l'heure et la date. Mais cela ne suffit pas : il faut aussi que l'heure ne se dérègle pas, et pour cela, il faut
continuer à compter, même quand l'ordinateur est débranché. Il nous faut donc un circuit capable de compter, qui est incrémenté
de façon cyclique à chaque fois qu'une durée bien précise s'est écoulée. Enfin, il nous faut aussi une source d'énergie qui
remplace l'alimentation secteur lorsque l'ordinateur est débranché, pour alimenter ces circuits. Cette source d'énergie est
quasiment toujours une pile au lithium installée sur la carte mère.

Pour récapituler, il nous faut donc :

une horloge, pour synchroniser les composants ;


un compteur, qui est un circuit comptant de un en un à chaque tic d'horloge (ou en plusieurs tics d'horloge, c'est selon) ;
une mémoire capable de conserver la date et l'heure, qui sont mises à jour au besoin (date, heure…) ;
et une pile pour alimenter le tout.

Première précision : l'horloge dont je viens de parler n'a rien à voir avec l'autre horloge nommée horloge système, créée pour
cadencer les différents bus, et qui est utilisée par le processeur et la mémoire pour ajuster leur fréquence. On va appeler l'horloge
censée compter le temps l'horloge RTC, pour Real Time Clock. La RTC est créée par un oscillateur à quartz, et a une fréquence
qui est souvent calibrée à 32 768 Hz. Cette fréquence correspond à cycles d'horloge par seconde, ce qui permet de compter à
la seconde près sans décalage. Du moins en théorie, car cette horloge n'a pas une fréquence de 32,768 kHz tout pile, et quelques
ajustements sont parfois nécessaires.

Autre précision : la mémoire utilisée pour stocker l'heure est une mémoire SRAM ! Ce n'est pas une mémoire EEPROM, comme
on pourrait le penser. Il s'agit souvent d'une mémoire fabriquée avec des transistors CMOS, d'où son nom de CMOS RAM.

D'autres circuits additionnels permettent de mettre à jour l'heure, les minutes, les secondes ou la date présentes dans la CMOS
SRAM (en cas de changement d'heure, par exemple). Les circuits de gestion de l'horloge, le compteur de temps ainsi que la
mémoire RAM sont placés en dehors du BIOS et sont lus par le BIOS au démarrage. Seuls les circuits de gestion du temps,
l'horloge (différente de l'horloge système) et la mémoire RAM sont encore alimentés par la pile de l'ordinateur une fois celui-ci
éteint.

Autres paramètres du BIOS


Les paramètres modifiables du BIOS sont souvent stockés dans une mémoire FLASH ou EEPROM séparée du BIOS, qui est lue
par le BIOS à l'allumage de l'ordinateur. De nos jours, cette mémoire est fusionnée avec le circuit de gestion du temps et est
placée directement dans le southbridge dans un seul et unique circuit.

Cette mémoire, la mémoire CMOS, est adressable, ce qui signifie qu'on peut y accéder par une adresse. Mais on y accède
indirectement, car on communique avec cette adresse comme si c'était un périphérique : le contenu de la CMOS RAM ne peut
pas être écrit ou lu directement case mémoire par case mémoire par notre processeur, mais il peut envoyer des ordres de lecture
ou des informations à écrire une par une sur une adresse bien précise. Cela lui permet d'aller lire les informations contenues dans
cette RAM, pour afficher l'heure dans son menu de configuration, par exemple. On y accède via les adresses 0x0007 0000 et
0x0007 0001 (ces adresses sont écrites en hexadécimal).

Q.C.M.
Le premier QCM de ce cours vous est offert en libre accès.
Pour accéder aux suivants
www.siteduzero.com
Le BIOS : qu'est-ce que c'est ? 11/12

Connectez-vous Inscrivez-vous
Pourquoi avoir utilisé une mémoire de type SRAM pour stocker l'heure, la date et les autres informations de gestion du temps au
lieu d'une mémoire DRAM ?

Parce qu'une mémoire SRAM coûte moins cher qu'une mémoire DRAM .
Parce que le contenu de la mémoire doit changer souvent et rapidement. Et pour ce genre de situations, les mémoires SRAM sont
plus adaptées.
Pour éviter de gaspiller de l'énergie et maintenir une meilleure autonomie, en évitant de vider la source d'énergie de la CM OS
RAM .

Correction !

Statistiques de réponses au Q CM

Et voilà, vous savez maintenant ce qu'est le BIOS.

Pour ceux qui désirent en savoir un peu plus sur les interruptions du BIOS, voici quelques liens :

interruption INT 10h ;


interruption INT 13h ;
interruption INT 14h.

Partager

Ce tutoriel a été corrigé par les zCorrecteurs.

www.siteduzero.com

Vous aimerez peut-être aussi