Переключение процессоров Intel в защищенный режим

 

Переключение процессоров из реального в защищенный режим

Все процессоры Intel, начиная с i80286 и до последних включительно, по включению электропитания (после начального «сброса») работают в режиме реального адреса (реальном режиме). Обычно реальный режим используется либо как промежуточный для перехода в защищенный режим после инициализации микропроцессорной системы, либо для более быстрого выполнения программ, написанных для микропроцессоров 8086, 80186, но, по сравнению с 8086, 80186, современные микропроцессоры в реальном режиме имеют более широкий набор выполняемых команд и возможность обработки 32-разрядных операндов.
Переключение процессора в защищенный режим из реального осуществляется загрузкой в CR0 (рис. 1) слова с единичным значением бита РЕ (Protect Enable). Для совместимости с ПО для 80286 бит РЕ может быть установлен также инструкцией LMSW. До переключения в памяти должны быть проинициализированы необходимые таблицы дескрипторов IDT и GDT. Сразу после включения защищенного режима процессор имеет CPL = 0.

Переключение процессоров Intel в защищенный режимРис. 1

Для всех 32-разрядных процессоров рекомендуется выполнять следующую последовательность действий для переключения в защищенный режим:
1. Запретить маскируемые прерывания сбросом флага IF, а возникновение немаскируемых прерываний блокировать внешней логикой Программный код на время «переходного периода» должен гарантировать отсутствие исключений и не использовать программных прерываний. Это требование вызвано сменой механизма вызова обработчиков прерываний.
2. Загрузить в GDTR базовый адрес GDT (инструкцией LGDT).
3. Инструкцией MOV CRO установить флаг РЕ, а если требуется страничное управление памятью, то и флаг PG.
4. Сразу после этого должна выполняться команда межсегментного перехода (JMP Far) или вызова (CALL Far) для очистки очереди инструкций декодированных в реальном режиме, и выполнения сериализации процессора. Если включается страничное преобразование, то коды инструкций MOV CRO и JMP или CALL должны находиться в странице, для которой физический адрес совпадает с логическим (для кода, которому передается управление, это требование не предъявляется).
5. Если планируется использование локальной таблицы дескрипторов, инструкцией LLDT загрузить селектор сегмента для LDT в регистр LDTR
6. Инструкцией LTR загрузить в регистр задач селектор TSS для начальной задачи защищенного режима.
7. Перезагрузить сегментные регистры (кроме CS), содержимое которых еще относится к реальному режиму, или выполнить переход или вызов другой задачи (при этом перезагрузка регистров произойдет автоматически). В неиспользуемые сегментные регистры загружается нулевое значение селектора.
8. Инструкцией LIDT загрузить в регистр IDTR адрес и лимит IDT — таблицы дескрипторов прерываний защищенного режима.
9. Разрешить маскируемые и немаскируемые аппаратные прерывания

Оставьте комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *