En la arquitectura de computadora x86 , HLT(halt) es una instrucción en lenguaje ensamblador que suspende la unidad central de procesamiento (CPU) hasta que se active la siguiente interrupción externa. [ 1 ] Las interrupciones son señales enviadas por dispositivos de hardware a la CPU para alertarla de que ocurrió un evento al que debe reaccionar. Por ejemplo, los temporizadores de hardware envían interrupciones a la CPU a intervalos regulares.
La mayoría de los sistemas operativos ejecutan una HLTinstrucción cuando no hay trabajo inmediato que realizar, poniendo al procesador en un estado inactivo . En Windows NT , por ejemplo, esta instrucción se ejecuta en el " Proceso inactivo del sistema ". En los procesadores x86, el código de operación de HLTes 0xF4.
En los procesadores ARM, las instrucciones similares son WFI(Wait For Interrupt) y WFE(Wait For Event).
Historia en x86
Todos los procesadores x86 desde el 8086 en adelante tenían la HLTinstrucción, pero no fue utilizada por MS-DOS antes de la versión 6.0 [ 2 ] y no fue diseñada específicamente para reducir el consumo de energía hasta el lanzamiento del procesador Intel DX4 en 1994. MS-DOS 6.0 proporcionó un POWER.EXE que podía instalarse en CONFIG.SYS y en las pruebas de Microsoft ahorró un 5 %. [ 3 ] Algunos de los primeros chips DX de 100 MHz tenían un estado HLT defectuoso, lo que llevó a los desarrolladores de Linux a implementar una opción "no-hlt" para usar cuando se ejecutaba en esos chips, [ 4 ] pero esto se corrigió en chips posteriores.
Desde entonces, Intel ha introducido instrucciones adicionales que mejoran el rendimiento del procesador. Estas incluyen:
Ventajas
Casi todos los conjuntos de instrucciones de los procesadores modernos incluyen una instrucción o modo de suspensión que detiene el procesador hasta que se requiera más trabajo. En los procesadores controlados por interrupciones, esta instrucción detiene la CPU hasta que se recibe una interrupción externa. En la mayoría de las arquitecturas, la ejecución de dicha instrucción permite al procesador reducir significativamente su consumo de energía y la generación de calor, razón por la cual se usa comúnmente en lugar de la espera activa para la suspensión y la inactividad. En procesadores con caché deshabilitada o inexistente, la detención reduce el tráfico del bus. En la mayoría de los procesadores, la detención (en lugar de un bucle) también reduce la latencia de la siguiente interrupción.
Uso en sistemas operativos
Dado que emitir la HLTinstrucción requiere acceso al anillo 0 , solo puede ser ejecutada por software de sistema privilegiado como el kernel . Debido a esto, a menudo es la mejor práctica en la programación de aplicaciones usar la interfaz de programación de aplicaciones (API) proporcionada para ese propósito por el sistema operativo cuando no se puede hacer más trabajo, como en Linux sched_yield(). [ 5 ] Esto se conoce como "ceder" el procesador. Esto permite que el planificador del sistema operativo decida si otros procesos son ejecutables; si no lo son. Si cada proceso está durmiendo o esperando, normalmente ejecutará una instrucción HLT para cortar el uso de energía hasta la siguiente interrupción de hardware.
Véase también
Referencias
- ↑ "Manual del desarrollador de software para arquitecturas Intel 64 e IA-32: Referencia del conjunto de instrucciones AZ" . Consultado el 1 de marzo de 2012 .
- ↑ "¿Por qué DOS usa el 100% de la CPU en Virtual PC?" . microsoft.com . 20 de diciembre de 2004 . Consultado el 18 de noviembre de 2018 .
- ↑ "POWER.EXE y compatibilidad con Advanced Power Management (APM)" . Archivado del original el 27/09/2014 . Consultado el 27/09/2015 .
- ↑ "Cómo usar el BootPrompt de Linux" . www.faqs.org . Consultado el 18 de noviembre de 2018 .
- ↑ "sched_yield(2) - Página del manual de Linux" . Consultado el 2 de septiembre de 2020 .
- Código máquina
- Instrucciones X86