Алгоритм - Учебный центр

Версия сайта для слабовидящих
Заполните форму ниже! Мы вам перезвоним!

Нажав на кнопку "Отправить", Я даю своё согласие на автоматизированную обработку указанной информации, распространяющейся на осуществление всех действий с ней, включая сбор, передачу по сетям связи общего назначения, накопление, хранение, обновление, изменение, использование, обезличивание, блокирование, уничтожение и обработку посредством внесения в электронную базу данных, систематизации, включения в списки и отчетные формы.


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

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

Микропроцессоры фирмы Intel, начиная с  i80286 и до последних включительно, способны работать в двух основных режимах: защищенном и реальном. В реальном режиме возможности микропроцессора сущест­венно ограничиваются: сокращается до 1 Мбайт объем адресуемой памяти, исключаются основные механизмы защиты, не реализуется страничная организация памяти и многозадачное функционирова­ние системы. Наиболее полно возможности микропроцессоров реализуются при работе в защищенном режиме.

Наиболее полно возможности микропроцессоров реализуются при работе в защищенном режиме: обеспечивается физи­ческая адресация памяти объемом до 236 = 64 Гбайт и доступ к вирту­альной памяти объемом до 64 Тбайт. Кроме того, обеспечивается защита пользова­тельских программ друг от друга и от операционной системы, пре­дотвращающая несанкционированное вмешательство в их работу. В защищенном режиме используется, защита памяти, сегментация памяти, страничная организация памяти, многозадачность. Помимо сегментации па­мяти в защищенном режиме может быть реализована ее страничная организация. Этот режим позволяет использовать дополнительные команды, введенные для поддержки многозадачных операционных систем, и позволяет более экономно использовать оперативную память в мультипрограммном режиме.

Переключение процессора в защищенный режим осуществляется программным путем записью единицы в бит PE (0-й разряд регистра процессора CR0 (MSW)) с помощью команды MOV или LMSW. Обратный переход в реальный режим теперь возможен только с помощью команды MOV записью в бит PE нуля. Перед переключением процессора в защищенный режим необходимо, в реальном режиме, в оперативной памяти создать GDT, LDT, IDT, загрузить в регистры процессора необходимую для работы в защищенном режиме управляющую информацию, так как без этого переключение процессора в защищенный режим не имеет смысла.

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

Все процессоры Intel начиная с  i80286 и до последних включительно по включению электропитания (после начального «сброса») работают в режиме реального адреса (реальном режиме). Обычно реальный режим используется либо как промежуточ­ный для перехода в защищенный режим после инициализации мик­ропроцессорной системы, либо для более быстрого выполнения прог­рамм, написанных для микропроцессоров 8086, 80186, но, по сравнению с 8086, 80186, современные микропроцессоры в реальном режиме имеют более широкий набор выполняемых команд и возможность обработки 32-разрядных операндов.

Переключение процессора в защищенный режим из реального осуществляется за­грузкой в CR0 (MSW) на рис. 1 слова с единичным значением бита РЕ (Protect Enable). До переключения в памяти должны быть проинициализированы необходимые таблицы дескрипторов IDT, LDT и GDT. Сразу после включения защищенного режима процессор имеет CPL = 0.

Рис. 1

Для всех процессоров рекомендуется выполнять сле­дующую последовательность действий для переключения в защищенный режим:

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

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

Переключение процессора из защищенного режима в реальныйвозможно не только через аппаратный сброс, как это было у 80286, но и сбросом бита РЕ в CR0. При этом для корректного перехода, согласно документации на процессоры, должны выпол­няться следующие действия:

  1. Запретить маскируемые прерывания флагом IF, немаскируемые — внешней схемой.
  2. Если включена страничная трансляция, то необходимо обеспечить равенство линейных и физических адресов для текущего исполняемого кода (перейти на такую страницу), а также для таблиц GDT и IDT. Обнулить бит PG в регистре CR0 и загрузить нули в CR3 для очистки кэш-буфера TLB.
  3. Передать управление читаемому сегменту с лимитом 64 Кбайт.
  4. Загрузить в сегментные регистры SS, DS, ES, FS и GS селектор дескриптора (нену­левой), в котором установлен лимит 64 Кбайт, байтовая дробность (G = 0), расширяемость вверх (Е = 0), доступность записи (W = 1) и присутствие (Р = 1). Если сегментные регистры не перезагружать, исполнение будет продолжаться с атрибутами, унаследованными от защищенного режима (шаги 3 и 4 предназначены для загрузки программно-недоступных регистров дес­крипторов сегментов параметрами стандартного реального режима.
  5. Инициализировать таблицу векторов прерываний реального режима (в пре­делах первого мегабайта) и указать на нее инструкцией LIDT.
  6. Сбросить бит РЕ для перехода в реальный режим.
  7. Выполнить дальний переход на программу реального режима, что сбросит оче­редь инструкций, декодированных в защищенном режиме, и загрузит соответ­ствующие права доступа к сегменту кода.
  8. Загрузить корректные значения в сегментные регистры и указатель стека.
  9. Разрешить прерывания.

После этого загружаются остальные регистры. Процессор теперь работает в реаль­ном режиме, по умолчанию с 16-разрядными адресами и данными.

 


Лицензия