HLT (x86-Anweisung) - HLT (x86 instruction)
In der x86- Computerarchitektur ist HLT
(Halt) ein Befehl in Assemblersprache , der die Zentraleinheit (CPU) anhält, bis der nächste externe Interrupt ausgelöst wird. Interrupts sind Signale, die von Hardwaregeräten an die CPU gesendet werden, um diese zu warnen, dass ein Ereignis aufgetreten ist, auf das sie reagieren sollte. Hardware-Timer senden beispielsweise in regelmäßigen Abständen Interrupts an die CPU.
Die meisten Betriebssysteme führen einen HLT
Befehl aus, wenn keine unmittelbare Arbeit zu erledigen ist, wodurch der Prozessor in einen Ruhezustand versetzt wird . Unter Windows NT wird diese Anweisung beispielsweise im " System Idle Process " ausgeführt. Auf x86 - Prozessoren, die Opcode von HLT
ist 0xF4
.
Verlauf auf x86
Alle x86-Prozessoren ab dem 8086 hatten die HLT
Anweisung, aber sie wurde von MS-DOS vor 6.0 nicht verwendet und war bis zur Veröffentlichung des Intel DX4- Prozessors im Jahr 1994 nicht speziell darauf ausgelegt, den Stromverbrauch zu reduzieren . MS-DOS 6.0 lieferte eine POWER .EXE, die in CONFIG.SYS installiert werden konnte und in Microsofts Tests 5% sparte. Einige der ersten 100-MHz-DX-Chips hatten einen fehlerhaften HLT-Zustand, was die Entwickler von Linux dazu veranlasste, eine "no-hlt"-Option für die Verwendung auf diesen Chips zu implementieren, aber dies wurde in späteren Chips behoben.
Intel hat seitdem zusätzliche Anweisungen zur Prozessorausbeute eingeführt. Diese schließen ein:
-
PAUSE
in SSE2 für Spin-Loops bestimmt. Verfügbar für den Userspace (Ringe mit niedrigem Privileg). -
MONITOR
/MWAIT
in SSE3 für die Thread-Synchronisation. -
TPAUSE
(Zeitgesteuerte Pause) undUMONITOR
/UMWAIT
(Userspace-Monitor/mwait). Verfügbar für den Benutzerbereich.
Verfahren
Fast jeder modernen Prozessor - Befehlssatz enthält einen Befehl oder Sleep - Modus, der den Prozessor angehalten , bis mehr Arbeit getan werden muss. Bei Interrupt-gesteuerten Prozessoren hält dieser Befehl die CPU an, bis ein externer Interrupt empfangen wird. Auf den meisten Architekturen ermöglicht die Ausführung eines solchen Befehls dem Prozessor, seinen Stromverbrauch und seine Wärmeabgabe erheblich zu reduzieren, weshalb er häufig verwendet wird, anstatt auf den Ruhezustand und den Leerlauf zu warten . Bei den meisten Prozessoren reduziert das Anhalten (anstelle des Schleifens) auch die Latenz des nächsten Interrupts.
Verwendung in Betriebssystemen
Da die Ausgabe der HLT
Anweisung einen Ring 0- Zugriff erfordert , kann sie nur von privilegierter Systemsoftware wie dem Kernel ausgeführt werden . Aus diesem Grund ist es in der Anwendungsprogrammierung häufig die beste Vorgehensweise , die vom Betriebssystem für diesen Zweck bereitgestellte Anwendungsprogrammierschnittstelle (API) zu verwenden, wenn keine Arbeit mehr ausgeführt werden kann, wie z. B. die von Linux sched_yield()
. Dies wird als "Nachgeben" des Prozessors bezeichnet. Dadurch kann der Scheduler des Betriebssystems entscheiden, ob andere Prozesse lauffähig sind; wenn nicht. Wenn jeder Prozess schläft oder wartet, führt er normalerweise einen HLT-Befehl aus, um den Stromverbrauch bis zum nächsten Hardware-Interrupt zu reduzieren.
Siehe auch
- Advanced Configuration and Power Interface (ACPI)
- Erweiterte Energieverwaltung (APM)
- Rechnerarchitektur
- Anhalten und Feuer fangen
- Leerlauf (CPU)
- Befehlssatzarchitektur
- NOP (Code)