Fonctionnement d'un ordinateur/La carte mère, chipset et BIOS

Dans un ordinateur, les composants sont placés sur un circuit imprimé (la carte mère), un circuit sur lequel on vient connecter les différents composants d'un ordinateur, et qui les relie via divers bus. Si on regarde une carte mère de face, on voit un grand nombre de composants assez divers.

Architecture matérielle d'une carte mère

Les composants les plus visibles sont les connecteurs, là où l'on vient brancher les périphériques, la cartes graphique, le processeur, la mémoire, etc. Dans l'ensemble, toute carte mère contient les connecteurs suivants :

  • Le processeur vient s’enchâsser dans la carte mère sur un connecteur particulier : le socket. Celui-ci varie suivant la carte mère et le processeur, ce qui est source d'incompatibilités.
  • Les barrettes de mémoire RAM s’enchâssent dans un autre type de connecteurs: les slots mémoire.
  • Les mémoires de masse disposent de leurs propres connecteurs : connecteurs P-ATA pour les anciens disques durs, et S-ATA pour les récents.
  • Les périphériques (clavier, souris, USB, Firewire, ...) sont connectés sur un ensemble de connecteurs dédiés, localisés à l'arrière du boitier de l'unité centrale.
  • Les autres périphériques sont placés dans l'unité centrale et sont connectés via des connecteurs spécialisés. Ces périphériques sont des cartes imprimées, d'où leur nom de cartes filles. On peut notamment citer les cartes réseau, les cartes son, ou les cartes vidéo.

Outre les connecteurs, une carte mère contient les différents bus qui connectent les composants entre eux, ainsi que divers circuits électroniques intégrés à la carte mère. Ces derniers n'ont pas de connecteurs, mais sont soudés à la carte mère et sont indispensables à son bon fonctionnement. Un bon exemple est celui du circuit d'alimentation, qui est en charge de la gestion de la tension d'alimentation. Il contient des composants aux noms à coucher dehors pour qui n'est pas électronicien : régulateurs de tension, convertisseurs alternatif vers continu, condensateurs de découplage, et autres joyeusetés.

Dans ce chapitre, nous allons étudier ces composants électroniques, mais aussi comment sont organisés les bus sur une carte mère. Nous allons voir que la façon dont les composants sont connectés entre eux par des bus a beaucoup changé au fil du temps et que l'organisation de la carte mère a évoluée au fil du temps. Les cartes mères se sont d'abord complexifiées, pour faire face à l'intégration de plus en plus de périphériques et de connecteurs. Mais par la suite, les processeurs ayant de plus en plus de transistors, ils ont incorporé des composants autrefois présents sur la carte mère, comme le contrôleur mémoire.

Les bus de communication et le chipsetModifier

L'organisation des carte mères des ordinateurs personnels a évolué au cours du temps pendant que de nombreux bus apparaissaient. On considère qu'il existe trois générations de cartes mères bien distinctes. La première génération utilise un bus unique pour tous l'ordinateur, les autres utilisent un plus grand nombre de bus.

La première génération : un bus système uniqueModifier

Pour les bus de première génération, un seul et unique bus reliait tous les composants de l'ordinateur. Ce bus s'appelait le bus système ou backplane bus. Ces bus de première génération avaient le fâcheux désavantage de relier des composants allant à des vitesses très différentes : il arrivait fréquemment qu'un composant rapide doive attendre qu'un composant lent libère le bus. Le processeur était le composant le plus touché par ces temps d'attente. Du fait de l'existence d'un bus unique, les entrées-sorties étaient mappées en mémoire.

 
Bus système

La seconde génération : l'apparition du chipsetModifier

