Дескриптор сегмента - Segment descriptor

При адресации памяти для компьютерных архитектур Intel x86 дескрипторы сегмента являются частью блока сегментации, используемого для преобразования логического адреса в линейный адрес. Дескрипторы сегмента описывают сегмент памяти, на который ссылается логический адрес. Дескриптор сегмента (8 байтов в 80286 и новее) содержит следующие поля:

  1. Базовый адрес сегмента
  2. Предел сегмента, определяющий размер сегмента
  3. Байт прав доступа, содержащий информацию о механизме защиты
  4. Биты управления

Структура

Дескриптор сегмента x86 и x86-64 имеет следующий вид:

31 год - 24 23 22 21 год 20 19 - 16 15 14 13 12 11 10 9 8 7 - 0
Базовый адрес [31:24] грамм D / B L AVL Предел сегмента [19:16] п DPL 1 Тип C / E R / W А Базовый адрес [23:16]
Базовый адрес [15: 0] Предел сегмента [15: 0]

Где обозначены поля:

Базовый адрес
32-битный начальный адрес памяти сегмента
Ограничение сегмента
Длина сегмента 20 бит. (Точнее, адрес последних доступных данных, поэтому длина на единицу больше, чем значение, хранящееся здесь.) Как именно это следует интерпретировать, зависит от других битов дескриптора сегмента.
G = Гранулярность
Если этот параметр не установлен, ограничение выражается в байтах, но не более 2 20 байтов. Если установлено, ограничение задается в единицах страниц размером 4096 байт, максимум 2 32 байта.
D = размер операнда по умолчанию
Если он не установлен, это 16-битный сегмент кода; если установлено, это 32-битный сегмент.
B = Большой
Если установлено, максимальный размер смещения для сегмента данных увеличивается до 32-битного значения 0xffffffff. В противном случае это 16-битный максимум 0x0000ffff. По существу то же значение, что и "D".
L = длинный
Если установлено, это 64-битный сегмент (и D должен быть равен нулю), и код в этом сегменте использует 64-битную кодировку инструкций. «L» не может быть установлено одновременно с «D» или «B».
AVL = доступно
Для использования в программном обеспечении, не используется оборудованием
P = Присутствует
Если этот параметр не установлен, при любой ссылке на этот сегмент генерируется исключение «сегмент отсутствует».
DPL = уровень привилегий дескриптора
Уровень привилегий (кольцо), необходимый для доступа к этому дескриптору
Тип
Если установлено, это дескриптор сегмента кода. Если он не установлен, это дескриптор сегмента данных / стека, в котором «D» заменено на «B», «C» заменено на «E», а «R» заменено на «W». Фактически это частный случай 2-битного поля типа, где предыдущий бит 12, очищенный как «0», относится к большему количеству внутренних системных дескрипторов для LDT, LSS и вентилей.
C = Соответствие
Код в этом сегменте можно вызывать с менее привилегированных уровней.
E = развернуть вниз
Если этот параметр не установлен, сегмент расширяется от базового адреса до предела base +. Если установлено, оно расширяется от максимального смещения до предела, поведение, обычно используемое для стеков.
R = читаемый
Если он очищен, сегмент может быть выполнен, но не прочитан.
W = возможность записи
Если он не установлен, сегмент данных может быть прочитан, но не записан.
A = Доступно
Этот бит устанавливается в 1 аппаратно при доступе к сегменту и сбрасывается программно.

Смотрите также

Рекомендации

дальнейшее чтение

внешняя ссылка