En una computadora, la Interfaz de energía y configuración avanzada ( ACPI ) proporciona un estándar abierto que los sistemas operativos pueden usar para descubrir y configurar componentes de hardware de la computadora , para realizar la administración de energía, por ejemplo, poner en suspensión los componentes de hardware no utilizados, para realizar la configuración automática, por ejemplo, Plug and Play e intercambio en caliente , y para realizar el monitoreo de estado. Lanzado por primera vez en diciembre de 1996, ACPI tiene como objetivo reemplazar la administración avanzada de energía (APM), la especificación de multiprocesador , la especificación PCI BIOS, [1] [2] y laEspecificación Plug and Play BIOS (PnP). [3] ACPI pone la administración de energía bajo el control del sistema operativo, a diferencia del sistema anterior centrado en BIOS que se basaba en firmware específico de la plataforma para determinar la administración de energía y las políticas de configuración. [4] La especificación es fundamental para la configuración dirigida por el sistema operativo y el sistema de administración de energía ( OSPM ). ACPI define una interfaz de abstracción de hardware entre el firmware del sistema ( BIOS o UEFI ), los componentes de hardware de la computadora y los sistemas operativos . [5] [6]
Internamente, ACPI anuncia los componentes disponibles y sus funciones al kernel del sistema operativo usando listas de instrucciones (" métodos ") provistas a través del firmware del sistema ( UEFI o BIOS ), que el kernel analiza. A continuación, 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 incorporada .
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, ACPI Special Interest Group (ACPI SIG), los desarrolladores originales del estándar ACPI, acordaron transferir todos los activos al Foro UEFI , en el que se llevarán a cabo todos los desarrollos futuros. [7]
El UEFI Forum publicó la última versión [actualizar]del estándar, "Revisión 6.3", a finales de enero de 2019. [8]
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 carga tablas ACPI en la memoria principal . La mayor parte de la funcionalidad ACPI firmware se proporciona en el código de bytes de ACPI Machine Language (AML), un Turing completo , específico de dominio lenguaje de bajo nivel , almacenada en las tablas ACPI. [9] Para hacer uso de las tablas ACPI, el sistema operativo debe tener un intérprete para el código de bytes AML. La arquitectura de componentes de ACPI (ACPICA) proporciona una implementación de intérprete de 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). [10] [11]
La decisión general de diseño 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". [12] [13] En 2001, otros desarrolladores senior de software Linux como Alan Cox expresaron su preocupación por los requisitos de que el código de bytes de una fuente externa debe ser ejecutado por el kernel con privilegios completos, así como la complejidad general de la especificación ACPI. [14] En 2014, Mark Shuttleworth , fundador de la distribución Ubuntu Linux , comparó ACPI con caballos de Troya . [15]
Arquitectura de componentes ACPI (ACPICA)
La arquitectura de componentes ACPI ( ACPICA ), escrita principalmente por los ingenieros de Intel, proporciona una implementación de referencia de código abierto independiente de la plataforma del código ACPI relacionado con el sistema operativo. [16] El código ACPICA es utilizado por Linux, Haiku , ArcaOS [17] y FreeBSD, [10] 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 direccionamiento 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 multiprocesador y servidores con revisión 2.0.
En septiembre de 2004, se lanzó la revisión 3.0, que trajo 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 de usuarios, además de extender el modelo térmico más allá del anterior. soporte centrado en el procesador.
Lanzada en junio de 2009, la revisión 4.0 de la especificación ACPI agregó varias características nuevas al 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 publicó en diciembre de 2011, [18] que agregó el soporte de la arquitectura ARM . La revisión 5.1 se publicó en julio de 2014. [19]
La última revisión de la especificación es la 6.3, que se publicó en enero de 2019. [8]
Sistemas operativos
Windows 98 de Microsoft fue el primer sistema operativo en implementar ACPI, [20] [21] pero su implementación fue algo defectuosa o incompleta, [22] [23] aunque algunos de los problemas asociados con él fueron causados por el hardware ACPI de primera generación. . [24] Windows 98 First Edition desactivó ACPI de forma predeterminada, excepto en una lista blanca de sistemas. Otros sistemas operativos, incluidas versiones posteriores de Windows , eComStation , ArcaOS , [25] FreeBSD (desde FreeBSD 5.0 [26] ), NetBSD (desde NetBSD 1.6 [27] ), OpenBSD (desde OpenBSD 3.8 [28] ), HP-UX , OpenVMS , Linux y las versiones para PC de Solaris tienen al menos cierto soporte para ACPI. [29] 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 . [30]
Los sistemas operativos Windows usan acpi.sys [31] para acceder a 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 2.6.0 del kernel en adelante. [32] Las implementaciones antiguas de BIOS ACPI tienden a tener bastantes errores y, en consecuencia, no son compatibles con los sistemas operativos posteriores. Por ejemplo, Windows 2000 , Windows XP y Windows Server 2003 solo usan ACPI si la fecha del BIOS es posterior al 1 de enero de 1999. [33] De manera similar, el kernel 2.6 de Linux incluyó en la lista negra cualquier BIOS ACPI anterior al 1 de enero de 2001. [32]
Los sistemas operativos basados en Linux pueden proporcionar acceso a eventos ACPI a través de acpid. [34]
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, dispositivo y procesador.
Estados de energía
Estados globales
La Especificación ACPI define los siguientes cuatro estados globales "Gx" y seis estados de suspensión "Sx" para un sistema informático compatible con ACPI: [35] [36]
Gx | Nombre | Sx | Descripción |
---|---|---|---|
G0 | Trabajando | S0 | La computadora está funcionando y la CPU ejecuta las instrucciones. "Awaymode" es un subconjunto de S0, donde el monitor está apagado pero las tareas en segundo plano se están ejecutando |
G1 | Dormido | S0ix | Modo de espera moderno , [37] o "Bajo consumo S0 inactivo". Suspensión parcial del procesador SoC. [38] [39] Conocido por dispositivos ARM y x86. |
S1 | Encendido suspendido (POS): las cachés del procesador se vacían y las CPU dejan de ejecutar instrucciones. Se mantiene la alimentación de la (s) CPU (s) y la RAM. Los dispositivos que no indiquen que deben permanecer encendidos pueden apagarse | ||
S2 | CPU apagada. La caché sucia se descarga a la RAM | ||
S3 | comúnmente conocido como Standby , Sleep o Suspend to RAM (STR) : la RAM permanece encendida | ||
S4 | Hibernación o suspensión en disco: todo el contenido de la memoria principal se guarda en una memoria no volátil , como un disco duro , y el sistema se apaga. | ||
G2 | Apagado suave | S5 | G2 / S5 es casi lo mismo que G3 Mechanical Off , excepto que la unidad de fuente de alimentación (PSU) aún suministra energía, como mínimo, al botón de encendido para permitir el regreso a S0. Se requiere un reinicio completo. No se conserva ningún contenido anterior. Otros componentes pueden permanecer encendidos para que la computadora pueda "activarse" con la entrada del teclado, reloj, módem , LAN o dispositivo USB |
G3 | Apagado mecánico | La alimentación de la computadora se ha eliminado por completo mediante un interruptor mecánico (como en la parte posterior de una fuente de alimentación). El cable de alimentación se puede quitar y el sistema es seguro para el desmontaje (por lo general, solo el reloj en tiempo real continúa funcionando con su propia batería pequeña) |
La especificación también define un estado heredado : 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 deshabilita efectivamente ACPI.
Estados del dispositivo
Los estados del dispositivo D0 - D3 dependen del dispositivo:
- D0 o Fully On es el estado operativo.
- Al igual que con S0ix, Intel tiene estados D0ix para niveles intermedios en el SoC. [40]
- 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 Hot (tiene energía auxiliar) y D3 Cold (no se proporciona energía):
- Caliente : un dispositivo puede hacer valer las solicitudes de administración de energía para realizar la transición a estados de mayor energía.
- Cold or Off tiene el dispositivo apagado y no responde a su bus.
Estados del procesador
Los estados de potencia 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 en el que el procesador no está ejecutando instrucciones, pero puede volver a un estado de ejecución esencialmente instantáneamente. Todos los procesadores compatibles con ACPI deben admitir este estado de energía. Algunos procesadores, como Pentium 4 y AMD Athlon , también admiten un estado C1 mejorado ( C1E o estado de detención mejorado) para un menor consumo de energía, sin embargo, esto demostró tener errores en algunos sistemas. [41] [42]
- C2 (a menudo conocido como Stop-Clock ) es un estado en el que el procesador mantiene todo el estado visible del software, pero puede tardar más en activarse. Este estado del procesador es opcional.
- C3 (a menudo conocido como suspensión ) es un estado en el que 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 el tiempo que se tarda en activar el procesador. Este estado del procesador es opcional.
- Los fabricantes definen estados adicionales para algunos procesadores. Por ejemplo, la plataforma Haswell de Intel tiene estados hasta C10 , donde distingue estados centrales y estados de paquetes . [43]
Estado de rendimiento
Mientras un dispositivo o procesador funciona (D0 y C0, respectivamente), puede estar en uno de varios estados de rendimiento de energía . Estos estados dependen de la implementación. P0 es siempre el estado de rendimiento más alto, siendo P1 a P n estados sucesivamente de rendimiento inferior, hasta un límite específico de implementación de n no mayor que 16. [44]
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 máxima potencia y frecuencia
- P1 menor que P0 , voltaje y frecuencia escalados
- P2 menor que P1 , voltaje y frecuencia escalados
- Pn menor que P (n – 1) , voltaje y frecuencia escalados
Interfaz de 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 de equipos originales (OEM).
Función Las interfaces de hardware fijo son características específicas de la plataforma, proporcionadas por los fabricantes de la plataforma con el propósito de rendimiento y recuperación de fallas. Las PC estándar basadas en Intel tienen una interfaz de función fija definida por Intel, [45] que proporciona un conjunto de funciones básicas que reduce la necesidad de un sistema compatible con ACPI de pilas de controladores completos para proporcionar funciones básicas durante el arranque o en el caso de un sistema principal. falla.
La interfaz de error de plataforma ACPI (APEI) es una especificación para informar de errores de hardware, por ejemplo, chipset, RAM al sistema operativo.
Interfaz de 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. [46] [47]
Las tablas permiten la descripción del hardware del sistema de una manera independiente de la plataforma y se presentan como estructuras de datos de formato fijo o en AML. La tabla principal de AML es la DSDT (tabla de descripción de sistemas diferenciados). El AML puede descompilarse con herramientas como iASL de Intel (código abierto, parte de ACPICA) con fines como parchar las tablas para expandir la compatibilidad del sistema operativo. [48] [49]
El puntero de descripción del sistema raíz (RSDP) se ubica de manera dependiente de la plataforma y describe el resto de las tablas.
Riesgos de seguridad
El fundador de Ubuntu , Mark Shuttleworth, ha comparado ACPI con caballos de Troya . [50] Ha descrito el firmware propietario (relacionado con ACPI o cualquier otro firmware) como un riesgo de seguridad, diciendo que "el firmware en su dispositivo es el mejor amigo de la NSA " y llamando al firmware (ACPI o no ACPI) "un troyano caballo de proporciones monumentales ". Ha señalado que el firmware de fuente cerrada de baja calidad es una gran amenaza para la seguridad del sistema: [12] "Su mayor error es asumir que la NSA es la única institución que abusa de esta posición de confianza; de hecho, es razonable suponer que todo firmware es un pozo negro de inseguridad, cortesía de la incompetencia del más alto grado de los fabricantes y de la competencia del más alto grado de una amplia gama de tales agencias ". Como solución a este problema, que ha pedido de código abierto , declarativa firmware (ACPI o no ACPI), [12] , que en lugar de contener código ejecutable , sólo describe "vinculación hardware y dependencias".
Microsoft utiliza una tabla ACPI personalizada llamada Tabla binaria de plataforma Windows (WPBT) para permitir que los proveedores agreguen software al sistema operativo Windows automáticamente. Algunos proveedores, como Lenovo y Samsung , han sido atrapados usando esta función para instalar software dañino como Superfish . [51] 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 . [52]
Ver también
- Gestión de energía de estado activo
- Coreboot
- Computación verde
- Claves de administración de energía
- Interfase Extensible de Firmware Unificado
- Activación de la LAN
- SBSA
Referencias
- ^ Especificación PCI BIOS, PCI-SIG
- ^ Especificación de firmware PCI , PCI-SIG
- ^ "Descripción general de ACPI" (PDF) . www.acpi.info . Archivado desde el original ( presentación de diapositivas en PDF) el 25 de mayo de 2019.
- ^ "Especificación de BIOS APM" . Intel Corporation , Microsoft Corporation . Febrero de 1996. Archivado desde el original (RTF) el 26 de febrero de 2012 . Consultado el 2 de julio de 2010 .
- ^ "¿Qué es ACPI (Interfaz de energía y configuración avanzada)? - Definición de WhatIs.com" . SearchWindowsServer . Consultado el 18 de septiembre de 2020 .
- ^ "Árbol de dispositivos ACPI - Representación del espacio de nombres ACPI - La documentación del kernel de Linux" . www.kernel.org . Consultado el 18 de septiembre de 2020 .
- ^ "La página web de Configuración avanzada e interfaz de energía tiene una nota destacada que enlaza con la página de especificaciones de ACPI preexistentes en el sitio web de UEFI" . acpi.org . 23 de julio de 2014 . Consultado el 25 de enero de 2016 .
- ^ a b "Especificación de interfaz de alimentación y configuración avanzada, versión 6.3" (PDF) . UEFI.org/specifications . Enero de 2019 . Consultado el 30 de enero de 2019 .
- ^ Bernhard Kauer (agosto de 2009). "ATARE: tablas ACPI y expresiones regulares" (PDF) . Consultado el 18 de febrero de 2019 .
- ^ a b Implementación de ACPI en FreeBSD - Usenix
- ^ ACPI en Linux , 2005
- ^ a b c Número 162 de la revista Linux, mayo de 2014, página 9
- ^ Searls, Doc (25 de noviembre de 2003). "Linus y los locos, parte II" . Revista de Linux . Consultado el 13 de enero de 2010 .
- ^ Corbet, Jonathan (4 de julio de 2001). "Desarrollo de Kernel" . Edición semanal de LWN.net . LWN.net . Consultado el 2 de julio de 2010 .
- ^ Formato de Linux n ° 184, junio de 2014, página 7.
- ^ ACPICA: Arquitectura de componentes ACPI
- ^ "Léame para el paquete de controladores ACPI" . arcanoae.com . Consultado el 6 de septiembre de 2020 .
- ^ Hewlett-Packard ; Intel Corporation ; Microsoft ; Phoenix Technologies ; Toshiba (6 de diciembre de 2011). "Configuración avanzada y especificación de interfaz de energía (revisión 5.0)" (PDF) . acpi.info . Consultado el 17 de noviembre de 2013 .
- ^ "Configuración avanzada y especificación de interfaz de energía (revisión 5.1)" (PDF) . uefi.org . 23 de julio de 2014 . Consultado el 24 de mayo de 2015 .
- ^ "Limitaciones al utilizar Microsoft Windows 98 en portátiles Armada de Compaq" (PDF) . physik.hu-berlin.de. Octubre de 1998. p. 3 . Consultado el 27 de enero de 2014 .[ enlace muerto permanente ]
- ^ "Windows 98 en sistemas ThinkPad - ThinkPad General" . Support.lenovo.com. Archivado desde el original el 3 de febrero de 2014 . Consultado el 27 de enero de 2014 .
- ^ Robert Cowart; Brian Knittel (2000). Utilizando Microsoft Windows 2000 Professional . Que Publishing. pag. 30 . ISBN 978-0-7897-2125-9.
- ^ Windows 98 no admite el modo de refrigeración pasiva ACPI
- ^ "Artículo de portada: errores y correcciones de Win98 - diciembre de 1998" . winmag.com . Archivado desde el original el 13 de octubre de 1999.
- ^ "Registro de cambios de ArcaOS" . Consultado el 24 de agosto de 2020 .
- ^ "Anuncio de FreeBSD 5.0-RELEASE" . www.freebsd.org . Consultado el 3 de diciembre de 2020 .
- ^ "acpi (4) - Páginas del manual de NetBSD" . man.netbsd.org . Consultado el 3 de diciembre de 2020 .
- ^ "acpi (4) - Páginas de manual de OpenBSD" . man.openbsd.org . Consultado el 3 de diciembre de 2020 .
- ^ Therien, Guy (6 de enero de 2000). "Revisión técnica de la especificación ACPI 2.0, Foro de desarrolladores de Intel" (PPT) . Corporación Intel. Archivado desde el original el 21 de julio de 2011 . Consultado el 21 de agosto de 2011 .
- ^ Marshall, Allen. "ACPI en Windows Vista" (PPT) . Microsoft Corporation . Consultado el 2 de julio de 2010 .
- ^ "Acpi.sys: el controlador ACPI de Windows" . Microsoft Corporation . 15 de junio de 2017 . Consultado el 20 de septiembre de 2019 .
- ^ a b El estado de ACPI en el kernel de Linux
- ^ BIOS ACPI . msdn.microsoft.com .
- ^ "acpid en Debian" . Debian. 2 de julio de 2011 . Consultado el 20 de septiembre de 2019 .
- ^ ACPI Spec Rev 5.0 - de fecha 6 de diciembre de 2011
- ^ Anand Lal Shimpi (5 de octubre de 2012). "Arquitectura Haswell de Intel analizada" . AnandTech . Consultado el 20 de octubre de 2013 .
- ^ contenido del controlador de Windows. "Modo de espera moderno" . docs.microsoft.com . Consultado el 20 de marzo de 2020 .
- ^ "S0ix States" . software.intel.com . 9 de marzo de 2020.
- ^ Wang, Wendy (17 de octubre de 2018). "Cómo lograr estados S0ix en Linux *" . 01.org .
- ^ "Estados D0ix" . software.intel.com . 9 de marzo de 2020.
- ^ "Athlon II X2: Hardware C1E y retorno del error CnQ" . AnandTech . Consultado el 26 de octubre de 2020 .
- ^ Wasson, Scott (21 de febrero de 2005). "Procesadores Intel de la serie Pentium 4 600" . El informe técnico . pag. 2.
- ^ "Paquete de procesador y Core C-States" . AnandTech . 9 de junio de 2013 . Consultado el 20 de octubre de 2013 .
- ^ "Especificación de interfaz de alimentación y configuración avanzada, revisión 3.0, sección 2.6 Definiciones del estado de rendimiento del dispositivo y del procesador" (PDF) . ACPI.info . 2 de septiembre de 2004. p. 23 . Consultado el 19 de agosto de 2015 .
- ^ Intel Corporation (septiembre de 2006). "ACPI específico del proveedor del procesador Intel" (PDF) . Archivado desde el original (PDF) el 25 de diciembre de 2012 . Consultado el 5 de octubre de 2014 .
- ^ Brown, Len (20 de julio de 2005). "ACPI en Linux". Simposio de Ottawa Linux : 3. CiteSeerX 10.1.1.173.2206 .
- ^ "Tablas ACPI - La documentación del kernel de Linux" . www.kernel.org . Consultado el 8 de noviembre de 2020 .
- ^ "DSDT" . ArchWiki .
- ^ "Introducción a ACPI" . GitBook .
- ^ Blog de Mark Shuttleworth (17/03/2014), ACPI, firmware y su seguridad
- ^ Hoffman, Chris. "Zombie Crapware: cómo funciona la tabla binaria de la plataforma Windows" . How-To Geek .
- ^ "Proveedores 'rootkit': 'Tabla binaria de plataforma Windows' (WPBT)" . Born's Tech y Windows World .
enlaces externos
- Sitio web oficial (especificaciones UEFI y ACPI)
- Todo lo que necesita saber sobre los modos de ahorro de energía de los estados C de la CPU
- Ejemplo de código EFI ASL utilizado por VirtualBox ; El código EFI / ASL en sí es del kit de desarrollo Intel EFI de código abierto II ( TianoCore )
- ACPICA
Este artículo se basa en material extraído del Diccionario gratuito de informática en línea antes del 1 de noviembre de 2008 e incorporado bajo los términos de "renovación de licencias" de la GFDL , versión 1.3 o posterior.