Par la suite, le processeur et la mémoire sont devenus de plus en plus rapide avec le temps, au point que les périphériques ne pouvaient plus suivre. Il en a été de même avec la carte graphique, quelques temps plus tard. Les différents composants de la carte mère étaient alors séparés en deux catégories : les "composants lents" et les "composants rapides". Les composants rapides regroupent le processeur, la mémoire RAM et la carte graphique, les autres sont regroupés dans les composants lents. Les besoins entre des deux classes de composants étant différents, utiliser un seul bus pour les faire communiquer n'est pas idéal. Les composants rapides demandent des bus rapides, de forte fréquence, avec un gros débit pour communiquer, alors que les composants lents ont besoin de bus moins rapide, de plus faible fréquence.

Ce problème a été résolu par l'intégration de deux circuits distincts : le northbridge et le southbridge. Le southbridge est le chipset proprement dit, à savoir qu'il regroupe les différents contrôleurs de périphériques, comme nous l'avions vu dans le chapitre "Le contrôleur de périphériques". Le northbridge, quant à lui, sert d'interface entre le processeur, la mémoire et la carte graphique. Le processeur est connecté au northbridge, qui lui-même est connecté à la mémoire, la carte graphique, et au southbridge. Le northbridge gère les échanges entre processeur, mémoire et carte graphique. Il intègre notamment le contrôleur mémoire externe, ainsi que d'autres circuits importants.

 
North et southbridge.

Le bus qui relie le processeur au northbridge est appelé le Front Side Bus, abrévié en FSB. Le bus de transmission qui relie le northbridge au southbridge est un bus dédié, spécifique au chipset considéré, sur lequel on ne peut pas dire de généralités. Le schéma indique ces deux bus, en bleu pour le FSB, en rouge pour le second.

 
Chipset séparé en northbridge et southbridge.

La troisième génération : l'intégration du northbridge au processeurModifier

Sur les cartes-mères récentes, le northbridge est intégré au processeur. Ou plus précisément, nous devrions dire que le contrôleur mémoire a été intégré au processeur. Concrètement, cette organisation illustrée ci-dessous fait que le processeur est directement connecté à la RAM et au southbridge, le reste de la carte mère ne change pas. Cela ne vaut que pour les cartes mères qui datent au moins des années 2000, depuis la sortie de l'Athlon64. Les raisons derrière cette intégration ne sont pas très nombreuses. La raison principale est qu'elle permet diverses optimisations quant aux transferts avec la mémoire RAM. De sombres histoires de prefetching, d'optimisation des commandes, et j'en passe. La seconde est surtout que cela simplifie la conception des cartes mères, sans pour autant rendre vraiment plus complexe la fabrication du processeur. les industriels y trouvent leur compte.

Par la suite, la carte graphique fût aussi connectée directement sur le processeur. Le northbridge disparu alors complétement. Sur les cartes mères intel récentes, le chipset est appelé le Platform Controler Hub, ou PCH. l'organisation des bus sur la carte mère qui résulte de cette connexion du processeur à la carte graphique, est illustrée ci-dessous, avec l'exemple du PCH.

 
Intel 5 Series architecture

La gestion des fréquences et des duréesModifier

Les composants d'un ordinateur sont cadencés à des fréquences très différentes. Par exemple, le processeur fonctionne avec une fréquence plus élevée que l'horloge de la mémoire RAM. Les différents signaux d'horloge sont générés par la carte mère. Intuitivement, on se dit qu'il y a un circuit dédié par fréquence. Mais c'est en fait une erreur : en réalité, il n'y a qu'un seul générateur d'horloge. Ce dernier produit une horloge de base, qui est « transformée » en plusieurs horloges, grâce à des montages électroniques spécialisés. Les avantages de cette méthode sont la simplicité et l'économie de circuits. La fréquence de base est souvent très petite comparé à la fréquence du processeur ou de la mémoire, ce qui est contre-intuitif. Mais la fréquence de base est multipliée par les circuits transformateurs pour obtenir la fréquence du processeur, de la RAM, etc. Ainsi, la fréquence du processeur et de la RAM sont des multiples de cette fréquence de base. Naturellement, les circuits de conversion de fréquence sont donc appelés des multiplieurs de fréquence.

 
Génération des signaux d'horloge d'un ordinateur

Le générateur de fréquence : un oscillateur à QuartzModifier

Le générateur de fréquence est le circuit qui génère le signal d'horloge envoyé au processeur, la mémoire RAM, et aux différents bus. Sans lui, le processeur et la mémoire ne peuvent pas fonctionner, vu que ce sont des circuits synchrones dans les PC actuels. Il existe de nombreux circuits générateur de fréquence, qui sont appelés des oscillateurs en électronique. Ils sont très nombreux, tellement qu'on pourrait écrire un livre entier sur le sujet. Entre les oscillateurs basés sur un circuit RLC (avec une résistance, un condensateur et une bobine), ceux basés sur une résistance négative, ceux avec des amplificateurs opérationnels, ceux avec des lampes à néon, et j'en passe ! Mais nous n'allons pas parler de tous les oscillateurs, la plupart n'étant pas utilisés dans les ordinateurs modernes.

 
Oscilatteur à Quartz, sur une carte mère.

La quasi-totalité des générateurs de fréquences des ordinateurs modernes sont des dispositifs à quartz, similaires à celui présent dans nos montres électroniques. Les oscillateurs à Quartz sont fabriqués en combinant un amplificateur avec un cristal de Quartz. Ces générateurs de fréquences fournissent une fréquence de base qui varie suivant le modèle considéré, mais qui est souvent de 32 768 Hertz, soit 2^15 cycles d'horloge par seconde. Ils ont une forme facilement reconnaissable, comme montré dans l'image ci-contre. Vous pouvez le repérer assez facilement sur une carte mère si jamais vous en avez l'occasion.

Pour ceux qui voudraient en savoir plus sur le sujet, sachez que le wikilivre d'électronique a un chapitre dédié à ce sujet, , disponible via le lien suivant. Attention cependant : le chapitre n'est compréhensible que si vous avez déjà lu les chapitres précédents du wikilivre sur l'électronique et il est recommandé d'avoir une bonne connaissance des circuits RLC/LC, sans quoi vous ne comprendrez pas grand chose au chapitre.

Les multiplieurs de fréquenceModifier

De nos jours, les ordinateurs font faire cette conversion de fréquence par un composant appelé une PLL (Phase Locked Loop), qui sont des composants assez versatiles et souvent programmables, mais il est aussi possible d'utiliser des circuits à base de portes logiques plus simples mais moins pratiques. Comprendre le fonctionnement des PLLs et des générateurs de fréquence demande des bases assez solides en électronique analogique, ce qui fait que nous n'en parlerons pas en détail dans ce cours.

La gestion du temps et de la dateModifier

Le générateur de fréquence est souvent combiné à des circuits qui s'occupent de tout ce qui a trait aux durées en général. Leur utilité la plus connue est de compter les secondes, afin que l'ordinateur soit toujours à l'heure. Vous savez déjà que l'ordinateur sait quelle heure il est (vous pouvez regarder le bureau de Windows dans le coin inférieur droite de votre écran pour vous en convaincre) et il peut le faire avec une précision de l'ordre de la seconde. Mais pour savoir quel jour, heure, minute et seconde il est, l'ordinateur doit faire deux choses : mémoriser la date exacte à la seconde près, et avoir la capacité de compter le temps qui s'écoule, seconde par seconde. Pour cela, un ordinateur contient deux circuits : une CMOS RAM qui mémorise la date, et un circuit de comptage des secondes appelé l'horloge temps réel.

La CMOS RAM mémorise la date exacte à la seconde près. Son nom nous dit qu'elle est fabriquée avec des transistors CMOS, mais aussi qu'il s'agit d'une mémoire RAM. Mais attention, il s'agit d'une mémoire RAM non-volatile, c'est à dire qu'elle ne perd pas ses données quand on éteint l'ordinateur. Nous expliquerons plus bas comment cette RM fait pour être non-volatile. La CMOS RAM est adressable, mais on y accède indirectement, comme si c'était un périphérique, à savoir que la CMOS RAM est mappée en mémoire. On y accède via les adresses 0x0007 0000 et 0x0007 0001 (ces adresses sont écrites en hexadécimal). Elle mémorise, outre la date et l'heure, des informations annexes, comme les paramètres du BIOS (voir plus bas).

