Петрозаводский государственный университет
Кафедра информационно-измерительных систем и физической электроники

 

Режимы работы процессоров семейства Intel x86

(К курсу "Устройство и архитектура ЭВМ")

Выполнил студент гр. 21402 Алексей Вл. Соловьев.

Преподаватель: к.ф-м.н. Ершова Наталья Юрьевна


 

СОДЕРЖАНИЕ

 

ВСТУПЛЕНИЕ

    Впервые о различных режимах работы процессоров Intel x86 стали говорить с появлением процессора 80286. Это был первый представитель данного семейства процессоров, в котором были реализованы многозадачность и защищенная архитектура. Чтобы обеспечить совместимость с предыдущими представителями этого семейства (8086,8088,80186) в процессоре 80286 было реализовано два режима функционирования: режим эмуляции 8086 (режим реального адреса) и защищенный режим, в котором используются все возможности процессора. В последующих поколениях процессоров этого семейства защищенный режим становится основным режимом работы. Для процессоров, начиная с 80386, иногда говорят еще об одном режиме работы - виртуальном режиме (режим виртуального 8086). В данном реферате он будет рассматриваться как особое состояние задачи защищенного режима.
    В новых поколениях процессоров Intel появился еще один режим работы - режим системного управления (System Management Mode). Впервые он был реализован в процессоре 386SL и 486SL. Начиная с расширенных моделей 486х процессоров, этот режим стал обязательным элементом архитектуры x86-совместимых процессоров. С его помощью прозрачно даже для операционной системы на уровне BIOS реализуются функции энергосбережения.
    В данном реферате рассматриваются особенности функционирования процессора в различных режимах. Режимы рассматриваются для 32-разрядных процессоров семейства Intel: 80386, i486, Pentium, а также процессоров с архитектурой P6 (Pentium Pro, Pentium II, Celeron, Xeon, Pentium III).
 

ПЕРЕКЛЮЧЕНИЕ МЕЖДУ РЕЖИМАМИ

Схема переключения между режимами     После инициализации процессор находится в режиме реального адреса. Процессор может быть переведен в защищенный режим установкой бита 0 (Protect Enable) в регистре CR0:
MOV EAX,00000001h
MOV CR0,EAX
или MOV AX,0001h
LMSW AX
    Второй вариант "достался в наследство" от 16-тиразрядной архитектуры 80286, для совместимости с которой ее регистр MSW (Machine Status Word) отображается на младшее слово регистра CR0.
    Вернуться в режим реального адреса процессор может по сигналу RESET или (в отличие от 80286) сбросив бит PE:
MOV EAX,00000000h
MOV CR0,EAX

    Для совместимости с 80286 инструкция LMSW бит PE не сбрасывает.
    Режим системного управления изолирован от других режимов. Процессор переходит в этот режим только аппаратно: по низкому уровню на контакте SMI# или (для Pentium и выше) по команде с шины APIC. Никакой программный способ не предусмотрен для перехода в этот режим. Процессор возвращается из режима системного управления в тот режим, при работе в котором был получен сигнал SMI#. Возврат происходит по команде RSM. Эта команда работает только в режиме системного управления и в других режимах не распознается, генерирую исключение #6 (недействительный код операции).
 

ФОРМИРОВАНИЕ ФИЗИЧЕСКОГО АДРЕСА

    В различных режимах процессор по-разному формирует физический адрес. Существует три этапа формирования физического адреса:
  1. Формирование эффективного адреса: из логического адреса (база-индекс-смещение) процессор вычисляет эффективный адрес - расстояние от базового адреса текущего сегмента памяти.
  2. Формирование линейного адреса: эффективный адрес складывается с базовым адресом сегмента, полученное значение является адресом в плоском (линейном) 4Гбайтном виртуальном пространстве.
  3. Страничная трансляция адресов: линейное 4Гбайтное адресное пространство с помощью 4Кбайтных страниц отображается на физически присутствующие блоки памяти (физическое пространство).
    Первый этап во всех режимах проходит одинаково. Различия начинаются со второго этапа. В различных режимах по-разному определяется базовый адрес сегмента. Третий этап присутствует только в защищенном режиме - в режиме реального адреса и в режиме системного управления страничное преобразование адресов запрещено, полученный линейный адрес считается физическим адресом. Однако и в защищенном режиме страничной трансляции может не быть. Страничная трансляция включается программно установкой бита 31 (Paging) в регистре CR0:
MOV EAX,80000001h
MOV CR0,EAX

    Формирование линейного адреса без участия селекторов.
Схема формирования линейного адреса без селекторов     В режиме реального адреса и в режиме системного управления используется упрощенная схема формирования линейного адреса. Эта же схема используется для вычисления адресов задачи защищенного режима, находящейся в состоянии эмуляции 8086 (Virtual 8086 Mode). В этом случае базовый адрес сегмента берется из сегментного регистра. Значение в сегментном регистре представляет собой биты 4-19 базового адреса сегмента. Из этого следует, что сегменты в этих режимах выравнены по 16-байтной границе и все сегменты начинаются в пределах нижнего мегабайта линейного адресного пространства. Предел для всех сегментов одинаков. В режиме реального адреса и для задачи в состоянии VM86 предел сегмента - 64Кбайт, а в режиме системного управления - 4Гбайт.

    Формирование линейного адреса в защищенном режиме
    Особенностью защищенного режима является использование селекторов и дескрипторов для обращения к памяти.
    Дескриптор - это 8-байтная единица описательной информации, распознаваемая устройством управления памятью в защищенном режиме, хранящаяся в дескрипторной таблице. Дескриптор сегмента содержит базовый адрес описываемого сегмента, предел сегмента и права доступа к сегменту. Дескрипторы являются основой защиты и мультизадачности. В защищенном режиме сегменты могут начинаться с любого линейного адреса и иметь любой предел вплоть до 4Гбайт. Существуют две обязательных дескрипторных таблицы - глобальная (GDT) и дескрипторная таблица прерывания (IDT),- а также множество (до 8192) локальных дескрипторных таблиц (LDT), из которых в один момент времени процессору доступна только одна. Дескрипторы сегментов могут находиться в GDT или LDT. Расположение дескрипторных таблиц определяется регистрами процессора GDTR, IDTR, LDTR. Регистры GDTR и IDTR - 6-байтные, они содержат 32 бита линейного базового адреса дескрипторной таблицы и 16 бит предела таблицы. Программно доступная часть регистра LDTR - 16 бит, которые являются селектором LDT. Дескрипторы LDT находятся в GDT. Однако чтобы не обращаться каждый раз к GDT в процессоре имеется теневая (программно недоступная) часть регистра LDTR, в которую процессор помещает дескриптор LDT при каждой перегрузке селектора в регистре LDTR.
    Значения, помещаемые в сегментные регистры, называются селекторами. Селектор содержит индекс дескриптора в дескрипторной таблице, бит определяющий, к какой дескрипторной таблице производится обращение (LDT или GDT), а также запрашиваемые права доступа к сегменту. Таким образом, селектор выбирает дескрипторную таблицу, выбирает дескриптор из таблицы, а по дескриптору определяется положение сегмента в линейном пространстве памяти. Однако обращение к дескрипторным таблицам происходит только при загрузке селектора в сегментный регистр. При этом процессор помещает дескриптор в теневую (программно недоступную) часть сегментного регистра. При формировании линейного адреса дескриптор сегмента процессору уже известен.

Схема формирования линейного адреса в защищенном режиме

    Страничное преобразование адресов
    Механизм сегментации обеспечивает превосходную защиту, но он не очень удобен для реализации свопинга (подкачки). В дескрипторе сегмента есть бит присутствия, по нему процессор определяет, находится ли данный сегмент в физической памяти или он находится в ВЗУ (на винчестере). В последнем случае генерируется исключение #11, обработчик которого может подгрузить сегмент в память. Неудобство заключается в том, что различные сегменты могут иметь различную длину. Этого можно избежать, если механизм подкачки реализовывать на основе страничного преобразования. Особенностью этого преобразования является то, что процессор в этом случае оперирует с блоками равной длины (4Кбайт) - страницами.
    В страничном преобразовании участвуют два типа структур: каталоги таблиц и таблицы страниц. Эти структуры состоят из 1024 32-битных элементов. Элементы содержат старшие 20 бит физического адреса адресуемых объектов. Элементы таблицы страниц адресуют страницы, а элементы каталога таблиц адресуют таблицы страниц. Старшие 20 бит физического адреса каталога таблиц хранится в регистре CR3 (Page Directory Base Register). (Это единственный регистр процессора, который содержит физический адрес памяти). Все структуры выравнены по границе страницы.
Схема страничного преобразования 4К/32
    В процессе страничной трансляции адресов полученный линейный адрес разбивается на три части. Старшие десять бит линейного адреса являются индексом элемента из каталога таблиц. По этому элементу определяется физический адрес таблицы страниц. Биты 21-12 линейного адреса выбирают элемент из этой таблицы страниц. Выбранный элемент определяет физический адрес страницы. Младшие 12 бит линейного адреса определяют смещение от начала страницы.
    В процессорах, начиная с Pentium, страницы могут иметь размер 4Кбайт или 4Мбайт (эта возможность называется расширением размера страниц), а в процессорах с архитектурой P6 при включенном расширении физического адреса - 4Кбайт или 2Мбайт. (Расширение физического адреса заключается в использовании 36-битного физического адреса вместо 32-битного.) Расширение размера страниц включается установкой бита 4 (Page Size Extension) в регистре CR4, а расширение физического адреса - установкой бита 5 (Physical Address Extension) в регистре CR4. Обе возможности работают только в защищенном режиме при включенной страничной трансляции адресов. В таблице показаны возможные сочетания управляющих битов и их совокупный результат.
PG (CR0) PAE (CR4) PSE (CR4) PS (PDE) Размер страницы Разрядность физического адреса
0 x x x - 32 бит
1 0 0 x 4K 32 бит
1 0 1 0 4K 32 бит
1 0 1 1 4M 32 бит
1 1 x 0 4K 36 бит
1 1 x 1 2M 36 бит
    Для страниц размером 4Мбайт действует упрощенная (одноуровневая) схема формирования физического адреса. В этом случае физический адрес (старшие 10 бит) страницы хранится непосредственно в каталоге таблиц. Младшие 22 бита линейного адреса задают смещение от начала страницы. Конечно, страницы большого размера неудобны для подкачки при работе с маленькими приложениями, но тот факт, что при включенном PSE (или PAE) в системе можно использовать страницы обоих размеров позволяет повысить эффективность работы: на страницах большого размера можно разместить код операционной системы, к которому часто обращаются все приложения и который не следует выгружать из памяти, при этом экономится место - не нужны промежуточные таблицы страниц.
Схема страничного преобразования 4M/32
    В процессорах с архитектурой P6 шина адреса 36-разрядная, однако для того, чтобы процессор генерировал 36-битные адреса необходимо включить PAE. Для того, чтобы хранить физический адрес большей разрядности размер элементов каталогов таблиц и таблиц страниц увеличен до 64 бит, а число элементов сокращено до 512 (чтобы каждая структура занимала ровно 4Кбайт - одну страницу памяти). Сокращение числа элементов привело к уменьшению размеров индексов, в результате высвободилось два старших бита в линейном адресе. Они используются для индексации еще одной структуры - таблицы указателей на каталоги таблиц страниц (PDPT). Эта таблица содержит четыре 64-битных элемента, задающих физические адреса каталогов таблиц. Если при 32-битной адресации активен только один каталог таблиц, старшие 20 бит адреса которого хранятся в регистре CR3(PDBR), то при 36-битной адресации активных каталогов 4. Их адреса хранятся в PDPT, а регистр CR3 в этом случае хранит адрес PDPT (старшие 27 бит физического адреса в битах 5-31 регистра CR3) и называется Page-Directory-Pointer Table Register. Таким образом, формирование физического адреса для 4Кбайтных страниц трехуровневое, а для 2Мбайтных страниц - двухуровневое.
Схема страничного преобразования 4К/36 и 2М/36
 

