# BIOS (informatique)

Le BIOS, de l'anglais : Basic Input Output System (en français : « système élémentaire d'entrée/sortie ») est le nom donné sur les ordinateurs issu de la norme de compatibilité IBM PC, à ce que l'on appelle plus généralement un firmware (traduit en micrologiciel). Il est donc principalement utilisé sur les systèmes informatiques utilisant l'architecture de processeur 32 bits i686 d'Intel et 64 bits x86_64 d'AMD. Il comporte un ensemble de fonctions, contenu dans la mémoire morte (ROM) de la carte mère de ces ordinateurs, lui permettant d'effectuer des opérations de base, lors de sa mise sous tension. Par exemple l'identification et l'initialisation des périphériques d'alimentation et d’entrée/sortie connectés et la lecture du système d'amorçage, que ce soit un secteur d'amorçage sur la mémoire de masse (disquette, disque dur, CD, clé USB, microSD, disque SSD), ou bien une adresse fournie par le réseau. Il permet également au système de communiquer avec les différents périphériques de la carte mère, bien qu'il soit également possible de communiquer sans passer par le BIOS. Sur les cartes récentes, l'UEFI a été ajouté au BIOS pour unifier les méthodes de communication avec le noyau du système. C'est un palliatif de l'absence de spécification ouverte des pilotes de périphériques, tels qu'ils se présentent au sein du BIOS.
Parmi les logiciels équivalents, à BIOS + UEFI, sur d'autres architectures, il y a Arm Trusted Firmware (ATF) sur architecture ARM et OpenSBI (logiciel libre) sur RISC-V.

## Rôle du BIOS

Le BIOS fournit un ensemble de services permettant de faire le plus possible abstraction de la couche matérielle. Ces services sont utilisés par le système d'exploitation et sont accessibles via certaines zones mémoires (40:00 par exemple) ou certaines interruptions logicielles (10H, 11H, 12H et 13H notamment). Cependant, dans la pratique, les systèmes d'exploitation modernes n'utilisent ces services que lors de l'amorçage ; ils utilisent ensuite soit leurs propres pilotes, soit les fonctions ACPI pour les opérations liées à la carte mère. Il propose aussi un logiciel de configuration de l'ordinateur appelé en anglais set-up. Celui-ci permet de régler les paramètres de fonctionnement de l'ordinateur.
Le BIOS exerce un rôle essentiel pour le fonctionnement de la carte mère :
* il initialise tous les composants de la carte mère, du chipset et de certains périphériques ;
* il identifie tous les périphériques internes et externes qui lui sont connectés ;
* si cela n'a pas déjà été fait, il initialise l'ordre de priorité des périphériques d'entrée ;
* il démarre le système d'exploitation dans l'ordre croissant des périphériques disponibles, en contenant une fonction dite d'amorçage, ou en anglais : bootstrap).

### Principales fonctionnalités

L'objectif du BIOS est de rendre transparente, à tout système d'exploitation, la façon dont le fabricant a développé la carte mère (quels composants il a choisis et la manière dont ils sont interconnectés). Ainsi, en utilisant les mêmes fonctions du BIOS sur deux cartes mères différentes, on obtiendra le même résultat. Les systèmes d'exploitation peuvent utiliser ces fonctions, au moins pendant les premières étapes du démarrage de l'ordinateur, et ensuite lors du fonctionnement normal pour un accès direct au matériel.
Le BIOS comprend également le logiciel nécessaire à l'amorçage de l'ordinateur. La première phase de l'amorçage (anglais : boot) est la mise sous tension et le cadençage de quelques périphériques essentiels, ce qui est invisible pour l'utilisateur. Il vient ensuite la première phase visible pour l'utilisateur, est l'auto-configuration à l'allumage (POST de l’anglais Power-On Self-Test), qui compte la quantité de mémoire, teste les disques et configure les composants. La séquence d'amorçage continue avec la recherche d'un système d'exploitation, dans l'ordre des périphériques disponibles, avant de le lancer.
Le BIOS prend en charge à bas niveau les communications avec les périphériques, néanmoins le système d'exploitation peut aussi s'adresser directement aux périphériques s'il le juge nécessaire. Parmi les prises en charge offertes par le BIOS, il y a celle du clavier, au moins dans un mode (pas forcément l'USB) et celle d'un mode d'affichage simplifié.
Le BIOS contient également des outils de diagnostic pour vérifier sommairement l'intégrité des composants critiques comme la mémoire, le clavier, le disque dur, les ports d'entrée/sortie, etc.
Certains paramètres du BIOS peuvent être réglés par l'utilisateur (ordre des périphériques à scruter pour détecter une zone de boot, type et fréquence du processeur, etc.). L'ensemble de ces paramètres est stocké de manière permanente grâce à une mémoire de taille réduite (quelques centaines d'octets) à faible consommation (type CMOS) alimentée par une pile (généralement au lithium) présente sur la carte mère. Cette mémoire est communément appelée, par abus, « CMOS ».

## Fournisseurs

Le BIOS est presque toujours développé par le fabricant de la carte mère à partir d'un code de référence fourni par un constructeur de BIOS (tel que AMI ou Phoenix Technologies) car il contient les paramètres spécifiques à l'initialisation de la carte mère, tels que la configuration des ports GPIO.
Le code source des premiers PC et AT BIOS était inclus avec le Manuel des Références Techniques IBM. Aujourd'hui, la plupart des cartes mères sont livrées sans le code source du BIOS. L'utilisateur doit télécharger des mises à jour fournies par le constructeur. Ces mises à jour sont parfois nécessaires à la prise en charge de certains périphériques récents.
Depuis 1999, la Fondation pour le logiciel libre soutient coreboot (ex-LinuxBIOS) un BIOS sous licence Licence publique générale GNU car on peut maintenant flasher le BIOS de sa carte mère pour le remplacer par un autre (cf. infra : Le BIOS en tant que firmware). L'avantage de ce système (machine fonctionnant avec un BIOS) est de ne pas devoir développer un système d'exploitation spécifique pour chaque carte mère.
Le BIOS est généralement développé en langage assembleur et est doté d'une interface semi-graphique écrite avec ncurses.
Les deux BIOS historiques du PowerPC se sont nommés successivement PREP (en) et CHRP (en).

## Le BIOS pour amorcer

Le signal Signal Power Good, signalant que les différentes tensions de l'alimentation sont stabilisées, déclenche l’exécution du BIOS.
Le BIOS originel était conçu pour les systèmes CP/M et se limitait, à l'époque, à la gestion des entrées-sorties (comme son nom l'indique). Depuis l'introduction des PC compatibles IBM en août 1981, le BIOS émet les premières commandes au système durant la phase de démarrage.
Le Power-on self-test (POST) signifiant auto-test au démarrage, désigne la première étape de ce processus plus général appelé amorçage.
Lors de cette étape, le BIOS teste la présence des divers périphériques et tente de leur attribuer les ressources nécessaires à une fonctionnement sans conflit. Le POST terminé, le contrôle est cédé au chargeur d'amorçage, dont le rôle est de démarrer le système d'exploitation ou le premier périphérique amorçable disponible.
En fonction de la liste des périphériques spécifiés en mémoire, le BIOS détermine sur quel support et à quel endroit de celui-ci trouver le chargeur d'amorçage (ou Boot loader) du système d'exploitation, en général Windows, Linux, Mac OS ou autre. Dans le cas de Windows, il s'agit du BCD, dans le cas d'un système en multiboot (possibilité de démarrer plusieurs systèmes d’exploitation sur un même ordinateur, par exemple Windows et Linux), il s'agit souvent du GRUB.
Les systèmes d'amorçage libres, Coreboot, Libreboot et Das U-Boot permettent d'offrir l'équivalent du système de démarrage du BIOS, mais pouvant utiliser des pilotes libres. Ils se basent sur les formats ouverts de description de matériel Devicetree, également utilisé par le noyau Linux pour connaître le moyen de communiquer avec les périphériques nécessaires à l'amorçage du système informatique. Ils peuvent ensuite charger directement le noyau, en local, ou bien par le réseau (NFS, NFTP ou HTTP pour U-Boot), ou bien charger GRUB qui aura alors pour tâche de charger le noyau en mémoire. Ils ont en outre l'avantage d'avoir un temps de boot beaucoup plus court que les BIOS fermés fournis par les constructeurs. DeviceTree et ces systèmes sont les principales méthodes d'amorçage sur les architectures de processeurs ARM, RISC-V et autrefois PowerPC.

