Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1 / Lectures / Lect5_pc.doc
Скачиваний:
58
Добавлен:
28.05.2015
Размер:
350.21 Кб
Скачать

Режим системного управления smm

([1], с.88, [2,Ш], c.403)

Кроме обычных режимов (реального, защищенного и виртуального V86) современные процессоры имеют дополнительный режим системного управления SMM (System Management Mode). Этот режим предназначен, главным образом, для реализации системы управления энергопотреблением, а также для управления аппаратными средствами и для программ производителей (OEM). Причем он предоставляет возможность выполнения ряда действий с полной изоляцией их от прикладных программ и от операционной системы.

В режим SMM процессор переходит по сигналу на входе прерывания SMI# (System Management Interrupt) или по приему соответствующего сигнала от контроллера прерываний APIC (Advanced Programmable Interrupt Controller), обычно используемого в мультипроцессорных системах, если таковой имеется в процессоре.

Сигнал SMI# для процессора является запросом прерывания наивысшего приоритета. Обнаружив этот сигнал, процессор, по завершению текущей команды и выгрузки буферов записи, переключается в режим SMM, что отображает установка активного уровня на выводе процессора SMIACT# в процессорах 486 и Pentium или специальным сигналом состояния EXF4, генерируемым при каждом обращении к памяти в моделях процессоров семейства P6 (Pentium II и III).

При входе в режим SMM процессор сохраняет свое состояние (контекст): содержимое большинства регистров – в специальной памяти SMRAM. Эта память представляет собой выделенную область физической памяти, доступ к которой обеспечивается внешними, по отношению к процессору, схемами только при наличии сигнала SMIACT# или EXF4.

После сохранения контекста процессор переходит к выполнению обработчика SMI, который расположен в памяти SMRAM. Обработчик представляет собой последовательность обычных команд, исполняемых в режиме, похожем на реальный: в нем нет уровней привилегий и сегментации памяти с помощью дескрипторов сегментов. При входе в режим SMM автоматически запрещаются аппаратные прерывания (в т.ч. и немаскируемое) и не генерируются исключения, поэтому действия процессора однозначно определяются программой обработчика SMI.

Процедура обработчика заканчивается командой возврата из системного режима RSM (схожей с возвратом из обычного прерывания), по которой процессор восстанавливает свой контекст из образа, сохраненного в SMRAM, и возвращается в обычный режим работы.

При возврате в обычный режим могут быть некоторые особенности, связанные с причиной его использования. Одной из частых ситуаций является обращение прикладной программы к “спящему” периферийному устройству. В этом случае системная логика вырабатывает сигнал SMI# раньше, чем получит сигнал готовности RDY# от такого устройства, завершающий выполнение шинного цикла ввода-вывода. Обработчик SMI “разбудит” устройство, затем операция ввода-вывода автоматически повторится и драйвер устройства (или прикладная программа) “не заметит”, что устройство было в “спящем” режиме.

Такая схема позволяет реализовать функции энергосбережения “прозрачным” для программного обеспечения способом.

Память SMRAM должна быть физически или логически выделенной областью размером от 32 КБ до 4 ГБ. Эта область располагается, начиная с адреса SMIBASE (по умолчанию 30000h), и распределяется относительно этого адреса следующим образом:

FE00h – FFFFh – область сохранения контекста (распределяется , начиная со старших адресов), в которой по прерыванию SMI сохраняются практически все регистры процессора, в том числе и скрытые регистры дескрипторов сегментов и управляющие регистры (CR1, CR2, CR4). Не сохраняются автоматически регистры отладки DR0-DR5, TR3-TR7 и регистры сопроцессора;

8000h – точка входа в обработчик прерывания SMI;

0 – 7FFFh – свободная область.

Если режим SMM используется для питания процессора с возможностью быстрого “пробуждения”, память SMRAM, хранящая контекст процессора, должна быть энергонезависимой.

Память SMRAM должна быть схемно защищена от доступа прикладных программ. Для этого процессор генерирует выходной сигнал SMIACT# во время обработки SMI, который должен являться ключом доступа к этой памяти.

Если SMRAM не является энергонезависимой, то системная логика должна обеспечить возможность ее инициализации процессором (запись программного кода обработчика прерывания SMI) из обычного режима до разрешения появления запроса этого прерывания.

Состояние регистров процессора при входе в режим SMM приведено в таблице

Регистр

Состояние

Общие регистры

Не определено

EFLAGS

0000 0002h

EIP

0000 8000h

Селектор CS

3000h (сдвинутый вправо на 4 дв.разряда SMM Base)

База CS

SMM Base (30000h по умолчанию)

Селекторы DS, ES, FS, GS, SS

0000h

Базы DS, ES, FS, GS, SS

0000 0000h

Лимиты DS, ES, FS, GS, SS

0 FFFF FFFFh

CR0

Сброшены PE, EM, TS, PG. Остальные без изменений

DR6

Не определено

DR7

0000 0400h

Режим SMM имеет следующие особенности:

  • вычисление адресов аналогично реальному режиму

  • размер сегмента увеличен (по сравнению с реальным режимом) до 4 ГБ

  • адресуемое пространство также составляет 4 ГБ

  • режим работы регистров по умолчанию – 16-битный

  • по умолчанию запрещены прерывания: маскируемые аппаратные, исключения, немаскируемое NMI, ловушек, системного режима SMI, инициализации.

Использование прерываний возможно, если обработчик SMI инициализирует таблицу прерываний (хотя бы для используемых векторов) и установит соответствующие обработчики прерываний. Причем таблица прерываний может располагаться только с нулевого адреса. Есть и некоторые дополнительные ограничения.

Контекст сопроцессора при входе в SMM автоматически не сохраняется, однако, может быть обработчиком SMI программно.

Особенности реализации режима SMM в конкретном процессоре определяются с помощью двойного слова, называемого идентификатором версии SMM (SMM Revision Identifier), которое записывается в SMRAM по адресу 7EFCh (+SMBASE) при входе в режим SMM. Младшие два байта этого двойного слова задают собственно номер версии SMM. Бит 16 указывает на поддержку процессором режима рестарта команды ввода-вывода, а бит 17 – на поддержку возможности перемещения базового адреса SMIBASE. (Остальные разряды не используются.

При выходе из режима SMM процессор проверяет корректность установки обработчиком некоторых значений в управляющих регистрах CR0 и CR4, а для процессоров 486 и Pentium также корректность адреса SMBASE, который может быть изменен обработчиком. В случае недопустимых значений новых установок процессор переходит в режим выключения (Shutdown).

Соседние файлы в папке Lectures