ACPI
Interfaz de configuración y energía avanzada (ACPI) es un estándar abierto que los sistemas operativos pueden usar para descubrir y configurar componentes de hardware de computadora, para realizar administración de energía (por ejemplo, dejar de usar componentes de hardware en suspensión), configuración automática (por ejemplo, Plug and Play e intercambio en caliente) y monitoreo de estado. Fue lanzado por primera vez en diciembre de 1996. ACPI tiene como objetivo reemplazar la administración avanzada de energía (APM), la especificación multiprocesador y la especificación Plug and Play BIOS (PnP). ACPI pone la administración de energía bajo el control del sistema operativo, a diferencia del sistema anterior centrado en BIOS que dependía del firmware específico de la plataforma para determinar las políticas de configuración y administración de energía. La especificación es fundamental para el sistema de configuración dirigida al sistema operativo y administración de energía (OSPM). ACPI define interfaces de abstracción de hardware entre el firmware del dispositivo (por ejemplo, BIOS, UEFI), los componentes de hardware de la computadora y los sistemas operativos.
Internamente, ACPI anuncia los componentes disponibles y sus funciones al kernel del sistema operativo mediante listas de instrucciones ("métodos") proporcionadas a través del firmware del sistema (UEFI o BIOS), que el kernel analiza. Luego, ACPI ejecuta las operaciones deseadas escritas en lenguaje de máquina ACPI (como la inicialización de componentes de hardware) utilizando una máquina virtual mínima integrada.
Intel, Microsoft y Toshiba desarrollaron originalmente el estándar, mientras que HP, Huawei y Phoenix también participaron más tarde. En octubre de 2013, el Grupo de Interés Especial ACPI (ACPI SIG), los desarrolladores originales del estándar ACPI, acordaron transferir todos los activos al Foro UEFI, en el que se llevará a cabo todo el desarrollo futuro. La última versión del estándar 6.5 se lanzó en agosto de 2022.
Arquitectura
El ACPI a nivel de firmware tiene tres componentes principales: las tablas ACPI, el BIOS ACPI y los registros ACPI. El BIOS ACPI genera tablas ACPI y las carga en la memoria principal. Gran parte de la funcionalidad ACPI del firmware se proporciona en código de bytes de Lenguaje de máquina ACPI (AML), un lenguaje de bajo nivel específico de dominio completo de Turing, almacenado en las tablas ACPI. Para utilizar las tablas ACPI, el sistema operativo debe tener un intérprete para el código de bytes AML. La arquitectura de componentes ACPI (ACPICA) proporciona una implementación de intérprete AML de referencia. En el momento del desarrollo del BIOS, el código de bytes AML se compila a partir del código ASL (lenguaje fuente ACPI).
Arquitectura de componentes ACPI (ACPICA)
La Arquitectura de componentes ACPI (ACPICA), escrita principalmente por ingenieros de Intel, proporciona una implementación de referencia del sistema operativo independiente de la plataforma de código abierto. código ACPI relacionado. El código ACPICA es utilizado por Linux, Haiku, ArcaOS y FreeBSD, que lo complementan con su código específico del sistema operativo.
Historia
La primera revisión de la especificación ACPI se publicó en diciembre de 1996 y admite espacios de direcciones de 16, 24 y 32 bits. . No fue hasta agosto de 2000 que ACPI recibió soporte para direcciones de 64 bits, así como soporte para estaciones de trabajo y servidores multiprocesador con la revisión 2.0.
En 1999, el entonces director ejecutivo de Microsoft, Bill Gates, declaró en un correo electrónico que Linux se beneficiaría de ACPI sin que ellos tuvieran que trabajar y sugirió que fuera sólo para Windows.
En septiembre de 2004, se lanzó la revisión 3.0, que incorpora a la especificación ACPI soporte para interfaces SATA, bus PCI Express, soporte multiprocesador para más de 256 procesadores, sensores de luz ambiental y dispositivos de presencia del usuario, además de ampliar el modelo térmico más allá del soporte anterior centrado en el procesador.
Publicado en junio de 2009, se agregó la revisión 4.0 de la especificación ACPI varias características nuevas en el diseño; los más notables son la compatibilidad con USB 3.0, la compatibilidad con el procesador lógico inactivo y la compatibilidad con x2APIC.
La revisión 5.0 de la especificación ACPI se lanzó en diciembre de 2011, y agregó soporte para la arquitectura ARM. La revisión 5.1 se publicó en julio de 2014.
La última revisión de la especificación es 6.5, que se lanzó en agosto de 2022 .
Sistemas operativos



Windows 98 de Microsoft fue el primer sistema operativo en implementar ACPI, pero su implementación tuvo algunos errores o estuvo incompleta, aunque algunos de los problemas asociados con él fueron causados por el hardware ACPI de primera generación. Otros sistemas operativos, incluidas versiones posteriores de Windows, macOS, eComStation, ArcaOS, FreeBSD (desde FreeBSD 5.0), NetBSD (desde NetBSD 1.6), OpenBSD (desde OpenBSD 3.8), HP-UX, OpenVMS, Linux, GNU Hurd y versiones para PC de Solaris, tienen al menos algo de soporte para ACPI. Algunos sistemas operativos más nuevos, como Windows Vista, requieren que la computadora tenga un BIOS compatible con ACPI y, desde Windows 8, se implementó el estado S0ix/Modern Standby.
Los sistemas operativos Windows utilizan acpi.sys para acceder a los eventos ACPI.
La serie 2.4 del kernel de Linux solo tenía un soporte mínimo para ACPI, con un mejor soporte implementado (y habilitado de forma predeterminada) desde la versión del kernel 2.6.0 en adelante. Las implementaciones antiguas de ACPI BIOS tienden a tener muchos errores y, en consecuencia, no son compatibles con sistemas operativos posteriores. Por ejemplo, Windows 2000, Windows XP y Windows Server 2003 sólo usan ACPI si la fecha del BIOS es posterior al 1 de enero de 1999. De manera similar, el kernel de Linux 2.6 puede no usar ACPI si la fecha del BIOS es anterior al 1 de enero de 2001.
Los sistemas operativos basados en Linux pueden proporcionar manejo de eventos ACPI a través de acpid.
Responsabilidades de OSPM
Una vez que un sistema operativo compatible con OSPM activa ACPI, toma el control exclusivo de todos los aspectos de la administración de energía y la configuración del dispositivo. La implementación de OSPM debe exponer un entorno compatible con ACPI a los controladores de dispositivos, lo que expone ciertos estados del sistema, del dispositivo y del procesador.
Estados de energía
Estados globales
La especificación ACPI define los siguientes cuatro "Gx" estados y seis estados de sueño "Sx" estados para un sistema informático compatible con ACPI:
Gx | Nombre | Sx | Descripción |
---|---|---|---|
G0 | Trabajo | S0 | El ordenador está funcionando y la CPU ejecuta instrucciones. "Awaymode" es un subconjunto de S0, donde el monitor está apagado pero las tareas de fondo están funcionando |
G1 | Dormir | S0ix | Modern Standby, o "Low Power S0 Idle". Procesador parcial SoC sueño. Conocido a dispositivos ARM y x86. |
S1 | Power on Suspend (POS): Las cachés de procesador son desactivadas, y la CPU(s) deja de ejecutar instrucciones. Se mantiene el poder a la CPU(s) y la RAM. Los dispositivos que no indican que deben permanecer encendidos pueden ser apagados. | ||
S2 | La CPU se ha apagado. El caché sucio está lleno de RAM. | ||
S3 | Comúnmente denominado Standby, Duermeo Suspendiendo a RAM (STR): RAM permanece alimentada. Los ventiladores pueden apagarse. Requiere controladores GPU en Windows. | ||
S4 | Hibernación o Suspendiendo al disco: Todo el contenido de la memoria principal se guarda a la memoria no volátil como un disco duro, y el sistema se alimenta. | ||
G2 | Soft Off | S5 | |
G3 | Mechanical Off | La potencia de la computadora se ha eliminado totalmente a través de un interruptor mecánico (como en la parte trasera de un PSU). El cable de alimentación se puede quitar y el sistema es seguro para el desmontaje (típicamente, sólo el reloj en tiempo real sigue funcionando utilizando su propia batería pequeña). |
La especificación también define un estado Legacy: el estado de un sistema operativo que no admite ACPI. En este estado, el hardware y la energía no se administran a través de ACPI, lo que de hecho desactiva ACPI.
Estados del dispositivo
El dispositivo declara D0–D3 son dependientes del dispositivo:
- D0 o Fully On es el estado operativo.
- Como con S0ix, Intel tiene D0ix estados para niveles intermedios en el SoC.
- D1 y D2 son estados de potencia intermedios cuya definición varía según el dispositivo.
- D3: El estado D3 se divide en D3 caliente (tiene poder auxiliar), y D3 Cold (sin poder proporcionado):
- Caliente: Un dispositivo puede hacer solicitudes de gestión de energía para la transición a estados de potencia superiores.
- Cold o Fuera. tiene el dispositivo apagado y sin respuesta a su autobús.
Estados del procesador
Los estados de energía de la CPU C0–C3 se definen de la siguiente manera:
- C0 es el estado operativo.
- C1 (a menudo conocido como Halt) es un estado donde el procesador no está ejecutando instrucciones, pero puede volver a un estado ejecutante esencialmente instantáneamente. Todos los procesadores conformantes de ACPI deben apoyar este estado de poder. Algunos procesadores, como el Pentium 4 y el AMD Athlon, también apoyan un estado C1 mejorado (Enhanced C1)C1E o Enhanced Halt State) para un menor consumo de energía, sin embargo, esto demostró estar agitado en algunos sistemas.
- C2 (a menudo conocido como Stop-Clock) es un estado donde el procesador mantiene todo el estado visual de software, pero puede tomar más tiempo para despertar. Este estado procesador es opcional.
- C3 (a menudo conocido como Duerme) es un estado donde el procesador no necesita mantener su caché coherente, pero mantiene otro estado. Algunos procesadores tienen variaciones en el estado C3 (Deep Sleep, Deeper Sleep, etc.) que difieren en cuánto tiempo se necesita para despertar al procesador. Este estado procesador es opcional.
- Estados adicionales son definidos por los fabricantes para algunos procesadores. Por ejemplo, la plataforma Haswell de Intel tiene estados hasta C10, donde distingue núcleo básico estados y paquete estados.
Estado de ejecución
Mientras un dispositivo o procesador está en funcionamiento (D0 y C0, respectivamente), puede encontrarse en uno de varios estados de rendimiento de energía. Estos estados dependen de la implementación. P0 es siempre el estado de mayor rendimiento, siendo P1 a Pn sucesivamente estados de menor rendimiento, hasta un límite específico de la implementación de n no mayor que 16.
Los estados P se conocen como SpeedStep en los procesadores Intel, como PowerNow! o Cool'n'Quiet en procesadores AMD, y como PowerSaver en procesadores VIA.
- P0 potencia máxima y frecuencia
- P1 menos que P0escalada de tensión y frecuencia
- P2 menos que P1escalada de tensión y frecuencia
- Pn menos que P (n–1)escalada de tensión y frecuencia
Interfaces
Hardware
Los sistemas compatibles con ACPI interactúan con el hardware a través de una "interfaz de hardware fijo de función (FFH)" o un modelo de programación de hardware independiente de la plataforma que se basa en el lenguaje de máquina ACPI (AML) específico de la plataforma proporcionado por el fabricante del equipo original (OEM).
Las interfaces de hardware fijo de funciones son características específicas de la plataforma, proporcionadas por los fabricantes de plataformas con fines de rendimiento y recuperación de fallas. Las PC estándar basadas en Intel tienen una interfaz de función fija definida por Intel, que proporciona un conjunto de funcionalidades principales que reducen la necesidad de un sistema compatible con ACPI de pilas completas de controladores para proporcionar funcionalidad básica durante el tiempo de arranque o en el caso de fallas importantes. fallo de sistema.
La interfaz de error de plataforma ACPI (APEI) es una especificación para informar errores de hardware, p. chipset, RAM al sistema operativo.
Firmware
ACPI define muchas tablas que proporcionan la interfaz entre un sistema operativo compatible con ACPI y el firmware del sistema (BIOS o UEFI). Esto incluye RSDP, RSDT, XSDT, FADT, FACS, DSDT, SSDT, MADT y MCFG, por ejemplo.
Las tablas permiten la descripción del hardware del sistema de manera independiente de la plataforma y se presentan como estructuras de datos con formato fijo o en AML. La tabla AML principal es la DSDT (tabla de descripción de sistemas diferenciados). El AML se puede descompilar mediante herramientas como iASL de Intel (código abierto, parte de ACPICA) con fines como parchear las tablas para ampliar la compatibilidad del sistema operativo.
El puntero de descripción del sistema raíz (RSDP) se ubica según la plataforma y describe el resto de las tablas.
Microsoft utiliza una tabla ACPI personalizada llamada tabla binaria de plataforma Windows (WPBT) para permitir a los proveedores agregar software al sistema operativo Windows automáticamente. Se ha descubierto que algunos proveedores, como Lenovo, utilizan esta función para instalar software dañino como Superfish. Samsung envió PC con Windows Update deshabilitado. Las versiones de Windows anteriores a Windows 7 no admiten esta función, pero se pueden utilizar técnicas alternativas. Este comportamiento se ha comparado con los rootkits.
Tablas
- PHAT
- Tabla de Evaluación de la Salud
- SLIP
- Software Licencias Descripción Tabla
Crítica
El fundador de Ubuntu, Mark Shuttleworth, dice que ACPI es un riesgo para la seguridad. Dice que "defender ACPI en su dispositivo de próxima generación es defender la instalación de un caballo de Troya de proporciones monumentales en su sala de estar y en su centro de datos". y "el firmware de su dispositivo es el mejor amigo de la NSA". Continúa diciendo: "Su mayor error es suponer que la NSA es la única institución que abusa de esta posición de confianza; de hecho, es razonable suponer que todo el firmware es un pozo negro de inseguridad, cortesía". de incompetencia del más alto grado por parte de los fabricantes, y de competencia del más alto grado por parte de una gama muy amplia de tales agencias." Sugiere firmware declarativo de código abierto (ACPI o no ACPI) como solución.
La decisión de diseño general no estuvo exenta de críticas. En noviembre de 2003, Linus Torvalds, autor del kernel de Linux, describió ACPI como "un completo desastre de diseño en todos los sentidos".