10/25/94 04:46pm
zr_vved.lek
А.В.Фролов, Г.В.Фролов "Защищенный
режим процессоров Intel 80286/80386/80486.
Практическое руководство по
использованию защищенного
режима" БСП том 6 М
"Диалог-МИФИ" 1993
В.Б.Бродин, И.И.Шагурин
"Микропоцессор i486. Архитектура,
программирование, интерфейс" М
"Диалог-МИФИ" 1993
Начальные сведения о защищенном режиме работы процессора.
Первоначально в персональных компьютерах фирмы IBM использовались микропроцессоры i8086 или i8088. Эти процессоры были 16-ти разрядными и могли адресовать 1Мбайт памяти, из которыэ ОЗУ занимало неболее 640Кбайт.
Совершенствование оборудования шло по двум направлениям: увеличение быстродействия и повышение помехоустойчивости (с программной точки зрения) вычислительной системы в целом.
В результате был создан микропроцессор i80286. Для обеспечения совместимости с действующими системами этот микропроцессор мог работать в двух режимах:
РЕАЛЬНЫЙ РЕЖИМ - процессор является полным аналогом i8086, но имеет большее быстродействие. В этот режим процессор переключается после аппаратного сброса;
ЗАЩИЩЕННЫЙ РЕЖИМ - процессор использует иной метод адресации памяти, большее адресное пространство (i286 - 16Мбайт, i386 и i486 -4Гбайта), встроенную поддержку мультизадачных ОС и изолированные адресные пространства выполняемых задач. Переход в защищенный режим осуществляется специальной командой.
Помимо этого МП i386 и i486 реализованна концепция ВИРТУАЛЬНОЙ ПАМЯТИ. Она заключается в том, что не вся информация нужна в каждый конкретный момент.
Это допущение позволяет выгружать менее нужную информацию из ОП, а освободившееся пространство использовать более эффективно. Виртуальная память работает медленнее оперативной, но стоимость одного и того же объема оперативной памяти много больше стоимости памяти на диске.
Концепцию виртуальной памяти не следует путать с ВИРТУАЛЬНЫМ РЕЖИМОМ, также реализованном в МП i386 и i486. Этот режим используется в рамках защищенного режима для выполнения программ, подготовленных для i8086 и называется V86.
ПРИМЕЧАНИЕ При рассмотрении защищенного режима за основу взят микропроцессор i286. Представленная информация может с успехом применена на более поздних микропроцессорах. Все отличия будут оговорены отдельно.
Формирование физического адреса.
В вычислительных системах адрес выбираерой ячейки передается по группе проводов, образующих ШИНУ АДРЕСА. Информация передаваемая по ней однозначно определяет (дальнейшего преобразования не производится) требуемый регистр внешнего устройства и называется ФИЗИЧЕСКИМ АДРЕСОМ. Программы при работе оперируют с ЛОГИЧЕСКИМИ АДРЕСАМИ.
В РЕАЛЬНОМ РЕЖИМЕ логический адрес состоит из двух частей:
Сегментного регистра - хранящего значение адреса с точностью до 16-ти байт (адрес границы параграфа);
Регистра смещения - хранящего значение смещения требуемой ячейки от границы параграфа.
Физический адрес формируется путем сложения по модулю 2^20 частей логического адреса после предварительного преобразования:
В ЗАЩИЩЕННОМ РЕЖИМЕ логический адрес образуют две компаненты:
Селектор - являющийся индексом в таблице, содержащей базовые физические адреса сегментов;
Смещение - значение смещения от начала базового адреса.
Физический адрес получается путем сложения базового адреса, извлеченного при помощи значения селектора из таблицы, и смещения:
Значение селектора берется из сегментного регистра, но рассматривается оно не как в реальном режиме. Как индекс (Index) в таблице используется только старшая часть, три младших бита имеют специальное назначение:
Биты 0 и 1 (Requested Privilede Level) - уровень запрашиваемых привилегий, используются системой защиты памяти;
Бит 2 (Table Indicator) - определяет одну из двух таблиц преобразования адресов.
Дескриптор с нулевым индексом называется НУЛЕВЫМ ИНДИКАТОРОМ при работе не используется, а обращение к нему вызывает прерывание.
Таблица базовых адресов (ТАБЛИЦА ДЕСКРИПТОРОВ) может быть ЛОКАЛЬНОЙ (Local Descriptor Table) - кодируется TI=1 и ГЛОБАЛЬНОЙ (Global Descriptor Table) TI=0. Таблица дескрипторов помимо базового физического адреса содержит информацию, описывающую адресуемый сегмент. Глобальная таблица используется операционной системой и она должна существовать в одном варианте, а локальная создается для каждой прикладной программы отдельно. Таблица может иметь размер от 8 байт до 64 Кбайт и содержать до 8192 дескрипторов.
Кроме локальной и глобальной таблиц существует отдельная таблица для дескрипторов прерываний (Interrupt Descriptor Table).
Процессор имеет специальные регистры (GDTR, LDTR и IDTR) для хранения ссылок на соответствующие таблицы и их размер (сами таблицы располагаются в ОП машины). Загрузить регистры можно командами LGDT, LLDT и LIDT, а выгрузить командами SGDT, SLDT и SIDT.