HLT (инструкция x86)
В x86 компьютерной архитектуре HLT
(остановка) — это инструкция языка ассемблера , которая останавливает центральный процессор (ЦП) до тех пор, пока не будет вызвано следующее внешнее прерывание . [ 1 ] Прерывания — это сигналы, отправляемые аппаратными устройствами в ЦП, предупреждающие его о том, что произошло событие, на которое он должен отреагировать. Например, аппаратные таймеры через определенные промежутки времени отправляют прерывания ЦП.
Большинство операционных систем выполняют HLT
Инструкция, когда нет необходимости выполнять немедленную работу, переводя процессор в состояние ожидания . Например, в Windows NT эта инструкция выполняется в « Процессе простоя системы ». x86 опкод На процессорах HLT
является 0xF4
.
На процессорах ARM аналогичные инструкции WFI
(Ждать прерывания) и WFE
(Подождите события).
История на x86
[ редактировать ]Все процессоры x86, начиная с 8086, имели HLT
инструкция, но она не использовалась MS-DOS до версии 6.0. [ 2 ] и не был специально разработан для снижения энергопотребления до выпуска процессора Intel DX4 в 1994 году. MS-DOS 6.0 предоставляла файл POWER.EXE, который можно было установить в CONFIG.SYS , и в тестах Microsoft это позволило сэкономить 5%. [ 3 ] Некоторые из первых чипов DX с частотой 100 МГц имели ошибочное состояние HLT, что побудило разработчиков Linux реализовать опцию «no-hlt» для использования при работе на этих чипах. [ 4 ] но это было исправлено в более поздних чипах.
С тех пор Intel представила дополнительные инструкции по работе с процессором. К ним относятся:
PAUSE
в SSE2 предназначен для спин-лупов. Доступно для пользовательского пространства (кольца с низким уровнем привилегий).MONITOR
/MWAIT
в SSE3 для синхронизации потоков.TPAUSE
(временная пауза) иUMONITOR
/UMWAIT
(монитор пользовательского пространства/mwait). Доступно в пользовательском пространстве.
Процесс
[ редактировать ]Почти каждый набор инструкций современного процессора включает в себя режим инструкций или спящий режим, который останавливает процессор до тех пор, пока не потребуется выполнить дополнительную работу. В процессорах, управляемых прерываниями, эта инструкция останавливает ЦП до тех пор, пока не будет получено внешнее прерывание. В большинстве архитектур выполнение такой инструкции позволяет процессору значительно снизить энергопотребление и тепловыделение, поэтому она обычно используется вместо ожидания перехода в режим сна и простоя. В большинстве процессоров остановка (вместо цикла) также уменьшает задержку следующего прерывания.
Использование в операционных системах
[ редактировать ]С момента выпуска HLT
Для инструкции требуется доступ к кольцу 0 , ее можно запускать только привилегированным системным программным обеспечением, таким как ядро . По этой причине при программировании приложений часто рекомендуется использовать интерфейс прикладного программирования (API), предоставляемый для этой цели операционной системой, когда больше невозможно выполнить работу, например, в Linux. sched_yield()
. [ 5 ] Это называется «уступкой» процессора. операционной системы Это позволяет планировщику решать, работоспособны ли другие процессы; если не. Если каждый процесс находится в режиме сна или ожидания, он обычно выполняет инструкцию HLT, чтобы сократить энергопотребление до следующего аппаратного прерывания.
См. также
[ редактировать ]- Расширенный интерфейс конфигурации и питания (ACPI)
- Расширенное управление питанием (APM)
- Компьютерная архитектура
- Остановиться и загореться
- Простой (ЦП)
- Архитектура набора команд
- НОП (код)
Ссылки
[ редактировать ]- ^ «Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32: Справочник по набору команд AZ» . Проверено 1 марта 2012 г.
- ^ «Почему DOS использует 100% процессорного времени под Virtual PC?» . microsoft.com . 20 декабря 2004 года . Проверено 18 ноября 2018 г.
- ^ «Поддержка POWER.EXE и Advanced Power Management (APM)» . Архивировано из оригинала 27 сентября 2014 г. Проверено 27 сентября 2015 г.
- ^ «Linux BootPrompt-HowTo» . www.faqs.org . Проверено 18 ноября 2018 г.
- ^ «sched_yield(2) — страница руководства Linux» . Проверено 2 сентября 2020 г.