Aller au contenu

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

Un livre de Wikilivres.

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.

La gestion des fréquences et des durées

[modifier | modifier le wikicode]

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ée à 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 à Quartz

[modifier | modifier le wikicode]

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érateurs 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équence

[modifier | modifier le wikicode]

De nos jours, les ordinateurs font faire la multiplication 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.

Les timers intégrés à la carte mère

[modifier | modifier le wikicode]

Le générateur de fréquence est souvent combiné à des timers, des circuits qui comptent des durées bien précises et sont capables de générer des fréquences. Pour rappel, les timers sont des compteurs/décompteurs qui génèrent une interruption ou un signal quand ils atteignent une valeur limite. Ils permettent de compter des durées, exprimées en cycles d’horloge. 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. Ils permettent aussi d’exécuter une interruption à intervalle régulier, ou après une certaine durée. Par exemple, on peut vouloir générer une interruption à une fréquence de 60 Hz, pour gérer le rafraichissement de l'écran. Une telle interruption s'utilisait autrefois sur les anciens ordinateurs ou sur les anciennes consoles de jeux vidéo et portait le nom de raster interrupt.

Un ordinateur est rempli de timers divers. Dans ce qui va suivre, nous allons voir les principaux timers, qui sont actuellement intégrés dans les PC anciens et modernes. Ils se trouvent sur la carte mère ou dans le processeur, tout dépend du timer. Sur les anciens PC, on trouve deux timers : l'horloge temps réel et le PIT. L'horloge temps réel génère une fréquence de 1024 Hz, alors que le PIT est un Intel 8253 ou un Intel 8254 programmable par l'utilisateur. Les PC récents n'utilisent qu'un seul timer qui remplace les deux précédents : le High Precision Event Timer. Un ordinateur contient d'autres timers, comme le timer ACPI, le timer APIC, ou le Time Stamp Counter, mais ces derniers sont intégrés dans le processeur et non sur la carte mère.

Le plus important est qu'il y a une horloge temps réel cadencée à fréquence de 1 024 Hz, soit près d'un Kilohertz, ou du moins un circuit capable de l'émuler. Dans ce qui suit, nous la noterons RTC, ce qui est l'acronyme du terme anglais Real Time Clock. La RTC est utilisée par le système pour 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 droit de votre écran pour vous en convaincre) et il peut le faire avec une précision de l'ordre de la seconde. La RTC est parfois connectée à l'entrée d'interruption non-masquable, car elle est utilisée pour des fonctions importantes du système d'exploitation, comme la commutation entre les processus, et bien d'autres.

Plus rarement, certaines cartes mères possèdent un watchdog timer. Pour rappel, un watchdog timer est un timer qui sert à détecter les dysfonctionnements matériels, notamment les plantages ou les freezes. Pour cela, le watchdog timer génère régulièrement un signal d'interruption non-masquable. La routine d'interruption réinitialise le watchdog timer, si tout se passe bien. On part du principe que si l'ordinateur ne réinitialise par le watchdog timer, alors c'est qu'il a planté. Le watchdog timer est généralement connecté indirectement à l'entrée d'interruption non-masquable du processeur : quand le watchdog timer déborde, il déclenche une interruption non-masquable, qui remet celui-ci à zéro si tout va bien.

Pour savoir quel jour, heure, minute et seconde il est, l'ordinateur utilise la RTC, ainsi qu'un circuit pour mémoriser la date. 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).

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

[modifier | modifier le wikicode]
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.

Les circuits support pour le processeur

[modifier | modifier le wikicode]

Les circuits de support du processeur regroupent des circuits directement connectés au processeur, qui sont utilisés lors du démarrage du processeur ou lors de son fonctionnement. Dans ce qui va suivre, nous allons parler des circuits qui sont connectés sur deux entrées sur processeur : l'entrée RESET, et l'entrée d'interruption non-masquable. Nous allons aussi parler des circuits reliés à l'alimentation et aux ventilateurs.

L'allumage et le redémarrage du processeur : l'entrée RESET du processeur

[modifier | modifier le wikicode]

Le processeur dispose d'une entrée RESET qui, comme son nom l'indique, est une broche du processeur qui réinitialise celui-ci à zéro quand on met le niveau logique ou front adéquat dessus. C'est elle qui se cache derrière le bouton d'alimentation de votre ordinateur, à peu de choses près. Quand vous voulez allumer votre ordinateur, cette broche est activée, le processeur démarre. En cas de problème, vous appuyez environ 10/15 secondes sur le bouton d'alimentation, et la broche est activée une nouvelle fois : l'ordinateur redémarre. La broche est commandée par un bouton et quelques circuits qui font attendre 10 secondes en cas de redémarrage. Certains ordinateurs ou certaines consoles de jeu vidéo avaient un bouton RESET directement connectée au signal RESET : appuyer et relâcher le bouton active le signal RESET sans délai.

