# Advanced Configuration and Power Interface

La specifica Advanced Configuration and Power Interface (ACPI) è uno standard industriale aperto reso disponibile per la prima volta nel dicembre 1996 e sviluppato da HP, Intel, Microsoft, Phoenix e Toshiba. Essa definisce interfacce comuni per il riconoscimento dell'hardware, la configurazione e la gestione energetica di scheda madre e periferiche. Secondo la sua specifica (archiviato dall'url originale il 9 febbraio 2015), "L'ACPI è l'elemento chiave nella configurazione e gestione energetica controllata dal Sistema Operativo (OSPM)".
L'ultima revisione della specifica ACPI è la 6.5, diffusa a maggio 2022.

## Introduzione

L'elemento più importante dello standard, la gestione energetica, ha avuto due miglioramenti importanti. La prima, è l'assegnazione del controllo energetico al sistema operativo. Questo contrasta con il modello APM che dava il controllo della gestione energetica al BIOS, con interventi limitati da parte del sistema operativo. Nell'ACPI, il BIOS fornisce al sistema metodi per il controllo a basso livello dei dettagli dell'hardware così che abbia quasi il controllo completo sul risparmio energetico. L'ACPI è un servizio di base caricato, durante l'avvio, dal sistema operativo che può essere anche disattivato quando ve ne fosse la necessità. Fisicamente si tratta di uno o più driver (ad esempio in Windows si chiama acpi.sys).
L'ACPI inoltre ha portato le funzioni di gestione energetica, precedentemente disponibili solo su PC portatile, anche su PC desktop e server. Ad esempio, il sistema può essere portato in stati di consumo energetico estremamente basso, in cui solo la memoria RAM (e spesso nemmeno quella) riceve energia, ma in cui un segnale di input (mouse, tastiera, modem) può velocemente "risvegliare" il sistema stesso.
Lo standard prevede tasti di supporto su normali tastiere per sospendere o spegnere il computer. Alcuni produttori (ASUS, Compaq) hanno esteso questa caratteristica anche ad altri tasti chiamati power management keys.
L'ACPI richiede hardware compatibile (che includa registri ACPI, definiti dalla specifica). Il sistema operativo, il chipset della motherboard e per alcune funzioni anche la CPU, devono essere progettati per supportarlo. Fisicamente l'ACPI risiede nello stesso chip ove è caricato il firmware o in uno chip specifico.
L'ACPI utilizza il proprio linguaggio macchina (ACPI Machine Language o AML) per implementare handlers di eventi riguardanti il supporto energetico, al posto del linguaggio macchina del sistema ospite. Il codice AML è parte del firmware (BIOS), ma è interpretato dal sistema operativo.
Microsoft Windows ha supportato ACPI per la prima volta con Windows 98. La prima versione di FreeBSD a supportare ACPI fu la 5.0. NetBSD e OpenBSD hanno un minimo supporto per ACPI; Linux, a partire dal kernel 2.4.22, ha iniziato ad offrire il supporto per questo standard.

## Stati
### Stati globali