L'horloge temps réel est un circuit qui compte les secondes, voire les millisecondes ou les microsecondes. Dans ce qui suit, nous la noterons RTC, ce qui est l'acronyme du terme anglais Real Time Clock. La RTC est relié au processeur sur une entrée d’interruption, et son rôle est de générer une interruption à intervalle régulier. Le processeur sait ainsi que depuis la dernière interruption provoquée par la RTC, il s'est écoulée une durée bien précise, fixe, toujours la même. Sur les PC x86 actuels, l'horloge temps réel génère une interruption toutes les millisecondes, ce qui donne une fréquence de 1 KHz. Cela permet au processeur de mettre à jour la date exacte, mais aussi de compter des durées plus courtes. Par exemple, c'est utile pour mesurer des temps courts, comme le ping (le temps de latence d'un réseau, pour simplifier), pour compter des fréquences comme le temps de rafraichissement de l'écran, ou bien d'autres choses comme l'ordonnancement des processus. A ce propos, c'est la raison pour laquelle il est impossible de dépasser les 1000 FPS sur les jeux vidéos Windows et Linux. L'interruption en question, l'IRQ8, est utilisée pour mesurer le temps dans les jeux vidéos, compter la durée d'une frame, et sert de timing pour démarrer le calcul d'une nouvelle image.

L'horloge temps réel a une fréquence de 1 KHz dans les PCs, mais la durée est différente sur les PC non-x86. La fréquence de la RTC est proportionnelle à la fréquence fournie par le générateur d'horloge. En effet, la fréquence de la RTC est fournie en multipliant la fréquence de l'horloge par N, N dépendant de la RTC considérée. Pour expliquer comment la RTC fait, prenons l'exemple d'un PC, où la RTC a une fréquence de 1 KHz, et l'horloge a une fréquence de 32 KHz. La RTC émet une interruption tous les 32 cycles de l'horloge. Pour cela, la RTC contient un compteur qui compte le nombre de cycles écoulés depuis la dernière interruption RTC. Quand ce nombre de cycles comptés atteint 32, la RTC émet une nouvelle interruption et remet à zéro son compteur.

Mais l'émission d'une nouvelle interruption toutes les millisecondes n'est pas la seule utilité de la RTC. Les RTC actuelles contiennent non seulement de quoi faire cela, mais aussi de quoi compter d'autres durées. La RTC contient donc un ou plusieurs timers matériels (hardware timer), des circuits qui comptent à une certaine fréquence. Un de ces timer est dédié aux interruptions RTC, qui ont lieu toutes les millisecondes, mais les autres timers émettent des interruptions à des intervalles différents, configurables par l'utilisateur ou le système d’exploitation. Par exemple, on peut vouloir générer une interruption à une fréquence différente, en plus l'interruption à 1 KHz. Comme autre exemple, on peut vouloir émettre une interruption à une heure bien précise tous les jours. Hé bien, il est possible de configurer un des timer de la RTC de manière à ce qu'il fasse cela ! Les fonctions de Windows ou de certains logiciels se basent là-dessus, comme celles pour baisser la luminosité à une heure précise, passer les couleurs de l'écran en mode nuit, certaines notifications, les tâches planifiées, et j'en passe.