## La gestion des disques par le BIOS

De nos jours, les blocs de données d'un disque sont numérotés linéairement et contiennent une quantité donnée de secteurs.
Il n'en a pas toujours été ainsi. Les anciens BIOS souffraient du problème des 1 024 cylindres. Un bloc de données était repéré par un triplet de chiffres : cylindre, tête et secteurs. Au maximum, les anciens BIOS étaient conçus pour 1 024 cylindres, 256 têtes et 63 secteurs. Par conséquent, si le chargeur d'amorçage se trouvait au-delà du 1024e cylindre, le BIOS ne pouvait pas l'atteindre et échouait donc à lancer le système d'exploitation.

## Le BIOS en tant que firmware

Le BIOS est un type de firmware, car il est très proche du hardware. Avant les années 1990, les BIOS étaient stockés sur des puces ROM qui ne pouvaient être modifiées. Au fur et à mesure que leur complexité, et le besoin de mises à jour se sont fait sentir, ils furent stockés sur des mémoires EEPROM ou Flash qui pouvaient être reprogrammée pour améliorer les fonctionnalités ou reconnaitre de nouveaux périphériques.
Ainsi, il est possible de mettre à jour, de manière logicielle, le BIOS d'un ordinateur. Cette action est appelée « Flasher le BIOS ». Un problème (coupure d'électricité, mauvaise version de ROM…) lors de cette opération peut rendre la carte mère définitivement inutilisable. Il est donc conseillé de ne flasher le BIOS que lorsque cette opération est vraiment nécessaire. Certaines cartes mères possèdent deux versions du BIOS : la version actuelle qu'il est possible de modifier logiciellement et une copie de sauvegarde, un cavalier permettant d'écraser la version actuelle par la version de sauvegarde. Il existe, de plus, des mécanismes permettant d'ajouter une deuxième mémoire flash à une carte mère n'en possédant qu'une, à condition que la puce initiale du BIOS soit extractible.

## Le firmware sur les cartes d'extension

Un ordinateur peut héberger plusieurs puces BIOS. En plus du BIOS de boot, qui contient les fonctions pour accéder au matériel important, comme le clavier, des cartes d'extension comme les cartes SCSI, les cartes vidéo ou encore les cartes réseau peuvent embarquer leur propre BIOS, améliorant ou remplaçant les fonctions du BIOS de boot. Par exemple, certaines cartes réseau permettent le démarrage d'un système ne se trouvant pas physiquement sur l'hôte, via le protocole PXE.

## Vulnérabilités du BIOS

Le BIOS étant le firmware lancé au démarrage, il peut être la cible de logiciels malveillants. En 1999, le BIOS a connu sa première attaque d'envergure avec la propagation du virus CIH qui était très agressif puisqu'il rendait illisible par le système le contenu des disques. Depuis que les mises à jour du BIOS peuvent être réalisées à la volée via le programmateur interne de la carte mère, il est possible que ceux-ci soient la cible d'attaques de type homme du milieu.

## Extensible Firmware Interface

L’Extensible Firmware Interface (EFI), aujourd'hui remplacé par l'UEFI (Unified EFI) est un logiciel intermédiaire entre le micrologiciel (firmware) et le système d'exploitation (OS) d'un ordinateur, et est néanmoins un véritable petit système d'exploitation. Cette interface est appelée à être le successeur du BIOS.