LE BIOS : QU EST-CE QUE C EST? Mewtow 29 octobre 2015
Table des matières 1 Introduction 5 2 Rappels sur le mode réel des processeurs x86 7 2.1 Mémoire en mode réel............................... 7 2.1.1 Mémoire conventionnelle.......................... 7 2.1.2 Mémoire haute................................ 7 2.2 Mémoire étendue et HMA.............................. 8 2.3 Résumé....................................... 8 3 Démarrage d un ordinateur x86 9 3.1 POST........................................ 9 3.1.1 Test des tensions et de l horloge....................... 9 3.1.2 Détection des périphériques et de leur fonctionnement........... 9 3.2 Affichage de l interface de configuration...................... 10 3.3 On est tombé sur un OS!.............................. 10 3.3.1 Structure d un MBR............................. 11 3.3.2 Utilisation lors du Boot............................ 11 4 Routines du BIOS 13 4.1 Routine 10h : affichage............................... 13 4.2 Routine 13h : mémoires de masse.......................... 13 4.3 Routine 14h : port série............................... 14 4.4 Routine 15h : fonctions système avancées...................... 14 4.5 Routine 16h : clavier................................ 14 4.6 Routine 19h : boot................................. 14 5 Conclusion 15 3
1 Introduction [[information]] Ce cours demande des bases en architecture des ordinateurs pour être compris : la notion d interruption est notamment un pré-requis des plus importants pour ce cours. La lecture du cours Fonctionnement d un ordinateur de zéro, du même auteur, est vivement recommandée. Sur les PC avec un processeur x86, il existe un programme lancé automatiquement lors du démarrage de l ordinateur. Ce programme se charge de gérer tout ce qui a rapport au démarrage de l ordinateur, avant de rendre la main au système d exploitation. Autrefois, il prenait aussi en charge la gestion des périphériques : le système d exploitation déléguait ces fonctionnalités au BIOS. Ce programme s appelle le BIOS système, communément appelé BIOS, ce nom étant aussi utilisé pour la mémoire ROM qui le stocke. Ce BIOS se charge donc des fonctions suivantes : fournir un ensemble minimal de routines d interruptions ; faire ce qu il faut pour allumer l ordinateur ; faire démarrer un système d exploitation présent sur une mémoire de masse. De nos jours, on mémorise ce programme 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 routines capables d afficher du texte et des graphismes monochromes ou 256 couleurs à l écran. Dans les cartes graphiques compatibles avec les formats VGA/ESA, ce BIOS vidéo est localisé dans l espace d adressage aux adresses 000C 0000 ou 000E 0000. Lors du démarrage de l ordinateur, ce sont ces routines qui sont utilisées pour gérer l affichage avant que le système d exploitation ne lance les pilotes graphiques. Ces fonctions sont extrêmement basiques, ce qui fait que les graphismes affichés à l écran ont cet aspect si caractéristique, moche, faisant penser à l informatique des années 1990 Le BIOS vidéo n est pas le seul BIOS en plus du BIOS système. Des cartes réseaux peuvent avoir un BIOS, permettant de booter 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é. C est de ce BIOS que nous allons parler dans la suite de ce cours. 5
2 Rappels sur le mode réel des processeurs x86 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), avec un espace d adressage segmenté et où la protection mémoire est quasi-inexistante. Par la suite, le système d exploitation basculera en mode protégé, un mode d exécution avec protection mémoire et accès à un espace d adressage paginé de 32 bits. Le BIOS ne peut fonctionner qu en mode réel, ce qui fait que les systèmes d exploitation qui s exécutent en mode protégé doivent fournir eux-même les interruptions et autres services du BIOS. 2.1 Mémoire en mode réel 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 ; les octets restants forment la mémoire haute. 2.1.1 Mémoire conventionnelle Les premiers 640 kibioctets de mémoire servaient à exécuter des programmes en mode réel sur certains systèmes d exploitation. Par exemple, le MS-DOS, avant sa version 5.0, utilisait ces 640 kibioctets pour mémoriser le système d exploitation, les pilotes de périphériques et le programme à exécuter. Le BIOS peut aussi utiliser une portion de cette mémoire conventionnelle pour mémoriser des informations diverses et variées : cette portion de mémoire s appelle la BIOS Data Area. Celle-ci commence à l adresse 0040 :0000h et a une taille de 255 bytes. Celle-ci est initialisée lors du démarrage de l ordinateur et est utilisée par certaines routines d interruption du BIOS. 2.1.2 Mémoire haute Par contre, les octets de la mémoire haute servent pour communiquer avec les périphériques. C est dans cette mémoire haute que divers périphériques sont mappés en mémoire. On y trouve aussi le BIOS vidéo (s il existe). Mais même avec beaucoup de périphériques et une grosse mémoire vidéo, une bonne partie de cette mémoire restait inutilisée sur les premiers PC. En conséquence, elle était utilisable pour les programmes applicatifs, si le système d exploitation permettait ce genre d optimisation. 7
2 Rappels sur le mode réel des processeurs x86 2.2 Mémoire étendue et HMA Tout le reste de la mémoire, au-delà du premier mébioctet, est ce qu on appelle la mémoire étendue. Il faut passer en mode protégé pour y accéder. Du moins, en théorie : quelques bugs sur les premiers processeurs Intel (le 80886, notamment), permettaient d accéder aux 64 premiers kibioctets de cette mémoire étendue. Cette zone de 64 kibioctets étaient autrefois appelée la mémoire High Memory Area. 2.3 Résumé Figure 2.1 Image crée par Bub s pour wikicommons, sous licence CC BY-SA 3.0 et GFDL 1.2 8
3 Démarrage d un ordinateur x86 Au démarrage de l ordinateur, le processeur est initialisé de manière à commencer l exécution des instructions sur l adresse 0xFFFF : 0000h (l adresse maximale en mémoire réelle moins 16 bytes). C est à cet endroit que se trouve le BIOS : les cartes mères sont conçues pour que le BIOS soit mappé en mémoire à cette adresse. 3.1 POST Comme je l ai dit plus haut, le BIOS sert à allumer l ordinateur et à le configurer correctement avant de laisser la main au système d exploitation. Cette phase s appelle le Power On Self Test, que l on nomme communément POST. 3.1.1 Test des tensions et de l horloge Le premier élément vérifié lors du POST (Power On Self Test) est la stabilité de l alimentation électrique de l ordinateur. Le BIOS teste les tensions 12 volts, 5 volts et 3,3 volts, et continue son exécution uniquement si celles-ci sont stables et à la bonne valeur. Si les tensions d alimentation ne sont pas stables ou ne sont pas à la bonne valeur, le BIOS arrête immédiatement le démarrage, pour éviter d endommager le processeur ou d autres composants de l ordinateur. Ensuite, le BIOS vérifie la stabilité de l horloge et de quelques autres composants : les 640 premiers kibioctets de la mémoire, par exemple. 3.1.2 Détection des périphériques et de leur fonctionnement Enfin, 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 byte 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 : il peut modifier le vecteur d interruption, initialiser le matériel, et ainsi de suite. Généralement, ce BIOS d extension rend la main au BIOS avec un branchement bien placé quand il a terminé son travail. 9
3 Démarrage d un ordinateur x86 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 drivers : 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. [[information]] Il faut signaler qu un buzzer est placé sur la carte mère et est directement commandable par le BIOS : au moindre problème à l allumage, le BIOS le fait bipper. Suivant l erreur, la série de bips émise sera différente, afin de pouvoir identifier l erreur facilement. Attention, cependant : les séries de bips n ont pas été standardisées par les fabricants de BIOS. 3.2 Affichage de l interface de configuration À 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. Figure 3.1 Capture d écran de l interface d un BIOS - Image du domaine public - Wikicommons Ces paramètres sont stockés dans une mémoire flash ou EEPROM séparée du BIOS, qui est lue par le BIOS à l allumage de l ordinateur. Cette mémoire, la mémoire CMOS, est adressable via les adresses 0x0007 0000 et 0x0007 0001 (ces adresses sont écrites en hexadécimal). 3.3 On est tombé sur un OS! Dans tous les PC actuels, le système d exploitation est placé sur le disque dur. Le BIOS doit alors charger le système d exploitation dans la mémoire RAM. Pour cela, il doit utiliser des informations mémorisées dans le Master Boot Record, le premier secteur du disque dur. 10
3.3 On est tombé sur un OS! 3.3.1 Structure d un MBR Un MBR est assez bien organisé et contient trois grandes parties aux usages différents : le code exécutable du boot loader, avec éventuellement des messages d erreurs ; la table des partitions ; une valeur magique. Les premiers octets du MBR sont remplis par un programme servant à charger le système d exploitation. Il existe parfois un portion du code exécutable qui contenait les messages d erreur à afficher dans le cas où le lancement du système d exploitation échouerait. Par exemple, le message d erreur NTDLR manquant est stocké dans cette zone. Sur les BIOS récents, cette portion se termine par quelques octets de signature et d anti-copie. 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. Chaque ligne d une table de partition contient l adresse CHS de début d une partition et sa taille. On ne peut créer que quatre lignes dans cette table, on se trouve donc limité à quatre partitions principales. Il faut dire que cette table ne fait que 64 octets (elle a été conçue comme cela). 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. Il faut remarquer que la valeur sur le disque dur est en réalité 55AA, à cause du boutisme (l endianness, diraient les Anglo-saxons). Figure 3.2 Master Boot Record traditionnel 3.3.2 Utilisation lors du Boot Lors du démarrage, le MBR est copié dans la RAM (à l adresse 0x7C00) à la fin du POST. Si le nombre magique est bien présent, la routine effectue un branchement vers l adresse de base de ce code en mémoire (notre fameux 0x7C00), ce qui permet d exécuter ce programme et donc de lancer l OS. *[MBR] :Master Boot Record 11
4 Routines du BIOS 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 Software, 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. 4.1 Routine 10h : affichage Si aucune ROM vidéo n est détectée, le BIOS peut quand même communiquer directement avec la carte graphique grâce à une routine qu il possède. Cette routine a plusieurs fonctions différentes et peut tout aussi bien envoyer un caractère à l écran que renvoyer la position du curseur. 4.2 Routine 13h : mémoires de masse Une routine du BIOS permet de lire ou d écrire sur le disque dur ou sur une disquette : c est la routine 13h. 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. 13
4 Routines du BIOS 4.3 Routine 14h : port série La routine 14h était utilisée pour communiquer avec le port série RS232 de notre ordinateur. 4.4 Routine 15h : fonctions système avancées 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. 4.5 Routine 16h : clavier 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. 4.6 Routine 19h : boot 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). 14
5 Conclusion 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. 15