Селектор сегмента
Дескрипторы шлюзов программ
Виртуальный режим 86
Это разновидность формы эмуляции модели 8086. Здесь нет прямой адресации памяти. В этом режиме применяются механизмы защиты и виртуальной памяти. Виртуальный режим 86 устанавливается из защищенного (для запуска программ, написанных для реального режима) с возможностью возврата в защищенный режим.
Одна из особенностей МП Intel – это использование сегментированной памяти. 16-разрядная адресация позволяла адресовать только 216 = 65 536 байт (64 Кбайт). Модель структурированной математической памяти, состоящая из 16 сегментов по 65 536 байт (64 Кбайт), позволил увеличить адресное пространство математической памяти в реальном режиме до 220 = 1 048 576 (1 Мбайт).
Дескрипторы сегментов. В реальных режимах МП IA-16 и МП IA-32, сегментные регистры содержат непосредственно базовый адрес сегмента.
В защищенном режиме МП IA-32 задание сегментов производится с использованием специальных программных объектов – дескрипторов сегментов.
Дескриптор сегмента является 64-битовым поисковым образом сегментов. Дескриптор сегмента определяет тип сегмента, расположение в памяти (базовый адрес и размер), права доступа и использования.
Основными полями дескрипторов являются:
· базовый адрес сегмента (32 бита),
· размер сегмента (20 бит),
· поле атрибутов (12 бита).
Поле атрибутов содержит:
· бит дробности G (Granularity – 4 разряда),
· тип сегмента,
· настройки прав доступа и использования (8 разрядов).
На рис биты полей дескрипторов для наглядности сгруппированы в отдельные массивы смежных адресов.
Базовый адрес сегмента (B) | Предел (L) | Атрибуты AR | |||||||||||||||
G | |||||||||||||||||
G | P | DPL | S | Type(4бита) | |||||||||||||
Рис.3.8. Структура дескриптора сегмента | |||||||||||||||||
Шлюзы (Gate) – это точки входа в программы (программный сегмент). В МП IA-32 вызов процедур операционной системы (передача управления с повышением уровня привилегий) производится только с использованием шлюзов и только по командам передачи управления с возможностью возврата (запрещено использование команды Jmp).
Дескриптор шлюза программных сегментов содержит три поля:
· селектора сегмента,
· смещения в сегменте (offset),
· атрибутов.
Селектор | Offset (Смещение в сегменте) | Атрибуты | |||||||||||||
Индекс(13 бит) | G/L | RPL (2 бита) | Счетчик двойных слов | P | DPL | Тип (4бита) | |||||||||
Структура дескриптора шлюза программных сегментов. | |||||||||||||||
Все дескрипторы, кроме дескрипторов прерываний (дескрипторы сегментов, задач, шлюзов сегментов или задач), хранятся в оперативной памяти в специальных таблицах GDT (глобальная таблица дескрипторов) и LDT (локальная таблица дескрипторов).
В глобальной таблице дескрипторов хранятся все сегменты операционной системы.
Локальные таблицы дескрипторов формируются на каждую задачу (программу, находящуюся в стадии исполнения, возможно, с разделением по времени). Но в каждый момент времени активны только две таблицы: GDT и одна из LDT. Обращение к таблицам производится по селектору сегмента.
Селектор сегмента определяет дескриптор используемого кодового сегмента, т.е. целевой сегмент. Селектор сегмента содержит следующие поля:
· индекс (13 бит) – используется как адрес в таблице целевого дескриптора (указателя "целевой" строки таблицы дескрипторов),
· бит типа "целевой" таблицы дескрипторов; при нулевом значении G/L–выбирается GDT, иначе LDT,
· поле уровня привилегии запроса (в рассматриваемой конструкции не используется).