Lorsqu'on envoie le signal adéquat sur l'entrée RESET, le processeur remet à zéro l'ensemble de ses registres, sans éventuellement pour le program counter. Les registres sont mis à leur de base, la même pour chaque démarrage. Il lance ensuite la procédure d'initialisation du program counter. Pour rappel, ce dernier peut être initialisé de deux façons différentes. Avec la première, il est initialisé à une valeur initiale déterminée lors de la conception du processeur. Typiquement, il est initialisé à 0, la toute première adresse, encore qu'il y ait quelques exceptions. L'autre solution place l'adresse de départ dans le firmware, à une adresse bien précise de ce dernier. Le processeur lit l'adresse en question pour récupérer l'adresse de la première instruction, et effectue un branchement dessus.

Le redémarrage via l'entrée de RESET est aussi appelée un reset hardware, et on l'oppose au reset logiciel. Un reset logiciel est simplement le reset qui a lieu quand vous redémarrez votre ordinateur normalement, en demandant à Windows/linux de redémarrer. Dans ce cas, le redémarrage est effectué par une interruption logicielle spécifique. Le système d'exploitation et le firmware fournissent la routine d'interruption qui redémarre l'ordinateur ! D'ailleurs, des interruptions non-masquables peuvent exécuter cette routine en cas de gros problème. La différence est que l'entrée RESET déclenche un vrai RESET matériel. Ce n'est pas une interruption normale, mais bien d'une vraie réinitialisation, impossible de revenir en arrière comme avec une interruption normale.

L'entrée RESET est commandée par divers circuits supports

[modifier | modifier le wikicode]

Lors d'un démarrage ou d'un redémarrage, le processeur est allumé par un signal RESET. Il y a une petite différence entre l'allumage et le redémarrage, qui tient dans la manière dont la tension d'alimentation et l'horloge sont gérés. Un ordinateur, pour fonctionner correctement doit avoir une alimentation et une horloge qui tiennent la route. Et cela a quelques conséquences sur le démarrage, qui ne sont pas présentes pour le redémarrage.

Lors d'un reset hardware, le processeur reste alimenté, il n'est pas coupé. Il réinitialise ses registres, remet à zéro pas mal de circuits, mais l'alimentation reste maintenue. Par contre, ce n'est pas garantit lors de l'allumage : si jamais vous allumez votre ordinateur en appuyant sur une multiprise, par exemple. Au passage, si vous débranchez votre ordinateur avant de le rebrancher, ce n'est pas un reset hardware proprement dit, vous éteignez l'ordinateur avant de le relancer : l'alimentation est coupée entre temps. Le fait que l'alimentation soit coupée ou maintenue change beaucoup de choses.

Lors du démarrage, le signal RESET n'est pas généré immédiatement quand on appuie sur le bouton de démarrage. Il faut attendre que la tension d'alimentation se stabilise, de même que le signal d'horloge. Si les tensions d'alimentation ne marchent pas comme prévu, le démarrage n'a pas lieu pour éviter d'endommager le processeur ou d'autres composants de l'ordinateur. Il en est de même avec le signal d'horloge, qui doit être stable pour que le processeur fonctionne correctement.

Pour cela, la carte mère contient deux circuits séparés. Le premier est le Power-on reset, qui temporise en attendant que la tension d'alimentation se stabilise. Il vérifie les tensions 12 V, 5 V et 3,3 V, et n'autorise le RESET du processeur que si celles-ci sont stables et à la bonne valeur. En parallèle, un autre circuit, l'Oscillator start-up timer, vérifie la stabilité de l'horloge. Il temporise en attendant que le signal d'horloge se stabilise. Les deux circuits produisent un signal RESET quand la tension ou l'horloge sont OK, et le signal RESET final est un ET entre les deux.

Les circuits supports liés aux interruptions non-masquables

[modifier | modifier le wikicode]

Pour rappel, une interruption non-masquable est une interruption que le processeur ne peut pas ignorer. La plupart des processeurs disposent d'une entrée spécifique pour ces interruptions. En mettant le stimulus adéquat sur cette entrée, le processeur éxecute une interruption, sans possibilité de l'ignorer ou de la retarder. Elles sont commandées par niveau logique ou par front, toutes les combinaisons sont possibles. L'entrée d'interruption non-masquable est une entrée séparée de l'entrée d'interruption normale, sur laquelle les interruptions peuvent être retardées ou ignorées, masquées comme le veut la terminologie.

L'acronyme NMI signifie Non Maskable Interrupt, ce qui veut dire interruption non-masquable. Dans ce qui suit, nous parlerons d'ailleurs de NMI et d'entrée NMI par abus de langage, pour simplifier l'écriture.

