De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

En la arquitectura de computadora x86 , HLT(detener) es una instrucción en lenguaje ensamblador que detiene la unidad central de procesamiento (CPU) hasta que se dispara 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 debería reaccionar. Por ejemplo, los temporizadores de hardware envían interrupciones a la CPU a intervalos regulares.

El sistema operativoHLT ejecuta la instrucción cuando no hay trabajo inmediato por hacer y el sistema entra en su estado inactivo . En Windows NT , por ejemplo, esta instrucción se ejecuta en el " Proceso inactivo del sistema ". En procesadores x86, el código de operación de es .HLT0xF4

Historial en x86 [ editar ]

Todos los procesadores x86 desde el 8086 en adelante tenían la HLTinstrucción, pero MS-DOS no la usaba antes de 6.0 [2] y no estaba 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 se podía instalar 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 ejecuta en esos chips, [4] pero esto se corrigió en chips posteriores.

Desde entonces, Intel ha introducido instrucciones adicionales sobre el rendimiento del procesador. Éstas incluyen:

  • PAUSEen SSE2 destinado a bucles de giro. Disponible para el espacio de usuario (anillos de privilegios bajos).
  • MONITOR/ MWAITen SSE3 para sincronización de subprocesos.
  • TPAUSE(pausa temporizada) y UMONITOR/ UMWAIT(monitor de espacio de usuario / mwait). Disponible para el espacio de usuario.

Proceso [ editar ]

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 sea necesario realizar más trabajo. En 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 una instrucción de este tipo permite que el procesador reduzca significativamente el uso de energía y la producción de calor, razón por la cual se usa comúnmente en lugar de estar ocupado esperando para dormir y estar inactivo.

Uso en sistemas operativos [ editar ]

Dado que la emisión de la HLTinstrucción requiere acceso al anillo 0 , solo se puede ejecutar mediante software de sistema privilegiado, como el kernel . Debido a esto, a menudo es una buena práctica en la programación de aplicaciones utilizar 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" al procesador. Esto permite que el programador del sistema operativo decida si se pueden ejecutar otros procesos; de lo contrario, normalmente emitirá la instrucción HLT para reducir el uso de energía.

Ver también [ editar ]

Referencias [ editar ]

  1. ^ "Manual del desarrollador de software de arquitecturas Intel 64 e IA-32: referencia de conjunto de instrucciones AZ" (PDF) . Consultado el 1 de marzo de 2012 . CS1 maint: parámetro desalentado ( enlace )
  2. ^ "¿Por qué DOS usa el 100% de la CPU en Virtual PC?" . microsoft.com . Consultado el 18 de noviembre de 2018 . CS1 maint: parámetro desalentado ( enlace )
  3. ^ "Compatibilidad con POWER.EXE y administración avanzada de energía (APM)" . Archivado desde el original el 27 de septiembre de 2014 . Consultado el 27 de septiembre de 2015 . CS1 maint: parámetro desalentado ( enlace )
  4. ^ "El Linux BootPrompt-HowTo" . www.faqs.org . Consultado el 18 de noviembre de 2018 . CS1 maint: parámetro desalentado ( enlace )
  5. ^ "sched_yield (2) - página de manual de Linux" . Consultado el 2 de septiembre de 2020 . CS1 maint: parámetro desalentado ( enlace )