В архитектуре компьютера x86 , HLT
(остановка) - это команда языка ассемблера, которая останавливает центральный процессор (ЦП) до следующего внешнего прерывания уволен. Прерывания - это сигналы, отправляемые аппаратными устройствами в ЦП, предупреждающие его о том, что произошло событие, на которое он должен отреагировать. Например, аппаратные таймеры отправляют прерывания процессору через равные промежутки времени.
Команда HLT
выполняется операционной системой, когда нет немедленных действий, которые необходимо выполнить, и система переходит в состояние ожидания. В Windows NT, например, эта инструкция выполняется в «Процессе простоя системы ». На процессорах x86 код операции из HLT
равен 0xF4
.
Все процессоры x86, начиная с 8086, имели инструкцию HLT
, но она не использовалась MS -DOS до 6.0 и не был специально разработан для снижения энергопотребления до выпуска процессора Intel DX4 в 1994 году. MS-DOS 6.0 предоставляла POWER.EXE, который можно было установить в CONFIG.SYS и в тестах Microsoft сэкономила 5%. Некоторые из первых 100 МГц DX-чипов имели состояние HLT с ошибками, что побудило разработчиков Linux реализовать опцию «no-hlt» для использования при работе на этих чипах, но это было исправлено в более поздних чипах.
С тех пор Intel представила дополнительные инструкции, связанные с процессором. К ним относятся:
PAUSE
в SSE2, предназначенный для циклов вращения. Доступно для пользовательского пространства (кольца с низким уровнем привилегий).МОНИТОР
/ MWAIT
в SSE3 для синхронизации потоков.TPAUSE
(временная пауза) и UMONITOR
/ UMWAIT
(монитор пользовательского пространства / mwait). Доступно для пользовательского пространства.Практически каждый современный процессор набор инструкций включает инструкцию или спящий режим, который останавливает процессор до тех пор, пока не потребуется дополнительная работа. В процессорах, управляемых прерываниями, эта инструкция останавливает CPU до тех пор, пока не будет получено внешнее прерывание. На большинстве архитектур выполнение такой инструкции позволяет процессору значительно снизить энергопотребление и тепловыделение, поэтому обычно используется вместо ожидание занятости для сна и холостого хода.
Поскольку для выполнения инструкции HLT
требуется доступ ring 0, ее можно запустить только с помощью привилегированного системного программного обеспечения, такого как ядро . Из-за этого в прикладном программировании часто лучше всего использовать интерфейс прикладного программирования (API), предоставляемый для этой цели операционной системой, когда больше невозможно выполнить работу, например Linux sched_yield ()
. Это называется «уступкой» процессора. Это позволяет планировщику операционной системы решать, можно ли запустить другие процессы; в противном случае он обычно выдает инструкцию HLT, чтобы сократить потребление энергии.