ACPI

**ACPI** (inglise keeles *Advanced Configuration and Power Interface*, lühend ACPI) on standard, mis võimaldab anda operatsioonisüsteemile informatsiooni riistvara olekute kohta, et operatsioonisüsteem saaks teha toitehaldust. Standard töötati välja Inteli, Microsofti ja Toshiba poolt ning avalikustati 1996. aasta detsembris. 

ACPI võimaldab arvutil oma välisseadmeid kontrollida, et parandada energiakulu, eriti sülearvutitel. Standard võimaldab veel ka arvutit väliste seadmete abil sisse ja välja lülitada, nii et näiteks hiire puudutus või klahvivajutus lülitab arvuti uneolekust uuesti sisse. ACPI ühendas varasema toitehalduse (Advanced Power Management) ja PnP BIOS-i täiustatud toitehaldussüsteemiks. Et ACPI-t oleks võimalik kasutada, peavad arvuti emaplaat, BIOS ja operatsioonisüsteem toetama ACPI standardit ning BIOS sisaldama ACPI tarkvara ja operatsioonisüsteem peab olema ACPI-ga ühilduv.  Alates Windows 98-st lisati ACPI tugi Windowsi operatsioonisüsteemile ning arvuti kiibistiku ja BIOS-i uuendati ACPI toetamiseks.  ACPI pakub suurt valikut tänapäevaste arvutisüsteemide jaoks olulisi funktsioone. Need võimalused lihtsustavad seadmete haldust, energiatõhusust ja süsteemi reageerimisvõimet.

ACPI abil on võimalik teha järgmist:  

*Kasutaja saab määrata, millal mingi seade, näiteks monitor, peaks välja või sisse lülituma.

* Kui sülearvuti aku hakkab tühjenema, saab kasutaja määrata madalaima energiatarbimise taseme, selleks et olulisi rakendusi saaks endiselt kasutada, samal ajal kui vähem olulised rakendused võivad passiivseks muutuda.

* Operatsioonisüsteem saab taktsagedust alandada aegadel, mil rakendused ei vaja protsessori kõige suuremat taktsagedust.

* Operatsioonisüsteem saab vähendada emaplaadi ja välisseadmete energiavajadust, aktiveerides seadmeid alles siis, kui neid vaja on.
## Ajalugu

ACPI standardi esimese versiooni avaldasid 1996. aasta detsembris tehnoloogiaettevõtted Intel, Microsoft ja Toshiba ning see toetas alguses 16-, 24- ja 32-bitiseid aadressiruume. Standardi eesmärk oli ületada varasemate toitehaldusstandardite, näiteks APM-i (Advanced Power Managment), piirangud, mis võimaldas toitehalduse üle vaid piiratud kontrolli ega toetanud tolleaegseid uusi Plug and Play funktsioone. ACPI tõi juurde keerukamaid toitehaldus võimalusi, mida juhtis otse operatsioonisüsteem, mis võimaldas riistvara üle täpsemat ja suuremat kontrolli. See oli sülearvuti arendamisel väga oluline, kuna kasutatavuse ja kaasaskantavuse parandamiseks oli vaja paremat toitehaldust. 

2000. aastal avalikustati ACPI versioon 2.0, mis tõi endaga kaasa 64-bitiste aadressiruumide toe. 

2004. aasta septembris avalikustati versioon 3.0, mis tõi kaasa ACPI standardi toe SATA liidestele, PCIe-le, ümbritseva valguse anduritele ning kasutaja tuvastamis seadmetele. 

2009. aastal avalikustati versioon 4.0, mis tõi kaasa palju uusi kasutusvõimalusi. Kõige olulisemad muudatused olid x2APIC tugi, loogilise protsessori jõudeoleku ning USB 3.0 tugi.   

Algselt oli ACPI eksklusiivne x86 arhitektuurile, aga pärast versiooni 5.0 avalikustamist 2011. aasta detsembris, lisati juurde ka ARM-arhitektuuri tugi. 

Kõige uuem versioon, mis on praeguseks avalikustatud, on 6.5, mis avalikustati 2022. aasta augustis.   

## Arhitektuur

ACPI arhitektuur pakub võimalusi seadmete konfigureerimiseks ja energiatarbimise haldamiseks. See on loodud selleks, et võimaldada operatsioonisüsteemidel riistvaraga standardiseeritud viisil suhelda. 