Chaque timer est composé d'un compteur/décompteur cadencé à une certaine fréquence, souvent la fréquence fournie par le générateur de fréquence. Avec un timer basé sur un compteur, le compteur est initialisé à 0, est incrémenté à chaque cycle d'horloge, puis émet une interruption quand sa valeur atteint une valeur précise. Pour un décompteur, c'est la même chose, sauf que le décompteur est initialisé à sa valeur initiale, est décrémenté à chaque cycle, et envoie une interruption quand il atteint 0. Pour que les timers soient configurables, on doit pouvoir préciser combien de cycles il faut compter avant d'émettre une nouvelle interruption. On peut ainsi préciser s'il faut émettre une nouvelle interruption tous les 32 cycles d'horloge, tous les 50 cycles, tous les 129 cycles, etc. Pour cela, il suffit de préciser le nombre de cycles à compter/décompter dans un registre dédié, qui sert à initialiser le compteur/décompteur.

La source d'alimentation de la RTC et de la CMOS RAMModifier

 
RTC avec pile au lithium intégrée.

L'horloge temps réel, l’oscillateur à Quartz et la CMOS RAM fonctionnent en permanence, même quand l'ordinateur est éteint. Mais cela implique que ces composants doivent être alimenté par une source d'énergie qui fonctionne lorsque l'ordinateur est débranché. Cette source d'énergie est souvent une petite pile au lithium localisée sur la carte mère, plus rarement une petite batterie. Elle alimente les trois composants en même temps, vu que tous les trois doivent fonctionner ordinateur éteint. Elle est facilement visible sur la carte mère, comme n'importe quelle personne qui a déjà ouvert un PC et regardé la carte mère en détail peut en témoigner.

Au passage : plus haut, nous avions dit que la CMOS RAM est une RAM non-volatile, c'est à dire qu'elle ne s'efface pas quand on éteint l’ordinateur. Et bien si elle l'est, c'est en réalité car elle est alimentée en permanence par une source secondaire de courant.

Sur la plupart des cartes mères, la RTC et la CMOS RAM sont fusionnées en un seul circuit qui s'occupe de la gestion de la date et des durées. Il arrive rarement que la pile au lithium soit intégrée dans ce circuit, mais c'est très rare. La plupart des concepteurs de carte mère préfèrent séparer la pile au lithium de la RTC/CMOS RAM pour une raison simple : on peut changer la pile au lithium en cas de problèmes. Ainsi, si la pile au lithium est vide, on peut la remplacer. Enlever la pile au lithium permet aussi de résoudre certains problèmes, en réinitialisant la CMOS RAM. L'enlever et la remettre réinitialise la CMOS RAM, ce qui remet à zéro la date, mais aussi les paramètres du BIOS.

Le Firmware : BIOS et UEFIModifier

La plupart des systèmes contiennent une mémoire ROM qui lui permet de fonctionner. La plupart stockent le programme à exécuter dans cette ROM, et n'utilisent pas de mémoire de masse. On pourrait citer le cas des appareils photographiques numériques, qui stockent le programmes à exécuter dans la ROM. D'autres utilisent cette ROM pour amorcer le système d'exploitation : la ROM contient le programme qui initialise les circuits de l'ordinateur, puis exécute un mini programme qui démarre le système d'exploitation (OS) Cette ROM, et par extension le programme qu'elle contient, est appelée le firmware. Ce firmware est placée sur la carte mère, du moins sur les ordinateurs qui ont une carte mère. Sur les PC modernes, ce firmware s'occupe du démarrage de l'ordinateur et notamment du lancement de l'OS. Il existe quelques standards de firmware, utilisés sur les ordinateurs PC, utilisés pour garantir la compatibilité entre ordinateurs, leur permettre d'accepter divers OS, et ainsi de suite. Il existe deux standard : le BIOS, format ancien pour le firmware qui a eu son heure de gloire, et l'EFI ou UEFI, utilisés sur les ordinateurs récents.

Le BIOSModifier

