Технология SMM была впервые реализована в микропроцессоре
Intel 386
SL. Изначально SMM работал только на специальных процессорах (SL), но в
1992 году
была внедрена в
80486
и
Intel Pentium
.
AMD
реализовала технологию в Enhanced
Am486
(
1994
). Все более современные x86/x86-64 процессоры поддерживают её.
Операционная система работает в защитном «
Кольце
0»; однако, гипервизор (в системах VT/AMD-v) является более привилегированным, и режим исполнения гипервизора условно называется «Кольцом −1». Соответственно, SMM, являющимся более приоритетным, чем гипервизор, условно называют «Кольцом −2»
. Код, работающий в режиме SMM, получает неограниченный доступ ко всей системной памяти, включая память ядра и память гипервизора.
Содержание
Активация SMM
SMM активируется при помощи прерываний
SMI
(
system management interrupt
— прерывание системного управления), которое возникает:
По сигналу от чипсета или периферии на материнской плате. Используется выделенный контакт процессора
SMI#
.
Программный SMI, посланный системным ПО через порт ввода-вывода (часто используется порт номер
B2
)
.
Запись по адресу ввода-вывода, для которого микропрограммно установлена необходимость активации SMM.
На ближайшей границе инструкций после получения сигнала SMI#, процессор сохраняет своё состояние в памяти и переходит в SMM. Для выхода из SMM и восстановления состояния процессора используется инструкция RSM
(0F AA
)
.
Проблемы
Согласно архитектуре SMM, прерывания SMI не могут быть заблокированы операционной системой
На старых чипсетах (до 2006 года) не выставлялся бит D_LOCK для защиты памяти SMM (что позволяло создавать SMM-зловреды)
Так как программы обработки SMM (SMI handler) устанавливаются из базовой микропрограммы
BIOS
, предполагаемые настройки важной периферии (например,
APIC
) в ОС и программах SMM могут не совпадать
Работа в режиме SMM приостанавливает работу ОС. Состояние процессора сохраняется в SMRAM
, а кэши write-back должны быть сброшены. Из-за этого могут нарушиться требования жесткого реального времени. ОС Windows и ядро Linux устанавливают «SMI Timeout» — период времени, в который любая программа SMM должна вернуть управление операционной системе.
Для определения входа процессора в SMM может потребоваться цифровой логический анализатор (дополнительное отладочное оборудование). При работе в SMM выставляется сигнал процессора
SMIACT#
.
Получение кодов программ SMM для их анализа и отладки также требует логического анализатора или
обратной разработки
микропрограмм BIOS, так как во время исполнения память TSEG, хранящая программы SMM, недоступна ОС.
См. также
Процессор
MediaGX
, использующий SMM для эмуляции аппаратных функций