В режим SMM процессоры входят по сигналу на входе SMI# (System Management Interrupt), но более совершенные процессоры могут входить в режим SMM и по приему соответствующего сообщения по шине контроллера прерываний APIC. Сигнал SMI# для процессора является запросом на прерывание с наивысшим приоритетом. Обнаружив активный сигнал SMI#, процессор по завершении текущей инструкции и выгрузки буферов записи переключается в режим SMM, и формирует выходной сигнал SMIACT#. Сразу при входе в SMM процессор сохраняет свой контекст (практически почти все регистры) в специальной памяти SMIRAM. Эта память использует часть адресного пространства физической памяти, доступ к которой обеспечивается только при наличии сигнала SMIACT#. После сохранения контекста процессор переходит к выполнению программы-обработчика SMI, которая расположена в памяти SMIRAM. Программа-обработчик состоит из последовательности обычных инструкций, исполняемых процессором в режиме, аналогичном реальному режиму.
При входе в режим SMM автоматически запрещаются аппаратные прерывания (маскируемые и немаскируемые) и не генерируются исключения, поэтому действия процессора определяются программой-обработчика SMI. Программа-обработчик завершается инструкцией RSM (RSM выполняется только в режиме SMM), по которой процессор восстанавливает свой контекст из SMIRAM, и возвращается в обычный режим работы.
Начиная еще со второго поколения процессоров Pentium имеется возможность рестарта инструкций и входа в SMM по сообщению, принятому с шины APIC. При возврате из SMM возможны некоторые варианты, заказанные программой-обработчиком (в пределах возможностей аппаратуры по режиму SMM и данного процессора). Программа-обработчик может внести изменения в образ контекста процессора, и процессор может вернуться не в то состояние, в котором произошел переход в режим SMI.
Возможен выбор варианта для случая, когда прерывание SMI возникло во время останова процессора по инструкции HALT:
можно вернуться снова на команду останова,
можно перейти к выполнению следующей за ней команды.
Процессоры, начиная с Pentium второго поколения, поддерживают и возможность рестарта (повторного выполнения) команды ввода-вывода, предшествующей появлению сигнала SMI#. Возможность рестарта команды ввода-вывода является расширением режима SMM. Ее используют, например, когда прикладная программа (или системный драйвер) пытается обратиться c операцией ввода-вывода к периферийному устройству, находящемуся в «спящем» режиме. Системная логика в этом случае должна выработать сигнал SMI# раньше сигнала готовности устройства к обмену RDY#, завершающего шинный цикл рестартуемой команды ввода-вывода. Обработчик SMI «разбудит» устройство, после чего операция ввода-вывода рестартует, и прикладное ПО (или драйвер) «не заметит», что устройство пребывало в «спячке». Таким образом, управление потреблением энергии может быть совершенно «прозрачным» для прикладного программного обеспечения и операционных систем (ОС). Прозрачность SMM обеспечивается следующими свойствами режима:
- возможностью только аппаратного входа в режим SMM,
- исполнением программы-обработчика SMM в отдельном адресном пространстве памяти,
- сохранением состояния прерванной программы в области SMIRAM,
- запретом обычных аппаратных прерываний,
- восстановлением состояния ранее прерванной задачи при выходе из режима SMM.
Память SMIRAM должна быть физически или логически выделенной областью размером от 32 Кб (минимум) и до 4 Гб. SMIRAM располагается, начиная с адреса SMIBASE (по умолчанию 30000h), и распределяется относительно адреса SMIBASE следующим образом:
FE00h-FFFFh (3FE00h-3FFFFh) - область сохранения контекста (распределяется, начиная со старших адресов по направлению к младшим). По прерыванию SMI сохраняются практически все регистры процессора, включая программно невидимые регистры CR1, CR2 и CR4, а также аппаратные скрытые регистры для CS, DS, ES, FS, GS и SS, используемые для хранения дескрипторов. Для регистров DR5-DR0, TR7-TR3 и регистров FPU автоматическое сохранение не производится;
8000h (38000h) - точка входа в обработчик (SMI Handler);
0-7FFFh (30000h-37FFFh) - свободная область.
Если режим SMM используется для отключения электропитания самого микропроцессора с возможностью быстрого пробуждения, то память SMIRAM, в которой сохраняется контекст процессора, должна быть энергонезависимой с возможностью записи в нее в обычном режиме.
Операционный режим SMM похож на однопрограммный режим реального адреса и имеет следующие особенности и свойства:
- вычисление адресов аналогично реальному режиму;
- лимит ограничен в 4 Гб;
- флаг прерываний IF сброшен;
- немаскируемое прерывание NMI запрещено;
- флаг TF в регистре EFLAGS сброшен, пошаговый режим запрещен;
- регистр DR7 сброшен, отладочные ловушки запрещены;
-инструкция RSM является действительной (в других режимах она вызывает ошибку неверного кода операции).
По умолчанию используется 16-битный режим регистров, стека и кодов операций.
Контекст математического сопроцессора (и регистры ММХ) при SMI автоматически не сохраняется, поскольку операции FPU в режиме SMM вряд ли кому-либо потребуются. Однако если SMI используется для выключения процессора, контекст FPU может быть программно сохранен обработчиком.