# Advanced Configuration and Power Interface

L’Advanced Configuration and Power Interface (ACPI, en français « interface avancée de configuration et de gestion de l’énergie ») est une norme de gestion de la consommation énergétique, très largement répandue dans les ordinateurs personnels et codéveloppée par Hewlett-Packard, Intel, Microsoft, Phoenix et Toshiba.
Le but de cette norme est de réduire la consommation d’énergie d’un ordinateur en mettant hors tension certains éléments : lecteurs CD-ROM, disques durs, écran, etc. Pour cela, une interface a été spécifiée qui permet au système d’exploitation d’envoyer des signaux aux périphériques matériels (à condition que ceux-ci prennent en charge l’ACPI). Cette interface permet aussi au matériel d’envoyer des signaux au système d’exploitation, par exemple lorsque l’utilisateur appuie sur le bouton de mise en route sur le clavier ou que le modem reçoit un appel.
Cette norme est utilisée aussi bien sur les ordinateurs portables que sur les ordinateurs de bureau postérieurs à 1996. La toute dernière spécification, publiée en janvier 2016, porte le numéro de version 6.1.

## Présentation

Le point le plus important de cette spécification est que c’est le système d’exploitation qui est responsable de la gestion de l’alimentation des composants de l’ordinateur. Il s’agit d’une évolution importante par rapport aux normes précédentes telle l’Advanced Power Management (APM) pour laquelle c’est le BIOS qui est responsable de la gestion d’alimentation.
Un autre élément important est que la gestion optimisée de l’alimentation (depuis toujours vitale pour l’autonomie des ordinateurs portables) est maintenant une norme qui est mise en œuvre dans d’autres matériels informatiques (jusqu’aux serveurs) et permet d’optimiser la consommation électrique en fonction de la charge.
L’ACPI ne fonctionne qu’avec les matériels prévus pour et requiert de la part des constructeurs la gestion d’un langage informatique spécifique (AML, pour ACPI Machine Language) pour la gestion des événements.
La première version de Microsoft Windows à avoir géré ACPI est Windows 98. La première version de FreeBSD à avoir géré ACPI est la version 5.0. Linux, NetBSD, OpenBSD et DragonFly BSD ont tous aujourd’hui une gestion au moins partielle d’ACPI.

## Concepts

La norme définit les états du système tout entier (G0 à G3 et S0 à S5) et aussi des périphériques (D0 à D3) et des processeurs (C0 à C3). La règle étant que l’état x0 (G0/S0, D0 ou C0) correspond à un équipement en service et consommateur d’énergie et les états suivants à des équipements nécessitant de plus en plus d’opérations pour être remis en état x0.
La norme définit également la gestion des niveaux de performance (P0…), de la configuration des périphériques et de la découverte PnP, des événements du système, de l’énergie des batteries, des zones thermiques…

### États du système et sommeil (Global states / Sleep states)

Ces états sont classés par la norme en partant de celui où l’ordinateur est totalement en service et allant vers des situations où l’ordinateur est autorisé à mettre de plus en plus longtemps à (re)devenir utilisable.
* G0/S0, en service : l’ordinateur est entièrement en service.
* G1, sommeil : aucun processeur n’exécute d’instruction, pourtant l’utilisateur n’a pas demandé un arrêt complet de l’ordinateur. Pour quitter cet état le système d’exploitation n’a pas à ré-exécuter toute la séquence d’amorçage mais reprend son fonctionnement à partir de l’état dans lequel il était avant cet arrêt. Cet état est subdivisé en plusieurs sous-états :
** G1/S1, power on suspend : aucun processeur n’exécute d’instruction, mais aucun contexte d’exécution n’est perdu et l’ordinateur pourra quitter cet état très rapidement. Dans cet état, l’alimentation est toujours en service mais les disques sont stoppés (comme dans tous les états suivants).
** G1/S2 : état de sommeil plus profond, les processeurs devront être réinitialisés au réveil, le système d’exploitation devra ensuite restaurer les différents contextes d’exécution. Cet état est documenté dans la spécification ACPI mais rarement mis en œuvre.
** G1/S3, standby ou suspend to ram : dans cet état l’ordinateur éteint l’alimentation principale, mais l’état de la mémoire centrale est maintenu en employant une alimentation permanente (appelée 5VSB, pour +5V standby). Ainsi il restaurera son état initial plus rapidement que depuis l’état G1/S4.
** G1/S4, hibernate ou suspend to disk : l’état du système (en particulier le contenu de la mémoire et les contextes d’exécution des processeurs) a été sauvegardé (le plus souvent dans un fichier d’hibernation sur un disque dur). L’ensemble des composants de l’ordinateur est sans alimentation. À sa remise en service le système d’exploitation devra recharger ce fichier d’hibernation et restaurera alors l’état de l’ordinateur.
* G2/S5, arrêt piloté (soft off) : la consommation électrique est la plus réduite possible et aucun état courant de l’ordinateur n’a été sauvegardé (l’utilisateur a demandé au système de s’arrêter complètement) cependant l’alimentation bien que stoppée est toujours connectée à une source électrique et fournit l’alimentation permanente 5VSB (le clavier ainsi que la souris et la carte réseau peuvent rester alimentés, si le BIOS est configuré pour cela ; leur usage permettra alors de démarrer à nouveau). Lors de la remise en service le système d’exploitation devra exécuter toute la séquence d’amorçage avant d’être disponible.
* G3, arrêt mécanique : dans cet état un interrupteur mécanique a été manœuvré et seule une manœuvre humaine peut permettre de démarrer l’ordinateur. On pourrait croire que dans cet état plus aucun composant n’est alimenté, mais c’est inexact : dans un PC par exemple une pile (le plus souvent au lithium) alimente encore un petit circuit CMOS et permet de maintenir quelques informations de configuration, ainsi qu’une horloge.

### États des périphériques (Device states)

Ces états sont classés du plus consommateur (périphérique en cours d’utilisation ou D0) au moins consommateur d’énergie (périphérique éteint ou D3).
Un périphérique en état D3 aura besoin d’une initialisation complète avant de redevenir utilisable (il peut par exemple nécessiter le chargement d’un micrologiciel effectué par son pilote avant d’être utilisé).

### États des processeurs (CPU states)

La norme définit également quatre niveaux d’énergie pour les processeurs, gradués selon la consommation énergétique. En état C0, le processeur est en service et exécute des instructions puis dans les états suivants il n’exécute plus d’instruction et voit sa consommation électrique réduite au prix d’un retour à l’état C0 de plus en plus long.
L’état C1 peut être obtenu sur un processeur de la famille x86 en lui faisant exécuter l’instruction HALT. À partir de l’état C2, l’horloge n’a même plus besoin de lui être fournie. Dans l’état C3, le processeur peut être éteint électriquement et devra être réinitialisé avant d’exécuter à nouveau des instructions.

## Tables ACPI

Ces tables sont utilisées par le système d’exploitation pour obtenir les informations sur le matériel qu’il contrôle.
* RSDP (Root System Description Pointer)
* RSDT (Root System Description Table)
* DSDT (Differentiated System Description Table)
* XSDT (Extended System Description Table)
* FADT (Fixed ACPI Description Table)
* FACS (Firmware ACPI Control Structure)
* SBST (Smart Battery Table)
* ECDT (Embedded Controller Boot Resources Table)
* MADT (Multiple APIC Description Table)
* SRAT (System Resource Affinity Table)
* SLIT (System Locality Distance Information Table)
* SLIC (Software Licensing Description Table)
* SSDT (Secondary System Descriptor Tables)
* THRM (CPU Thermal)