Sur les PC avec un processeur x86, il existe un programme, lancé automatiquement lors du démarrage, qui se charge du démarrage avant de rendre la main au système d'exploitation. Ce programme s'appelle le BIOS système, communément appelé BIOS. Autrefois, le système d'exploitation déléguait la gestion des périphériques au BIOS. Ce programme est mémorisé dans de la mémoire EEPROM, ce qui permet de mettre à jour le programme de démarrage : on appelle cela flasher le BIOS. En plus du BIOS système, les cartes graphiques actuelles contiennent toutes un BIOS vidéo, une mémoire ROM ou EEPROM qui contient des programmes capables d'afficher du texte et des graphismes monochromes ou 256 couleurs à l'écran. 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 pilotes graphiques. De même, des cartes d'extension peuvent avoir un BIOS. On peut notamment citer le cas des cartes réseaux, certaines permettant de démarrer un ordinateur sur le réseau. Ces BIOS sont ce qu'on appelle des BIOS d'extension. Si le contenu des BIOS d'extension dépend fortement du périphérique en question, ce n'est pas du tout le cas du BIOS système, dont le contenu est relativement bien standardisé.

L'accès au BIOSModifier

 
Organisation de la mémoire d'un PC doté d'un BIOS.

Le BIOS est mappé en mémoire (certaines adresses mémoire sont redirigées vers le BIOS). Il faut noter que le processeur démarre systématiquement en mode réel, un mode d'exécution spécifique aux processeurs x86, où le processeur n'a accès qu'à 1 mébioctet de mémoire (les adresses font 20 bits maximum). Par la suite, le système d'exploitation basculera en mode protégé, un mode d'exécution où il peut utiliser des adresses mémoires de 32/64 bits.

Dans les grandes lignes, le premier mébioctet de mémoire est décomposé en deux portions de mémoire : les premiers 640 kibioctets sont ce qu'on appelle la mémoire conventionnelle, alors que les octets restants forment la mémoire haute. La mémoire conventionnelle sert à exécuter des programmes en mode réel sur certains systèmes d'exploitation (MS-DOS, avant sa version 5.0). Le BIOS peut aussi utiliser une portion de la mémoire conventionnelle pour mémoriser des informations diverses : cette portion de RAM s'appelle la BIOS Data Area. Celle-ci commence à l'adresse 0040:0000h et a une taille de 255 octets. Elle est initialisée lors du démarrage de l'ordinateur. Par contre, les octets de la mémoire haute servent pour communiquer avec les périphériques. On y trouve aussi le BIOS vidéo (s'il existe). Tout le reste de la mémoire, au-delà du premier mébioctet, est ce qu'on appelle la mémoire étendue.

Le démarrage de l'ordinateurModifier

Au démarrage de l'ordinateur, le processeur est initialisé de manière à commencer l'exécution des instructions à partir de l'adresse 0xFFFF:0000h (l'adresse maximale en mémoire réelle moins 16 octets). C'est à cet endroit que se trouve le BIOS. Le BIOS s’exécute et initialise l'ordinateur avant de laisser la main au système d'exploitation. En cas d'erreur à cette étape, le BIOS émet une séquence de bips, la séquence dépendant de l'erreur et de la carte mère. Pour cela, le BIOS est relié à un buzzer placé sur la carte mère. Si vous entendez cette suite de bips, la lecture du manuel de la carte mère vous permettra de savoir quelle est l'erreur qui correspond.

Le démarrage commence avec le POST (Power On Self Test), qui vérifie la stabilité de l'alimentation électrique de l'ordinateur, la stabilité de l'horloge, et l'intégrité des 640 premiers kibioctets de la mémoire. Le BIOS vérifie en premier lieu la stabilité de l'alimentation électrique de l'ordinateur. Il teste les tensions 12 V, 5 V et 3,3 V, et continue son exécution uniquement si celles-ci sont stables et à la bonne valeur. Si les tensions d'alimentation ne marchent pas comme prévu, 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 640 premiers kibioctets de la mémoire, par exemple.

