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