ACPI määratleb mehhanismi mitmesuguste toite-, soojushalduste ja muude süsteemifunktsioonidega seotud sündmuste käsitlemiseks. Nende seas on sellised sündmused nagu aku oleku muutused, temperatuuri muutused või riistvara oleku värskendused. Operatsioonisüsteem saab neile sündmustele kohe reageerida, kohandades süsteemi parameetreid dünaamiliselt, et tagada optimaalne jõudlus ja energiakulu. 

Püsivara tasemel ACPI-l on kolm peamist komponenti: ACPI tabelid, ACPI BIOS ja ACPI registrid.

### ACPI tabelid

ACPI kasutab riistvara konfiguratsiooni ja süsteemi oleku teabe salvestamiseks mitut tabelit. Need tabelid on olulised, kuna need sisaldavad andmeid, mida operatsioonisüsteem vajab riistvara võimaluste ja haldamise mõistmiseks. Kõige olulisemad ACPI tabelid on järgmised: 

* **DSDT** (Differentiated System Description Table) – see tabel sisaldab suurema osa süsteemi ACPI andmetest, sealhulgas enamiku riistvarakomponentide ja nende energiatarbimise haldamise funktsioonide definitsioonid.
* **GTDT** (Generic Timer Description Table) – sisaldab taimeri kirjelduste tabelit.

* **FADT** (Fixed ACPI Description Table) – pakub staatilist teavet, mis on vajalik erinevate riistvarakomponentide korrektseks tööks, nende hulgas süsteemitaseme teave ja viited teistele tabelitele.

* **MADT** (Multiple APIC Description Table) – sisaldab teavet süsteemi katkestuskontrollerite kohta ja seda kasutatakse peamiselt mitme protsessoriga süsteemides.

* **RSDT** (Root System Description Table) – sisaldab viitasid teistele süsteemikirjelduste tabelitele. See tabel sisaldab viitasid FADT, MADT, CSRT, DBG2, BGRT, FPDT, DSDT ja SSDT tabelitele.
* **CSRT** (Core System Resources Table) – sisaldab infot põhisüsteemiressursside kohta (CSR-Core System Resources) näiteks katkestuskontrollerid, taimerid ja DMA kontrollerid.
* **SSDT** (Secondary System Description Table) – pakub lisadefinitsioone, mis võivad olla vajalikud nende süsteemikomponentide jaoks, mis ei ole DSDT tabelites.

ACPI tabelid on kodeeritud baitkoodis, mida nimetatakse ACPI masinkeeleks (AML). Seda keelt tõlgib operatsioonisüsteemi ACPI komponent, mis võimaldab operatsioonisüsteemil süsteemi riistvara otse hallata.

### ACPI BIOS

Süsteemi püsivara või BIOS sisaldab ACPI implementatsiooni, mis sisaldab esialgseid ACPI tabeleid ja liideseid, mis on operatsioonisüsteemile vajalikud süsteemiressursside haldamise ülevõtmiseks. ACPI BIOS vastutab ACPI keskkonna käivitamise eest enne seda, kui juhtimine antakse üle operatsioonisüsteemile. 

### Operatsioonisüsteemi liidesed

Operatsioonisüsteem liidestub ACPI-ga ACPI draiver kaudu. See draiver vastutab baitkoodi (AML-i) tõlkmise ja ACPI funktsioonide täitmise eest. See toimib ühendusena süsteemi riist- ja tarkvara vahel, tagades, et operatsioonisüsteem saab riistvararessursse tõhusalt hallata vastavalt ACPI spetsifikatsioonidele.
## Võimalused

ACPI pakub suurt valikut funktsioone ja võimalusi, mis on tänapäevaste arvutisüsteemide jaoks olulised. ACPI abil on operatsioonisüsteemil võimalik teostada üldisi toiminguid ilma riistvara kohta üksikasju teadmata. ACPI võimaldab seadmetel süsteemi äratada madalama energiatarbega olekust näiteks klaviatuuri klahvivajutusega. Veel saab näiteks võrgukaarte seadistada süsteemi äratama, kui toimub võrgutegevus. 

ACPI toetab sündmuspõhist programmeerimismudelit, kus riistvarasündmused saavad käivitada osasid tegevusi ilma protsessori otsese sekkumiseta. Sellega paraneb süsteemi tõhusus ja reageerimisvõime. Mõningaid sündmusi, nagu toitenupu vajutamine, aku oleku muutused või sülearvuti kaane kinni ja lahti tegemine, saab seadistada nii, et need käivituksid automaatselt teatud süsteemitegevustele. ACPI toetab mõnede seadmete puhul ka käigultvahetust, mis võimaldab neid seadmeid vahetada või eemaldada sel ajal, kui süsteem töötab. See on eriti oluline serverikeskkondades ja seadmetel nagu akud ja andmekandjad. 
### Toitehaldus
ACPI määrab süsteemile mitu globaalset energiatarbimise olekut, alates täielikult sisselülitatud olekust kuni täielikult väljalülitatud olekuni, samuti seadmepõhised energiatarbimise olekud. Need olekud võimaldavad süsteemil järk-järgult energiatarbimist vähendada, lülitades välja mittevajalikke komponente, kui neid ei kasutata. 

