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 HLTBefehl 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 HLTist 0xF4.

Verlauf auf x86

Alle x86-Prozessoren ab dem 8086 hatten die HLTAnweisung, 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:

  • PAUSEin SSE2 für Spin-Loops bestimmt. Verfügbar für den Userspace (Ringe mit niedrigem Privileg).
  • MONITOR/ MWAITin SSE3 für die Thread-Synchronisation.
  • TPAUSE(Zeitgesteuerte Pause) und UMONITOR/ 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 HLTAnweisung 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

Verweise