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

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche

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 relie ceux-ci via divers bus.

  • Le processeur vient s'enchasser 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.
Architecture matérielle d'une carte mère

Les bus de communication et le chipset[modifier | modifier le wikicode]

L'organisation des carte mères de nos ordinateurs 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 :

  • une première génération avec un bus unique, la plus ancienne ;
  • une seconde génération avec des bus segmentés ;
  • une troisième génération avec une intégration du chipset nord dans le processeur.

La première génération : un bus système unique[modifier | modifier le wikicode]

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.

Bus système

La seconde génération : l'apparition du chipset[modifier | modifier le wikicode]

Sur tous les composants connectés à la carte mère, certains sont plus rapides que d'autres. Il est possible de les classer en "composants lents" et en "composants rapides". Les composants rapides regroupent le processeur, la mémoire RAM et la carte graphique. Il faut dire que ce sont des composants qui demandent des bus rapides, de forte fréquence, avec un gros débit pour communiquer. Les autres composants sont considérés comme lents et ont besoin de moins de puissance de transfert. Les besoins entre des deux classes de composants étant différents, utiliser un seul bus pour les faire communiquer risque de poser de nombreux problèmes de synchronisation.

Pour régler ce problème, on a divisé le bus système en deux : un bus pour les périphériques lents et un autre pour les périphériques rapides. Dans ce qui suit, nous allons désigner ces deux bus sous les noms de "bus lent" et "bus rapide". Avec ces deux bus, les composants rapides peuvent communiquer entre eux avec un bus adapté, alors que la communication avec les composants lents passe par un autre bus spécialisé. Deux périphériques lents peuvent ainsi communiquer entre eux, sans utiliser le bus rapide, qui est utilisable à volonté par les périphériques rapides (et vice versa). Avec cette séparation en deux bus distincts, impossible qu'un composant lent mette en attente une transmission entre deux composants rapides.

Mais la séparation des deux bus ne doit pas être complète, dans le sens où un composant rapide doit pouvoir communiquer avec les autres composants. Il n'y a pas isolation totale entre les deux bus. C'est surtout important pour la mémoire RAM et le processeur, qui communiquent avec les périphériques lents (pensez à la technologie DMA ou au pooling), mais c'est plus marginal pour la carte graphique. Pour permettre une communication entre le bus rapide et le bus lent, les cartes mères intègrent un composant nommé le chipset, chargé de faire la liaison et de transmettre les données d'un bus à l'autre.

Bus système avec un chipset.

Sur certains ordinateurs, le chipset est divisé en deux circuits distincts qui s'occupent de composants différents. Ces deux circuits sont appelés le northbridge pour le bus des composants rapides, le southbridge pour le bus des périphériques lents. Les deux sont reliés par un bus de transmission 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.

La troisième génération : l'intégration du northbridge au processeur[modifier | modifier le wikicode]

Sur les cartes-mères récentes, le northbridge est intégré au processeur. Cela ne vaut que pour les cartes mères qui datent d'au moins les années 2000, un petit peu plus, les cartes plus anciennes ayant un northbridge sur la carte mère. C'est à partir de cette date que les processeurs disposent de suffisamment de transistors pour y intégrer le northbridge, qui prend quand même pas mal de place sur un die. On peut se demander pourquoi une telle intégration, sachant que cela fait que le processeur communique directement avec la RAM, le southbridge et la carte graphique. Les raisons à cela ne sont pas très nombreuses. Déjà, il faut savoir que cela permet diverses optimisations quant aux transferts avec la mémoire RAM. De sombres histoires de prefetching, d'optimisation des commandes, et j'en passe. Une autre raison est que les processeurs récents intègrent une carte graphique directement dans leurs circuits, ce qui réduit le bus rapide à un simple bus mémoire et rend le northbridge peu utile. Enfin, cela permet de réduire la complexité des circuits du chipset, qui est déportée dans le processeur, et de réduire le nombre de composants sur la carte mère. Toutes ces raisons font que les northbridges actuels sont tous intégrés dans le processeur.

Bus système avec intégration du northbridge dans le processeur.

Le générateur d'horloge[modifier | modifier le wikicode]

Outre cet ensemble de composants, la carte mère contient aussi quelques composants spécialisés. Le premier est le générateur d'horloge, le composant qui génère le signal d'horloge envoyé au processeur, la mémoire RAM, et aux différents bus. Celui-ci est généralement basé sur un dispositif à quartz, similaire à celui présent dans nos montres électroniques. La fréquence de base fournie par le quartz est de 32768 Hz, soit 2^15 cycles d'horloge par seconde. Celle-ci est multipliée par divers circuits pour obtenir l'ensemble des fréquences de l'ordinateur.

La CMOS RAM[modifier | modifier le wikicode]

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. Il s'agit souvent d'une mémoire de type RAM, et plus précisément une mémoire SRAM, et non pas une mémoire EEPROM comme l'intuition nous le suggère. De plus, elle est généralement 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 RAM (en cas de changement d'heure, par exemple). Ceux-ci sont reliés à l'horloge, afin de compter les secondes; minutes, heures qui s'écoulent.

La CMOS RAM est adressable, mais on y accède indirectement, 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. On y accède via les adresses 0x0007 0000 et 0x0007 0001 (ces adresses sont écrites en hexadécimal).

Vu que la CMOS RAM est une mémoire RAM, donc volatile, elle doit être alimenté en permanence pour ne pas perdre son contenu. Et c'est sans compter que les circuits qui comptent les secondes doivent continuer à fonctionner et à mettre à jour la CMOS RAM, même si l'ordinateur est éteint. Pour cela, il nous faut une source d'énergie qui remplace l'alimentation secteur lorsque l'ordinateur est débranché. Cette source d'énergie est quasiment toujours une pile au lithium installée sur la carte mère. L'enlever et la remettre réinitialise la CMOS RAM.

Le Firmware : BIOS et UEFI[modifier | modifier le wikicode]

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

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

Accès au BIOS[modifier | modifier le wikicode]

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.

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

Les premiers éléments vérifiés lors du POST (Power On Self Test) sont 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 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 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 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 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 va lancer le système d'exploitation. Dans tous les PC actuels, le système d'exploitation est placé sur le disque dur et doit être chargé dans la RAM. Pour cela, il doit utiliser des informations mémorisées dans le Master Boot Record, le premier secteur du disque dur. Un MBR est assez bien organisé et contient trois grandes parties aux usages différents.

  • Les premiers octets du MBR sont remplis par le bootloader, un programme servant à charger le système d'exploitation. Il existe parfois une portion du code exécutable qui contient les messages d'erreur à afficher dans le cas où le lancement du système d'exploitation échouerait. Sur les BIOS récents, cette portion se termine par quelques octets de signature et d'anticopie.
  • La table des partitions contient des informations sur les différentes partitions installées sur le disque dur : leur « nom », leur taille, et leur localisation sur le disque dur (adresse LBA). 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).
  • Les deux derniers octets du MBR doivent avoir une valeur bien précise pour que le BIOS autorise l'exécution. 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.
Master Boot Record traditionnel

Routines d'interruption[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. 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 UEFI[modifier | modifier le wikicode]

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.

Facteurs de forme[modifier | modifier le wikicode]

La carte mère est placée dans le boitier de l'unité centrale. Il existe diverses tailles de carte mère, qui sont adaptées à des boitiers différents.

ATX ITX AT Motherboard Compatible Dimensions