Les NMI et le RESET sont générés dans des situations très similaires, qui regroupent l'ensemble des défaillances matérielles. Les défaillances matérielles regroupent des situations très variées : une perte de l'alimentation, une erreur de parité mémoire, une surchauffe du processeur, etc. Les défaillances matérielles sont généralement détectées par un paquet de circuits dédiés, mais il est généralement difficile de savoir d'où provient l'erreur, quel est le matériel ou périphérique responsable. C'est possible s'il s'agit d'une erreur de mémoire RAM, comme une lecture dont l'ECC détecte une corruption de mémoire, ou d'un problème de surchauffe, d'alimentation. Mais dans les autres cas, difficile de savoir quel est le problème.

Le résultat de telles défaillances est que l'ordinateur est arrêté/redémarré de force, ou alors affiche un écran bleu. L'affichage d'un écran bleu n'est possible qu'avec une NMI, alors que le redémarrage demande un RESET. Certains composants peuvent agir sur les deux entrées, suivant la situation. Pour faire le choix entre les deux, les processeurs disposent de deux entrées séparées. La première est l'entrée NMI qui est une entrée d'interruption spécifique, séparée de l'entrée d'interruption normale. La seconde est une entrée RESET qui le réinitialise et redémarre l'ordinateur, que nous allons voir dans la section suivante.

La détection/correction d'une défaillance de l’alimentation

[modifier | modifier le wikicode]

Pendant le fonctionnement de l'ordinateur, il se peut que la tension d'alimentation ait des problèmes. Par exemple, lorsqu'on débranche la prise, une coupure de courant, un problème matériel avec les régulateurs de tension, des condensateurs de la carte mère qui fondent, etc.

Lors d'une défaillance de l'alimentation, les ordinateurs modernes génèrent une interruption non-masquable. La raison est que la carte mère contient des condensateurs qui permettent au processeur de fonctionner durant quelques millisecondes, ce qui lui laisse le temps de faire quelques sauvegardes mineures, comme générer un crash dump.

Les défaillances de la tension d'alimentation sont détectées par un circuit spécialisé, appelé le Low-voltage detect. IL est souvent fusionné avec l'Oscillator start-up timer en un seul circuit. Rien d'étonnant à cela, les deux doivent être reliés à la tension d'alimentation, les deux interagissent avec les entrées NMI/RESET, les deux vérifient que la tension est stable, etc.

Le Firmware : BIOS et UEFI

[modifier | modifier le wikicode]

La plupart des ordinateurs contiennent une mémoire ROM qui lui permet de fonctionner. Les plus simples 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 programme à 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.

Le 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.

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é.

Les routines d'interruption du BIOS

[modifier | modifier le wikicode]

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. Ce standard, malgré sa simplicité, était extrêmement puissant. Il était possible de créer un OS complet en utilisant juste des appels de routine du BIOS. Par exemple, le DOS, ancêtre de Windows, utilisait exclusivement les routines du BIOS !

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.

L'accès au BIOS

[modifier | modifier le wikicode]
Organisation de la mémoire d'un PC doté d'un 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). C'est un mode de compatibilité qui existe parce que les premiers processeurs x86 avaient des adresses de 20 bits, ce qui fait 1 mébioctet de mémoire adressable. En mode réel, 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.

Les deux premiers kibioctets de la mémoire conventionnelle sont réservés au BIOS, le reste est utilisé par le système d'exploitation (MS-DOS, avant sa version 5.0) et le programme en cours d’exécution. Pour être plus précis, les premiers octets contiennent non pas le BIOS, mais la BIOS Data Area utilisée par le BIOS pour stocker des données diverses, qui commence à l'adresse 0040:0000h, a une taille de 255 octets, et est initialisée lors du démarrage de l'ordinateur.

La mémoire haute est réservée pour communiquer avec les périphériques. On y trouve aussi le BIOS de l'ordinateur, mais aussi les BIOS des périphériques (dont celui de la carte vidéo, s'il existe), qui sont nécessaires pour les initialiser et parfois pour communiquer avec eux. De plus, on y trouve la mémoire de la carte vidéo, et éventuellement la mémoire d'autres périphériques comme la carte son.

Par la suite, le BIOS démarre le système d'exploitation, qui bascule en mode protégé, un mode d'exécution où il peut utiliser des adresses mémoires de 32/64 bits et utiliser la mémoire étendue au-delà du premier mébioctet.

Le démarrage de l'ordinateur

[modifier | modifier le wikicode]

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.

Le BIOS commence la séquence de démarrage avec le POST (Power On Self Test), qui effectue quelques vérifications. Il commence par vérifier que le BIOS est OK, en vérifiant une somme de contrôle présente à la fin du BIOS lui-même. Il vérifie ensuite l'intégrité des 640 premiers kibioctets de la mémoire. 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.

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.

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 exécute l'interruption 0x19, qui permet de démarrer un système d'exploitation. Pour cela, il lit le premier secteur du disque dur (le master boot record), 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.

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.

