Сегодня мы расскажем, как включить реальный и защищенный режимы в процессорах. При этом большинство современных процессоров поддерживают четыре основных режима функционирования:
реальный;
системный;
защищенный;
режим виртуальной эмуляции процессора i8086.
Впервые разные режимы в процессорах реализовала компания Intel. История создания процессоров этой компании началась в 1976 году, когда свет увидел первый 16-разрядный процессор i8086. Этот процессор имел свои особенности в работоспособности, например: поддерживал взаимодействие с оперативной памятью объемом до 1 Мб, однозадачный способ функционирования и др. Поддержку разных предписаний компания Intel реализовала в процессоре i80286, который появился в 1982 году. Данный процессор функционировал в 2-х режимах:
Реальный режим. Регламентировался таким образом, чтобы функционирование процессора было организовано так же, как и в i8086.
Защищенный режим. В данном предписании процессор поддерживал многозадачность, отлично управлял выделенной памятью и поддерживал управление оперативной памятью объемом до 16 Мб.
Таким образом, с процессора i80286 образца 1982 года началась эра процессоров, поддерживающих несколько разных регламентов функционирования.
Режимы работы процессора
Итак, мы уже писали, что большинство современных процессоров способны функционировать в одном из четырех предписаний:
Реальный режим. В данном предписании процессор будет функционировать как довольно «шустрый» i8086, причем вовсю будет использовать возможность 32-битной архитектуры.
Режим системного управления. Этот режим поддерживается последними версиями процессоров. Главная его особенность — это возможность организовать работу, которая будет изолирована от всего программного обеспечения компьютера и даже от операционной системы. Данное предписание невозможно включить в процессоре каким-либо программным методом. Оно включается исключительно аппаратным методом, при этом из режима системного управления в стандартное предписание функционирования процессора можно переключиться, используя специальную RSM-команду, которая активируется исключительно в режиме системного управления.
Защищенный режим. Это основное или обычное предписание работы любого процессора. Такое предписание характеризуется: многозадачностью, повышенной защищенностью, контролем адресного пространства.
Виртуальный режим i8086. Этот режим имитирует функционирование процессоров i8086 и i8088. Его можно включить программным методом. Обычно его используют в тех случаях, когда нужно работать с программами, которые ориентируются на процессоры i8086 и i8088. Важно понимать, что этот режим отличается от «реального режима». Не вдаваясь глубоко в подробности, отличия между этими предписаниями можно описать так: в «реальном режиме» процессор функционирует как ускоренный i8086, полностью повторяя его работу, а в «виртуальном режиме» процессор функционирует как в «защищенном», но адаптируется под работу с программами для процессора i8086.
Наиболее важное предписание работы процессора — это защищенный режим. Именно он используется в качестве основного, потому что в этом предписании возможно реализовать весь потенциал вычислительных возможностей процессора. Помимо этого, в этом наборе инструкций достигается повышенная защита программного обеспечения от воздействия друг на друга. Также защищенный режим характеризуется:
повышенной защищенностью памяти;
улучшенной сегментацией памяти;
страничной организацией памяти;
поддержкой многозадачности;
поддержкой дополнительных инструкций;
экономичным режимом использования оперативной памяти;
и др.
Второй режим, которым часто пользуются разработчики, — это реальный режим процессора. Данный набор инструкций характеризуется:
сокращением объема поддерживаемой оперативной памяти до 1 Мб;
отсутствием основных механизмов обеспечения безопасности;
отсутствием страничного использования памяти;
отсутствием многозадачности.
То есть в реальном режиме можно искусственно ограничить работоспособность любого микропроцессора. Реальный и защищенный режимы процессора можно переключать между собой. О том, как включить защищенный или реальный режим, читайте ниже в статье.
Как включить защищенный режим
Большинство микропроцессоров Intel используют реальный режим в качестве промежуточного. То есть при включении питания сначала микропроцессор активирует собственное функционирование в реальном режиме, а потом переключается в защищенный. Другой случай использования этого предписания работоспособности — когда разработчик самостоятельно включил реальный режим, потому что пишет программное обеспечение для процессоров i8086.
Чтобы переключить микропроцессор из реального режима в защищенный, нужно:
Поставить запрет на замаскированные прерывания. Для этого нужно сбросить флаг «IF». Важно, чтобы при переходе между режимами отсутствовали исключения и не было программных прерываний, поэтому этот пункт не нужно пропускать.
Осуществить загрузку фундаментального адреса GDT в GDTR.
Используя командное правило MOV CR0, определить флаг PE. Также можно определить флаг PG, если хотите подключить страничное распределение памяти.
Затем нужно выполнить командное правило «JMP far» для перехода между сегментами или командное правило «CALL Far» для вызова между сегментами. То или иное командное правило нужно, чтобы очистить перечень инструкций, которые были продекларированы в предыдущем предписании функционирования микропроцессора.
Далее, если хотите использовать табличное представление дескрипторов микропроцессора, впишите «селектор сегмента» для LDT прямо в регистр LDTR. Для этого действия используйте инструкцию LLDT.
Чтобы организовать начало создания защищенного функционирования микропроцессора, при помощи командного правила LTR впишите указатель TSS в регистр исполняемых задач.
После этого перезагрузите все сегментные регистры, исключая регистры CS.
Далее в регистр IDTR впишите ограничения IDT (это таблица дескрипторов прерываний в защищенном функционировании) и указатель на эту же таблицу дескрипторов. Для этого действия используйте команду LIDT.
Активируйте разрешение замаскированных и незамаскированных прерываний.
Как включить реальный режим процессора
Переключить микропроцессор из защищенного режима в реальный можно аппаратным способом или используя обнуление бита PE в CR0. Показываем наиболее корректное переключение из одного предписания в другое:
Поставьте запрет на замаскированные прерывания, используя обозначение «IF», а незамаскированные прерывания ограничьте, используя внешнюю схему.
Необходимо провести обнуление бита PG в регистре CR0, а также вписать нулевое значение в CR3, чтобы очистить закэшированный буфер TLB.
Теперь необходимо перенаправить управляемость процессом читаемому сегменту, у которого определен верхний лимит памяти в 64 Кб.
Затем нужно вписать сегментные регистры SS, DS, ES, FS, а также селектор GS с ограничением в 64 Кб памяти, байтовым разделением G=0, расширяемостью вверх E=0, доступностью записи W=1 и присутствием P=1.
Используйте команду LIDT для того, чтобы указать на табличное представление векторов прерываний реального времени и инициализировать это же табличное представление.
Теперь самое время сбросить бит PE, чтобы перейти в реальный режим.
Активируйте перенаправление на исполнение программы в реальном предписании. Это действие удалит очередность команд микропроцессора, инициализированных в защищенном режиме, и активирует необходимый уровень прав использования важных частей кода.
Отредактируйте сегментные регистры и указатели стека необходимыми значениями.
Последним действием будет активация прерываний.
После этого микропроцессор начнет функционировать в реальном режиме.
Заключение
Сегодня мы немного рассказали, что такое реальный и защищенный режимы работы микропроцессоров. Это два наиболее часто используемых режима функционирования микропроцессоров, причем защищенный режим — это основной, который используется по умолчанию. Помимо этого, мы рассмотрели, как включить защищенный режим работы, если он по каким-то причинам был отключен, а также как включить реальный режим процессора, когда ведется разработка программ для микропроцессора i8086.
Другое