La specifica ACPI definisce i seguenti sette stati, chiamati stati globali. Un computer che supporta ACPI può trovarsi in:
* G0 (S0) Esecuzione: il normale stato di lavoro di un computer - il sistema operativo e le applicazioni sono in esecuzione. La CPU esegue istruzioni. Da questo stato (anche senza passare al G1), è possibile per processori e periferiche essere ripetutamente portati dentro e fuori stati a basso consumo chiamati C0–Cn e D0–D3. (I portatili, ad esempio, spengono tutte le periferiche non utilizzate quando si alimentano a batteria; alcuni desktop fanno lo stesso per ridurre i rumori.)
* G1 Addormentato Si divide in quattro stati: da S1 a S4. Il tempo necessario per portare il sistema a G0 è molto breve per S1, breve per S2 e S3, lungo per S4.
** S1: la modalità di riposo che richiede più energia. Le cache dei processori sono svuotate, e la CPU non esegue istruzioni. Tuttavia processori e RAM sono accesi; periferiche che non richiedono di restare accese possono essere spente. Questa modalità è conosciuta come Power On Standby o semplicemente POS, particolarmente nella schermata di configurazione del BIOS. Le ultime macchine non supportano lo stato S1; computer più vecchi spesso utilizzano S1 al posto di S3.
** S2: uno stato a minor consumo di energia, in cui il processore è spento (non è di frequente implementazione).
** S3: conosciuto come Suspend to RAM (STR) nel BIOS, Standby nelle versioni di Windows fino a Windows XP e in alcune distribuzioni di Linux, Sleep in Windows Vista e macOS, anche se la specifica menziona solo i termini S3 e Sleep. In questo stato, la memoria principale (RAM) è ancora accesa, ma è l'unico componente ad esserlo. Siccome lo stato del sistema operativo e tutte le applicazioni, documenti aperti, ecc. risiedono nella RAM, l'utente può riprendere il lavoro dove si trovava quando ha portato il computer in S3. (La specifica menziona che lo stato S3 è molto simile a S2, ma più componenti sono spenti in S3.) S3 ha due vantaggi su S4; il computer è più veloce a svegliarsi che a riavviarsi, inoltre se un'applicazione contiene dati riservati, non verranno scritti sul disco. Comunque, la cache dei dischi può essere scaricata per prevenire corruzione dei dati nel caso in cui il computer non si risvegli a causa ad esempio di mancanza di corrente.
** S4: Ibernazione in Windows, Safe Sleep in macOS, conosciuto anche come Suspend to disk, anche se nella specifica ACPI è definito solo come S4. In questo stato, tutto il contenuto della main memory è salvato su una memoria non-volatile (Hard Disk) preservando lo stato del sistema e delle applicazioni. In questo modo l'utente può riprendere il lavoro così dove lo aveva lasciato esattamente come in S3. La differenza tra S3 e S4, oltre al fatto di dover caricare e scaricare il contenuto della RAM su Hard Drive, è che un'interruzione dell'alimentazione in S3 provoca la perdita di tutti i dati nella memoria principale, mentre un computer in S4 non ha conseguenze. S4 è diverso dagli altri stati S e attualmente somiglia a G2 Soft Off e G3 Mechanical Off più di quanto assomigli a S1–S3. Un sistema in S4 può anche essere portato in G3 (Mechanical Off) e ancora mantenere i dati dello stato di salvataggio S4 in modo da far riprendere il lavoro, dopo il ritorno della corrente.
* G2 (S5) Soft Off-- G2, S5, e Soft Off sono sinonimi. G2 è molto simile a G3 Mechanical Off, ma alcune componenti restano accese, in modo che il computer possa risvegliarsi grazie ad un input da tastiera, orologio, LAN, modem (Wake-on-Ring) o periferiche USB Aram Kananov» How To: ACPI Suspend to RAM on Dell Latitude D800 with Fedora Core 3. URL consultato il 4 febbraio 2018 (archiviato dall'url originale il 2 ottobre 2008).. Questo stato è simile a G3 Mechanical Off per il fatto che deve essere eseguita la procedura di boot per portare il sistema da G2 a G0 Esecuzione. G3 Mechanical Off è lo stato del computer quando c'è mancanza di corrente, mentre G2 è caricato dal sistema operativo (tipicamente quando l'utente richiede lo spegnimento). Il computer non è sicuro da disassemblare a causa delle periferiche attive. È consigliabile togliere la corrente da un PC desktop e aspettare 20 secondi prima di smontare; anche se le periferiche interne non sono generalmente attive, il controller (PS/2), le porte USB, la mainboard, le schede di espansione, e l'Alimentatore potrebbero restare accesi anche se il computer non aspetta input da quelle periferiche per il risveglio.
* G3 Mechanical Off: Il consumo di energia del computer è molto vicino allo zero, al punto che si può rimuovere la spina della corrente e smontare il computer (tipicamente solo il real-time clock continua a ricevere energia dalla sua piccola batteria). Il computer cade in questo stato in caso di mancanza di corrente. Una volta che la corrente è ripristinata, è necessario un avvio completo per riportare il sistema da G3 a G0 Esecuzione.
Inoltre uno stato Legacy è definito come lo stato in cui il sistema operativo non supporta ACPI. In questo stato il controllo della corrente non utilizza ACPI.

### Stati del processore

Un processore che supporta ACPI può trovarsi in quattro stati differenti:
* C0: Il processore è attivo ed esegue le istruzioni.
* C1: Conosciuto anche come Halt, è lo stato in cui il processore non esegue alcuna istruzione, ma può tornare a C0 in modo quasi istantaneo.
** C1E: Conosciuto anche come Enhanced Halt, permette di sfruttare le caratteristiche di risparmio avanzato della CPU, il quale nel caso di bassi carichi di lavoro riduce sia la frequenza che la tensione di funzionamento durante lo stato di halt.
* C2: Conosciuto anche come stop clock, rappresenta lo stato in cui il processore mantiene il contenuto di tutti i registri, ma non esegue alcuna operazione.
* C3: Anche definito Sleep, il processore non ha bisogno di mantenere la cache e viene spento il generatore di clock, ma impiega più tempo nel riavvio.
* C4: anche definito “Deeper Sleep”, riduzione della tensione di alimentazione.
** DC4: anche definito “Deeper C4 Sleep”, si ha un'ulteriore riduzione del voltaggio di alimentazione.
Notare che C2 e C3 e C4 richiedono il supporto del sistema operativo per essere utilizzati.

### Stati delle periferiche

Le periferiche che supportano ACPI possono trovarsi in quattro stati differenti:
* D0: La periferica è attiva.
* D1 e D2: Sono stati intermedi che variano di periferica in periferica.
* D3: La periferica è totalmente spenta.