Le chipset de la carte mère

[modifier | modifier le wikicode]

L'organisation des cartes mères des ordinateurs personnels a évolué au cours du temps pendant que de nombreux bus apparaissaient. Les premiers ordinateurs faisaient avec un simple bus système qui connectait processeur, mémoire et entrée-sortie. Mais avec l'augmentation du nombre de périphériques et de composants systèmes, l'organisation des bus s'est complexifiée.

Un ordinateur contient plusieurs contrôleurs de périphériques, c'est la norme de nos jours et l'est depuis déjà plusieurs décennies. Par exemple, un ordinateur de type PC assez ancien avait un contrôleur de périphérique pour le clavier, un autre pour la souris, un autre pour le port parallèle, un autre pour le port série et quelques autres. Par la suite, d'autres contrôleurs se sont greffés aux précédents : un pour l'USB, un intégré à la carte vidéo, un intégré à la carte son, et ainsi de suite. Concrètement, n'importe quel ordinateur récent contient plusieurs dizaines, si ce n'est des centaines, de contrôleurs de périphériques.

L'apparition du chipset

[modifier | modifier le wikicode]

Pour résumer, connecter plusieurs contrôleurs de périphériques au processeur n'est pas chose facile. Ce problème peut se résoudre de deux manières, mais les cartes mères récentes, après les années 1980, utilisent une architecture à base de répartiteurs. Pour rappel, ce répartiteur est placé en avant du processeur et sert d'interface entre celui-ci, un bus pour la mémoire, et un bus pour les entrées-sorties. Mais avec le temps, le répartiteur a acquis d'autres capacités qui dépassent de loin son rôle d'interface. Il a intégré le contrôleur mémoire, un contrôleur DMA, un contrôleur d'interruption, etc.

IO mappées en mémoire avec séparation des bus, usage d'un répartiteur

Un exemple est le répartiteur qui était utilisé avec le processeur Intel 486, sorti en 1989. Il était connécté au processeur, à la mémoire RAM, mais aussi à la mémoire cache (qui était séparé du processeur et placé sur la carte mère), au bus PCI, au bus IDE pour le disque dur, au bus ISA et au bus SMM. L'horloge et les signaux de RESET étaient aussi connectés aux répartiteur.

Intel 486 System Controller.

La séparation du chipset en deux

[modifier | modifier le wikicode]

Un autre problème est que la mémoire et la carte graphique sont devenus de plus en plus rapide avec le temps, au point que les périphériques ne pouvaient plus suivre. Les différents composants de la carte mère sont 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.

Entre les années 80 et 2000, la solution retenue par les fabricants de cartes mères utilisait deux répartiteurs séparés : le northbridge et le southbridge. Le northbridge sert d'interface entre le processeur, la mémoire et la carte graphique et est connecté à chacun par un bus dédié. Il intègre notamment le controleur mémoire. Le southbridge est le répartiteur pour les composants lents. 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.

Chipset séparé en northbridge et southbridge.
Carte mère avec circuit Super IO.

Le southbridge intègre généralement un contrôleur DMA, des contrôleurs d'interruption, et pas mal d'autres circuits. Ce qui est mis dans le southbridge est très variable selon la carte mère. Par exemple, les cartes mères des processeurs Intel 5 Series intégraient la Real Time Clock. Les southbridge actuels intègrent les contrôleurs DMA et des contrôleurs d'interruptions 8259, qui sont soit présents dans leurs circuits, soit émulés avec des circuits équivalents.

Sur la plupart des cartes mères, le BIOS est placé en-dehors du southbridge. Il arrive que la CMOS RAM soit intégrée au southbridge, mais elle est souvent séparée. Par contre, les deux sont connectés au southbridge.

Sur certaines cartes mères, le southbridge est complémenté par un circuit de Super IO, qui s'occupe des périphériques et bus anciens, comme le bus pour le lecteur de disquette, le port parallèle, le port série, et les ports PS/2 pour le clavier et la souris. De plus, ce circuit peut contenir beaucoup d'autres sous-circuits. PAr exemple, il peut contenir des capteurs de température, les circuits qui controlent la vitesse des ventilateurs, divers timers, et quelques autres.

L'intégration du northbridge au processeur

[modifier | modifier le wikicode]
Intel 5 Series architecture

Sur les cartes mères qui datent au moins des années 2000, depuis la sortie de l'Athlon64, le contrôleur mémoire a été intégré au processeur, ce qui est équivalent à dire que le northbridge est intégré au processeur. le southbridge est encore là, il est toujours connecté au processeur et aux périphériques. Concrètement, le processeur a un bus mémoire séparé, non-connecté au répartiteur de type southbridge.

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.