Ensuite, les périphériques sont détectés, testés et configurés pour garantir leur fonctionnement. Pour cela, le BIOS scanne la mémoire haute à la recherche des périphériques, tout en détectant la présence d'autres BIOS d'extension. Le BIOS est conçu pour lire la mémoire haute, par pas de 2 kibioctets. Par exemple, le BIOS regarde s'il y a un BIOS vidéo aux adresses mémoire 0x000C:0000h et 0x000E:0000h. Pour détecter la présence d'un BIOS d'extension, le BIOS système lit ces adresses et y recherche une signature, une valeur bien précise qui indique qu'une ROM est présente à cet endroit : la valeur en question vaut 0x55AA. Cette valeur est suivie par un octet qui indique la taille de la ROM, lui-même suivi par le code du BIOS d'extension. Si un BIOS d'extension est détecté, le BIOS système lui passe la main, grâce à un branchement vers l'adresse du code du BIOS d'extension. Ce BIOS peut alors faire ce qu'il veut, mais il finit par rendre la main au BIOS (avec un branchement) quand il a terminé son travail.

C'est plus ou moins à ce moment qu'est initialisé le vecteur d'interruption de l'ordinateur. Il se peut que juste avant, le BIOS initialise le vecteur d'interruption au démarrage de l'ordinateur avec les adresses des routines qu'il fournit. Si le vecteur d'interruption est écrit sans erreur dans la mémoire RAM, le BIOS fait émettre un petit bip par l'ordinateur, pour signaler que tout va bien. Par la suite, le système d'exploitation peut remplacer les adresses des interruptions par ses propres routines ou celles des pilotes : on dit qu'il détourne l'interruption. 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. De fait, les routines du BIOS ne servent à rien avec les systèmes d'exploitation modernes. 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.

À ce stade du démarrage, une interface graphique s'affiche. La majorité des cartes mères permettent d'accéder à une interface pour configurer le BIOS, en appuyant sur F1 ou une autre touche lors du démarrage. Cette interface donne accès à plusieurs options modifiables, qui permettent de configurer le matériel. Ces paramètres sont stockés dans une mémoire flash ou EEPROM séparée du BIOS, généralement fusionnée avec la CMOS, qui est lue par le BIOS à l'allumage de l'ordinateur. Cette mémoire, la mémoire CMOS, est adressable via les adresses 0x0007:0000 et 0x0007:0001.

Par la suite, le BIOS lit le premier secteur du disque dur, qui contient toutes les informations pertinentes pour lancer le système d'exploitation. On rentre alors dans un domaine différent, celui du fonctionnement logiciel des systèmes d'exploitation. Je renvoie ceux qui veulent en savoir plus à mon wikilivre sur les systèmes d'exploitation, et plus précisément au chapitre sur Le démarrage d'un ordinateur.

Les routines d'interruption du BIOSModifier

Le BIOS fournit des routines d'interruption pour gérer les périphériques et matériels les plus courants. Ce n'est pas pour rien que « BIOS » est l'abréviation de Basic Input Output System, ce qui signifie « programme basique d'entrée-sortie ». Ces routines sont standardisées de façon à assurer la compatibilité des programmes sur tous les BIOS existants. Ces routines peuvent effectuer des traitements parfois très complexes, comme communiquer avec des périphériques. Certaines routines peuvent notamment effectuer plusieurs traitements : par exemple, la routine qui permet de communiquer avec le disque dur peut aussi bien lire un secteur, l'écrire, etc. 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. Mais certaines routines ne font pas grand-chose : par exemple, l'interruption 0x12h ne fait que lire une portion de la BIOS Data Area pour y récupérer la taille de la mémoire conventionnelle. De manière générale, beaucoup d'interruptions lisent ou écrivent dans la BIOS Data Area, même si ce n'est pas une obligation. Les routines du BIOS étaient parfois recopiées dans la mémoire RAM afin de rendre leur exécution plus rapide. Certaines options du BIOS, souvent nommées BIOS memory shadowing, permettent justement d'autoriser ou d'interdire cette copie du BIOS dans la RAM. Mais une fois le système d'exploitation démarré, ces fonctions de base ne servent plus. Le vecteur d'interruption est mis à jour après le démarrage pour qu'il pointe non pas vers les interruptions du BIOS, mais vers les interruptions fournies par le système d'exploitation et les pilotes. Cette mise à jour est effectuée par le système d'exploitation, une fois que le BIOS lui a laissé les commandes.

