HLT (Maschinenbefehl)
HLT ist ein Mnemonic der Assemblersprache für x86-Rechnerarchitekturen. Es steht für den Maschinenbefehl Halt (Opcode F416), welcher den Hauptprozessor (CPU) in den Halt-Zustand versetzt, bis eine externe Unterbrechungsanforderung (Interrupt Request, kurz IRQ) aktiv wird.[1] Im Halt-Zustand wird die Programmausführung angehalten, wodurch der Prozessor Energie spart und mithin weniger Verlustwärme produziert. IRQs sind Signale, mit denen die Peripherie-Hardware die CPU über aufgetretene Ereignisse (beispielsweise Aktivität an Maus oder Tastatur) informiert.
Wenn das Betriebssystem keine Aufgaben zur unmittelbaren Abarbeitung hat, wird der Leerlaufprozess ausgeführt, der seinerseits den Halt-Maschinenbefehl ausführt. Bei Windows NT führt den Befehl beispielsweise der System Idle Process aus.
Geschichte
Zwar umfasst der Befehlssatz aller x86-Prozessoren, beginnend mit dem Intel 8086, den Halt-Befehl. Allerdings wurde er zunächst nicht zur Reduktion des Stromverbrauchs konzipiert. Dies änderte sich erst 1994 mit dem Intel DX4. MS-DOS stellt in den Versionen 6.0, 6.2, 6.21 und 6.22 die Datei POWER.EXE zur Verfügung, welche (per Konfiguration in der CONFIG.SYS) geladen werden kann. Auch wenn das BIOS keine Funktionen für Advanced Power Management (APM) bereitstellt, wird hierbei der Halt-Befehl benutzt; so wurde bei Tests eine Stromersparnis von fünf Prozent erzielt.[2]
Einige der ersten 100-MHz-Chips der DX-Reihe hatten eine fehlerhafte Implementierung des Halt-Befehls. Als Workaround kann beim Starten eines Linux-Systems das Argument no-hlt übergeben werden; dadurch fordert der Kernel keinen Halt-Zustand an, sondern führt als Alternative eine Endlosschleife aus (aktives Warten).[3]
Prozess
Der Befehlssatz fast jedes modernen Prozessors besitzt einen Befehl, um den Prozessor zu pausieren, wenn keine abzuarbeitenden Aufgaben anstehen. Dies wird gegenüber dem aktiven Warten in der Regel bevorzugt.
Verwendung im Betriebssystem
Da die Ausführung des Halt-Befehls nur in Ring 0 möglich ist, kann dieser nur von privilegierten Systemprogrammen wie beispielsweise dem Kernel ausgeführt werden. Aufgrund dieser Einschränkung sollte jede Anwendung außerhalb von Ring 0 den Halt-Zustand bei Bedarf nur über eine entsprechende Funktion der Betriebssystem-Programmierschnittstelle (API) anfordern. Dadurch wird es dem Prozess-Scheduler ermöglicht, die freigewordene Rechnerkapazität an andere zur Ausführung bereitstehende Prozesse zu geben oder mittels Halt-Befehl in den Stromsparmodus zu wechseln.
Siehe auch
Einzelnachweise
- Intel 64 and IA-32 Architectures Software Developer's Manual: Instruction Set Reference A-Z. Abgerufen am 1. März 2012.
- POWER.EXE and Advanced Power Management (APM) Support. Abgerufen am 27. September 2015.
- The Linux BootPrompt-HowTo. In: www.faqs.org. Abgerufen am 18. November 2018.