ЗАЩИТА ПО ПРИВИЛЕГИЯМ

    Специфической особенностью защищенного режима является защита по привилегиям. В процессоре имеется два уровня защиты: защита на уровне сегментов и защита на уровне страниц.

    Защита на уровне сегментов
    Защита на уровне сегментов представлена четырьмя уровнями привилегий. Наиболее привилегирован нулевой уровень, наименее привилегирован - третий. В реальных операционных системах обычно не используются все четыре уровня. UNIX и Windows, например, используют только два уровня привилегий - 0 (для ядра системы) и 3 (для всего остального), а OS/2 использует уровни 0 (для ядра системы), 2 (для процедур ввода-вывода) и 3 (для прикладных программ).
    Для описания механизма защиты пользуются следующими понятиями:
    Уровень привилегий дескриптора (Descriptor Privilege Level: DPL) - уровень привилегий, на который помещен описываемый дескриптором объект. Поле DPL хранится в байте прав доступа дескриптора.
    Текущий уровень привилегий (Current Privilege Level: CPL) - уровень привилегий выполняемого сегмента кода. Это значение соответствует DPL сегмента кода (кроме подчиняемых сегментов кода). Значение CPL хранится в поле RPL селектора сегмента кода, который помещен в регистр CS.
    Запрашиваемый уровень привилегий (Requested Privilege Level: RPL) - используется для временного понижения своего уровня привилегий при обращении к памяти. RPL заносится в младшие биты селектора.
    Уровень привилегий ввода-вывода (Input/Output Privilege Level: IOPL) - указывает какой уровень привилегирован для работы с портами ввода-вывода. Это значение хранится в регистре EFLAGS и может быть различным для разных задач (см. "Мультизадачность").
    Защита на уровне сегментов состоит в защите от выполнения привилегированных команд, защите доступа к данным и защите сегментов кода.
    В процессоре есть команды, которые могут кардинально изменить состояние всей системы. Такие команды выполняются только на нулевом уровне привилегий, а на всех других уровнях вызывают нарушение общей защиты (исключение #13). К этим командам относятся:

а также команды работы со специфическими регистрами (TRx - для 386,486; MCRs - для Pentium и P6; MTRRs - для P6). Следует отметить, что команда POPFD также чувствительна к уровню привилегий. Она не изменяет состояние управляющих флажков IOPL, IF и др., если выполняется на уровне привилегий, отличном от нулевого.
    Кроме безусловно привилегированных команд есть команды чувствительные к уровню привилегий ввода-вывода. Это команды работы с портами (IN, INS, OUT, OUTS) и команды сброса/установки флажка разрешения прерываний (CLI, STI). Эти команды выполняются только в том случае, если CPL<=IOPL. Если это условие не выполняется, то для команд ввода-вывода производится дополнительная сверка с картой разрешения портов ввода-вывода (см. "Мультизадачность"). Если код не имеет привилегий на выполнение команды, то возникает нарушение общей защиты (исключение #13).
    Второй аспект защиты - защита доступа к данным. Код имеет право обратиться к данным, которые находятся на том же или на более низком уровне привилегий. При этом учитывается не только CPL, но и RPL. Данные доступны, если дескриптор сегмента данных имеет
DPL>=max(CPL,RPL).
Такой контроль производится при загрузке селекторов в сегментные регистры (DS,ES,FS,GS). В сегментный регистр можно загрузить только селектор доступного с текущего уровня привилегий сегмента данных или, если сегментный регистр не будет использоваться, пустой селектор. Попытка нарушить правило привилегий или загрузить селектор системного дескриптора или дескриптора сегмента кода только для выполнения в сегментный регистр данных приведет к нарушению общей защиты (исключение #13). Кроме того, в командах изменения данных в памяти производится проверка на возможность записи в сегмент.
    Особое правило привилегий для сегментов стека. Стек должен находиться строго на том же уровне привилегий, что и код программы (DPL=CPL). При этом сегмент стека обязательно должен быть присутствующим (P=1) и для него должны быть доступны операции и чтения, и записи (типы Data Read-Write или Stack Read-Write).
    Для защиты сегментов кода используется жесткое правило привилегий:
DPL=CPL.
Т.е. межсегментные команды FAR JMP и FAR CALL могут передавать управление сегментам кода в пределах того же уровня привилегий. Исключением являются подчиненные сегменты кода. При передаче управления подчиненному сегменту действует правило:
DPL>=max(CPL,RPL).
Однако при этом подчиненный код будет выполняться на том же уровне привилегий, что и вызвавший его код (CPL не изменится).
    Для передачи управления между уровнями привилегий используются системные дескрипторы, называемые шлюзами вызова. Дескриптор шлюза вызова содержит точку входа в привилегированную процедуру (селектор:смещение) и число передаваемых ей через стек параметров. Для передачи управления привилегированной процедуре адресуется не сама процедура, а шлюз к ней. Шлюзы можно адресовать только в команде FAR CALL, т.е. "насовсем" сменить уровень привилегий таким способом нельзя, всегда предполагается возврат на более низкий уровень привилегий. Правило разрешения вызова через шлюз выглядит так:
DPLцели<=max(CPL,RPL)<=DPLшлюза.
Примеры разрешенных переходов показаны на картинке.
Примеры переходов через шлюзы
Пример переключения стека     При переключении уровней привилегий происходит переключение стека. При этом из внешнего (менее привилегированного) стека происходит копирование указанного в шлюзе числа параметров во внутренний стек. Перед этим во внутреннем стеке сохраняется указатель вершины внешнего стека. После копирования параметров во внутренний стек заносится адрес возврата. Привилегированная процедура должна заканчиваться инструкцией RETF n, где n - число байт, занимаемых параметрами в стеке.
(Таким образом, при смене уровней привилегий в процессорах Intel x86 реализовано соглашение о связях языка Pascal.)
    На картинке показан пример переключения стека PL3->PL0 с передачей трех параметров.

    Защита на уровне страниц
    Защита страниц обеспечивается двумя уровнями привилегий: супервизор и пользователь. Уровню супервизора соответствуют 0-й, 1-й, 2-й уровни привилегий сегментов, а уровню пользователя - 3-й. Для каждой страницы указывается (в PDE/PTE), с какого уровня привилегий она доступна. Правило привилегий таково: с уровня супервизора доступны все страницы, а с уровня пользователя - только страницы с битом U/S=1. Кроме того, в PDE/PTE указывается тип доступа к странице (доступна ли страница для записи): R/W=0 - только чтение, R/W=1 - доступны чтение и запись. Следует отметить действие бита 16 (Write Protect) в регистре CR0. Когда этот бит выставлен, страницы уровня пользователя с пометкой "read-only" защищены от записи при обращениях с уровня супервизора.
 

МУЛЬТИЗАДАЧНОСТЬ

    Под мультизадачностью подразумевают способность компьютера выполнять несколько задач одновременно. На самом деле процессор некоторое время выполняет один командный поток, затем быстро переключается на второй и выполняет его, переключается на третий и т.д. При этом при каждом переключении сохраняется контекст прерываемого потока, так что потом процессор сможет "безболезненно" продолжить выполнение прерванного потока команд. Благодаря высокому быстродействию создается иллюзия того, что все задачи выполняются одновременно (параллельно).
    Для управления мультизадачностью нет специальных команд. Задачи переключаются командами FAR CALL, FAR JMP, INT, IRET. Однако при этом участвуют специальные дескрипторы: дескриптор сегмента состояния задачи (Task State Segment) и дескриптор шлюза задачи. Когда управление передается на один из таких дескрипторов, происходит переключение задачи. При переключении задачи процессор сохраняет (восстанавливает) свой контекст в сегменте состояния задачи (TSS). Селектор TSS выполняемой задачи хранится в регистре задачи (Task Register). При переключении задачи процессор может сменить LDT, что позволяет назначить каждой задаче свое адресное пространство, недоступное для других задач. Можно также перегрузить CR3 (PDBR/PDPTR), что позволяет применить для изолирования задач механизм страничного преобразования.
    При переключении задачи с помощью прерывания или особого случая происходит автоматический возврат к прерванной задаче. Однако, организуя вложение задач, необходимо помнить, что, в отличие от процедур, задачи не являются реенетрантными, т.к. при переключении задачи в стек ничего не включается. Дескриптор TSS задачи, выполняемой в данный момент, помечается как "занятый". При переключении на другую задачу с вложением (по INT или FAR CALL) Дескриптор TSS остается помеченным. Переключиться на занятую задачу нельзя (возникает нарушение общей защиты - исключение #13).
    Для переключения задач также действуют правила привилегий. По команде JMP или CALL можно переключиться на задачу, TSS которой менее привилегирован:
DPLTSS>=max(CPL,RPL).
Для особых случаев и прерываний это правило не действует. Если обработчик прерывания выполнен в виде отдельной задачи, то он может быть вызван независимо от значения CPL.
    Не совсем удобно адресовать именно TSS для переключения задачи, т.к., во-первых, TSS могут быть размещены только в GDT (а в IDT или LDT - нет), а, во-вторых, если пользоваться только TSS, то каждую задачу мы "намертво" привязываем к определенному уровню привилегий (DPLTSS), с которого она доступна для переключения. Этих недостатков лишены шлюзы задачи. Шлюз задачи содержит селектор TSS. Шлюзы задач можно размещать и в IDT, что позволяет выполнять обработчики прерываний в виде отдельных задач, и в LDT, что позволяет более гибко управлять переключением задач: для второй задачи первая может быть видна с одного уровня привилегий, а для третьей - с другого. Последняя возможность обеспечивается особым правилом привилегий: при переключении задачи через шлюз учитывается только DPLшлюза, а DPLTSS не играет роли, поэтому одной задаче может соответствовать множество шлюзов с различными DPL.
    Следует отметить, что при переключении задачи не сохраняется контекст сопроцессора, т.к., во-первых, сопроцессора может вообще не быть, а во-вторых, многие задачи могут не использовать сопроцессор, а на сохранение/восстановление его контекста уходит много времени. В процессоре предусмотрена возможность простой программной реализации переключения задачи с учетом контекста сопроцессора. Дело в том, что при переключении задачи процессор выставляет бит 3 (Task Switched) в регистре CR0. Если новая задача далее не использует сопроцессор, то ничего не происходит. В противном случае, встретив команду сопроцессора, когда флаг TS=1, процессор генерирует особый случай сопроцессора (исключение #7). Обработчик этого исключения может сохранить/восстановить контекст сопроцессора, сбросить флажок TS (командой CLTS) и возобновить прерванную задачу.
    Лишь значение первых 68h байт сегмента состояния задачи строго определены. Именно это число является минимальным размером TSS. Операционная система может по своему усмотрению устанавливать размер TSS и заполнять сегмент данными. Она, например, может отвести в нем место под контекст сопроцессора. Кроме того, в TSS может располагаться необязательная для задачи структура - двоичная карта разрешения ввода вывода (I/O permission bit map). Ее адрес задается в последнем обязательном поле TSS. Процессор обращается к этой карте, когда IOPL не позволяет выполнять инструкцию ввода-вывода. Каждый бит этой карты соответствует одному порту ввода-вывода. Если бит сброшен в 0, то операция ввода-вывода выполняется без нарушения общей защиты, а если бит выставлен в 1, то генерируется исключение #13.
    При переключении задачи процессор может продолжить выполнение новой задачи в особом состоянии - в состоянии эмуляции 8086 (VM86). Переход в это состояние инициирует установка в 1 флажка 17 (Virtual Mode) в регистре EFLAGS при восстановлении контекста процессора из TSS. Особенностью этого состояния является то, что линейные адреса в такой задаче формируются по безселекторной схеме, поэтому защита на уровне сегментов фактически не используется. Однако если включено страничное преобразование, то все связанные с ним нюансы верны и защита на уровне страниц работает. Для задачи в состоянии VM86 считается, что CPL=3, код и данные по умолчанию имеют размер 16 бит, пределы всех сегментов - 64Кбайт, адресуется только нижний мегабайт линейного пространства.
    Процессор может перейти в состояние VM86 не только при переключении задач, но и если при возврате из обработчика прерываний по IRET из стека восстанавливается образ EFLAGS с битом VM=1. Возврат в обычное состояние происходит по прерыванию или особому случаю с переключением задачи или с переходом на нулевой уровень привилегий. В системе может быть несколько задач в состоянии VM86. Для их изолирования удобно использовать страничное преобразование.
 

ОСОБЕННОСТИ РЕЖИМА СИСТЕМНОГО УПРАВЛЕНИЯ

    Режим системного управления предназначен для выполнения некоторых действий с возможностью их полной изоляции от прикладного программного обеспечения и даже операционной системы. Переход в этот режим происходит только аппаратно (см. "Переключение между режимами"). Когда процессор находится в режиме SMM, он выставляет сигнал SMIACT#. Этот сигнал может служить для включения выделенной области физической памяти (System Management RAM), так что память SMRAM можно сделать доступной только для этого режима. Структура контекста CPU в SMRAM
    При входе в режим SMM процессор сохраняет свой контекст в SMRAM (контекст сопроцессора не сохраняется!) по адресу SMM Base и передает управление процедуре, называемой обработчиком System Management Interrupt, по адресу SMM Base+8000h (по умолчанию SMM Base содержит значение 30000h). Состояние процессора в этот момент точно определено:
Состояние процессора при входе в SMM
    Следует отметить, что в режиме SMM не предусмотрена работа с прерываниями и особыми случаями: прерывания по IRQ и SMI# замаскированы, пошаговые ловушки и точки останова отключены, обработка прерывания по NMI откладывается до выхода из режима SMM. Если необходимо обеспечить работу с прерываниями или особыми случаями, то надо инициализировать IDT и разрешить прерывания, выставив флажок 9 (Interrupt Enable) в регистре EFLAGS. Прерывания по NMI будут разблокированы автоматически после первой же команды IRET.
    При возврате из SMM (по инструкции RSM) процессор восстанавливает свой контекст из SMRAM. Обработчик может программно внести изменения в образ контекста процессора, тогда процессор перейдет не в то состояние, в котором произошло SMI. Если SMI было получено во время выполнения инструкции HLT, то дальнейшие действия при выходе из SMM определяются значением поля "Auto HALT Restart": процессор может снова вернуться к инструкции останова или перейти к выполнению следующей команды. Если SMI произошло при выполнении инструкции ввода-вывода, то в зависимости от значения поля "I/O instruction Restart" возможен рестарт инструкции ввода вывода.
    Эти особенности режима системного управления позволяют использовать его для реализации системы управления энергосбережением.
 

СРАВНИТЕЛЬНЫЕ ХАРАКТЕРИСТИКИ РЕЖИМОВ ПРОЦЕССОРА

Характеристика RM PM, VM=0 PM, VM=1 SMM
Формирование линейного адреса без участия селекторов через селекторы и дескрипторы без участия селекторов без участия селекторов
Предел сегментов 64К определяется дескриптором 64К
Размер адреса/данных по умолчанию 16 бит определяется дескриптором 16 бит 16 бит
Максимальный объем доступной памяти (виртуальной) 1M+64K-16 64T-2х4Г 1M+64K-16
Защита Нет Да Только на уровне страниц Нет
Страничное преобразование (в т.ч. PAE) Нет Да Да Нет
Мультизадачность Нет Да Да Нет
Обработка прерываний IDT - таблица векторов IDT - дескрипторная таблица IDT - дескрипторная таблица IDT - таблица векторов, необходима специальная инициализация

 

ЛИТЕРАТУРА

  1. Intel Architecture Software Developer’s Manual. Vol.1: Basic Architecture.
    (http://developer.intel.com/design/pentium/manuals/24319001.pdf)
  2. Intel Architecture Software Developer’s Manual. Vol.3: System Programming Guide.
    (ftp://download.intel.com/design/pentium/MANUALS/24319201.pdf)
  3. Григорьев В.Л. Микропроцессор i486. Архитектура и программирование. Книга 1: Программная архитектура. - М.:ГРАНАЛ,1993. - 346 с.
  4. Страусс Э. Микропроцессор 80286. - Рязань:Versus Ltd.,1992. - 224 с.

 
Последние изменения 01.04.1999.