HLT (instrucció x86)
A l'arquitectura d'ordinadors x86, HLT
(halt) és una instrucció de llenguatge ensamblador que atura la unitat central de processament (CPU) fins que s'activa la següent interrupció externa.[1] Les interrupcions són senyals enviades pels dispositius de maquinari a la CPU per avisar-la que s'ha produït un esdeveniment davant el qual hauria de reaccionar. Per exemple, els temporitzadors de maquinari envien interrupcions a la CPU a intervals regulars.
La majoria dels sistemes operatius executen una instrucció HLT
quan no hi ha feina immediata per fer, posant el processador en un estat inactiu. A Windows NT, per exemple, aquesta instrucció s'executa al "Procés d'inactivitat del sistema". Als processadors x86, el codi operatiu de HLT
és 0xF4
.
Historial a x86
[modifica]Tots els processadors x86 des del 8086 en endavant tenien la instrucció HLT
, però MS-DOS no l'utilitzava abans de la 6.0 [2] i no estava dissenyat específicament per reduir el consum d'energia fins al llançament del processador Intel DX4 el 1994. MS-DOS 6.0 va proporcionar una POTÈNCIA. EXE que es podria instal·lar a CONFIG.SYS i en les proves de Microsoft va estalviar un 5%.[3] Alguns dels 100 primers Els xips DX MHz tenien un estat HLT defectuós, fet que va impulsar als desenvolupadors de Linux a implementar una opció "no-hlt" per utilitzar-la quan s'executaven en aquests xips, [4] però això es va solucionar en xips posteriors.
Des de llavors, Intel ha introduït instruccions addicionals sobre el rendiment del processador. Això inclou:
PAUSE
in SSE2 intended for spin loops. Available to userspace (low-privilege rings).MONITOR
/MWAIT
in SSE3 for thread synchronization.TPAUSE
(timed pause) andUMONITOR
/UMWAIT
(userspace monitor/mwait). Available to userspace.
Procés
[modifica]Gairebé tots els conjunts d'instruccions del processador modern inclouen un mode d'instrucció o de repòs que atura el processador fins que calgui fer més feina. En els processadors impulsats per interrupcions, aquesta instrucció atura la CPU fins que es rep una interrupció externa. A la majoria d'arquitectures, l'execució d'aquesta instrucció permet que el processador redueixi significativament el seu ús d'energia i la producció de calor, per això s'utilitza habitualment en lloc d'esperar a dormir i al ralentí. A la majoria de processadors, l'aturada (en lloc de fer un bucle) també redueix la latència de la següent interrupció.
Ús en sistemes operatius
[modifica]Atès que l'emissió de la instrucció HLT
requereix accés a l'anell 0, només es pot executar mitjançant un programari del sistema privilegiat, com ara el nucli. Per això, sovint és la millor pràctica en programació d'aplicacions utilitzar la interfície de programació d'aplicacions (API) proporcionada per a aquest propòsit pel sistema operatiu quan no es pot fer més feina, com ara sched_yield()
de Linux.[5] Això s'anomena "rendiment" del processador. Això permet al planificador del sistema operatiu decidir si es poden executar altres processos; sinó. Si cada procés està en espera o en espera, normalment executarà una instrucció HLT per reduir l'ús d'energia fins a la següent interrupció de maquinari.
Referències
[modifica]- ↑ «Intel 64 and IA-32 Architectures Software Developer's Manual: Instruction Set Reference A-Z» (en anglès). [Consulta: 1r març 2012].
- ↑ «Why does DOS use 100% CPU under Virtual PC?» (en anglès). microsoft.com. [Consulta: 18 novembre 2018].
- ↑ «POWER.EXE and Advanced Power Management (APM) Support» (en anglès). Arxivat de l'original el 2014-09-27. [Consulta: 27 setembre 2015].
- ↑ «The Linux BootPrompt-HowTo» (en anglès). www.faqs.org. [Consulta: 18 novembre 2018].
- ↑ «sched_yield(2) - Linux manual page» (en anglès). [Consulta: 2 setembre 2020].