Селектор сегмента

Дескрипторы шлюзов программ

Виртуальный режим 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,

· поле уровня привилегии запроса (в рассматриваемой конструкции не используется).