Peamised energiatarbimise olekud on järgmised:

* G-olekud (globaalsed olekud). Nende hulka kuuluvad süsteemiülesed olekud, näiteks töötamine (G0), unerežiim (G1) ja pehme väljalülitus (G2). Igal olekul on alamolekud, mis pakuvad erinevaid energiasäästu tasemeid. 

* S-olekud (uneolekud). Need on süsteemi uneolekute erinevad tasemed, alates kergest unest (S1) kuni sügava uneni (S4) kus salvestatakse rohkem seadme konteksti, et võimaldada kiiremat taaskäivitamist.   

*D-olekud (seadme olekud). Need on arvuti seadmete toiteolekud, mis on sõltumatud arvuti teistest seadmetest. Seadme olekud on D0, D1, D2 ja D3. D0 on täisvõimsus ning D1, D2 ja D3 on väiksema energiatarbega režiimid, mis viivad väljalülitatud või mittefunktsionaalsete olekuteni. Alates Windows 8-st on D3 olek jagunenud kaheks osaks: D3külm ja D3kuum (D3cold, D3hot). Numbrid on seotud energiatarbega, mida suurem number, seda vähem energiat kulutab.   

* C-olekud (protsessori olekud). Need olekud vähendavad protsessori energiatarbimist, lülitades jõudeolekus järk-järgult välja protsessori osasid, alates vähendatud energiatarbest (C1) kuni täieliku väljalülitamise režiimini (C3 või kõrgem). 

*P-olekud (Võimsuse olekud). Need on olekud, mis pakuvad võimalust protsessori töösageduse ja pinge skaleerimiseks, et vähendada protsessori energiatarbimist. Saadaval olevate P-olekute arv võib iga protsessori mudeli ja protsessori perekonna puhul erineda.  

### Termohaldus

ACPI võimaldab tõhusat termohaldus strateegiate abil, mis kohandavad riistvarakomponentide tööparameetreid vastavalt hetke temperatuurile. See aitab säilitada ohutut töötemperatuuri, vältides ülekuumenemist ja riistvara võimalikku kahjustumist. 

### Akuhaldus

ACPI pakub üksikasjalikke aku haldamise võimalusi, sealhulgas järelejäänud mahutavuse, aku oleku ja eeldatava tööaja jälgimist. See teave võimaldab operatsioonisüsteemidel optimeerida energiatarbimist vastavalt hetke aku olekule ja pakkuda kasutajatele täpseid aku tööea hinnanguid. 

## Operatsioonisüsteemid

Microsofti Windows 98 oli esimene operatsioonisüsteem, mis kasutas ACPI-t, aga selle rakendamine oli mõnevõrra vigane või mittetäielik, kuigi mõned sellega seotud probleemid olid põhjustatud esimese põlvkonna ACPI riistvarast. Teised operatsioonisüsteemid, sealhulgas Windowsi hilisemad versioonid, eComStation, FreeBSD, NetBSD, OpenBSD, HP-UX, OpenVMS, Linux ja Solarise arvutiversioonid, toetavad vähemalt mingil määral ACPI-d.
 
Mõned uuemad operatsioonisüsteemid, näiteks Windows Vista, nõuavad, et arvutil oleks ACPI-ga ühilduv BIOS.

Windowsi operatsioonisüsteemid kasutavad ACPI sündmustele juurdepääsuks faili acpi.sys ja Linux operatsioonisüsteemid kasutavad ligipääsemiseks acpid-i.  

## Puudused
ACPI rakendamine nõuab riistvaratootjate ja tarkvaraarendajate tihedat koostööd, mis võib tuua kaasa ühilduvusprobleemid. Kui siin (näiteks PCIe) ootab ja seadmed on sügavas unes, tekitab see probleemi, sest siinid ei oota, et seadmed siinist lahti ühendaksid, kui need välja lülitatakse.
Mõnel juhul võib ACPI vale rakendamine põhjustada süsteemi ebastabiilsust või riistvara mittetöötamist.

## Viited