Voici une description assez succincte de ces routines. Vous remarquerez que je n'ai pas vraiment détaillé ce que font ces interruptions, ni comment les utiliser. Il faut dire que de nos jours, ce n'est pas franchement utile. Mais si vous voulez en savoir plus, je vous invite à lire la liste des interruptions du BIOS de Ralf Brown, disponible via ce lien : Liste des interruptions du BIOS, établie par Ralf Brown.

Adresse de la routine dans le vecteur d'interruption Description succinte
10h Si aucune ROM vidéo n'est détectée, le BIOS peut quand même communiquer directement avec la carte graphique grâce à cette routine. Elle a plusieurs fonctions différentes et peut tout aussi bien envoyer un caractère à l'écran que renvoyer la position du curseur.
13h Cette routine du BIOS permet de lire ou d'écrire sur le disque dur ou sur une disquette. Plus précisément, cette routine lui sert à lire les premiers octets d'un disque dur afin de pouvoir charger le système d'exploitation. Elle était aussi utilisée par les systèmes d'exploitation du style MS-DOS pour lire ou écrire sur le disque dur.
14h La routine 14h était utilisée pour communiquer avec le port série RS232 de notre ordinateur.
15h La routine 15h 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 15h é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 certains 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.
16h La routine 16h permet de gérer une partie du clavier, et souvent de le configurer. 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.
17h 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.
19h Cette routine est celle qui copie le MBR dans la RAM, de vérifier la présence de la valeur magique et d'exécuter le bootloader si tout va bien. Elle sert donc à lancer le système d'exploitation lors du démarrage d'un ordinateur, mais elle sert aussi en cas de redémarrage : on peut redémarrer l'ordinateur en appelant la routine 19h, à condition d'avoir pris quelques précautions (désactiver les interruptions matérielles, notamment).

Ce standard, malgré sa simplicité, était cependant extrêmement puissant. Il était possible de créer un OS complet en utilisant juste des appels de routine du BIOS. Toute la gestion des périphériques compatibles avec le BIOS était alors prise en charge par le BIOS. Cette simplicité a notamment été utilisée sur des OS relativement connus. Par exemple, le DOS, ancêtre de Windows, utilisait exclusivement les routines du BIOS !

EFI et UEFIModifier

 
Diagramme de l'UEFI.

L'EFI (Extensible Firmware Interface) est un nouveau standard de firmware, similaire au BIOS, mais plus récent et plus adapté aux ordinateurs modernes. Le BIOS avait en effet quelques limitations, pour part dues à l'organisation du MBR,pour une autre part au standard du BIOS lui-même. Par exemple, la table des partitions utilisée ne permettait pas de gérer des partitions de plus de 2,1 téraoctets. De plus, le BIOS devait gérer les anciens modes d'adressage mémoire des PC x86 : mémoire étendue, haute, conventionnelle, chose qui est quelque peu inutile de nos jours. Cela forçait le BIOS à utiliser des registres 16 bits lors de l’amorçage, ainsi qu'un ancien jeu d'instruction aujourd’hui obsolète. L'EFI a été conçu sans ces limitations, lui permettant d'utiliser tout l'espace d'adressage 64 bits, et sans limitations de taille de partition.

Cependant, la norme de l'EFI et de l'UEFI (une version plus récente) vont plus loin que simplement modifier le BIOS. Ils ajoutent diverses fonctionnalités supplémentaire, qui ne sont pas censées être un ressort d'un firmware de démarrage. Certains UEFI disposent de programmes de diagnostic mémoire, de programmes de restauration système, de programmes permettant d’accéder à internet et bien d'autres. L'EFI peut ainsi être vu comme un logiciel intermédiaire entre le firmware et l'OS.