What Is ACPI (Advanced Configuration and Power Interface)? [MiniTool Wiki]
What Is ACPI?
When you enter the BIOS in the Windows system, then you may find ACPI in the Advanced tab. So what is ACPI?
It is the abbreviation of Advanced Configuration and Power Interface. In a computer, the operating system can utilize an open standard offered by ACPI to find and configure computer hardware components to perform power management and status monitoring.
In contrast to previous BIOS-centric systems where platform-specific firmware determines power management and configuration policies, ACPI places power management under the control of the operating system.
This specification is essential for the Operating System-directed configuration and Power Management (OSPM) system, an ACPI implementation that can remove device management responsibilities from the old firmware interface through the UI.
Internally, ACPI uses the instruction list (“methods”) provided by the system firmware (UEFI or BIOS), which the kernel parses, to notify the operating system kernel of the available components and their functions.
Then ACPI uses the embedded minimal virtual machine to perform the required operations written in ACPI machine language (like initialization of hardware components).
Related post: A Full Guide To Fix ACPI BIOS Error In Windows 10/8/7
The firmware-level ACPI possesses three main components: ACPI table, ACPI BIOS, and ACPI register. Unlike previous versions such as APM or PnP BIOS, ACPI hardly implements its functionality in ACPI BIOS code, and the main role of ACPI BIOS code is to load the ACPI tables in system memory.
In contrast, most firmware ACPI functionality is provided in the bytecode of ACPI machine language (AML), which is a Turing-complete, domain-specific low-level language stored in the ACPI table.
To use these tables, the operating system must have an interpreter for the AML bytecode. ACPI Component Architecture (ACPICA) provides a reference to AML interpreter implementation. During BIOS development, AML bytecode is compiled from ASL (ACPI source language) code.
Since ACPI also replaces PnP BIOS, it also offers a hardware enumerator, which is mostly implemented in the ACPI table of the Differentiated System Description Table (DSDT). The advantage of the bytecode method is that, unlike the PnP BIOS code (16 bits), ACPI bytecode can be used in any operating system, even in 64-bit long mode.
- In December 1996, the first revision of the ACPI specification was released, supporting 16-bit and 32-bit address spaces.
- In August 2000, ACPI revision 2.0 was released, which supported 64-bit address space and multiprocessor workstations and servers.
- In September 2004, revision 3.0 was released. It supported the SATA controller, PCI Express bus, multi-processor support for more than 256 processors, ambient light sensors, and user-presence devices. And it also extended the thermal model beyond the previous processor-centric support.
- In June 2009, revision 4.0 of the ACPI specification was released, adding various new features to the design. The most notable is USB 3.0 support, logical processor idle support, and x2APIC support.
- In December 2011, the 5.0 revision of the ACPI specification was released, followed by the 5.1 revision published in July 2014.
- In January 2019, ACPI’s latest specification revision 6.3 was released.
Applications in Operating Systems
Microsoft’s Windows 98 was the first operating system to implement ACPI, but its implementation was a bit wrong or incomplete. Some of the problems related to it were caused by the first-generation ACPI hardware.
The first version of Windows 98 disabled ACPI by default, except for the whitelist of systems. Other operating systems, including later versions of Windows, eComStation, FreeBSD, NetBSD, OpenBSD, HP-UX, OpenVMS, Linux, and PC versions of Solaris, at least support ACPI.
Some newer operating systems, such as Windows Vista (and later Microsoft Windows), require the computer to have an ACPI-compliant BIOS.
Windows-based operating systems use acpi.sys to access acpi events.
The Linux kernel 2.4 series had the least support for ACPI, and had been implemented since the 2.6.0 kernel version (enabled by default) for better support. Old ACPI BIOS implementations often have many errors, so future operating systems do not support them.
For example, if the BIOS date is after January 1, 1999, Windows 2000, Windows XP, and Windows Server 2003 only use ACPI; for Windows 98 Second Edition, this date is December 1, 1999. Similarly, Linux kernel 2.6 blacklisted any ACPI BIOS from January 1, 2001.
Linux-based operating systems can provide access to acpi events through acpid.
This post has introduced what the ACPI (Advanced Configuration and Power Interface) is, and you can know its architecture, history as well as the application in operating systems.